Compare commits
2 Commits
cf57b40513
...
428122d32a
| Author | SHA1 | Date | |
|---|---|---|---|
| 428122d32a | |||
| a1c1b2afae |
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user