diff --git a/src/webparts/requestPortal/forms/Ticket1C/README.md b/src/webparts/requestPortal/forms/Ticket1C/README.md index eb28793..3087090 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/README.md +++ b/src/webparts/requestPortal/forms/Ticket1C/README.md @@ -9,11 +9,16 @@ - Фазы: только согласование. Отдельной фазы исполнения нет — после того как согласование пройдено (или если для вида работ оно не требуется), заявка сразу уходит не исполнителю из матрицы, а в Microsoft Planner (см. «Особое поведение»). -- Особенности: маршрут условный — набор шагов зависит от поля **«Виды работ»** - (`WorkType`), которое передаётся в `resolveRoute`/`getPlannedMatrix` через параметр - `fieldValues: [{ fieldName: 'WorkType', value: data.WorkType }]` (см. - `IResolveFieldValue` в `shared/approval/models/IApprovalRouteApi.ts`). Для части - видов работ маршрут пуст — согласование не требуется вовсе. +- Особенности: маршрут условный — набор шагов зависит от полей **«Виды работ»** + (`WorkType`) и **«Отдел»** (`Department`, свободный текст из профиля AAD, см. + «Особое поведение»), которые передаются в `resolveRoute`/`getPlannedMatrix` через + параметр `fieldValues: [{ fieldName: 'WorkType', value: data.WorkType }, + { fieldName: 'Department', value: data.Department }]` (см. `IResolveFieldValue` в + `shared/approval/models/IApprovalRouteApi.ts`). В админке маршрутов условие по + отделу настроено оператором «содержит» (напр. «Department содержит Бухгалтерия»), + поэтому важно фактическое значение поля, а не Id из справочника — отдельного + DepartmentId у этой формы нет. Для части видов работ маршрут пуст — согласование + не требуется вовсе. - **Матрица нередактируема заявителем** (в отличие от WorkplaceSetup/RecruitingHire): раз маршрут однозначно определён видом работ, у заявителя нет ни UserPicker'а, ни кнопок добавить/удалить/переставить шаг — `useMatrixEditor` вызывается с diff --git a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx index 433fbac..3084a37 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx +++ b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx @@ -160,23 +160,24 @@ const Ticket1CForm: React.FC = ({ const requestTypeIdState = useRequestTypeId(context, requestType.id); const requestTypeId = requestTypeIdState.id; - // Маршрут полностью и однозначно определяется видом работ — настроен в админке - // маршрутов (условные шаги по WorkType, см. fieldValues), а не выбирается - // заявителем. Поэтому матрица здесь ВСЕГДА нередактируема (editable=false) — - // заявитель только видит, кто согласует, без возможности добавить/убрать/ - // переставить согласующего. + // Маршрут полностью и однозначно определяется видом работ и отделом — настроен + // в админке маршрутов (условные шаги по WorkType и Department, см. fieldValues), + // а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА нередактируема + // (editable=false) — заявитель только видит, кто согласует, без возможности + // добавить/убрать/переставить согласующего. const loadMatrix = useCallback( () => editId ? approval.getMatrixForRequest(editId) : getPlannedMatrix(context, requestTypeId as number, userEmail, approval, 'Approval', null, [ - { fieldName: 'WorkType', value: data.WorkType } + { fieldName: 'WorkType', value: data.WorkType }, + { fieldName: 'Department', value: data.Department } ]), - [context, userEmail, approval, editId, data.WorkType, requestTypeId] + [context, userEmail, approval, editId, data.WorkType, data.Department, requestTypeId] ); const matrix = useMatrixEditor( loadMatrix, - `${userEmail}-${editId ?? 'new'}-${data.WorkType}`, + `${userEmail}-${editId ?? 'new'}-${data.WorkType}-${data.Department}`, false, !!editId || (!!data.WorkType && !!requestTypeId), (login) => approval.getJobTitle(login)