Битрикс24: кейс — группировка задач по исполнителю


Одним из наших иностранных заказчиков было высказано пожелание – иметь возможность группировать список задач по исполнителям, с возможностью смены ответственного простым перетаскиванием задачи в нужную группу.  Портал у них – коробочный, так что возможность таких изменений имеется. Да, в Битриксе есть сортировка по исполнителю, есть фильтрация по исполнителям – но оба варианта заказчика не устраивали, хотел именно группировку по исполнителю как некий «надуровень».

Первым делом – копируем компонент (tasks.list) в собственное пространство имен. В коде компонента (файл component.php) находим место – отвечающее за формирование сортировки данных. По коду хорошо видно, что сортировка находится в массиве $arOrders. Находим место, где он окончательно сформирован, и вставляем принудительно сортировку по исполнителю первой по порядку:

$arOrder = array_merge(array("RESPONSIBLE_ID" => "ASC"), $arOrder);

К нашему удивлению, при такой сортировке задачи нескольких исполнителей «перемешивались» друг с другом. У большинства все было как надо, но задачи нескольких исполнителей – шли «вперемешку». Стали копать подробнее API  — оказалось, что в методе CTask::GetList при формировании сортировки, есть вот такой замечательный код:

foreach ($arOrder as $by => $order)
{
	……
switch ($by)
{
	……
	case 'responsible_id':
                    $arSqlOrder[] = " RESPONSIBLE_LAST_NAME ".$order." ";
                    $needle = 'RESPONSIBLE_LAST_NAME';
                break;
	……
}
……
}

Значит, при запросе сортировки по идентификатору исполнителя (колонка с ид исполнителя есть в таблице b_tasks, возможность сортировать по ней — имеется) — Битрикс вместо этого сортирует по фамилии исполнителя. При этом никак не учтен тот факт, что фамилия может и не задаваться вовсе. У нас как раз такой случай. У всех исполнителей, у которых «смешивались» задачи – не была задана фамилия.

Теперь данные идут в нужном нам порядке, кроме этого на нужна информация о самих ответственных. В коде, формирующем массив задач – находим все уникальные идентификаторы ответственных и делаем запрос на получение их имен, фамилий, логинов (на случай если имя и фамилия не заданы).

Полученную информацию добавляем в массив $arResult – теперь мы можем работать с ней в шаблонах компонента.

В стандарте, компонент списка задач имеет два представления: вид списком и диаграмма Гантта. Соответственно изменять необходимо оба. В них уже есть группировка по проектам. Заказчик хочет сделать такую же группировку, но на уровень выше и по исполнителям. Начнем с простого списка.

Идем в его шаблон (template.php). Изучаем его логику. Находим место формирования группировки проектов. Копируем его и переделываем под формирование группировки исполнителей.  Переписываем JS-скрипт, который отвечает за сворачивание-разворачивание группы. На выходе получаем такой вид:

Группировка задач по пользователю в Битрикс24

У диаграммы Ганта – много JS скриптов, отвечающих за перенос задач, создание новых и т.п. Все их рассматривать нет смысла. Покажем только конечный результат:
Группировка задач по исполнителю в диаграмме ганта в Битрикс24

,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *