fix: 统一报销付款状态与进度(09-04-reimbursement-state-gap-finance-view)
这个提交包含在:
@@ -0,0 +1,34 @@
|
||||
import type { ProcessingProgress } from "../types/processingProgress";
|
||||
|
||||
export function resolveReimbursementPaymentHandoff({
|
||||
status,
|
||||
deletedAt,
|
||||
progress,
|
||||
}: {
|
||||
status: string;
|
||||
deletedAt?: string | null;
|
||||
progress?: ProcessingProgress | null;
|
||||
}) {
|
||||
const unavailable = { nextStep: "付款进度暂不可用,请刷新后重试", canCreateBatch: false, targetHref: null as string | null };
|
||||
if (deletedAt || !["approved", "paid"].includes(status)) return null;
|
||||
const stages = progress?.stages ?? [];
|
||||
const created = stages.find((stage) => stage.key === "payment_batch_created");
|
||||
const review = stages.find((stage) => stage.key === "payment_batch_review");
|
||||
const payment = stages.find((stage) => stage.key === "payment_and_receipt");
|
||||
if (!created || !review || !payment) return unavailable;
|
||||
if (status === "paid") {
|
||||
return {
|
||||
...unavailable,
|
||||
nextStep: payment.state === "completed" ? payment.detail ?? "查看付款结果" : unavailable.nextStep,
|
||||
targetHref: payment.state === "completed" ? payment.targetHref : null,
|
||||
};
|
||||
}
|
||||
if (created.state === "current" && review.state === "pending" && payment.state === "pending"
|
||||
&& !created.targetHref && !review.targetHref && !payment.targetHref) {
|
||||
return { ...unavailable, nextStep: created.detail ?? "待财务组建付款批次", canCreateBatch: true };
|
||||
}
|
||||
if (created.state !== "completed") return unavailable;
|
||||
const current = [payment, review].find((stage) => stage.state === "current" || stage.state === "exception");
|
||||
if (!current || !current.detail) return unavailable;
|
||||
return { ...unavailable, nextStep: current.detail, targetHref: current.targetHref };
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户