- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/volume/base.php
- Класс: Bitrix\Crm\Volume\Base
- Вызов: Base::prepareEntityFilter
public function prepareEntityFilter(ORM\Query\Query $query, ORM\Entity $entity, $entityAlias = '')
{
$isAllValueApplied = true;
// Samples naming:
// EVENT.DATE_CREATE
// DealCategory.CREATED_DATE
// InvoiceStatusHistory.CREATED_TIME
// ActivityTable.CREATED
$dateCreatedAlias = array('DATE_CREATE', 'CREATED_TIME', 'CREATED_DATE', 'CREATED');
// Samples naming:
// DEAL.STAGE_SEMANTIC_ID
// LEAD.STATUS_SEMANTIC_ID
$stageSemanticAlias = array('STAGE_SEMANTIC_ID', 'STATUS_SEMANTIC_ID');
$filter = $this->getFilter();
foreach ($filter as $key => $value)
{
if (empty($value))
{
continue;
}
$key0 = trim($key, '<>!=@');
if (mb_strlen($key) > mb_strlen($key0))
{
$operator = mb_substr($key, 0, mb_strlen($key) - mb_strlen($key0));
}
else
{
$operator = '=';
if (is_array($value))
{
$operator = 'in';
}
}
switch ($key0)
{
case 'STAGE_SEMANTIC_ID':
$isApplied = false;
foreach ($stageSemanticAlias as $aliasStageSemantic)
{
if ($entity->hasField($aliasStageSemantic))
{
$isApplied = true;
if ($entityAlias !== '')
{
$aliasStageSemantic = "{$entityAlias}.{$aliasStageSemantic}";
}
$query->where($aliasStageSemantic, $operator, $value);
break;
}
}
if (!$isApplied)
{
$isAllValueApplied = false;
}
break;
case 'DATE_CREATE':
$isApplied = false;
foreach ($dateCreatedAlias as $aliasDateCreated)
{
if ($entity->hasField($aliasDateCreated))
{
if ($entity->getField($aliasDateCreated) instanceof ORM\Fields\DatetimeField)
{
$isApplied = true;
if ($entityAlias !== '')
{
$aliasDateCreated = "{$entityAlias}.{$aliasDateCreated}";
}
$query->where($aliasDateCreated, $operator, $value);
break;
}
}
}
if (!$isApplied)
{
$isAllValueApplied = false;
}
break;
default:
$isApplied = $this->addFilterEntityField($query, $entity, $key, $value);
if (!$isApplied)
{
$isAllValueApplied = false;
}
}
}
return $isAllValueApplied;
}