• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/provider/taskquerybuilder.php
  • Класс: BitrixTasksProviderTaskQueryBuilder
  • Вызов: TaskQueryBuilder::getSubordinateSql
private function getSubordinateSql(): string
{
	$departmentIds = Department::getSubordinateIds($this->taskQuery->getBehalfUser(), true);
	$departmentIds = array_map('intval', $departmentIds);
	if (count($departmentIds) <= 0)
	{
		return '';
	}
	$departmentOption = CUserTypeEntity::GetList([], [
		'ENTITY_ID' => 'USER',
		'FIELD_NAME' => 'UF_DEPARTMENT',
	])->Fetch();

	if (!$departmentOption)
	{
		return '';
	}

	$fieldId = (int)$departmentOption['ID'];

	$responsibleIdQuery = self::createQuery('BUF', UtmUserTable::getEntity());
	$responsibleIdQuery
		->setSelect(['FIELD_ID'])
		->where('FIELD_ID', $fieldId)
		->whereIn('VALUE_INT', $departmentIds)
		->where('VALUE_ID', new SqlExpression('%s'))
	;

	$createdByQuery = clone $responsibleIdQuery;

	//todo.
	$existsQuery = self::createQuery('BUF', UtmUserTable::getEntity());
	$existsQuery
		->setSelect(['FIELD_ID'])
		->where('FIELD_ID', $fieldId)
		->where('DSTM.TASK_ID', new SqlExpression('%s'))
		->whereIn('VALUE_INT', $departmentIds)
		->registerRuntimeField('DSTM',
			(new ReferenceField(
				'rel',
				MemberTable::getEntity(),
				Join::on('this.VALUE_ID', 'ref.USER_ID')
			))->configureJoinType(Join::TYPE_INNER)
		)
	;

	$sql = "
		CASE
			WHEN EXISTS({$responsibleIdQuery->getQuery()}) THEN 'Y'
			WHEN EXISTS({$createdByQuery->getQuery()}) THEN 'Y'
			WHEN EXISTS({$existsQuery->getQuery()}) THEN 'Y'
			ELSE 'N'
		END
	";

	return $sql;
}