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;
}