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