Формулировка проблемы: необходима возможность фиксировать даты начала и/или конца проекта, сроки всех мероприятий внутри которых не могут начинаться раньше начала проекта или заканчиваться позже конца проекта.
Используется: Проекты:
настройки проекта
создание и редактирование мероприятия
редактирование сроков мероприятий на диаграмме Ганта
редактирования сроков мероприятий вводом зависимости
копирование и вырезание мероприятий (как внутри одного проекта, так и между проектами)
восстановление мероприятий
Решение: в настройках проекта во вкладку
«Настройки» между опциями Дата начала проекта
и
Тип расчета сроков
необходимо добавить новую
опцию Ограничить сроки проекта
, которая
представляет собой два компонента «Календарь» (каждый с флажком) для
даты начала ограничения и для даты конца ограничения соответственно.
Для выключенного флажка (это значение по умолчанию для обоих полей) соответстующий календарь недоступен для изменения и ничего не содержит. Для включенного же флажка календарь становятся доступными для изменения, но все также ничего не содержит. Оба календаря необязательны для заполнения (можно ограничивать сроки проекта только с одной стороны). Для выбранной в ограничении даты начала временем начала ограничения условно считаем рабочее время начала указанного дня. Соответственно, для выбранной в ограничении даты завершения временем завершения ограничения условно считаем рабочее время завершения указанного дня.
Альтернативный поток №1. Дата начала ограничения должна быть меньше даты конца, иначе при сохранении настроек необходимо выдавать ошибку:
Дата завершения проекта должна быть больше даты начала
а также выделять соответствующие поля красным цветом и не закрывать диалог настроек.
Альтернативный поток №2. После настройки ограничения сроков при сохранении настроек необходимо проверить сроки всех уже созданных мероприятий (как групповых, так и негрупповых) на предмет их соответствия заданному ограничению. Если в результате такой проверки имеются мероприятия с некорректными сроками, необходимо выдавать ошибку:
Сроки некоторых мероприятий проекта выходят за граничные значения проекта. Количество мероприятий - N. Скорректируйте их сроки либо измените ограничения.
где N
- это число, обозначающее количество
таких мероприятий. Кроме того, необходимо выделять
соответствующие поля красным цветом и не закрывать диалог
настроек.
Альтернативный поток №3. При сохранении настроек с включенным флажком и незаполненными датами начала и/или конца ограничения соответствующий флажок должен выключиться (т.е. при следующем открытии диалога настроек он должен быть выключенным).
Примечание: опция
Ограничить сроки проекта
распространяется на все
виды проектов в системе: личные / утвержденные / неутвержденные.
Для настроенного ограничения сроков проекта необходимы следующие изменения в системе.
Во-первых, в диалоговые окна редактирования проекта, создания / редактирования мероприятий проекта необходимо добавить валидацию по нажатию на кнопку «Сохранить» полей сроков (независимо от способа ввода сроков) на предмет их корректности согласно настройке ограничения.
Ошибка валидации для ограничения по дате начала (поле «Начало»):
Дата начала не входит в граничное значение проекта ДД.ММ.ГГГГ
соответствующее поле необходимо выделить красным цветом и не закрывать диалог.
Ошибка валидации для ограничения по дате завершения (поле «Длительность» / «Завершение»):
Дата завершения не входит в граничное значение проекта ДД.ММ.ГГГГ
соответствующее поле необходимо выделить красным цветом и не закрывать диалог.
Ошибка валидации для ограничения по обеим датам:
Сроки мероприятия не входят в граничные значения проекта ДД.ММ.ГГГГ - ДД.ММ.ГГГГ
соответствующие поля необходимо выделить красным цветом и не закрывать диалог.
Примечание: необходимо учесть вариант, когда сроки редактируемого мероприятия могут входить в граничные значения, но в результате их редактирований не будут входить в ограничения сроки зависимых мероприятий. В таких случаях после нажатия кнопки «Сохранить» необходимо выдавать ошибку:
Действие не выполнено, т.к. в результате сохранения сроки зависимых мероприятий не будут входить в граничные значения проекта ДД.ММ.ГГГГ - ДД.ММ.ГГГГ
и не выполнять действие.
Кроме того, валидацию на то, что дата начала мероприятия проекта должна быть меньше даты конца, необходимо проводить по нажатию на кнопку «Создать» / «Сохранить»:
Ошибка валидации:
Дата завершения мероприятия должна быть больше даты начала
соответствующие поля необходимо выделить красным цветом и не закрывать диалог.
Во-вторых, следующие методы API должны аналогично первому пункту валидировать сроки:
редактирование проекта:
rest/api/projects/edit_project
создание мероприятия:
rest/api/projects/edit_arrangement
редактирование мероприятия:
rest/api/projects/create_arrangement
В-третьих, валидация на ограничения по срокам необходима при настройке связей между мероприятиями проекта (как через поле «Зависит», так и через диаграмму Ганта). Если в результате такой настройки происходит изменение сроков мероприятия и при этом новые сроки выходят за граничные значения, необходимо выдавать ошибку:
Действие не выполнено, т.к. создание данной связи приведет к тому, что сроки зависимых мероприятий не будут входить в граничные значения проекта ДД.ММ.ГГГГ - ДД.ММ.ГГГГ
и не выполнять действие.
В-четвертых, валидация на ограничения по срокам необходима при копировании и вырезании мероприятий (как внутри одного проекта, так и между проектами): если хотя бы одно копируемое из всех мероприятий содержит невалидные для ограничений данного проекта сроки, то необходимо выдавать ошибку:
Сроки некоторых мероприятий проекта выходят за граничные значения проекта ДД.ММ.ГГГГ - ДД.ММ.ГГГГ. Количество мероприятий - N. Скорректируйте их сроки либо измените ограничения.
и не выполнять действие.
В-пятых, валидация на ограничения по срокам необходима при восстановлении удаленных мероприятий: если такое мероприятие содержит невалидные для ограничений данного проекта сроки, то необходимо выдавать ошибку:
Действие не выполнено, т.к. сроки восстанавливаемого мероприятия выходят за граничные значения проекта ДД.ММ.ГГГГ - ДД.ММ.ГГГГ
и не выполнять действие.
Действия при обновлении системы
При обновлении системы в настройках всех существующих проектов для
опции Ограничить сроки проекта
должно
установиться значение по умолчанию: оба флажка должны быть
выключены. Других видимых изменений произойти не должно.