Merge branch 'main' of http://git.tnsu.kz/timur.gorodetskiy/request-portal
Tests / frontend-test (push) Successful in 1m25s
Tests / frontend-test (push) Successful in 1m25s
This commit is contained in:
@@ -30,6 +30,9 @@
|
|||||||
- **Заголовок элемента** (`Title`): `Отпуск — {ФИО} — дд.мм.гггг`.
|
- **Заголовок элемента** (`Title`): `Отпуск — {ФИО} — дд.мм.гггг`.
|
||||||
|
|
||||||
## Подписание в ЭДО
|
## Подписание в ЭДО
|
||||||
|
> **Сейчас выключено** (`VACATION_EDO_SIGNING_ENABLED = false` в `shared/config.ts`): решение последнего
|
||||||
|
> согласующего применяется сразу, в ЭДО ничего не уходит. Описанное ниже работает, когда флаг `true`.
|
||||||
|
|
||||||
Когда **последний согласующий** нажимает «Согласовать», заявление сначала уходит на подпись в TANSU ЭДО
|
Когда **последний согласующий** нажимает «Согласовать», заявление сначала уходит на подпись в TANSU ЭДО
|
||||||
(`VacationView` → `onBeforeDecide`), и только потом применяется решение. Последний — значит заявка
|
(`VacationView` → `onBeforeDecide`), и только потом применяется решение. Последний — значит заявка
|
||||||
«На согласовании» и несогласованной осталась одна строка фазы согласования (`completesApprovalPhase`;
|
«На согласовании» и несогласованной осталась одна строка фазы согласования (`completesApprovalPhase`;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import type { ApproverDecision } from '../../shared/approval';
|
|||||||
import { isAlreadyAccepted } from '../../shared/edo/edoErrors';
|
import { isAlreadyAccepted } from '../../shared/edo/edoErrors';
|
||||||
import { executionPhaseRows } from '../../shared/approval/useRouteExecutors';
|
import { executionPhaseRows } from '../../shared/approval/useRouteExecutors';
|
||||||
import { friendlyErrorMessage } from '../../shared/diagnostics';
|
import { friendlyErrorMessage } from '../../shared/diagnostics';
|
||||||
|
import { VACATION_EDO_SIGNING_ENABLED } from '../../shared/config';
|
||||||
import {
|
import {
|
||||||
approvalListTitle,
|
approvalListTitle,
|
||||||
approvalListTitleForListId,
|
approvalListTitleForListId,
|
||||||
@@ -179,7 +180,7 @@ const VacationView: React.FC<IVacationViewProps> = ({ context, itemId, formKey,
|
|||||||
// заявка остаётся на согласовании, и ошибку видно в панели решения; согласовать можно ещё раз.
|
// заявка остаётся на согласовании, и ошибку видно в панели решения; согласовать можно ещё раз.
|
||||||
const sendBeforeFinalApproval = async (decision: ApproverDecision): Promise<void> => {
|
const sendBeforeFinalApproval = async (decision: ApproverDecision): Promise<void> => {
|
||||||
sentBeforeDecision.current = false;
|
sentBeforeDecision.current = false;
|
||||||
if (decision !== 'approve') return;
|
if (!VACATION_EDO_SIGNING_ENABLED || decision !== 'approve') return;
|
||||||
|
|
||||||
if (!completesApprovalPhase(status, await approval.getMatrixForRequest(itemId))) return;
|
if (!completesApprovalPhase(status, await approval.getMatrixForRequest(itemId))) return;
|
||||||
|
|
||||||
@@ -235,18 +236,23 @@ const VacationView: React.FC<IVacationViewProps> = ({ context, itemId, formKey,
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="rp-no-print">
|
<div className="rp-no-print">
|
||||||
{signingBusy && <Alert variant="ok">Отправляем заявление на подпись в ЭДО…</Alert>}
|
{/* Пока отправка в ЭДО выключена — ни одного сообщения о ней. */}
|
||||||
{!signingBusy && signingResult && signingResult.skipped.length > 0 && (
|
{VACATION_EDO_SIGNING_ENABLED && (
|
||||||
<Alert variant="err">
|
|
||||||
{`Не отправлено по компаниям: ${signingResult.skipped.map((c) => `${c.name} — ${c.reason}`).join('; ')}.`}
|
|
||||||
</Alert>
|
|
||||||
)}
|
|
||||||
{!signingBusy && signingError && (
|
|
||||||
<>
|
<>
|
||||||
<Alert variant="err">{signingError}</Alert>
|
{signingBusy && <Alert variant="ok">Отправляем заявление на подпись в ЭДО…</Alert>}
|
||||||
<Button variant="secondary" onClick={retrySigning}>
|
{!signingBusy && signingResult && signingResult.skipped.length > 0 && (
|
||||||
Повторить отправку на подпись
|
<Alert variant="err">
|
||||||
</Button>
|
{`Не отправлено по компаниям: ${signingResult.skipped.map((c) => `${c.name} — ${c.reason}`).join('; ')}.`}
|
||||||
|
</Alert>
|
||||||
|
)}
|
||||||
|
{!signingBusy && signingError && (
|
||||||
|
<>
|
||||||
|
<Alert variant="err">{signingError}</Alert>
|
||||||
|
<Button variant="secondary" onClick={retrySigning}>
|
||||||
|
Повторить отправку на подпись
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<DecisionPanel
|
<DecisionPanel
|
||||||
@@ -258,7 +264,7 @@ const VacationView: React.FC<IVacationViewProps> = ({ context, itemId, formKey,
|
|||||||
setStatus(newStatus);
|
setStatus(newStatus);
|
||||||
setDecisionSeq((n) => n + 1);
|
setDecisionSeq((n) => n + 1);
|
||||||
notify();
|
notify();
|
||||||
return sentBeforeDecision.current ? 'Документы отправлены на подписание в ЭДО.' : undefined;
|
return VACATION_EDO_SIGNING_ENABLED && sentBeforeDecision.current ?'Документы отправлены на подписание в ЭДО.' : undefined;
|
||||||
}}
|
}}
|
||||||
onDelegated={() => {
|
onDelegated={() => {
|
||||||
setDecisionSeq((n) => n + 1);
|
setDecisionSeq((n) => n + 1);
|
||||||
|
|||||||
@@ -81,6 +81,13 @@ export function getEdoApiBaseUrl(): string {
|
|||||||
return _edoApiBaseUrl;
|
return _edoApiBaseUrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Отправка согласованного заявления на отпуск на подпись в ЭДО (forms/Vacation/VacationView).
|
||||||
|
* Временно выключена: решение последнего согласующего применяется без обращения к ЭДО.
|
||||||
|
* Чтобы вернуть — поставить true, остальной код отправки на месте.
|
||||||
|
*/
|
||||||
|
export const VACATION_EDO_SIGNING_ENABLED = false;
|
||||||
|
|
||||||
// Уведомления согласующим (поток Power Automate, см. approval/notify.service.ts).
|
// Уведомления согласующим (поток Power Automate, см. approval/notify.service.ts).
|
||||||
// Настраивается свойствами веб-части notificationsEnabled / notifyOnlyTo — тот
|
// Настраивается свойствами веб-части notificationsEnabled / notifyOnlyTo — тот
|
||||||
// же модульный синглтон, что и у approvalApiBaseUrl выше.
|
// же модульный синглтон, что и у approvalApiBaseUrl выше.
|
||||||
|
|||||||
Reference in New Issue
Block a user