From ed21944628299f2a8b72fabffe52407676179c50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Tue, 4 Aug 2026 12:36:40 +0500 Subject: [PATCH] fix: changed SP list order field to StepOrder --- .../RecruitingHire/RecruitingHireForm.tsx | 32 ++++++++++++-- .../RecruitingHire/approval/provisioning.json | 5 ++- .../forms/RecruitingHire/submit.ts | 8 ++-- .../WorkplaceSetup/WorkplaceSetupForm.tsx | 33 ++++++++++++-- .../WorkplaceSetup/approval/provisioning.json | 5 ++- .../forms/WorkplaceSetup/submit.ts | 8 ++-- .../shared/approval/approvalList.service.ts | 27 +++++++++--- .../shared/approval/approvalRoute.service.ts | 16 ++++--- .../approval/approvalSubmission.service.ts | 38 +++++++++++++--- .../approval/approverDecision.service.ts | 33 ++++++++++---- .../requestPortal/shared/approval/index.ts | 10 ++++- .../approval/models/IApprovalRouteApi.ts | 3 ++ .../shared/approval/models/IApprovalRow.ts | 1 + .../shared/approval/models/IMatrixRow.ts | 1 + .../shared/approval/models/statuses.ts | 15 +++++++ .../shared/approval/ui/ApprovalMatrix.tsx | 31 ++++++++----- .../shared/approval/ui/DecisionPanel.tsx | 44 ++++++++++++++++--- 17 files changed, 249 insertions(+), 61 deletions(-) diff --git a/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireForm.tsx b/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireForm.tsx index e41ef88..1e2f8e4 100644 --- a/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireForm.tsx +++ b/src/webparts/requestPortal/forms/RecruitingHire/RecruitingHireForm.tsx @@ -39,18 +39,27 @@ const RecruitingHireForm: React.FC = ({ requestType, context, const approval = useMemo(() => hireApprovalService(), []); const userEmail = context.pageContext.user.email; const loadMatrix = useCallback( - () => getPlannedMatrix(context, HIRE_REQUEST_TYPE_ID, userEmail, approval), + () => getPlannedMatrix(context, HIRE_REQUEST_TYPE_ID, userEmail, approval, 'Approval'), [context, userEmail, approval] ); const matrix = useMatrixEditor(loadMatrix, userEmail, true, true, (login) => approval.getJobTitle(login) ); + // Фаза исполнения: исполнители из маршрута (status='Execution'), только для чтения. + const loadExecutors = useCallback( + () => getPlannedMatrix(context, HIRE_REQUEST_TYPE_ID, userEmail, approval, 'Execution'), + [context, userEmail, approval] + ); + const executors = useMatrixEditor(loadExecutors, userEmail, false, true, (login) => + approval.getJobTitle(login) + ); + const saving = actionStatus === 'saving'; const isValid = data.CandidateName.trim().length > 0 && data.Position.trim().length > 0; - const matrixApprovers = (): IApproverToWrite[] => - matrix.rows.map((r) => ({ email: r.email, position: r.position, allowReassign: r.allowReassign })); + const toApprovers = (rows: typeof matrix.rows): IApproverToWrite[] => + rows.map((r) => ({ email: r.email, position: r.position, allowReassign: r.allowReassign })); async function run(kind: ActionKind, requestStatus: string): Promise { if (!isValid) { @@ -61,7 +70,12 @@ const RecruitingHireForm: React.FC = ({ requestType, context, setActionKind(kind); setActionStatus('saving'); try { - const id = await saveHireRequest(data, matrixApprovers(), requestStatus); + const id = await saveHireRequest( + data, + toApprovers(matrix.rows), + toApprovers(executors.rows), + requestStatus + ); await uploadAttachments(DATA_LIST_TITLE, id, files); // файлы — после создания элемента setStatus(requestStatus); setActionStatus('success'); @@ -115,6 +129,16 @@ const RecruitingHireForm: React.FC = ({ requestType, context, approval.searchUsers(q)} /> + {!executors.loading && executors.rows.length > 0 && ( + approval.searchUsers(q)} + title="Исполнение (после согласования)" + roleLabel="Исполнитель" + emptyText="Исполнители не заданы по маршруту." + /> + )} +