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