AURORA-1880: окно «Этапы» — этап с направлением в строке, правке и удалении (поверх #315) #317

Open
aep wants to merge 8 commits from feat/316-aurora-1880-stages-direction-ui into test
Owner

Closes #316. Jira: AURORA-1880 (замечание Фомичева №2, эпик AURORA-1876).

Ветка отведена от #315 (AURORA-1879) — мержить после #315. До его мержа в diff видны и коммиты 1879; собственные коммиты этого PR — af44b98, 5e364ac.

Что сделано

  • Stages/utils.js: isSameStage (форма + лист + направление + название, null/undefined direction равны) и getStageKey.
  • useTaskStages: после правки заменяется и после удаления убирается ровно выбранный этап (раньше — оба одноимённых этапа разных направлений); deleteStage передаёт direction.
  • api/stages.js через новую чистую api/stagesRequest.js: sheet и phase_code кодируются encodeURIComponent (этап «А/Б», «?», «#» больше не уходит на неверный URL); direction — через axios params и для PATCH, и для DELETE.
  • StagesTable: ключ строки по листу+направлению+названию; подпись «Лист (Направление) — название», направление только если есть.
  • DeleteStageModal: в подтверждении — лист, направление, название.
  • SettingModal: удаление этапа формы включено для администратора в окне «Этапы» задачи (ответ по умолчанию на вопрос к заказчику). Неадмин пункта «Удалить» не видит, бэкенд DELETE и так require_admin.

Проверка

  • node --test src/components/Stages/*.test.js src/api/*.test.js src/components/RealtimeTable/utils/*.test.js — 172/172 (новые: Stages/utils.test.js, api/stagesRequest.test.js; utils-тест был красным до реализации).
  • npm run build — успешно.
  • biome check по изменённым файлам — 8 ошибок до и 8 после (все старые), новые файлы чистые.
  • Ручная проверка в браузере не проводилась: правка «Развития» не меняет «Поддержку»; удаление «Поддержки» оставляет «Развитие»; этап «А/Б» редактируется; у неадмина нет «Удалить».

Rulings I made

  • R-1 — isSameStage/getStageKey в существующем Stages/utils.js (он без React/MUI); построение URL/params вынесено в api/stagesRequest.js, т.к. stages.js тянет axios-клиент и не грузится в node --test.
  • R-2 — Удаление этапа формы включено для админа в режиме task; DeleteStageModal рендерится при isAdmin вместо !isTaskMode (меню «⋮» и так только у админа; режим project не изменился).
  • R-3 — В подписи пустое направление опускается целиком («Лист — название»); дефис заменён на длинное тире.
  • R-4 — Ключ строки без role/index: уникальность (форма, лист, направление, этап) гарантирует БД после AURORA-1879 (form_phase_uidx + form_phase_nodir_uidx).

Findings

Маркер Суть Статус
R-1 getStageKey/isSameStage в utils.js, URL — в stagesRequest.js fixed af44b98
R-2 удаление этапа формы для админа в режиме task fixed 5e364ac
R-3 формат подписи без направления fixed 5e364ac
R-4 ключ строки без role/index fixed 5e364ac
O-1 в DeleteStageModal для этапов проекта направление не выводится (его нет) rejected: так и должно быть
O-2 deleteStage в useTaskStages без состояния загрузки — возможен повторный клик (было и раньше) deferred
O-3 useExhaustiveDependencies в useTaskStages (было и раньше) deferred
O-4 форматирование stages.js (двойные кавычки) не по стилю проекта (было и раньше) deferred

🤖 Generated with Claude Code

Closes #316. Jira: AURORA-1880 (замечание Фомичева №2, эпик AURORA-1876). **Ветка отведена от #315 (AURORA-1879) — мержить после #315.** До его мержа в diff видны и коммиты 1879; собственные коммиты этого PR — `af44b98`, `5e364ac`. ## Что сделано - `Stages/utils.js`: `isSameStage` (форма + лист + направление + название, `null`/`undefined` direction равны) и `getStageKey`. - `useTaskStages`: после правки заменяется и после удаления убирается ровно выбранный этап (раньше — оба одноимённых этапа разных направлений); `deleteStage` передаёт `direction`. - `api/stages.js` через новую чистую `api/stagesRequest.js`: `sheet` и `phase_code` кодируются `encodeURIComponent` (этап «А/Б», «?», «#» больше не уходит на неверный URL); `direction` — через axios `params` и для PATCH, и для DELETE. - `StagesTable`: ключ строки по листу+направлению+названию; подпись «Лист (Направление) — название», направление только если есть. - `DeleteStageModal`: в подтверждении — лист, направление, название. - `SettingModal`: удаление этапа формы включено для администратора в окне «Этапы» задачи (ответ по умолчанию на вопрос к заказчику). Неадмин пункта «Удалить» не видит, бэкенд DELETE и так `require_admin`. ## Проверка - `node --test src/components/Stages/*.test.js src/api/*.test.js src/components/RealtimeTable/utils/*.test.js` — 172/172 (новые: `Stages/utils.test.js`, `api/stagesRequest.test.js`; utils-тест был красным до реализации). - `npm run build` — успешно. - `biome check` по изменённым файлам — 8 ошибок до и 8 после (все старые), новые файлы чистые. - Ручная проверка в браузере не проводилась: правка «Развития» не меняет «Поддержку»; удаление «Поддержки» оставляет «Развитие»; этап «А/Б» редактируется; у неадмина нет «Удалить». ## Rulings I made - R-1 — `isSameStage`/`getStageKey` в существующем `Stages/utils.js` (он без React/MUI); построение URL/params вынесено в `api/stagesRequest.js`, т.к. `stages.js` тянет axios-клиент и не грузится в `node --test`. - R-2 — Удаление этапа формы включено для админа в режиме task; `DeleteStageModal` рендерится при `isAdmin` вместо `!isTaskMode` (меню «⋮» и так только у админа; режим project не изменился). - R-3 — В подписи пустое направление опускается целиком («Лист — название»); дефис заменён на длинное тире. - R-4 — Ключ строки без `role`/`index`: уникальность (форма, лист, направление, этап) гарантирует БД после AURORA-1879 (`form_phase_uidx` + `form_phase_nodir_uidx`). ## Findings | Маркер | Суть | Статус | |---|---|---| | R-1 | getStageKey/isSameStage в utils.js, URL — в stagesRequest.js | fixed af44b98 | | R-2 | удаление этапа формы для админа в режиме task | fixed 5e364ac | | R-3 | формат подписи без направления | fixed 5e364ac | | R-4 | ключ строки без role/index | fixed 5e364ac | | O-1 | в DeleteStageModal для этапов проекта направление не выводится (его нет) | rejected: так и должно быть | | O-2 | `deleteStage` в useTaskStages без состояния загрузки — возможен повторный клик (было и раньше) | deferred | | O-3 | `useExhaustiveDependencies` в useTaskStages (было и раньше) | deferred | | O-4 | форматирование `stages.js` (двойные кавычки) не по стилю проекта (было и раньше) | deferred | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 5 commits 2026-11-11 16:06:43 +03:00
- ORM: direction входит в PK (nullable), одноимённые этапы Support/Development больше не склеиваются
- get_list: ORDER BY sheet, direction (NULL первыми), opens_at, phase_code
- 0059: del_form_phase фильтрует по phase_code, direction в v_phase_id (add/upd/del) и в payload upd,
  чистка дублей без направления и частичный уникальный индекс form_phase_nodir_uidx

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Интеграционные тесты одноимённых этапов, PATCH/DELETE одного этапа, дубль без направления, direction в аудите.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- sql_migration._split_statements узнаёт только $tag$, пустой $$ ломал разбиение:
  DO $$ … $$ → DO $do$ … $do$.
- test_form_phases_delete_removes_only_named_phase: ?sheet= без direction
  фильтрует direction IS NULL — читаем весь список и отбираем AHR в тесте.
- test_form_phases_duplicate_without_direction_rejected: после ошибки
  сессия клиента откатывается, число строк не проверяем; защиту БД
  проверяет новый test_form_phase_nodir_unique_index_blocks_duplicate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep requested review from PotapovaA 2026-11-11 16:06:56 +03:00
PotapovaA approved these changes 2026-11-11 17:16:23 +03:00
aep added 3 commits 2026-11-11 18:44:06 +03:00
Author
Owner

В ветку влит обновлённый #315 (миграция 1879 перенумерована 0059 → 0060, 7a5c89e; заодно свежий test f047031). Изменений в коде этого PR нет. Проверка вершины стека: front 296 pass / 1 известное падение SMETA.test.js, build ок, biome без новых ошибок.

В ветку влит обновлённый #315 (миграция 1879 перенумерована 0059 → 0060, 7a5c89e; заодно свежий test f047031). Изменений в коде этого PR нет. Проверка вершины стека: front 296 pass / 1 известное падение SMETA.test.js, build ок, biome без новых ошибок.
aep requested review from tsygankoviva 2026-11-11 18:49:37 +03:00
This pull request can be merged automatically.
You are not authorized to merge this pull request.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/316-aurora-1880-stages-direction-ui:feat/316-aurora-1880-stages-direction-ui
git checkout feat/316-aurora-1880-stages-direction-ui
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/DFiP_Budget_planing#317
No description provided.