- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/exclusion/applicability.php
- Класс: Bitrix\Crm\Exclusion\Applicability
- Вызов: Applicability::filterEntities
static function filterEntities($entityTypeId, array &$list)
{
$entityTypeId = (int) $entityTypeId;
switch ($entityTypeId)
{
case \CCrmOwnerType::Contact:
self::removeFromContacts($list);
return;
case \CCrmOwnerType::Company:
self::removeFromCompanies($list);
return;
case \CCrmOwnerType::Lead:
$entities = [];
$leads = LeadTable::getList([
'select' => [
'ID', 'IS_RETURN_CUSTOMER', 'COMPANY_ID', 'CONTACT_ID',
'HAS_EMAIL', 'HAS_PHONE'
],
'filter' => ['=ID' => $list]
]);
foreach ($leads as $entity)
{
if ($entity['IS_RETURN_CUSTOMER'] === 'Y')
{
$entities[] = [
'ID' => $entity['ID'],
'CONTACT_ID' => $entity['CONTACT_ID'],
'COMPANY_ID' => $entity['COMPANY_ID'],
];
}
elseif ($entity['HAS_EMAIL'] <> 'Y' && $entity['HAS_PHONE'] <> 'Y')
{
self::removeFromList($entity['ID'], $list);
}
}
break;
case \CCrmOwnerType::Deal:
$entities = DealTable::getList([
'select' => ['ID', 'COMPANY_ID', 'CONTACT_ID'],
'filter' => ['=ID' => $list]
])->fetchAll();
break;
case \CCrmOwnerType::Quote:
$entities = QuoteTable::getList([
'select' => ['ID', 'COMPANY_ID', 'CONTACT_ID'],
'filter' => ['=ID' => $list]
])->fetchAll();
break;
default:
throw new NotSupportedException("Entity type ID `$entityTypeId` not supported.");
}
if (empty($entities))
{
return;
}
$companies = [];
$contacts = [];
foreach ($entities as $entity)
{
if ($entity['COMPANY_ID'])
{
$companies[] = $entity['COMPANY_ID'];
}
if ($entity['CONTACT_ID'])
{
$contacts[] = $entity['CONTACT_ID'];
}
}
// find & remove contacts without comm data
if (!empty($contacts))
{
self::removeFromContacts($contacts);
}
// find & remove companies without comm data
if (!empty($companies))
{
self::removeFromCompanies($companies);
}
// remove entities without comm data
foreach ($entities as $entity)
{
if ($entity['CONTACT_ID'] && in_array($entity['CONTACT_ID'], $contacts))
{
continue;
}
if ($entity['COMPANY_ID'] && in_array($entity['COMPANY_ID'], $companies))
{
continue;
}
self::removeFromList($entity['ID'], $list);
}
}