- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/filter/timelinedataprovider.php
- Класс: Bitrix\Crm\Filter\TimelineDataProvider
- Вызов: TimelineDataProvider::prepareQuery
static function prepareQuery($query, $filter)
{
//region Search Content
$searchContentBuilder = new Crm\Search\TimelineSearchContentBuilder();
$searchContentBuilder->convertEntityFilterValues($filter);
$searchContentFilter = $searchContentBuilder->prepareEntityFilter($filter);
if(!empty($searchContentFilter))
{
$searchContentQuery = new Main\Entity\Query(Crm\Timeline\Entity\TimelineSearchTable::getEntity());
foreach($searchContentFilter as $k => $v)
{
$searchContentQuery->addFilter($k, $v);
}
$searchContentQuery->addSelect('OWNER_ID');
$query->registerRuntimeField('',
new Main\Entity\ReferenceField('search',
Main\Entity\Base::getInstanceByQuery($searchContentQuery),
array('=this.ID' => 'ref.OWNER_ID'),
array('join_type' => 'INNER')
)
);
}
//endregion
TimelineEntryCategory::prepareQuery($query, $filter);
$createdDateFilter = Main\Entity\Query::filter();
$createdDateFilter->logic('and');
foreach(Crm\UI\Filter\EntityHandler::findAllFieldOperations('CREATED', $filter) as $operationInfo)
{
$date = $operationInfo['CONDITION'] instanceof Main\Type\DateTime
? $operationInfo['CONDITION'] : Main\Type\DateTime::tryParse($operationInfo['CONDITION']);
if($date !== null)
{
$createdDateFilter->where('CREATED', $operationInfo['OPERATION'], $date);
}
}
if($createdDateFilter->hasConditions())
{
$query->where($createdDateFilter);
}
$operationInfo = Crm\UI\Filter\EntityHandler::findFieldOperation('AUTHOR_ID', $filter);
if(is_array($operationInfo))
{
if(is_array($operationInfo['CONDITION']) && $operationInfo['OPERATION'] === '=')
{
$query->whereIn('AUTHOR_ID', $operationInfo['CONDITION']);
}
else
{
$query->where('AUTHOR_ID', $operationInfo['OPERATION'], $operationInfo['CONDITION']);
}
}
$operationInfo = Crm\UI\Filter\EntityHandler::findFieldOperation('CLIENT', $filter);
if(is_array($operationInfo))
{
$clientFilter = Main\Entity\Query::filter();
$clientFilter->logic('or');
foreach($operationInfo['CONDITION'] as $condition)
{
$entityInfo = \CCrmOwnerType::ParseEntitySlug($condition);
if(is_array($entityInfo))
{
$clientFilter->where(
Main\Entity\Query::filter()
->where('ENTITY_TYPE_ID', '=', $entityInfo['ENTITY_TYPE_ID'])
->where('ENTITY_ID', '=', $entityInfo['ENTITY_ID'])
);
}
}
if($clientFilter->hasConditions())
{
$clientBindingQuery = new Main\Entity\Query(Crm\Timeline\Entity\TimelineBindingTable::getEntity());
$clientBindingQuery->addSelect('OWNER_ID');
$clientBindingQuery->where($clientFilter);
$query->registerRuntimeField('',
new Main\Entity\ReferenceField('client_bind',
Main\Entity\Base::getInstanceByQuery($clientBindingQuery),
array('=this.ID' => 'ref.OWNER_ID'),
array('join_type' => 'INNER')
)
);
}
}
}