diff --git a/src/webparts/requestPortal/forms/Vacation/README.md b/src/webparts/requestPortal/forms/Vacation/README.md index 58f7694..8ae6b46 100644 --- a/src/webparts/requestPortal/forms/Vacation/README.md +++ b/src/webparts/requestPortal/forms/Vacation/README.md @@ -30,6 +30,9 @@ - **Заголовок элемента** (`Title`): `Отпуск — {ФИО} — дд.мм.гггг`. ## Подписание в ЭДО +> **Сейчас выключено** (`VACATION_EDO_SIGNING_ENABLED = false` в `shared/config.ts`): решение последнего +> согласующего применяется сразу, в ЭДО ничего не уходит. Описанное ниже работает, когда флаг `true`. + Когда **последний согласующий** нажимает «Согласовать», заявление сначала уходит на подпись в TANSU ЭДО (`VacationView` → `onBeforeDecide`), и только потом применяется решение. Последний — значит заявка «На согласовании» и несогласованной осталась одна строка фазы согласования (`completesApprovalPhase`; diff --git a/src/webparts/requestPortal/forms/Vacation/VacationView.tsx b/src/webparts/requestPortal/forms/Vacation/VacationView.tsx index fede67b..e8f377f 100644 --- a/src/webparts/requestPortal/forms/Vacation/VacationView.tsx +++ b/src/webparts/requestPortal/forms/Vacation/VacationView.tsx @@ -30,6 +30,7 @@ import type { ApproverDecision } from '../../shared/approval'; import { isAlreadyAccepted } from '../../shared/edo/edoErrors'; import { executionPhaseRows } from '../../shared/approval/useRouteExecutors'; import { friendlyErrorMessage } from '../../shared/diagnostics'; +import { VACATION_EDO_SIGNING_ENABLED } from '../../shared/config'; import { approvalListTitle, approvalListTitleForListId, @@ -179,7 +180,7 @@ const VacationView: React.FC = ({ context, itemId, formKey, // заявка остаётся на согласовании, и ошибку видно в панели решения; согласовать можно ещё раз. const sendBeforeFinalApproval = async (decision: ApproverDecision): Promise => { sentBeforeDecision.current = false; - if (decision !== 'approve') return; + if (!VACATION_EDO_SIGNING_ENABLED || decision !== 'approve') return; if (!completesApprovalPhase(status, await approval.getMatrixForRequest(itemId))) return; @@ -235,18 +236,23 @@ const VacationView: React.FC = ({ context, itemId, formKey,
- {signingBusy && Отправляем заявление на подпись в ЭДО…} - {!signingBusy && signingResult && signingResult.skipped.length > 0 && ( - - {`Не отправлено по компаниям: ${signingResult.skipped.map((c) => `${c.name} — ${c.reason}`).join('; ')}.`} - - )} - {!signingBusy && signingError && ( + {/* Пока отправка в ЭДО выключена — ни одного сообщения о ней. */} + {VACATION_EDO_SIGNING_ENABLED && ( <> - {signingError} - + {signingBusy && Отправляем заявление на подпись в ЭДО…} + {!signingBusy && signingResult && signingResult.skipped.length > 0 && ( + + {`Не отправлено по компаниям: ${signingResult.skipped.map((c) => `${c.name} — ${c.reason}`).join('; ')}.`} + + )} + {!signingBusy && signingError && ( + <> + {signingError} + + + )} )} = ({ context, itemId, formKey, setStatus(newStatus); setDecisionSeq((n) => n + 1); notify(); - return sentBeforeDecision.current ? 'Документы отправлены на подписание в ЭДО.' : undefined; + return VACATION_EDO_SIGNING_ENABLED && sentBeforeDecision.current ?'Документы отправлены на подписание в ЭДО.' : undefined; }} onDelegated={() => { setDecisionSeq((n) => n + 1); diff --git a/src/webparts/requestPortal/shared/config.ts b/src/webparts/requestPortal/shared/config.ts index b7743c0..1cb7693 100644 --- a/src/webparts/requestPortal/shared/config.ts +++ b/src/webparts/requestPortal/shared/config.ts @@ -81,6 +81,13 @@ export function getEdoApiBaseUrl(): string { return _edoApiBaseUrl; } +/** + * Отправка согласованного заявления на отпуск на подпись в ЭДО (forms/Vacation/VacationView). + * Временно выключена: решение последнего согласующего применяется без обращения к ЭДО. + * Чтобы вернуть — поставить true, остальной код отправки на месте. + */ +export const VACATION_EDO_SIGNING_ENABLED = false; + // Уведомления согласующим (поток Power Automate, см. approval/notify.service.ts). // Настраивается свойствами веб-части notificationsEnabled / notifyOnlyTo — тот // же модульный синглтон, что и у approvalApiBaseUrl выше.