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