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