fix(oid): оповещение об отклонении/согласовании (Step3 Teams-ссылка и Step4)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+11
-4
@@ -103,8 +103,6 @@ export function useStep3Approval(args: UseStep3ApprovalArgs) {
|
||||
: m,
|
||||
);
|
||||
onSave({ approvalChain: updatedChain });
|
||||
const nextPending = updatedChain.find((m) => m.status === "pending");
|
||||
if (nextPending?.spApprovalId) await notify(nextPending.spApprovalId);
|
||||
const allDone = updatedChain.every(
|
||||
(m) =>
|
||||
m.status === "approved" ||
|
||||
@@ -112,12 +110,19 @@ export function useStep3Approval(args: UseStep3ApprovalArgs) {
|
||||
m.status === "recommends",
|
||||
);
|
||||
if (allDone) {
|
||||
// Финал: статус «Согласовано» ДО оповещения, и шлём по currentMember (у него
|
||||
// spApprovalId точно есть) — иначе на финале «Согласована» не уходит, а поток
|
||||
// читает ещё «На согласовании». Порядок как в ветке отклонения / в Step4.
|
||||
await service.updateOIDStatus(oid.id, "approved");
|
||||
onSave({
|
||||
approvalChain: updatedChain,
|
||||
oid: { ...oid, status: "approved" },
|
||||
});
|
||||
if (currentMember.spApprovalId) await notify(currentMember.spApprovalId);
|
||||
onStepComplete(4);
|
||||
} else {
|
||||
const nextPending = updatedChain.find((m) => m.status === "pending");
|
||||
if (nextPending?.spApprovalId) await notify(nextPending.spApprovalId);
|
||||
}
|
||||
} else {
|
||||
const othersToDelete = approvalChain.filter(
|
||||
@@ -145,8 +150,10 @@ export function useStep3Approval(args: UseStep3ApprovalArgs) {
|
||||
approvalChain: finalChain,
|
||||
oid: { ...oid, status: "rejected" },
|
||||
});
|
||||
const initiator = finalChain.find((m) => m.role === "Инициатор");
|
||||
if (initiator?.spApprovalId) await notify(initiator.spApprovalId);
|
||||
// Шлём по отклонившему (currentMember) — у него spApprovalId гарантированно есть
|
||||
// (проверен в начале). У инициатора он мог отсутствовать после манипуляций с цепочкой,
|
||||
// из-за чего reject по Teams-ссылке вообще не дёргал поток.
|
||||
await notify(currentMember.spApprovalId);
|
||||
}
|
||||
setActionDialog(null);
|
||||
} catch (err) {
|
||||
|
||||
@@ -304,8 +304,11 @@ export function useStep4Approval(args: UseStep4ApprovalArgs) {
|
||||
approvalChain: finalChain,
|
||||
oid: { ...oid!, status: "rejected" },
|
||||
});
|
||||
const initiator = finalChain.find((m) => m.role === "Инициатор");
|
||||
if (initiator?.spApprovalId) await notify(initiator.spApprovalId);
|
||||
// Уведомляем по spId ОТКЛОНИВШЕГО (currentMember) — он гарантированно есть (проверен в
|
||||
// начале обработчика). У инициатора spApprovalId мог отсутствовать после манипуляций с
|
||||
// цепочкой, из-за чего reject вообще не дёргал поток. Ветку письма определяет статус СТ
|
||||
// («Отклонено»), получателя — автор СТ, поэтому чей элемент согласования передан — не важно.
|
||||
await notify(currentMember.spApprovalId);
|
||||
}
|
||||
|
||||
closeActionDialog();
|
||||
|
||||
Reference in New Issue
Block a user