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="Исполнители не заданы по маршруту." + /> + )} +