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 (см. «Особое поведение»).
- Особенности: маршрут условный — набор шагов зависит от поля **«Виды работ»**
(`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` вызывается с
@@ -160,23 +160,24 @@ const Ticket1CForm: React.FC<IRequestFormProps> = ({
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)