From a1c1b2afaefb5cb99f5aab727ba10e522a4e026d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Mon, 14 Sep 2026 16:05:07 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20department=20=D0=B2=20fieldVaues=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D1=80=D0=B5=D0=B7=D0=BE=D0=BB=D0=B2=D0=B5?= =?UTF-8?q?=20=D0=BC=D0=B0=D1=80=D1=88=D1=80=D1=83=D1=82=D0=B0=20=D0=B7?= =?UTF-8?q?=D0=B0=D1=8F=D0=B2=D0=BA=D0=B8=201=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../requestPortal/forms/Ticket1C/README.md | 15 ++++++++++----- .../forms/Ticket1C/Ticket1CForm.tsx | 17 +++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) 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)