- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/internals/effective.php
- Класс: BitrixTasksInternalsEffective
- Вызов: Effective::getInProgressCountForGroups
static function getInProgressCountForGroups(
DateTime $dateFrom,
DateTime $dateTo,
int $userId,
array $groupIds
): array
{
$query = new Query(TaskTable::getEntity());
$query->setSelect([
'GROUP_ID',
new EntityExpressionField('COUNT', 'COUNT(%s)', 'ID'),
]);
if ($userId > 0)
{
$query
->registerRuntimeField('TM', new EntityReferenceField(
'TM',
MemberTable::getEntity(),
Join::on('this.ID', 'ref.TASK_ID')
->where('ref.USER_ID', $userId)
->whereIn('ref.TYPE', ['R', 'A']),
['join_type' => 'inner']
))
->where(
Query::filter()
->logic('or')
->where(
Query::filter()
->where('TM.TYPE', 'R')
->whereColumn('CREATED_BY', '<>', 'RESPONSIBLE_ID')
)
->where(
Query::filter()
->where('TM.TYPE', 'A')
->where('CREATED_BY', '<>', $userId)
->where('RESPONSIBLE_ID', '<>', $userId)
)
);
}
else
{
$query->whereColumn('CREATED_BY', '<>', 'RESPONSIBLE_ID');
}
$query
->where('CREATED_DATE', '<=', $dateTo)
->where(
Query::filter()
->logic('or')
->where('CLOSED_DATE', '>=', $dateFrom)
->where('CLOSED_DATE', NULL)
)
->where('STATUS', '<>', Status::DEFERRED)
->where((!empty($groupIds) ? Query::filter()->whereIn('GROUP_ID', $groupIds) : []));
$count = array_fill_keys($groupIds, 0);
$res = $query->exec();
while ($item = $res->fetch())
{
$count[$item['GROUP_ID']] = (int)$item['COUNT'];
}
return $count;
}