fix: передавать department в fieldVaues при резолве маршрута заявки 1С

This commit is contained in:
Тимур Городецкий
2026-09-14 16:05:07 +05:00
parent 7712a5ced4
commit a1c1b2afae
2 changed files with 19 additions and 13 deletions
@@ -9,11 +9,16 @@
- Фазы: только согласование. Отдельной фазы исполнения нет — после того как - Фазы: только согласование. Отдельной фазы исполнения нет — после того как
согласование пройдено (или если для вида работ оно не требуется), заявка сразу согласование пройдено (или если для вида работ оно не требуется), заявка сразу
уходит не исполнителю из матрицы, а в Microsoft Planner (см. «Особое поведение»). уходит не исполнителю из матрицы, а в Microsoft Planner (см. «Особое поведение»).
- Особенности: маршрут условный — набор шагов зависит от поля **«Виды работ»** - Особенности: маршрут условный — набор шагов зависит от полей **«Виды работ»**
(`WorkType`), которое передаётся в `resolveRoute`/`getPlannedMatrix` через параметр (`WorkType`) и **«Отдел»** (`Department`, свободный текст из профиля AAD, см.
`fieldValues: [{ fieldName: 'WorkType', value: data.WorkType }]` (см. «Особое поведение»), которые передаются в `resolveRoute`/`getPlannedMatrix` через
`IResolveFieldValue` в `shared/approval/models/IApprovalRouteApi.ts`). Для части параметр `fieldValues: [{ fieldName: 'WorkType', value: data.WorkType },
видов работ маршрут пуст — согласование не требуется вовсе. { fieldName: 'Department', value: data.Department }]` (см. `IResolveFieldValue` в
`shared/approval/models/IApprovalRouteApi.ts`). В админке маршрутов условие по
отделу настроено оператором «содержит» (напр. «Department содержит Бухгалтерия»),
поэтому важно фактическое значение поля, а не Id из справочника — отдельного
DepartmentId у этой формы нет. Для части видов работ маршрут пуст — согласование
не требуется вовсе.
- **Матрица нередактируема заявителем** (в отличие от WorkplaceSetup/RecruitingHire): - **Матрица нередактируема заявителем** (в отличие от WorkplaceSetup/RecruitingHire):
раз маршрут однозначно определён видом работ, у заявителя нет ни UserPicker'а, ни раз маршрут однозначно определён видом работ, у заявителя нет ни UserPicker'а, ни
кнопок добавить/удалить/переставить шаг — `useMatrixEditor` вызывается с кнопок добавить/удалить/переставить шаг — `useMatrixEditor` вызывается с
@@ -160,23 +160,24 @@ const Ticket1CForm: React.FC<IRequestFormProps> = ({
const requestTypeIdState = useRequestTypeId(context, requestType.id); const requestTypeIdState = useRequestTypeId(context, requestType.id);
const requestTypeId = requestTypeIdState.id; const requestTypeId = requestTypeIdState.id;
// Маршрут полностью и однозначно определяется видом работ — настроен в админке // Маршрут полностью и однозначно определяется видом работ и отделом — настроен
// маршрутов (условные шаги по WorkType, см. fieldValues), а не выбирается // в админке маршрутов (условные шаги по WorkType и Department, см. fieldValues),
// заявителем. Поэтому матрица здесь ВСЕГДА нередактируема (editable=false) — // а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА нередактируема
// заявитель только видит, кто согласует, без возможности добавить/убрать/ // (editable=false) — заявитель только видит, кто согласует, без возможности
// переставить согласующего. // добавить/убрать/переставить согласующего.
const loadMatrix = useCallback( const loadMatrix = useCallback(
() => () =>
editId editId
? approval.getMatrixForRequest(editId) ? approval.getMatrixForRequest(editId)
: getPlannedMatrix(context, requestTypeId as number, userEmail, approval, 'Approval', null, [ : 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( const matrix = useMatrixEditor(
loadMatrix, loadMatrix,
`${userEmail}-${editId ?? 'new'}-${data.WorkType}`, `${userEmail}-${editId ?? 'new'}-${data.WorkType}-${data.Department}`,
false, false,
!!editId || (!!data.WorkType && !!requestTypeId), !!editId || (!!data.WorkType && !!requestTypeId),
(login) => approval.getJobTitle(login) (login) => approval.getJobTitle(login)