Поддержка динамической ниспадающей модели управления проектами.

О плагине

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

В браузерах отличных от Firefox некорректно отображаются границы групп по причине неверной поддержки CSS.

Настройка

Все настройки из данного раздела размещаются в конфигурации сервера. Конфигурацию плагина рекомендуется сделать вложенной конфигурацией, включённой в основную.

Доска отображает данные, полученные из очереди процессов. Очередь определяет типы процессов, выбираемые столбцы с дополнительной информацией и может быть использована для предварительного просмотра процессов из плана. Сортировку плана производит сам плагин.

A user sees in boards list only the boards, which queues are allowed for him.

Sample of :

# filter for show only opened processes
filter.1.type=openClose
filter.1.value=open
# optionally additional status filter
#filter.2.type=status
#filter.2.values=1,2,3

column.1.title=ID
column.1.value=id
# optional columns with additional columns, used at board
column.6.title=Telegram
column.6.value=param:20
column.7.title=Incoming messages
column.7.value=messageInCount
column.8.title=Unread incoming messages
column.8.value=messageInUnreadCount
column.9.title=Status changed
column.9.value=status_dt:dd.MM.yyyy
column.10.title=Tags
column.10.value=param:42
column.12.title=Customer
column.12.value=linkedCustomer:title
column.12.titleIfMore=100

The simplest board configuration requires only queue ID, as an example for queue ID 10.

blow:board.1.title=Test
blow:board.1.queueId=10

В JEXL процессор для вычисления текста ячейки помимо стандартных переменных и process передаются значения, выбранные в столбцах очереди процессов как переменные colX, где X - код столбца.

Example of showing additional information using additional columns from the queue before.

blow:board.1.title=BGERP
blow:board.1.queueId=4
blow:board.1.stringExpressionCell=<<END
     result = process.getDescription() + " [<b>" + ctxProcessStatusMap[process.getStatusId()];
     if (process.getExecutorIdsWithRole(0).size() > 0) {
        result += " " + params.get("col9");
     }
     result += "</b>]";

     telegramGroup = params.get("col6");
     if (telegramGroup)
          result += " <a target='_blank' href='https://t.me/" + telegramGroup + "'>@" + telegramGroup + "</a>";

     msgCnt = params.get("col7");
     if (msgCnt) {
         result += " " + msgCnt;
         unreadCnt = params.get("col8");
         if (unreadCnt)
            result += " (<b>" + unreadCnt + "</b>)";
     }

     tags = params.get("col10");
     if (tags) {
          result += " {" + tags + "}";
     }

     return result;
END

Работа

Blow план отображает иерархию, порядок выполнения и исполнителей процессов. Форма представления табличная, столбцы таблицы - исполнители либо группы решения. По вертикали в ячейках отображаются процессы: код со ссылкой на открытие и текст описания, сгенерированный JEXL выражением.

Все процессы представляются в виде дерева, связанного типом связи Порождён. Проект, подпроект, задача - всё представляется в виде процессов. Некоторые из процессов существуют длительное время, другие выполняются и закрываются.

board

Выбираемые для плана процессы должны быть открытыми (пустая дата завершения).

Исполнители и группы решения выбираются только в роли 0 Выполнение. Процесс, не назначенный ни на кого, либо назначенный на более одного исполнителя отображается на всю ширину таблицы. Такие процессы считаются не назначенными. Если в процессе есть хоть один дочерний не назначенный процесс - родительский процесс также считается не назначенным.

Процессы на каждом уровне сортируются следующим образом:

  • назначенные процессы;

  • процессы с дочерними процессами, сортировка обратно приоритету;

  • не назначенные процессы, сортировка обратно приоритету.

Отображаются только два уровня иерархии: контейнеры и дочерние процессы. Возможно создание нескольких планов на разных уровнях, множественные предки. Например, у задачи может быть процессы-предки Компонент и Проект одновременно, отображаемые на разных планах для разработчиков и PSO. Процессы разделяются по различным планам с помощью фильтров по типам, группам в очереди процессов а также с использованеим изоляции.

Процессы-контейнеры выделяются полужирным шрифтом. В нижней области таблицы отображается виртуальный родительский процесс НЕ РАСПРЕДЕЛЁННЫЕ. Ячейки с процессами можно перетаскивать мышью, изменяя предка. Для преобразования процесса в независимый в качестве предка использовать НЕ РАСПРЕДЕЛЁННЫЕ, либо вызвать контекстное меню.

При наведении мыши на процесс выделяется он сам и все его дочерние процессы.

Правым кликом мыши по диаграмме вызывается контекстное меню, позволяющее:

  • создавать процесс, идентичный выбранному: c таким же типом и в том же контейнерном процессе;

  • вырезать и вставлять процессы;

  • отделять процессы из контейнерных в независимые.

Основная идея Blow диаграммы состоит в постепенном всплывании процессов наверх с распределением их среди исполнителей. Контейнерные процессы агрегируют свойства дочерних: бюджеты, затраченное время. Процессы создаются и структурируются по исполнителям внизу и поднимаются вверх для исполнения.

Фильтры

Фильтры представляют из себя программируемые кнопки, отображаемые над таблицей плана. Каждая кнопка отображает сгенерированный скриптом текст и при клике по ней включает либо выключает подсветку процессов, подпадающих под фильтр.

filters

Пример конфигурации фильтра по статусу In progress [4] для доски с кодом 1:

blow:board.1.filter.1.color=green
blow:board.1.filter.1.stringExpression=<<END
     count = 0;
     for (item : items) {
          if (item.getProcess().getStatusId() =~ [4]) {
               count += 1;
               item.addFilterId(filter.getId());
          }
     }
    return "In progress: <b>[" + count + "]</b>";
END

Пример вывода кнопки с общим количеством процессов для доски с кодом 1:

blow:board.1.filter.1.color=#b2b02a
blow:board.1.filter.1.stringExpression=<<END
     return "Всего: <b>[" + items.size() + "]</b>";
END

Открытый интерфейс

При добавлении в конфигурации плана параметра openUrl равным он станет доступным в открытом интерфейсе с адресом ../open/blow/<openUrl>. Пример открытого плана разработки BGERP.

Дальнейшее развитие

  • Отображение параметров: задач по исполнителям, оценочного и затраченного времени, бюджетов с суммированием по уровням.