...Человеческий поиск в разработке...
- Модуль: 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; }