SyncCountableDataAgent::processEntityUncompletedActivities

  1. Bitrix24 API (v. 23.675.0)
  2. crm
  3. SyncCountableDataAgent
  4. processEntityUncompletedActivities
  • Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/agent/activity/synccountabledataagent.php
  • Класс: Bitrix\Crm\Agent\Activity\SyncCountableDataAgent
  • Вызов: SyncCountableDataAgent::processEntityUncompletedActivities
private function processEntityUncompletedActivities(array $result): array
{
	$limit = $this->getLimit();
	$activityId = ($result['lastActId'] ?? 0);
	$processedCount = 0;

	$items = $this->getUncompletedActivitiesList($activityId, $limit);

	$activityIds = [];
	foreach ($items as $item)
	{
		$activityId = (int)$item['ID'];
		$result['steps']++;
		$processedCount++;

		if (($item['DEADLINE'] && !\CCrmDateTimeHelper::IsMaxDatabaseDate($item['DEADLINE'])) || $item['IS_INCOMING_CHANNEL'] == 'Y')
		{
			$activityIds[] = $activityId;
		}
	}

	$activitiesToSynchronize = [];
	if (!empty($activityIds))
	{
		$iterator = ActivityBindingTable::query()
			->setSelect([
				'OWNER_ID',
				'OWNER_TYPE_ID',
				'ACTIVITY_ID',
			])
			->whereIn('ACTIVITY_ID', $activityIds)
			->registerRuntimeField(
				'',
				new ReferenceField('A',
					EntityCountableActivityTable::getEntity(),
					(new ConditionTree())
						->whereColumn('ref.ACTIVITY_ID', 'this.ACTIVITY_ID')
						->whereColumn('ref.ENTITY_TYPE_ID', 'this.OWNER_TYPE_ID')
						->whereColumn('ref.ENTITY_ID', 'this.OWNER_ID'),
					['join_type' => Join::TYPE_LEFT]
				)
			)
			->whereNull('A.ENTITY_ID')
			->exec()
		;
		while ($item = $iterator->fetch())
		{
			$ownerTypeId = (int)$item['OWNER_TYPE_ID'];
			$ownerId = (int)$item['OWNER_ID'];
			$activityId = (int)$item['ACTIVITY_ID'];
			$this->resetCounterByEntity($ownerTypeId, $ownerId);
			$activitiesToSynchronize[] = $activityId;
		}
		$activitiesToSynchronize = array_unique($activitiesToSynchronize);

		foreach ($activitiesToSynchronize as $activityId)
		{
			\Bitrix\Crm\Counter\Monitor\CountableActivitySynchronizer::synchronizeByActivityId($activityId);
		}
	}

	$result['lastActId'] = $activityId;

	if ($processedCount < $limit)
	{
		$result['currentStep'] = '-';
	}

	return $result;
}

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