SyncCountableDataAgent::getCountableActivityList

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. SyncCountableDataAgent
  4. getCountableActivityList
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/agent/activity/synccountabledataagent.php
  • Класс: Bitrix\Crm\Agent\Activity\SyncCountableDataAgent
  • Вызов: SyncCountableDataAgent::getCountableActivityList
private function getCountableActivityList(int $lastId, int $limit): array
{
	$data = EntityCountableActivityTable::query()
		->setSelect([
			'ACTIVITY_ID',
		])
		->where('ACTIVITY_ID', '>', $lastId)
		->setLimit($limit)
		->setOrder(['ACTIVITY_ID' => 'ASC'])
		->setGroup(['ACTIVITY_ID'])
		->fetchAll()
	;
	$activityIds = array_column($data, 'ACTIVITY_ID');
	if (empty($activityIds))
	{
		return [];
	}

	$activityIds = array_unique($activityIds);
	sort($activityIds);

	$activitiesData = [];
	$activitiesDeadlinesIterator = ActivityTable::query()
		->whereIn('ID', $activityIds)
		->setSelect(['COMPLETED', 'ID', 'DEADLINE', 'RESPONSIBLE_ID'])
		->exec();
	while ($activity = $activitiesDeadlinesIterator->fetch())
	{
		$activitiesData[$activity['ID']] = [
			'COMPLETED' => ($activity['COMPLETED'] === 'Y'),
			'DEADLINE' => $activity['DEADLINE'],
			'RESPONSIBLE_ID' => $activity['RESPONSIBLE_ID'],
		];
	}
	$incomingChannelActivityIds = array_column(
		IncomingChannelTable::query()
			->setSelect([
				'ACTIVITY_ID',
			])
			->whereIn('ACTIVITY_ID', $activityIds)
			->fetchAll(),
		'ACTIVITY_ID'
	);

	$result = [];
	foreach ($activityIds as $activityId)
	{
		$result[] = [
			'ID' => $activityId,
			'DELETED' => !array_key_exists($activityId, $activitiesData),
			'COMPLETED' => (bool)$activitiesData[$activityId]['COMPLETED'],
			'DEADLINE' => $activitiesData[$activityId]['DEADLINE'] ?? null,
			'RESPONSIBLE_ID' => $activitiesData[$activityId]['RESPONSIBLE_ID'] ?? null,
			'IS_INCOMING_CHANNEL' => in_array($activityId, $incomingChannelActivityIds, false) ? 'Y' : 'N'
		];
	}

	return $result;
}

Добавить комментарий