• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Timeline/Repository.php
  • Класс: Bitrix\Crm\Service\Timeline\Repository
  • Вызов: Repository::prepareLoadHistoryQuery
private function prepareLoadHistoryQuery(
	int $limit,
	bool $isExtraFetch,
	\Bitrix\Main\ORM\Query\Query $bindingQuery,
	array $filter,
	?DateTime $offsetTime,
	int $offsetId
): \Bitrix\Main\ORM\Query\Query
{
	$query = TimelineTable::query();
	$query->addSelect('*');
	$query->addSelect('bind.IS_FIXED', 'IS_FIXED');
	$query->registerRuntimeField('',
		new ReferenceField('bind',
			\Bitrix\Main\ORM\Entity::getInstanceByQuery($bindingQuery),
			['=this.ID' => 'ref.OWNER_ID'],
			['join_type' => 'INNER']
		)
	);

	if (!empty($filter['ID']))
	{
		if (is_array($filter['ID']))
		{
			$query->whereIn('ID', $filter['ID']);
		}
		else
		{
			$query->where('=ID', $filter['ID']);
		}
	}

	if (isset($filter['CREATED_to']))
	{
		$filter['CREATED_to'] = DateTime::tryParse($filter['CREATED_to']);
	}

	if (isset($filter['CREATED_from']))
	{
		$filter['CREATED_from'] = DateTime::tryParse($filter['CREATED_from']);
	}

	if (
		$offsetTime instanceof DateTime
		&& (!isset($filter['CREATED_to']) || $offsetTime->getTimestamp() < $filter['CREATED_to']->getTimestamp())
	)
	{
		if ($isExtraFetch)
		{
			$query->addFilter('addFilter('=CREATED', $offsetTime);
			$query->addFilter('context))->applyToQuery($query);

	$query->setOrder(['CREATED' => 'DESC', 'ID' => 'DESC']);

	if ($limit > 0)
	{
		$query->setLimit($limit);
	}

	return $query;
}