• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/effective.php
  • Класс: BitrixTasksInternalsEffective
  • Вызов: Effective::getViolationsCountForGroups
static function getViolationsCountForGroups(
	DateTime $dateFrom,
	DateTime $dateTo,
	int $userId,
	array $groupIds
): array
{
	$query = new Query(EffectiveTable::getEntity());
	$query->setSelect([
		'GROUP_ID',
		new EntityExpressionField('COUNT', 'COUNT(%s)', 'TASK_ID'),
	]);
	$query->registerRuntimeField('T', new EntityReferenceField(
		'T',
		TaskTable::getEntity(),
		Join::on('this.TASK_ID', 'ref.ID'),
		['join_type' => 'inner']
	));
	$query
		->where(($userId? Query::filter()->where('USER_ID', $userId) : []))
		->where((!empty($groupIds) ? Query::filter()->whereIn('GROUP_ID', $groupIds) : []))
		->where('IS_VIOLATION', 'Y')
		->where('T.RESPONSIBLE_ID', '>', 0)
		->where(
			Query::filter()
				->where('DATETIME', '<=', $dateTo)
				->where(
					Query::filter()
						->logic('or')
						->where('DATETIME', '>=', $dateFrom)
						->where('DATETIME_REPAIR', NULL)
						->where('DATETIME_REPAIR', '>=', $dateFrom)
				)
		);

	$count = array_fill_keys($groupIds, 0);
	$res = $query->exec();
	while ($item = $res->fetch())
	{
		$count[$item['GROUP_ID']] = (int)$item['COUNT'];
	}

	return $count;
}