Этапы проекта, вехи и диаграмма Ганта
Этап — именованная фаза работ внутри проекта («Подготовка», «Монтаж», «Мероприятие»), веха — контрольная дата без длительности («Договор подписан»). Статус проекта говорит, где проект в воронке и производстве, этапы — как разбита работа (ТЗ «Шаблоны, этапы и Гант…», раздел 4).
Реализовано: этап 2 — миграция
0188(project_stages,project_milestones,tasks.stage_id), кодinternal/modules/tasks/plan.go,repository_plan.go,transport_plan.go. План живёт в модуле задач: там права проекта и видимость задач.
Этапы
project_stages (project_id, name, position, color); у задачиstage_id(необязательный, этап того же проекта — иначеtasks_stage_not_in_project). Подзадача по умолчанию в этапе родителя.- Даты этапа не хранятся: от самого раннего начала (или срока, если начала нет) до самого позднего срока его задач и вех.
- Прогресс — доля завершённых задач без отменённых. Текущий этап (
is_current) — первый по порядку, где есть незавершённые задачи. - Удаление этапа оставляет задачи и вехи в проекте без этапа (
ON DELETE SET NULL). - Не больше 50 этапов в проекте.
Вехи
project_milestones (project_id, stage_id, title, date, done_at, done_by). Отметка «достигнута» запоминает, кто и когда.is_overdue— дата прошла, а веха не отмечена.- Системные даты проекта показываются вехами только для чтения и правятся в карточке проекта:
contract_deadline(дедлайн контрактации),mount(монтаж),event_start,event_end.
GET /projects/:id/stages — лёгкий список этапов (форма задачи, подпись этапа). Системные даты приходят днём в часовом поясе компании (ГГГГ-ММ-ДД). Правка срока задачи (в том числе на Ганте) может ставить срок в прошлом — запрет «не в прошлом» действует только при создании.
Один ответ для «Хода работ» и Ганта
GET /projects/:id/plan — этапы со сводкой, вехи, системные даты, задачи проекта и связи между ними. Видимость задач — как в списке задач проекта: кто видит только свои, получает tasks_partial=true, и связи только между видимыми задачами. can_edit — можно менять этапы, вехи и даты задач (тот, кто управляет задачами проекта).
Сдвиг задач на Ганте — POST /tasks/shift и обычная правка задачи (start_date, due_date, stage_id); связи — /tasks/:id/dependencies (см. Структура задачи).
Лента проектов
Вид «Лента» в списке проектов строится из обычного GET /projects (даты мероприятия, монтажа, статус) — отдельного маршрута нет.
Права
| Действие | Кто |
|---|---|
| Смотреть план | Тот, кто видит задачи проекта |
| Этапы, вехи | Тот, кто управляет задачами проекта (canManage): менеджер проекта, ведущий карточку дивизиона, администратор; иначе tasks_no_rights_to_manage_plan |
Синхронизация
Изменение этапов и вех рассылает entity_changed проекта с частью plan; удаление этапа — ещё и изменение задач проекта.