• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/Service/Timeline/Repository.php
  • Класс: Bitrix\Crm\Service\Timeline\Repository
  • Вызов: Repository::getScheduledItems
public function getScheduledItems(?Query $queryParams = null): Result
{
	$filter = $queryParams ? $queryParams->getFilter() : [];
	$filter = array_merge($filter, [
		'CHECK_PERMISSIONS' => 'N',
		'COMPLETED' => 'N',
		'BINDINGS' => [
			[
				'OWNER_TYPE_ID' => $this->context->getEntityTypeId(),
				'OWNER_ID' => $this->context->getEntityId(),
			],
		],
	]);
	if (!$this->context->canReadEntity())
	{
		return new Result();
	}

	$dbResult = \CCrmActivity::GetList(
		[
			'DEADLINE' => 'ASC',
		],
		$filter,
		false,
		false,
		[
			'ID',
		],
		[
			'QUERY_OPTIONS' => [
				'LIMIT' => 100,
				'OFFSET' => 0,
			],
		]
	);

	$items = [];
	$activityIds = [];
	while ($fields = $dbResult->Fetch())
	{
		$activityIds[] = (int)$fields['ID'];
	}

	if (!empty($activityIds))
	{
		$dbResult = \CCrmActivity::GetList(
			[],
			[
				'@ID' => $activityIds,
				'CHECK_PERMISSIONS' => 'N',
			],
			false,
			false,
			[
				'ID',
				'OWNER_ID',
				'OWNER_TYPE_ID',
				'TYPE_ID',
				'PROVIDER_ID',
				'PROVIDER_TYPE_ID',
				'ASSOCIATED_ENTITY_ID',
				'CALENDAR_EVENT_ID',
				'DIRECTION',
				'SUBJECT',
				'STATUS',
				'DESCRIPTION',
				'DESCRIPTION_TYPE',
				'CREATED',
				'DEADLINE',
				'RESPONSIBLE_ID',
				'PROVIDER_PARAMS',
				'PROVIDER_DATA',
				'SETTINGS',
				'RESULT_MARK',
				'ORIGIN_ID',
				'LAST_UPDATED',
				'END_TIME',
				'STORAGE_TYPE_ID',
				'STORAGE_ELEMENT_IDS',
				'IS_INCOMING_CHANNEL',
				'LIGHT_COUNTER_AT',
			]
		);
		$activities = [];
		while ($fields = $dbResult->Fetch())
		{
			$activities[$fields['ID']] = $fields;
		}
		foreach ($activityIds as $activityId)
		{
			if (!isset($activities[$activityId]))
			{
				continue;
			}
			$items[$activityId] = $activities[$activityId];
		}
	}

	\Bitrix\Crm\Timeline\EntityController::loadCommunicationsAndMultifields(
		$items,
		$this->context->getUserPermissions()->getCrmPermissions()
	);

	$items = NoteTable::loadForItems($items, NoteTable::NOTE_TYPE_ACTIVITY);

	$items = array_values($items);

	foreach ($items as $key => $item)
	{
		$items[$key] = Container::getInstance()->getTimelineScheduledItemFactory()::createItem($this->context, $item);
	}

	$fields = \Bitrix\Crm\Pseudoactivity\WaitEntry::getRecentByOwner(
		$this->context->getEntityTypeId(),
		$this->context->getEntityId()
	);
	if (is_array($fields))
	{
		$items[] = new Wait(
			$this->context,
			(new Item\Compatible\Model())
				->setData($fields)
				->setId('WAIT_' . $fields['ID'])
				->setIsScheduled(true)
		);
	}
	$this->sortItems($items);

	return (new Result())
		->setItems($items)
	;
}