- Модуль: 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; }