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