feat: маршрут заявки в 1С учитывает базу 1С
Новая матрица маршрута #8 назначает согласующих по выбранной базе (ЗУП, АТП, ATS), а форма передавала в approval-route только вид работ и отдел — такие шаги никогда не срабатывали. Теперь DB1C уходит в fieldValues одной строкой через пробел (мультивыбор, value у API только строка), и маршрут пересчитывается при смене набора баз. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,11 +12,13 @@
|
|||||||
Если для вида работ согласование не требуется — заявка сразу «Выполнение».
|
Если для вида работ согласование не требуется — заявка сразу «Выполнение».
|
||||||
Работу отдел 1С ведёт в карточке Microsoft Planner (см. «Особое поведение»).
|
Работу отдел 1С ведёт в карточке Microsoft Planner (см. «Особое поведение»).
|
||||||
- Особенности: маршрут условный — набор шагов зависит от полей **«Виды работ»**
|
- Особенности: маршрут условный — набор шагов зависит от полей **«Виды работ»**
|
||||||
(`WorkType`) и **«Отдел»** (`Department`, свободный текст из профиля AAD, см.
|
(`WorkType`), **«База 1С»** (`DB1C`) и **«Отдел»** (`Department`, свободный текст
|
||||||
«Особое поведение»), которые передаются в `resolveRoute`/`getPlannedMatrix` через
|
из профиля AAD, см. «Особое поведение»), которые передаются в
|
||||||
параметр `fieldValues: [{ fieldName: 'WorkType', value: data.WorkType },
|
`resolveRoute`/`getPlannedMatrix` через параметр `fieldValues` (см.
|
||||||
{ fieldName: 'Department', value: data.Department }]` (см. `IResolveFieldValue` в
|
`IResolveFieldValue` в `shared/approval/models/IApprovalRouteApi.ts`). «База 1С» —
|
||||||
`shared/approval/models/IApprovalRouteApi.ts`). В админке маршрутов условие по
|
мультивыбор, а `value` у API только строка, поэтому все выбранные базы уходят
|
||||||
|
одной записью через пробел; условия по ней в админке — только «содержит»
|
||||||
|
(напр. «База 1С содержит ЗУП»). В админке маршрутов условие по
|
||||||
отделу настроено оператором «содержит» (напр. «Department содержит Бухгалтерия»),
|
отделу настроено оператором «содержит» (напр. «Department содержит Бухгалтерия»),
|
||||||
поэтому важно фактическое значение поля, а не Id из справочника — отдельного
|
поэтому важно фактическое значение поля, а не Id из справочника — отдельного
|
||||||
DepartmentId у этой формы нет. Для части видов работ маршрут пуст — согласование
|
DepartmentId у этой формы нет. Для части видов работ маршрут пуст — согласование
|
||||||
|
|||||||
@@ -168,20 +168,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;
|
||||||
|
|
||||||
// Маршрут полностью и однозначно определяется видом работ и отделом — настроен
|
// Маршрут полностью и однозначно определяется видом работ, базой 1С и отделом —
|
||||||
// в админке маршрутов (условные шаги по WorkType и Department, см. fieldValues),
|
// настроен в админке маршрутов (условные шаги по WorkType, DB1C и Department,
|
||||||
// а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА нередактируема
|
// см. fieldValues), а не выбирается заявителем. Поэтому матрица здесь ВСЕГДА
|
||||||
// (editable=false) — заявитель только видит, кто согласует, без возможности
|
// нередактируема (editable=false) — заявитель только видит, кто согласует, без
|
||||||
// добавить/убрать/переставить согласующего.
|
// возможности добавить/убрать/переставить согласующего.
|
||||||
// Условия шагов (и согласования, и исполнения) — по виду работ и отделу.
|
// Базы 1С — мультивыбор, а approval-route принимает value только строкой:
|
||||||
|
// передаём все выбранные базы одной записью через пробел (как CompaniesJson в
|
||||||
|
// RecruitingHire), условия в админке — «База 1С содержит ЗУП/АТП/ATS».
|
||||||
|
const databasesFieldValue = data.DB1C.slice().sort().join(' ');
|
||||||
const fieldValues = useMemo(
|
const fieldValues = useMemo(
|
||||||
() => [
|
() => [
|
||||||
{ fieldName: 'WorkType', value: data.WorkType },
|
{ fieldName: 'WorkType', value: data.WorkType },
|
||||||
|
{ fieldName: 'DB1C', value: databasesFieldValue },
|
||||||
{ fieldName: 'Department', value: data.Department }
|
{ 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 =
|
const matrixReady =
|
||||||
isOpenedRouteReady(editId, requestStatus, requestTypeId) && (!!editId || (!!data.WorkType && !!requestTypeId));
|
isOpenedRouteReady(editId, requestStatus, requestTypeId) && (!!editId || (!!data.WorkType && !!requestTypeId));
|
||||||
const loadMatrix = useCallback(
|
const loadMatrix = useCallback(
|
||||||
|
|||||||
Reference in New Issue
Block a user