• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/agent/activity/synchronizeentitycountabledataagent.php
  • Класс: Bitrix\Crm\Agent\Activity\SynchronizeEntityCountableDataAgent
  • Вызов: SynchronizeEntityCountableDataAgent::processEntityCountableTable
private function processEntityCountableTable(array $result): array
{
	$limit = $this->getLimit();
	$lastId = ($result['lastEntityCountableActId'] ?? 0);
	$processedCount = 0;

	$activitiesIds = $this->getEntityCountableActivitiesIds($lastId, $limit);
	foreach ($activitiesIds as $activityId)
	{
		$lastId = (int)$activityId;
		$result['steps']++;
		$processedCount++;

		$activityBindingsMap = [];
		$bindings = \CCrmActivity::GetBindings($activityId);
		foreach ($bindings as $binding)
		{
			$ownerTypeId = (int)$binding['OWNER_TYPE_ID'];
			$ownerId = (int)$binding['OWNER_ID'];
			$activityBindingsMap[$ownerTypeId . '_' . $ownerId] = true;
		}
		$counterBindings = $this->getEntityCountableActivitiesBindings($activityId);
		foreach ($counterBindings as $binding)
		{
			$entityTypeId = (int)$binding['ENTITY_TYPE_ID'];
			$entityId = (int)$binding['ENTITY_ID'];
			// remove wrong records from EntityCountableActivityTable:
			if (!$activityBindingsMap[$entityTypeId . '_' . $entityId])
			{
				EntityCountableActivityTable::delete($binding['ID']);
				$this->resetCounterByEntity($entityTypeId,  $entityId);
			}
		}
	}

	$result['lastEntityCountableActId'] = $lastId;
	if ($processedCount < $limit)
	{
		$result['currentTable'] = self::ENTITY_UNCOMPLETED_ACTIVITY_TABLE;
	}

	return $result;
}