Задача [0156, часть 4]: Шаблоны проектов в Конфигураторе

Формулировка проблемы: необходим интерфейс для настройки шаблона проекта.

Связанные задачи: 0156, часть 1, 0156, часть 2, 0156, часть 3, 0156, часть 5.

Общее решение по «Шаблонам проектов» поделено на 5 задач. В данной задаче рассмотрены все интерфейсные задачи по настройке шаблона проекта в Конфигураторе.

Решение: в раздел конфигуратора «Проекты» необходимо добавить новый раздел «Шаблоны проектов» (после раздела «Настройки проектов»).

Новый раздел «Шаблоны проектов» должен содержать:

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

Контекстное меню всегда должно содержать пункт «Редактировать», по нажатию которого должен открыться экран настроек шаблона проекта.

Значения из списка нельзя удалять, только скрывать. Для этого в контекстное меню добавляется пункт «Скрыть» («Восстановить» для обратного действия). Скрытое значение в таблице должно выделиться серым цветом (#b5b5b5).

Поиск аналогичен, например, в списке реестров и осуществляется по всем страницам списка по полю названия:

Рисунок 1. Новый раздел «Шаблоны проектов» в конфигураторе

Новый раздел «Шаблоны проектов» в конфигураторе

Рисунок 2. Список шаблонов проектов

Список шаблонов проектов

Экран «Настройки шаблона проекта»

По нажатию на кнопку «Добавить» либо при выборе в контекстном меню записи пункта «Редактировать» должен открываться экран Настройки шаблона проекта. Экран разделен на несколько частей, каждая из которых визуально отделена от предыдущей точечной линией (в скобках указано значение по умолчанию):

  • вводная информация (данная часть никак не подписана):

    • Наименование шаблона проекта - поле ввода (пусто);

    • Код - поле ввода, заполняется автоматически из названия шаблона проекта, заменяя пробелы знаком «_» (пусто);

    • Структура шаблона - кнопка для перехода на следующий экран, доступна только для уже сохраненного шаблона (иначе - не отображать);

  • далее идет часть Настройки:

    • Тип расчета сроков - выпадающий список (по умолчанию - значение из опции «Расчет мероприятий проекта», расположенной в разделе конфигуратора «Настройки проекта»);

    • Тип расчета прогресса - выпадающий список («Среднее арифметическое значение»);

    • Перерасчет прогресса при изменении сроков - флажок (выключен);

    • Вес мероприятия - выпадающий список (пусто);

    • Способ ввода сроков - выпадающий список (по умолчанию - значение из опции «Тип ввода дат мероприятий проекта», расположенной в разделе конфигуратора «Настройки проекта»);

    • Тип прогресса - выпадающий список («Фактический прогресс / Прогресс по работе»);

  • далее идет часть Управление рисками:

    • Показывать удаленные - флажок (выключен);

    • Добавить - кнопка для добавления нового риска (вызывает диалог, идентичный таковому в модуле «Проекты»);

    • таблица со списком добавленных рисков (идентична таковой в модуле «Проекты»), отсутствует вовсе, если нет ни одной записи;

  • далее идет часть Внешний вид:

    • Отображать следующие поля для данного проекта - лейбл;

    • Длительность - флажок (включен);

    • Начало - флажок (включен);

    • Завершение - флажок (включен);

    • Зависит - флажок (включен);

    • Ответственный - флажок (включен);

    • Плановая стоимость - флажок (выключен);

    • Фактическая стоимость - флажок (выключен);

    • флажки настроенных ниже дополнительных полей, при наличии (выключены);

    • Прогресс - флажок (включен);

  • далее идет часть Дополнительные поля:

    • Добавить - кнопка для добавления нового дополнительного поля (открывает меню, пункты которого составлены из справочника pm_custom_fields);

    • таблица со списком добавленных доп.полей (идентична таковой в модуле «Проекты»), отсутствует вовсе, если нет ни одной записи.

  • в самом низу экрана по середине с фиксированным положением расположена кнопка «Сохранить» (прокрутка всех вышеперечисленных полей осуществляется под кнопку).

Примечание: добавление / удаление дополнительного поля должно сразу (без пересохранения) отражаться в части про внешний вид (добавляться / удаляться соответствующие флажки).

Только при заполненных полях названия и кода и по нажатию на кнопку «Структура шаблона» должен открываться следующий экран Редактирование структуры шаблона проекта. Иначе необходимо не выполнять действие, выделять незаполненные поля красным и выдавать сообщение-ошибку:

Заполните обязательные поля

Аналогично, только при заполненных полях названия и кода и по нажатию на кнопку «Сохранить» должно происходить сохранение всех настроек шаблона. Иначе необходимо не выполнять действие, выделять незаполненные поля красным и выдавать сообщение-ошибку:

Заполните обязательные поля

По нажатию на кнопку «Назад» должен происходить возврат ко списку шаблонов проектов. Но при наличии несохраненных изменений в настройках либо структуре шаблона необходимо выдавать сначала браузерное диалоговое окно с сообщением:

Все несохраненные изменения будут потеряны. Продолжить?

с кнопками «Отмена» (действие не выполняется) и «ОК» (все изменения примениться не должны, далее также происходит возврат ко списку шаблонов проекта).

Рисунок 3. Настройки шаблона проекта, часть 1

Настройки шаблона проекта, часть 1

Рисунок 4. Настройки шаблона проекта, часть 2

Настройки шаблона проекта, часть 2

Экран «Редактирование структуры шаблона проекта»

Экран Редактирование структуры шаблона проекта содержит наименование шаблона, кнопку «Добавить» с иконкой «?», поле поиска «Crtl+F», а также дерево-таблицу со структурой будущего проекта. Если в таблице строк больше, чем высота экрана, тогда в таблице должен появиться вертикальный скролл.

Примечание: если длина наименования такая, что не помещается в одну строку полностью, необходимо обрезать текст (без добавления градиента), а по наведению на текст - отображать тултип с полным названием шаблона проекта.

По нажатию кнопки с иконкой «?» необходимо открывать pop-up меню со следующим содержимым:

N Добавление нового параллельного мероприятия

Shift+N Добавление нового вложенного мероприятия

Delete Удаление выделенного мероприятия

Ctrl+F Поиск мероприятия по формулировке

Примечание: сочетание клавиш «Ctrl+F» не будет работать в браузере Internet Explorer, и это не будет являться ошибкой Synergy.

Данное pop-up меню должно скрываться при потере фокуса на нем либо при нажатии клавиши «Esc».

Дерево-таблица (примечание: в стиле редизайна) содержит следующие столбцы:

  • Номер (не имеет пустого значения)

  • Название (обяз.)

  • Длительность (обяз.)

  • Зависит (не обяз.)

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

Каждая ячейка таблицы (за исключением ячеек столбца со структурными номерами) может находиться в двух состояних: в режиме просмотра (по умолчанию) и в режиме редактирования. В режиме редактирования одновременно не может находиться более одной ячейки. Если ячейка находится в режиме редактирования, то это означает, что она в данный момент является и выделенной. При наведении мышкой на любую ячейку таблицы в режиме просмотра должен отображаться тултип, отображающий полное значение ячейки.

  • Режим просмотра -> режим редактирования

    Для выделенной ячейки нажатие клавиши «Enter» должно переводить ячейку в режим редактирования. Положение курсора по умолчанию - в начале строки.

  • Режим редактирования -> режим просмотра

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

По нажатию клавиш «Shift+N» (необходимо обрабатывать данное сочетание клавиш в браузере) при активной основной рабочей области со списком мероприятий либо по нажатию кнопки «Добавить» необходимо добавить новое дочернее мероприятие в конец выделенного в виде пустой строки (еще без структурного номера), в которой ячейка с названием автоматически находится в режим редактирования.

По нажатию клавиши «N» (необходимо обрабатывать данное сочетание клавиш в браузере) при активной основной рабочей области со списком мероприятий необходимо добавить новое мероприятие в конец того же структурного уровня по отношению к выделенному в виде пустой строки (еще без структурного номера), в которой ячейка с названием автоматически находится в режим редактирования.

Примечание

При выделенном корневом мероприятии и последующем нажатии клавиши «N» - не добавлять параллельное мероприятие, но отображать ошибку с текстом:

Невозможно добавить мероприятие, параллельное корневому

В обоих случаях добавления нового мероприятия пока не произошло сохранение нового мероприятия, кнопка «Добавить» должна быть недоступна, а все горячие клавиши обрабатываться не должны.

Создание нового мероприятия можно отменить, нажав на клавишу «Esc». Тогда новая строка должна удалиться, а выделение должно вернуться в то мероприятие, откуда было вызвано создание данного отмененного мероприятия.

Валидация для ячейки, содержащей название мероприятия.

  1. Поле названия не может содержать пустое значение либо одни пробелы. Иначе:

    • Для нового мероприятия система информирует:

      Поле не может быть пустым

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

    • Для существующего мероприятия необходимо перевести ячейку в режим просмотра и вернуть ей предыдущее сохраненное значение. Выделение остается на данной ячейке.

В результате успешного сохранения новому мероприятию должна присвоиться длительность по умолчанию (значение, равное 1). Выделение остается на данной ячейке.

Валидация для ячейки, содержащей длительность мероприятия.

  1. Поле длительности не может содержать пустое значение либо одни пробелы. Иначе необходимо перевести ячейку в режим просмотра и вернуть ей предыдущее сохраненное значение. Выделение остается на данной ячейке.

  2. Поле длительности может содержать только неотрицательное число, дробная часть которого разделена точкой. Иначе ячейка выделяется красным и остается в режиме редактирования. Выделение остается на данной ячейке.

Примечание: если в настройках шаблона проекта в опции «Тип расчета сроков» установлено значение «Автоматический», то для всех групповых мероприятий ячейки "Длительность" должны очищаться и становиться неактивными. Длительность, равная 0, соответствует мероприятию-вехе (в шаблоне строка с таким мероприятием должна быть выделена зеленым цветом #d5edd0).

Валидация для ячейки, содержащей зависимости мероприятия - см. задачу 0156, часть 1.

Контекстное меню таблицы всегда содержит пункты Развернуть и Удалить.

Пункт «Развернуть» должен разворачивать все дочерние мероприятия данного группового мероприятия. Функция должна работать аналогично существующей в модуле «Проекты».

Удаление выделенного мероприятия осуществляется нажатием клавиши «Delete» (только если выделенная ячейка находится в режиме просмотра) либо выбором пункта контекстного меню «Удалить». Система при этом выдает браузерное диалоговое окно с сообщением:

Вы действитетьно хотите удалить данное мероприятие?

с кнопками «Отмена» (действие не выполняется, выделение остается на текущей ячейке) и «ОК» (выделенное мероприятие, все его групповые мероприятия, а также связи с удаляемыми мероприятиями должны удалиться).

Примечание

При выделенном корневом мероприятии и последующем нажатии клавиши «Delete» - не удалять это мероприятие, но отображать ошибку с текстом:

Невозможно удалить корневое мероприятие

Для таблицы доступно действие «drag-and-drop». Перенести мероприятие можно только нажимая и удерживая ячеку "Название".

Особенности действия «drag-and-drop»:

При переносе мероприятия отобразится зеленая линия на ширину строки:

  • Над каким-либо мероприятием - на всю ячейку. При этом перенесенное мероприятие станет вложенным относительно данного.

  • Между мероприятиями - на общей границе этих мероприятий. В данном случае возможно как и перемещать мероприятие во вложенную группу, так и переносить в другие группы вне зависимости от их уровня вложенности:

    • между мероприятиями одного уровня вложенности - присваивать перенесенному мероприятию тот же уровень;

    • между мероприятиями разного уровня вложенности - мероприятию присвоится уровень вложенности того мероприятия, над которым будет перенесена бОльшая часть ячейки переносимого мероприятия.

Рисунок 5. Первый (измененный) уровень вложенности

Первый (измененный) уровень вложенности

Рисунок 6. Второй (измененный) уровень вложенности

Второй (измененный) уровень вложенности

Если перемещаемое мероприятие имеет зависимости (как входящие, так и исходящие) и/или хотя бы одно из его дочерних мероприятий имеет входящие/исходящие зависимости, то в момент drop'а необходимо отображать модальное диалоговое окно с кнопками "Ок" и "Отмена" и следующим текстом:

При перемещении мероприятия будут удалены зависимости следующих мероприятий (дочерних, зависимых и тех, от которых зависит данное):

%номер_мероприятия_1% %название мероприятия_1%

%номер_мероприятия_2% %название мероприятия_2%

Вы действительно хотите продолжить?

При этом в зависимости от нажатой кнопки требуется:

  • "Ок" - закрывать окно и:

    • перемещать всю строку мероприятия на новое положение;

    • очищать зависимости всех дочерних и зависимых мероприятий, а также тех, от которых зависит данное;

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

  • "Отмена" - закрывать окно без внесения каких-либо изменений.

По нажатию клавиш «Ctrl+F» в браузере при активной основной рабочей области со списком мероприятий фокус и курсор переводятся в поле для поиска мероприятия по формулировке с возможностью перехода к следующему / предыдущему найденному мероприятию нажатием клавиши «Enter» (аналогично поиску «Ctrl+F» в модуле «Проекты»). По нажатию клавиши «Esc» фокус должен вернуться к выделенной ячейке в таблице.

Рисунок 7. Редактирование структуры шаблона проекта

Редактирование структуры шаблона проекта

Только при заполненных обязательных полях названия и длительности в каждом мероприятии и по нажатию на кнопку «Назад» должно происходить локальное сохранение структуры шаблона и возврат на экран «Настройки шаблона проекта». Иначе необходимо не выполнять действие, выделять незаполненные поля красным и выдавать сообщение-ошибку:

Заполните обязательные поля

Также, если в созданном проекте возникнет ситуация, когда фактическая дата начала проекта будет менее указанной пользователем, необходимо отображать модальное диалоговое окно "Внимание" с кнопками "Продолжить" и "Исправить" и следующим текстом:

При создании проекта по данному шаблону фактическая дата начала проекта будет менее указанной пользователем из-за следующих зависимостей:

%номер_мероприятия_1: зависимость_1, зависимость_2%

%номер_мероприятия_2: зависимость_3%

При этом в зависимости от нажатой кнопки требуется:

  • "Продолжить" - закрывать окно, сохранять изменения и перенаправлять пользователя на экран настроек шаблона;

  • "Исправить" (зеленая кнопка) - закрывать окно и оставаться на экране редактирования структуры шаблона проекта.

Данная проверка должна осуществляться при каждом нажатии на кнопку "Назад".

Если в результате сохранения таблицы было изменено название шаблона проекта, то в экране настроек шаблона проекта необходимо автоматически обновить соответствующее поле.

Логирование действий, связанных в шаблонами проектов

В мониторинг системы в источник «Конфигуратор» необходимо добавить 3 новых события:

Событие Описание

Создание шаблона проекта

Идентификатор: %uuid_шаблона_проекта%. Объект: %название_шаблона_проекта%

Изменение шаблона проекта

Идентификатор: %uuid_шаблона_проекта%. Объект: %название_шаблона_проекта%

Скрытие шаблона проекта

Идентификатор: %uuid_шаблона_проекта%. Объект: %название_шаблона_проекта%

Восстановление шаблона проекта

Идентификатор: %uuid_шаблона_проекта%. Объект: %название_шаблона_проекта%

и реализовать соответствующее поведение.

Действия при обновлении системы

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

При обновлении системы в подсистеме администрирования в мониторинге должно добавиться 3 новых события. Других изменений в подсистеме администрирования произойти не должно.