fix(oid): статус СТ до оповещения — на финале согласования шлём Согласована

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-09-03 16:34:33 +05:00
parent fa47373d57
commit e50eca4fd4
@@ -248,26 +248,33 @@ export function useStep4Approval(args: UseStep4ApprovalArgs) {
setChain(updatedChain); setChain(updatedChain);
onSave({ approvalChain: 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( const allDone = updatedChain.every(
(m) => (m) =>
m.status === "approved" || m.status === "approved" ||
m.status === "skipped" || m.status === "skipped" ||
m.status === "recommends" m.status === "recommends"
); );
if (allDone) { if (allDone) {
// Финал: сначала статус «Согласовано», потом оповещение — иначе поток прочитает
// «На согласовании» и не отправит «Согласована» (а раньше на финале вообще ничего
// не слал, т.к. nextPending уже нет). Порядок как в ветке отклонения.
await service.updateOIDStatus(oid!.id, "approved"); await service.updateOIDStatus(oid!.id, "approved");
onSave({ oid: { ...oid!, status: "approved" }, approvalChain: updatedChain }); onSave({ oid: { ...oid!, status: "approved" }, approvalChain: updatedChain });
if (currentMember.spApprovalId) {
await notify(currentMember.spApprovalId);
}
onStepComplete(4); 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 { } else {
const othersToDelete = chain.filter( const othersToDelete = chain.filter(