- Модуль: sender
- Путь к файлу: ~/bitrix/modules/sender/lib/integration/crm/connectors/helper.php
- Класс: Bitrix\Sender\Integration\Crm\Connectors\Helper
- Вызов: Helper::prepareQuery
static function prepareQuery(
Entity\Query $query,
$dataTypeId = null,
$entityDbName = null,
$entityName = null
)
{
$map = array(
Recipient\Type::EMAIL => [
'name' => 'HAS_EMAIL',
'operator' => '=',
'value' => 'Y'
],
Recipient\Type::PHONE => [
'name' => 'HAS_PHONE',
'operator' => '=',
'value' => 'Y'
],
Recipient\Type::IM => [
'name' => 'HAS_IMOL',
'operator' => '=',
'value' => 'Y'
],
Recipient\Type::CRM_CONTACT_ID => [
'name' => 'CONTACT_ID',
'operator' => null,
'value' => null
],
Recipient\Type::CRM_COMPANY_ID => [
'name' => 'COMPANY_ID',
'operator' => null,
'value' => null
],
);
$entityName = $entityName ?? mb_strtoupper($query->getEntity()->getName());
if ($dataTypeId)
{
if (!isset($map[$dataTypeId]))
{
return $query;
}
$field = $map[$dataTypeId];
if($field['operator'] === null)
{
return $query;
}
if ($dataTypeId == Recipient\Type::CRM_COMPANY_ID && in_array($entityName, ['CONTACT']))
{
$field['name'] = 'CRM_COMPANY_ID';
}
$query->where($field['name'], $field['operator'], $field['value']);
if ($dataTypeId === Recipient\Type::IM)
{
$query->whereExists(self::getImSqlExpression($query, $entityDbName, $entityName));
}
}
else if (!in_array($entityName, ['CONTACT', 'COMPANY']))
{
$filter = Entity\Query::filter();
foreach ($map as $dataTypeId => $field)
{
if($field['operator'] === null)
{
continue;
}
if ($dataTypeId === Recipient\Type::IM)
{
$filter->where(
Entity\Query::filter()
->where($field['name'], $field['operator'], $field['value'])
->whereExists(self::getImSqlExpression($query, $entityDbName, $entityName))
);
}
else
{
$filter->where($field['name'], $field['operator'], $field['value']);
}
}
if (count($filter->getConditions()) > 0)
{
$filter->logic('or');
$query->where($filter);
}
}
return $query;
}