• Модуль: sender
  • Путь к файлу: ~/bitrix/modules/sender/lib/integration/crm/connectors/client.php
  • Класс: Bitrix\Sender\Integration\Crm\Connectors\Client
  • Вызов: Client::getUiFilterFields
static function getUiFilterFields(bool $checkAccessRights = true)
{
	$list = [
		[
			'id' => 'EMAIL',
			'type' => 'string',
			'sender_segment_filter' => '%EMAIL',
			'sender_internal' => true
		],
		[
			'id' => 'PHONE',
			'type' => 'string',
			'sender_segment_filter' => '%PHONE',
			'sender_internal' => true
		],
		[
			'id' => 'NAME',
			'type' => 'string',
			'sender_segment_filter' => '%NAME',
			'sender_internal' => true
		],
		[
			'id' => 'CLIENT_ID',
			'type' => 'string',
			'params' => array('hidden' => self::YES),
			"name" => 'ID',
			"default" => true,
			'filter_callback' => ['\Bitrix\Sender\Integration\Crm\Connectors\Helper', 'getIdFilter']
		],
	];

	$list[] = array(
		"id" => "DOC_TYPE",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DOC_TYPE'),
		"type" => "list",
		"items" => self::getCrmDocumentTypes(),
		"sender_segment_filter" => false,
		"default" => true,
	);

	$list[] = array(
		"id" => "CLIENT_TYPE",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CLIENT_TYPE'),
		"type" => "list",
		"items" => array(
			"" => Loc::getMessage(
				'SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CLIENT_TYPE_NOT_SET',
				[
					'%default%' => \CCrmOwnerType::getDescription(\CCrmOwnerType::Contact) . ", " . \CCrmOwnerType::getDescription(\CCrmOwnerType::Company),
				]
			),
			\CCrmOwnerType::ContactName => \CCrmOwnerType::getDescription(\CCrmOwnerType::Contact),
			\CCrmOwnerType::CompanyName => \CCrmOwnerType::getDescription(\CCrmOwnerType::Company),
		),
		"sender_segment_filter" => false,
		"default" => true
	);

	$list[] = array(
		"id" => "DEAL_DATE_CREATE",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_DATE_CREATE'),
		"type" => "date",
		"include" => [
			AdditionalDateType::CUSTOM_DATE,
			AdditionalDateType::PREV_DAY,
			AdditionalDateType::NEXT_DAY,
			AdditionalDateType::MORE_THAN_DAYS_AGO,
			AdditionalDateType::AFTER_DAYS,
		],
		"allow_years_switcher" => true,
		"default" => true
	);

	$stageList = self::getDealCategoryStageList();
	$list[] = array(
		"id" => "DEAL_STAGE_ID",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_STATUS_ID'),
		"type" => "list",
		'params' => array('multiple' => self::YES),
		"items" => $stageList,
		"default" => true
	);

	$list[] = array(
		"id" => "CONTACT_SOURCE_ID",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CONTACT_SOURCE_ID'),
		"type" => "list",
		'params' => array('multiple' => self::YES),
		"items" => \CCrmStatus::GetStatusList('SOURCE'),
		"default" => true
	);

	$list[] = array(
		'id' => 'CLIENT_COMMUNICATION_TYPE',
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_COMMUNICATION_TYPE'),
		'params' => array('multiple' => self::YES),
		'default' => true,
		'type' => 'list',
		'items' => \CCrmFieldMulti::PrepareListItems(array(
			\CCrmFieldMulti::PHONE,
			\CCrmFieldMulti::EMAIL,
			\CCrmFieldMulti::IM
		)),
		'filter_callback' => ['\Bitrix\Sender\Integration\Crm\Connectors\Helper', 'getCommunicationTypeFilter']
	);

	$list[] = array(
		"id" => "CLIENT_NO_PURCHASES_DATE",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_NO_PURCHASES_DATE'),
		"type" => "date",
		"exclude" => [
			\Bitrix\Main\UI\Filter\DateType::TOMORROW,
			\Bitrix\Main\UI\Filter\DateType::NEXT_DAYS,
			\Bitrix\Main\UI\Filter\DateType::NEXT_WEEK,
			\Bitrix\Main\UI\Filter\DateType::NEXT_MONTH,
		],
		"default" => true,
		'messages' => [
			'MAIN_UI_FILTER_FIELD_SUBTYPE_NONE' => ''
		],
		'filter_callback' => ['\Bitrix\Sender\Integration\Crm\Connectors\Helper', 'getNoPurchasesFilter']
	);

	if (Helper::isCrmSaleEnabled())
	{
		$list[] = array(
			'id' => 'CLIENT_PRODUCT_ID',
			"name" => Loc::getMessage("SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_PRODUCT_ID"),
			'default' => true,
			'type' => 'dest_selector',
			'partial' => true,
			'params' => array(
				'multiple' => self::YES,
				'apiVersion' => self::API_VERSION,
				'context' => 'SENDER_FILTER_PRODUCT_ID',
				'contextCode' => 'CRM',
				'useClientDatabase' => self::NO,
				'enableAll' => self::NO,
				'enableDepartments' => self::NO,
				'enableUsers' => self::NO,
				'enableSonetgroups' => self::NO,
				'allowEmailInvitation' => self::NO,
				'allowSearchEmailUsers' => self::NO,
				'departmentSelectDisable' => self::YES,
				'addTabCrmProducts' => self::YES,
				'enableCrm' => self::YES,
				'enableCrmProducts' => self::YES,
				'convertJson' => self::YES
			),
		);

		$list[] = array(
			'id' => 'CLIENT_PRODUCT_SOURCE',
			"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE'),
			'default' => true,
			'type' => 'list',
			'params' => array(
				'multiple' => self::YES,
			),
			'items' => [
				"" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE_ANY'),
				self::PRODUCT_SOURCE_ORDERS_PAID => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE_ORDERS_PAID'),
				self::PRODUCT_SOURCE_ORDERS_UNPAID => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE_ORDERS_UNPAID'),
				self::PRODUCT_SOURCE_DEALS_PROCESS => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE_DEALS_PROCESS'),
				self::PRODUCT_SOURCE_DEALS_SUCCESS => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE_DEALS_SUCCESS'),
				self::PRODUCT_SOURCE_DEALS_FAILURE => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_PRODUCT_SOURCE_DEALS_FAILURE'),
			],
			'filter_callback' => ['\Bitrix\Sender\Integration\Crm\Connectors\Helper', 'productSourceFilter']
		);
	}
	else
	{
		$list[] = array(
			'id' => 'DEAL_PRODUCT_ROW.PRODUCT_ID',
			"name" => Loc::getMessage("SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_PRODUCT_ID"),
			'default' => true,
			'type' => 'dest_selector',
			'partial' => true,
			'params' => array(
				'multiple' => self::YES,
				'apiVersion' => self::API_VERSION,
				'context' => 'SENDER_FILTER_PRODUCT_ID',
				'contextCode' => 'CRM',
				'useClientDatabase' => self::NO,
				'enableAll' => self::NO,
				'enableDepartments' => self::NO,
				'enableUsers' => self::NO,
				'enableSonetgroups' => self::NO,
				'allowEmailInvitation' => self::NO,
				'allowSearchEmailUsers' => self::NO,
				'departmentSelectDisable' => self::YES,
				'addTabCrmProducts' => self::YES,
				'enableCrm' => self::YES,
				'enableCrmProducts' => self::YES,
				'convertJson' => self::YES
			)
		);
	}


	$list[] = PhaseSemantics::getListFilterInfo(
		\CCrmOwnerType::Deal,
		array(
			'id' => 'DEAL_STAGE_SEMANTIC_ID',
			"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_STATUS_SEMANTIC_ID'),
			'default' => true,
			'params' => array('multiple' => self::YES)
		),
		true
	);

	$list[] = array(
		"id" => "CONTACT_POST",
		'type' => 'string',
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CONTACT_POST'),
		'params' => array('multiple' => self::YES),
		"default" => false
	);

	$list[] = array(
		"id" => "ASSIGNED_BY_ID",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_ASSIGNED_BY_ID'),
		'type' => 'dest_selector',
		'params' => array(
			'context' => 'SENDER_FILTER_ASSIGNED_BY_ID',
			'multiple' => self::YES,
			'contextCode' => 'U',
			'enableAll' => self::NO,
			'enableSonetgroups' => self::NO,
			'allowEmailInvitation' => self::NO,
			'allowSearchEmailUsers' => self::NO,
			'departmentSelectDisable' => self::YES,
			'isNumeric' => self::YES,
			'prefix' => 'U'
		),
		"sender_segment_filter" => false,
		"default" => false
	);

	foreach ([\CCrmOwnerType::Company, \CCrmOwnerType::Contact, \CCrmOwnerType::Deal] as $entityTypeId)
	{
		$entityTypeCaption = \CCrmOwnerType::getDescription($entityTypeId);
		$entityTypeName = \CCrmOwnerType::resolveName($entityTypeId);
		$fieldId = "{$entityTypeName}_ASSIGNED_BY_ID";
		$list[] = array(
			"id" => $fieldId,
			"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_ASSIGNED_BY_ID') . " ($entityTypeCaption)",
			'type' => 'dest_selector',
			'params' => array(
				'context' => 'SENDER_FILTER_ASSIGNED_BY_ID',
				'multiple' => self::YES,
				'contextCode' => 'U',
				'enableAll' => self::NO,
				'enableSonetgroups' => self::NO,
				'allowEmailInvitation' => self::NO,
				'allowSearchEmailUsers' => self::NO,
				'departmentSelectDisable' => self::YES,
				'isNumeric' => self::YES,
				'prefix' => 'U'
			),
			//"sender_segment_filter" => false,
			"default" => false
		);
	}

	$list[] = array(
		"id" => "CONTACT_BIRTHDATE",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CONTACT_BIRTHDATE'),
		'type' => 'date',
		"include" => [
			AdditionalDateType::CUSTOM_DATE,
			AdditionalDateType::PREV_DAY,
			AdditionalDateType::NEXT_DAY,
			AdditionalDateType::MORE_THAN_DAYS_AGO,
			AdditionalDateType::AFTER_DAYS,
		],
		"allow_years_switcher" => true,
		"default" => false,
	);

	//we need to filter able deals
	$list[] = array(
		'id' => self::DEAL_CATEGORY_ID,
		'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_CATEGORY_ID'),
		'params' => array('multiple' => self::YES),
		'default' => true,
		'type' => 'list',
		'required' => true,
		'valueRequired' => true,
		'items' => self::getDealCategoryList(),
		'filter_callback' => ['\Bitrix\Sender\Integration\Crm\Connectors\Helper', 'getDealCategoryFilter']
	);

	$list[] = array(
		"id" => "DEAL_TYPE_ID",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_TYPE_ID'),
		"type" => "list",
		'params' => array('multiple' => self::YES),
		"items" => \CCrmStatus::GetStatusList('DEAL_TYPE'),
		"default" => false
	);

	$list[] = array(
		"id" => "DEAL_OPPORTUNITY",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_OPPORTUNITY'),
		"type" => "number",
		"default" => false
	);

	$list[] = array(
		"id" => "DEAL_CLOSEDATE",
		"name" => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_DEAL_CLOSEDATE'),
		"type" => "date",
		"include" => [
			AdditionalDateType::CUSTOM_DATE,
			AdditionalDateType::PREV_DAY,
			AdditionalDateType::NEXT_DAY,
			AdditionalDateType::MORE_THAN_DAYS_AGO,
			AdditionalDateType::AFTER_DAYS,
		],
		"allow_years_switcher" => true,
		"default" => false
	);

	$list[] = array(
		'id' => 'COMPANY_COMPANY_TYPE',
		'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_COMPANY_TYPE'),
		'params' => array('multiple' => self::YES),
		'default' => false,
		'type' => 'list',
		'items' => \CCrmStatus::GetStatusList('COMPANY_TYPE'),
	);

	$list[] = array(
		'id' => 'CONTACT_TYPE_ID',
		'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CONTACT_TYPE'),
		'params' => array('multiple' => self::YES),
		'default' => false,
		'type' => 'list',
		'items' => \CCrmStatus::GetStatusList('CONTACT_TYPE'),
	);

	$list[] = array(
		'id' => 'CONTACT_HONORIFIC',
		'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_CONTACT_HONORIFIC'),
		'params' => array('multiple' => self::YES),
		'default' => false,
		'type' => 'list',
		'items' => \CCrmStatus::GetStatusList('HONORIFIC'),
	);

	$list[] = array(
		'id' => 'COMPANY_INDUSTRY',
		'name' => Loc::getMessage('SENDER_INTEGRATION_CRM_CONNECTOR_CLIENT_FIELD_COMPANY_INDUSTRY'),
		'params' => array('multiple' => self::YES),
		'default' => false,
		'type' => 'list',
		'items' => \CCrmStatus::GetStatusList('INDUSTRY'),
	);


	$entityTypes = array_merge(
		array(
			\CCrmOwnerType::ContactName,
			\CCrmOwnerType::CompanyName,
		),
		array_keys(self::getCrmDocumentTypes())
	);
	foreach ($entityTypes as $entityTypeName)
	{
		$entityTypeId = \CCrmOwnerType::resolveId($entityTypeName);
		$entityTypeCaption = \CCrmOwnerType::getDescription($entityTypeId);
		$ufList = Helper::getFilterUserFields($entityTypeId, $checkAccessRights);
		foreach ($ufList as $item)
		{
			if (isset($item['name']))
			{
				$item['name'] .= " ($entityTypeCaption)";
			}
			elseif (isset($item['NAME']))
			{
				$item['NAME'] .= " ($entityTypeCaption)";
			}

			if (isset($item['id']))
			{
				$item['id'] = $entityTypeName . "_" . $item['id'];
			}
			elseif (isset($item['ID']))
			{
				$item['ID'] = $entityTypeName . "_" . $item['ID'];
			}

			$list[] = $item;
		}
	}

	return $list;
}