| | |
| | | return roles; |
| | | } |
| | | |
| | | export function buildAutoApprovalFlow(amount, expenseCategory) { |
| | | export function buildAutoApprovalFlow(amount, expenseCategory, previousNodes = []) { |
| | | const roles = resolveApprovalRoles(amount, expenseCategory); |
| | | return roles.map((role, i) => ({ |
| | | approverId: null, |
| | | approverName: APPROVAL_ROLE_LABELS[role] || role, |
| | | const prevByRole = new Map(); |
| | | (previousNodes || []).forEach((n, idx) => { |
| | | if (n?.roleKey) prevByRole.set(n.roleKey, n); |
| | | else if (n?.approverId != null && n.approverId !== "") { |
| | | prevByRole.set(`__idx_${idx}`, n); |
| | | } |
| | | }); |
| | | return roles.map((role, i) => { |
| | | const prev = prevByRole.get(role) || prevByRole.get(`__idx_${i}`); |
| | | const hasApprover = prev?.approverId != null && prev.approverId !== ""; |
| | | return { |
| | | approverId: hasApprover ? prev.approverId : null, |
| | | approverName: hasApprover |
| | | ? prev.approverName || "" |
| | | : APPROVAL_ROLE_LABELS[role] || role, |
| | | roleKey: role, |
| | | signMode: prev?.signMode || "countersign", |
| | | sortOrder: i + 1, |
| | | nodeOrder: i + 1, |
| | | nodeStatus: i === 0 ? "process" : "wait", |
| | | approveOpinion: "", |
| | | approveTime: "", |
| | | })); |
| | | }; |
| | | }); |
| | | } |
| | | |
| | | export function getApprovalRuleHint(amount, expenseCategory) { |