- Модуль: 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;
}