From e50eca4fd423fc100966fcded90ae566ddf4556f 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: Thu, 3 Sep 2026 16:34:33 +0500 Subject: [PATCH] =?UTF-8?q?fix(oid):=20=D1=81=D1=82=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=81=20=D0=A1=D0=A2=20=D0=B4=D0=BE=20=D0=BE=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=E2=80=94=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D0=B5=20=D1=81=D0=BE=D0=B3?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=88?= =?UTF-8?q?=D0=BB=D1=91=D0=BC=20=D0=A1=D0=BE=D0=B3=D0=BB=D0=B0=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Step4Approval/useStep4Approval.ts | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/webparts/ctFormsPortal/forms/oid/components/Step4Approval/useStep4Approval.ts b/src/webparts/ctFormsPortal/forms/oid/components/Step4Approval/useStep4Approval.ts index fe5598c..c80bbbd 100644 --- a/src/webparts/ctFormsPortal/forms/oid/components/Step4Approval/useStep4Approval.ts +++ b/src/webparts/ctFormsPortal/forms/oid/components/Step4Approval/useStep4Approval.ts @@ -248,26 +248,33 @@ export function useStep4Approval(args: UseStep4ApprovalArgs) { setChain(updatedChain); onSave({ approvalChain: updatedChain }); - const nextPending = updatedChain.find((m) => m.status === "pending"); - if (nextPending) { - if (currentMember.spApprovalId) { - await notify(currentMember.spApprovalId); - } - if (nextPending.spApprovalId) { - await notify(nextPending.spApprovalId); - } - } - const allDone = updatedChain.every( (m) => m.status === "approved" || m.status === "skipped" || m.status === "recommends" ); + if (allDone) { + // Финал: сначала статус «Согласовано», потом оповещение — иначе поток прочитает + // «На согласовании» и не отправит «Согласована» (а раньше на финале вообще ничего + // не слал, т.к. nextPending уже нет). Порядок как в ветке отклонения. await service.updateOIDStatus(oid!.id, "approved"); onSave({ oid: { ...oid!, status: "approved" }, approvalChain: updatedChain }); + if (currentMember.spApprovalId) { + await notify(currentMember.spApprovalId); + } onStepComplete(4); + } else { + const nextPending = updatedChain.find((m) => m.status === "pending"); + if (nextPending) { + if (currentMember.spApprovalId) { + await notify(currentMember.spApprovalId); + } + if (nextPending.spApprovalId) { + await notify(nextPending.spApprovalId); + } + } } } else { const othersToDelete = chain.filter(