diff --git a/src/webparts/requestPortal/forms/Ticket1C/README.md b/src/webparts/requestPortal/forms/Ticket1C/README.md index c43b0cd..14dff97 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/README.md +++ b/src/webparts/requestPortal/forms/Ticket1C/README.md @@ -12,11 +12,13 @@ Если для вида работ согласование не требуется — заявка сразу «Выполнение». Работу отдел 1С ведёт в карточке Microsoft Planner (см. «Особое поведение»). - Особенности: маршрут условный — набор шагов зависит от полей **«Виды работ»** - (`WorkType`) и **«Отдел»** (`Department`, свободный текст из профиля AAD, см. - «Особое поведение»), которые передаются в `resolveRoute`/`getPlannedMatrix` через - параметр `fieldValues: [{ fieldName: 'WorkType', value: data.WorkType }, - { fieldName: 'Department', value: data.Department }]` (см. `IResolveFieldValue` в - `shared/approval/models/IApprovalRouteApi.ts`). В админке маршрутов условие по + (`WorkType`), **«База 1С»** (`DB1C`) и **«Отдел»** (`Department`, свободный текст + из профиля AAD, см. «Особое поведение»), которые передаются в + `resolveRoute`/`getPlannedMatrix` через параметр `fieldValues` (см. + `IResolveFieldValue` в `shared/approval/models/IApprovalRouteApi.ts`). «База 1С» — + мультивыбор, а `value` у API только строка, поэтому все выбранные базы уходят + одной записью через пробел; условия по ней в админке — только «содержит» + (напр. «База 1С содержит ЗУП»). В админке маршрутов условие по отделу настроено оператором «содержит» (напр. «Department содержит Бухгалтерия»), поэтому важно фактическое значение поля, а не Id из справочника — отдельного DepartmentId у этой формы нет. Для части видов работ маршрут пуст — согласование diff --git a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx index 39d8871..af6b15f 100644 --- a/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx +++ b/src/webparts/requestPortal/forms/Ticket1C/Ticket1CForm.tsx @@ -168,20 +168,24 @@ const Ticket1CForm: React.FC = ({ const requestTypeIdState = useRequestTypeId(context, requestType.id); const requestTypeId = requestTypeIdState.id; - // Маршрут полностью и однозначно определяется видом работ и отделом — настроен - // в админке маршрутов (условные шаги по WorkType и Department, см. fieldValues), - // а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА нередактируема - // (editable=false) — заявитель только видит, кто согласует, без возможности - // добавить/убрать/переставить согласующего. - // Условия шагов (и согласования, и исполнения) — по виду работ и отделу. + // Маршрут полностью и однозначно определяется видом работ, базой 1С и отделом — + // настроен в админке маршрутов (условные шаги по WorkType, DB1C и Department, + // см. fieldValues), а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА + // нередактируема (editable=false) — заявитель только видит, кто согласует, без + // возможности добавить/убрать/переставить согласующего. + // Базы 1С — мультивыбор, а approval-route принимает value только строкой: + // передаём все выбранные базы одной записью через пробел (как CompaniesJson в + // RecruitingHire), условия в админке — «База 1С содержит ЗУП/АТП/ATS». + const databasesFieldValue = data.DB1C.slice().sort().join(' '); const fieldValues = useMemo( () => [ { fieldName: 'WorkType', value: data.WorkType }, + { fieldName: 'DB1C', value: databasesFieldValue }, { fieldName: 'Department', value: data.Department } ], - [data.WorkType, data.Department] + [data.WorkType, databasesFieldValue, data.Department] ); - const matrixKey = `${userEmail}-${editId ?? 'new'}-${data.WorkType}-${data.Department}`; + const matrixKey = `${userEmail}-${editId ?? 'new'}-${data.WorkType}-${databasesFieldValue}-${data.Department}`; const matrixReady = isOpenedRouteReady(editId, requestStatus, requestTypeId) && (!!editId || (!!data.WorkType && !!requestTypeId)); const loadMatrix = useCallback(