fix(checkout): SO creation falls back to generic item if a catalog Item is missing
Tracing Mitchell's batch, SO creation 404'd on a missing ERPNext Item
(INTRASTATE-AUTHORITY) -- 30 of 70 catalog erpnext_item codes were missing in
ERPNext. Created all 30. Added a safety net: if createResource('Sales Order')
404s on a missing Item, retry once with every line remapped to the generic
COMPLIANCE-SERVICE item so a missing catalog Item never strands a paid order's SO.
This commit is contained in:
parent
e2467752dc
commit
8d301a1ab7
1 changed files with 21 additions and 0 deletions
|
|
@ -348,6 +348,27 @@ export async function ensureComplianceSalesOrder(
|
|||
custom_surcharge_pct: surchargePct,
|
||||
workflow_state: "Received",
|
||||
items: lineItems,
|
||||
}).catch(async (e: unknown) => {
|
||||
// Resilience: if a service's ERPNext Item is missing, the SO would 404.
|
||||
// Retry once with every line item remapped to the generic COMPLIANCE-SERVICE
|
||||
// item so a missing catalog Item never strands a paid order's SO. (The
|
||||
// catalog Item should still be created; this is a safety net.)
|
||||
const msg = String((e as { body?: { _server_messages?: string } })?.body?._server_messages || e);
|
||||
if (/not found/i.test(msg)) {
|
||||
console.warn(`[checkout] SO item missing for ${orderId}, retrying with generic item:`, msg.slice(0, 120));
|
||||
const fallback = lineItems.map(li => ({ ...li, item_code: "COMPLIANCE-SERVICE" }));
|
||||
return createResource("Sales Order", {
|
||||
customer: erpnextCustomer,
|
||||
delivery_date: new Date(Date.now() + 30 * 86400000).toISOString().split("T")[0],
|
||||
custom_external_order_id: orderId,
|
||||
custom_order_type: "compliance",
|
||||
custom_payment_gateway: GATEWAY_LABELS[paymentMethod] || paymentMethod,
|
||||
custom_surcharge_pct: surchargePct,
|
||||
workflow_state: "Received",
|
||||
items: fallback,
|
||||
});
|
||||
}
|
||||
throw e;
|
||||
})) as { name: string };
|
||||
|
||||
try {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue