feat: исполнители заявки 1С сами заменяют и удаляют друг друга
Tests / frontend-test (push) Successful in 2m0s

Отдел 1С передаёт заявки внутри себя: исполнитель с невыполненным шагом
может в поданной заявке заменить или убрать невыполненного исполнителя,
в т.ч. активного и себя. Выполненные шаги не трогаются, последнего
невыполненного — только заменить. Механизм тот же, что в подборе, но
право по роли в маршруте, а не по списку email.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-10-07 15:46:36 +05:00
parent d4868933f1
commit 5c10c8f127
4 changed files with 144 additions and 10 deletions
+2 -1
View File
@@ -20,6 +20,7 @@
| Удалять любых согласующих **при составлении** заявки | те же (`canEditRoute`) | email в коде | Все остальные формы с маршрутом согласования (отпуск, увольнение, 1С и т. д.); в поданной заявке — нет | `shared/approval/routeEditRights.ts` → `composeRemoveRowRule` |
| Добавлять и удалять исполнителей **при составлении** заявки | те же (`canEditRoute`) | email в коде | Все формы, где в маршруте из админки есть фаза исполнения; в поданной заявке — нет | `shared/approval/routeEditRights.ts` → `canEditExecutors` |
| Заменять и удалять исполнителей, **в том числе активного** («На исполнении») | Алтынай Бултурукова | тот же email (`canEditRoute`) | **Только** Заявка на подбор, матрица «Исполнение» | `canEditRoute` + `forms/RecruitingSelection/RecruitingSelectionView.tsx` |
| То же в поданной заявке: заменять и удалять невыполненных исполнителей, **в том числе активного и себя** | Исполнители заявки, у которых свой шаг исполнения ещё не выполнен | роль в маршруте (фаза «Исполнение»), без списка email | **Только** Заявка в отдел 1С | `forms/Ticket1C/useExecutorEditing.ts` |
| Править **все поля и вложения** заявки (добавлять и удалять файлы) на своём активном шаге согласования | Алтынай Бултурукова | email в коде (список по каждой форме) | Подбор, Приём (Реферальная рекомендация — нет) | `shared/approval/fullEditRights.ts` → `canEditAllFields` |
| То же: **все поля и вложения**, но **не только на своём шаге**: достаточно быть в маршруте (согласование или исполнение), пока заявка «На согласовании» или «Выполнение» | Ербол Шаймерденов | email в коде (список по каждой форме) + участие в маршруте | **Только** Организация рабочего места | `shared/approval/fullEditRights.ts` → `canEditAllFields` + `forms/WorkplaceSetup/useApproverRights.ts` |
| Заменять человека на шаге согласования (не удалять шаг) **до отправки**: новая заявка, черновик, доработка | Любой инициатор | право по статусу заявки (форма редактируема) | **Только** Организация рабочего места | `forms/WorkplaceSetup/WorkplaceSetupForm.tsx` (`canReplaceRow`) + `useMatrixEditor.replace` |
@@ -57,7 +58,7 @@
## Известные ограничения
- **Замена активного исполнителя (подбор).** Если прежний исполнитель держит
- **Замена активного исполнителя (подбор, 1С).** Если прежний исполнитель держит
заявку открытой и, не обновив страницу, нажмёт «Выполнено», решение
запишется в шаг, который уже принадлежит новому исполнителю. При решении
пока не перепроверяется, что шаг всё ещё за этим человеком