@devx-commerce/plugin-gati 0.0.34-beta.46 → 0.0.34-beta.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/modules/order-master/migrations/Migration20260319094758.js +26 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20260320000001.js +19 -0
- package/.medusa/server/src/modules/order-master/models/order-master.js +22 -7
- package/.medusa/server/src/modules/order-master/service.js +3 -2
- package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +34 -4
- package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +676 -42
- package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +16 -2
- package/.medusa/server/src/workflows/orders/utils/order-helper.js +19 -1
- package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +2 -2
- package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +11 -1
- package/package.json +1 -1
package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js
CHANGED
|
@@ -4,7 +4,39 @@ exports.processOrderMasterFromWebhookStep = void 0;
|
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const order_master_1 = require("../../../modules/order-master");
|
|
7
|
+
const party_master_1 = require("../../../modules/party-master");
|
|
8
|
+
const extended_variant_1 = require("../../../modules/extended-variant");
|
|
9
|
+
const shipping_info_master_1 = require("../../../modules/shipping-info-master");
|
|
7
10
|
const framework_1 = require("@medusajs/framework");
|
|
11
|
+
/**
|
|
12
|
+
* Map ERP BookName to Medusa payment provider_id.
|
|
13
|
+
* Matches the reverse of the payment mapping in sync-order-to-erp.ts.
|
|
14
|
+
*/
|
|
15
|
+
function getProviderFromBookName(bookName) {
|
|
16
|
+
const name = (bookName ?? "").toLowerCase();
|
|
17
|
+
if (name.includes("upi") || name.includes("card") || name.includes("worldline") || name.includes("pos") || name.includes("swipe")) {
|
|
18
|
+
return "pp_worldline-pos_worldline_pos";
|
|
19
|
+
}
|
|
20
|
+
if (name.includes("delivery") || name.includes("cod") || name.includes("payu") || name.includes("gokwik")) {
|
|
21
|
+
return "pp_gokwik_gokwik";
|
|
22
|
+
}
|
|
23
|
+
if (name.includes("razorpay")) {
|
|
24
|
+
return "pp_razorpay_razorpay";
|
|
25
|
+
}
|
|
26
|
+
if (name.includes("cheque")) {
|
|
27
|
+
return "pp_cheque_cheque";
|
|
28
|
+
}
|
|
29
|
+
if (name.includes("bank") || name.includes("transfer") || name.includes("neft") || name.includes("rtgs") || name.includes("imps")) {
|
|
30
|
+
return "pp_bank_transfer_bank_transfer";
|
|
31
|
+
}
|
|
32
|
+
if (name.includes("wallet")) {
|
|
33
|
+
return "pp_wallet_wallet";
|
|
34
|
+
}
|
|
35
|
+
if (name.includes("cash")) {
|
|
36
|
+
return "pp_cash_cash";
|
|
37
|
+
}
|
|
38
|
+
return "pp_system_default";
|
|
39
|
+
}
|
|
8
40
|
/**
|
|
9
41
|
* Normalize fetch result: getMasterData can return single object or array per id.
|
|
10
42
|
*/
|
|
@@ -16,8 +48,570 @@ function normalizeOrderDataList(result) {
|
|
|
16
48
|
}
|
|
17
49
|
return result && typeof result === "object" && "OrderId" in result ? [result] : [];
|
|
18
50
|
}
|
|
51
|
+
// ─── Shared: Create Medusa payment collections from ERP PaymentOption data ───
|
|
52
|
+
async function createPaymentCollectionsFromErp(container, link, medusaOrderId, data) {
|
|
53
|
+
const erpPayments = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
|
|
54
|
+
if (!erpPayments.length) {
|
|
55
|
+
framework_1.logger.info(`[Webhook] No ERP payments (Amount>0) for order ${medusaOrderId} — skipping payment collection`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
|
|
60
|
+
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
61
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
62
|
+
// Check for existing payment collections linked to this order
|
|
63
|
+
const { data: existingOrders } = await query.graph({
|
|
64
|
+
entity: "order",
|
|
65
|
+
fields: [
|
|
66
|
+
"payment_collections.id",
|
|
67
|
+
"payment_collections.status",
|
|
68
|
+
"payment_collections.payments.id",
|
|
69
|
+
"payment_collections.payments.amount",
|
|
70
|
+
"payment_collections.payments.captured_at",
|
|
71
|
+
],
|
|
72
|
+
filters: { id: medusaOrderId },
|
|
73
|
+
});
|
|
74
|
+
const existingCollections = existingOrders?.[0]?.payment_collections ?? [];
|
|
75
|
+
if (existingCollections.length > 0) {
|
|
76
|
+
// Payment collections already exist — ensure transactions are registered
|
|
77
|
+
for (const col of existingCollections) {
|
|
78
|
+
for (const payment of (col.payments ?? [])) {
|
|
79
|
+
if (payment.captured_at) {
|
|
80
|
+
try {
|
|
81
|
+
await orderModule.addTransactions([{
|
|
82
|
+
order_id: medusaOrderId,
|
|
83
|
+
amount: payment.amount,
|
|
84
|
+
currency_code: "inr",
|
|
85
|
+
reference: "payment",
|
|
86
|
+
reference_id: payment.id,
|
|
87
|
+
}]);
|
|
88
|
+
framework_1.logger.info(`[Webhook] addTransactions for existing payment ${payment.id} on order ${medusaOrderId}`);
|
|
89
|
+
}
|
|
90
|
+
catch (txErr) {
|
|
91
|
+
framework_1.logger.warn(`[Webhook] addTransactions (existing payment) skipped for ${medusaOrderId}: ${txErr?.message}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const totalAmount = erpPayments.reduce((sum, p) => sum + Math.round(p.Amount), 0);
|
|
99
|
+
const paymentCollection = await paymentModule.createPaymentCollections({
|
|
100
|
+
currency_code: "inr",
|
|
101
|
+
amount: totalAmount,
|
|
102
|
+
});
|
|
103
|
+
// Link payment collection → Medusa order
|
|
104
|
+
await link.create({
|
|
105
|
+
[utils_1.Modules.ORDER]: { order_id: medusaOrderId },
|
|
106
|
+
[utils_1.Modules.PAYMENT]: { payment_collection_id: paymentCollection.id },
|
|
107
|
+
});
|
|
108
|
+
// One session per ERP payment → authorize → capture
|
|
109
|
+
for (const p of erpPayments) {
|
|
110
|
+
const amount = Math.round(p.Amount);
|
|
111
|
+
const providerId = getProviderFromBookName(p.BookName);
|
|
112
|
+
const session = await paymentModule.createPaymentSession(paymentCollection.id, {
|
|
113
|
+
provider_id: providerId,
|
|
114
|
+
currency_code: "inr",
|
|
115
|
+
amount: amount,
|
|
116
|
+
data: {
|
|
117
|
+
book_name: p.BookName ?? "",
|
|
118
|
+
trans_prefix: p.TransPrefix ?? "",
|
|
119
|
+
trans_no: p.TransNo ?? "",
|
|
120
|
+
voucher_entry_id: String(p.VoucherEntryId ?? ""),
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
// authorizePaymentSession returns PaymentDTO (the payment itself, not the session)
|
|
124
|
+
const payment = await paymentModule.authorizePaymentSession(session.id, {});
|
|
125
|
+
if (payment?.id) {
|
|
126
|
+
await paymentModule.capturePayment({
|
|
127
|
+
payment_id: payment.id,
|
|
128
|
+
amount: amount,
|
|
129
|
+
});
|
|
130
|
+
// Register transaction with order module so paid_total / pending_difference are correct
|
|
131
|
+
try {
|
|
132
|
+
await orderModule.addTransactions([{
|
|
133
|
+
order_id: medusaOrderId,
|
|
134
|
+
amount: amount,
|
|
135
|
+
currency_code: "inr",
|
|
136
|
+
reference: "payment",
|
|
137
|
+
reference_id: payment.id,
|
|
138
|
+
}]);
|
|
139
|
+
}
|
|
140
|
+
catch (txErr) {
|
|
141
|
+
framework_1.logger.warn(`[Webhook] addTransactions failed for order ${medusaOrderId}: ${txErr?.message}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
framework_1.logger.info(`[Webhook] Created payment collection ${paymentCollection.id} with ${erpPayments.length} payments (total: ${totalAmount}) for order ${medusaOrderId}`);
|
|
146
|
+
}
|
|
147
|
+
catch (payErr) {
|
|
148
|
+
framework_1.logger.warn(`[Webhook] Payment collection creation failed for order ${medusaOrderId}: ${payErr?.message}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ─── Shared: Create or update extended_order record ──────────────────────────
|
|
152
|
+
async function createOrUpdateExtendedOrder(container, link, medusaOrderId, erpOrderIdStr, data, customerInfo = {}) {
|
|
153
|
+
try {
|
|
154
|
+
const extOrderService = container.resolve("extended_order");
|
|
155
|
+
const erpPayments = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
|
|
156
|
+
const paymentMode = erpPayments.length > 1 ? "split" : erpPayments.length === 1 ? "single" : null;
|
|
157
|
+
const existing = await extOrderService.listExtendedOrders({ order_id: medusaOrderId });
|
|
158
|
+
if (existing?.length > 0) {
|
|
159
|
+
const updatePayload = {
|
|
160
|
+
id: existing[0].id,
|
|
161
|
+
external_id: erpOrderIdStr,
|
|
162
|
+
sync_erp: true,
|
|
163
|
+
sync_erp_error: null,
|
|
164
|
+
};
|
|
165
|
+
if (paymentMode)
|
|
166
|
+
updatePayload.payment_mode = paymentMode;
|
|
167
|
+
if (customerInfo.customerId)
|
|
168
|
+
updatePayload.customer_id = customerInfo.customerId;
|
|
169
|
+
if (customerInfo.email)
|
|
170
|
+
updatePayload.customer_email = customerInfo.email;
|
|
171
|
+
if (customerInfo.phone)
|
|
172
|
+
updatePayload.customer_phone = customerInfo.phone;
|
|
173
|
+
if (data.Customer)
|
|
174
|
+
updatePayload.customer_name = data.Customer;
|
|
175
|
+
await extOrderService.updateExtendedOrders(updatePayload);
|
|
176
|
+
framework_1.logger.info(`[Webhook] Updated extended_order ${existing[0].id} for order ${medusaOrderId}`);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const extOrder = await extOrderService.createExtendedOrders({
|
|
180
|
+
order_id: medusaOrderId,
|
|
181
|
+
display_id: [data.OrderPrefix, data.OrderNo].filter(Boolean).join("/") || erpOrderIdStr,
|
|
182
|
+
is_manual: false,
|
|
183
|
+
source: "pos",
|
|
184
|
+
order_type: null,
|
|
185
|
+
customer_id: customerInfo.customerId || "",
|
|
186
|
+
customer_name: data.Customer || null,
|
|
187
|
+
customer_email: customerInfo.email || null,
|
|
188
|
+
customer_phone: customerInfo.phone || null,
|
|
189
|
+
payment_mode: paymentMode,
|
|
190
|
+
payment_type: "full",
|
|
191
|
+
external_id: erpOrderIdStr,
|
|
192
|
+
sync_erp: true,
|
|
193
|
+
sync_erp_error: null,
|
|
194
|
+
});
|
|
195
|
+
// Link extended_order → Medusa order via link module
|
|
196
|
+
try {
|
|
197
|
+
await link.create({
|
|
198
|
+
[utils_1.Modules.ORDER]: { order_id: medusaOrderId },
|
|
199
|
+
extended_order: { extended_order_id: extOrder.id },
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
catch (linkErr) {
|
|
203
|
+
framework_1.logger.warn(`[Webhook] extended_order link failed for order ${medusaOrderId}: ${linkErr?.message}`);
|
|
204
|
+
}
|
|
205
|
+
framework_1.logger.info(`[Webhook] Created extended_order ${extOrder.id} for order ${medusaOrderId}`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
framework_1.logger.warn(`[Webhook] extended_order create/update failed for order ${medusaOrderId}: ${err?.message}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// ─── Sub-scenario B: Link existing Medusa order ─────────────────────────────
|
|
213
|
+
async function handleExistingMedusaOrder(medusaOrderId, master, data, erpOrderIdStr, link, query, container) {
|
|
214
|
+
const partyMasterService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
|
|
215
|
+
// ─── Resolve customer info ───────────────────────────────────────────────
|
|
216
|
+
const partyList = await partyMasterService.listPartyMasters({
|
|
217
|
+
party_no: data.CustomerId,
|
|
218
|
+
});
|
|
219
|
+
const party = partyList?.[0] ?? null;
|
|
220
|
+
const medusaCustomerId = party?.mapping_id ?? null;
|
|
221
|
+
let orderEmail = party?.firm_email || "";
|
|
222
|
+
if (!orderEmail && medusaCustomerId) {
|
|
223
|
+
try {
|
|
224
|
+
const { data: customers } = await query.graph({
|
|
225
|
+
entity: "customer",
|
|
226
|
+
fields: ["email"],
|
|
227
|
+
filters: { id: medusaCustomerId },
|
|
228
|
+
});
|
|
229
|
+
orderEmail = customers?.[0]?.email || "";
|
|
230
|
+
}
|
|
231
|
+
catch (_) { /* ignore */ }
|
|
232
|
+
}
|
|
233
|
+
// Merge ERP fields into order metadata (Medusa does a shallow merge — existing keys are preserved)
|
|
234
|
+
try {
|
|
235
|
+
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
236
|
+
const addlessItemsExisting = (data.AddlessDetail ?? []);
|
|
237
|
+
const disAmountExisting = addlessItemsExisting.find((a) => a.Prompt === "DIS")?.AddLessAmount ?? 0;
|
|
238
|
+
const promoAmountExisting = addlessItemsExisting.find((a) => a.Prompt === "PROMOCODE")?.AddLessAmount ?? 0;
|
|
239
|
+
const roundingAmountExisting = addlessItemsExisting.find((a) => /rounding/i.test(a.Prompt ?? ""))?.AddLessAmount ?? 0;
|
|
240
|
+
await orderModule.updateOrders({
|
|
241
|
+
id: medusaOrderId,
|
|
242
|
+
metadata: {
|
|
243
|
+
external_id: erpOrderIdStr,
|
|
244
|
+
sync_erp: true,
|
|
245
|
+
OrderId: data.OrderId ?? null,
|
|
246
|
+
OrderPrefix: data.OrderPrefix ?? null,
|
|
247
|
+
OrderNo: data.OrderNo ?? null,
|
|
248
|
+
OrderDate: data.OrderDate ?? null,
|
|
249
|
+
Detail: (data.OrderDetail ?? []).map((item) => ({
|
|
250
|
+
SrNo: item.SrNo,
|
|
251
|
+
JewelId: item.JewelId,
|
|
252
|
+
StyleId: item.StyleId,
|
|
253
|
+
OrderItemId: item.OrderItemId,
|
|
254
|
+
PartyStyleId: item.PartyStyleId,
|
|
255
|
+
})),
|
|
256
|
+
...(disAmountExisting !== 0 ? { store_discount: { code: "STORE_DISCOUNT", amount: disAmountExisting } } : {}),
|
|
257
|
+
...(roundingAmountExisting !== 0 ? { rounded_discount: { code: "ROUNDED_DISCOUNT", amount: roundingAmountExisting } } : {}),
|
|
258
|
+
...(promoAmountExisting > 0 ? { discount: { code: data.Promocode || "PROMOCODE", amount: promoAmountExisting } } : {}),
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
framework_1.logger.info(`[Webhook] Updated metadata.external_id=${erpOrderIdStr} on order ${medusaOrderId}`);
|
|
262
|
+
}
|
|
263
|
+
catch (updateErr) {
|
|
264
|
+
framework_1.logger.warn(`[Webhook] metadata update failed for order ${medusaOrderId}: ${updateErr?.message}`);
|
|
265
|
+
}
|
|
266
|
+
// Link order_master → Medusa order
|
|
267
|
+
try {
|
|
268
|
+
await link.create({
|
|
269
|
+
[order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
|
|
270
|
+
[utils_1.Modules.ORDER]: { order_id: medusaOrderId },
|
|
271
|
+
});
|
|
272
|
+
framework_1.logger.info(`[Webhook] Linked order_master ${master.id} → order ${medusaOrderId}`);
|
|
273
|
+
}
|
|
274
|
+
catch (linkError) {
|
|
275
|
+
const msg = linkError?.message || "";
|
|
276
|
+
if (msg.includes("Cannot create multiple links") ||
|
|
277
|
+
msg.includes("already exists") ||
|
|
278
|
+
msg.includes("argument of AND must be type boolean") ||
|
|
279
|
+
linkError?.code === "23505" ||
|
|
280
|
+
linkError?.name === "UniqueConstraintViolationError") {
|
|
281
|
+
framework_1.logger.info(`[Webhook] Link already exists (or entity verify failed) for order_master ${master.id} → order ${medusaOrderId}`);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
throw linkError;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// ─── Create extended_order and payment collections ───────────────────────
|
|
288
|
+
await createOrUpdateExtendedOrder(container, link, medusaOrderId, erpOrderIdStr, data, {
|
|
289
|
+
customerId: medusaCustomerId,
|
|
290
|
+
email: orderEmail,
|
|
291
|
+
phone: party?.owner_mobile || "",
|
|
292
|
+
});
|
|
293
|
+
await createPaymentCollectionsFromErp(container, link, medusaOrderId, data);
|
|
294
|
+
// Set order status to "completed" if ERP reports captured payments
|
|
295
|
+
const erpPaymentsExist = (data.PaymentOption ?? []).some((p) => p.Amount > 0);
|
|
296
|
+
if (erpPaymentsExist) {
|
|
297
|
+
try {
|
|
298
|
+
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
299
|
+
await orderModule.updateOrders({ id: medusaOrderId, status: "completed" });
|
|
300
|
+
framework_1.logger.info(`[Webhook] Set order ${medusaOrderId} status → completed`);
|
|
301
|
+
}
|
|
302
|
+
catch (e) {
|
|
303
|
+
framework_1.logger.warn(`[Webhook] Failed to set order status completed for ${medusaOrderId}: ${e?.message}`);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// ─── Sub-scenario A: Create new Medusa order from ERP data ──────────────────
|
|
308
|
+
async function handleNewMedusaOrderFromErp(master, data, erpOrderIdStr, link, container) {
|
|
309
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
310
|
+
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
311
|
+
const regionModule = container.resolve(utils_1.Modules.REGION);
|
|
312
|
+
const partyMasterService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
|
|
313
|
+
const extendedVariantService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
|
|
314
|
+
const shippingInfoService = container.resolve(shipping_info_master_1.SHIPPING_INFO_MASTER_MODULE);
|
|
315
|
+
// ─── Resolve customer ───────────────────────────────────────────────────
|
|
316
|
+
const partyList = await partyMasterService.listPartyMasters({
|
|
317
|
+
party_no: data.CustomerId,
|
|
318
|
+
});
|
|
319
|
+
const party = partyList?.[0] ?? null;
|
|
320
|
+
const medusaCustomerId = party?.mapping_id ?? null;
|
|
321
|
+
if (!medusaCustomerId) {
|
|
322
|
+
framework_1.logger.warn(`[Webhook] No Medusa customer mapping for party_no=${data.CustomerId}, will create as guest`);
|
|
323
|
+
}
|
|
324
|
+
// Resolve order email: firm_email → Medusa customer email → ""
|
|
325
|
+
let orderEmail = party?.firm_email || "";
|
|
326
|
+
if (!orderEmail && medusaCustomerId) {
|
|
327
|
+
try {
|
|
328
|
+
const { data: customers } = await query.graph({
|
|
329
|
+
entity: "customer",
|
|
330
|
+
fields: ["email"],
|
|
331
|
+
filters: { id: medusaCustomerId },
|
|
332
|
+
});
|
|
333
|
+
orderEmail = customers?.[0]?.email || "";
|
|
334
|
+
}
|
|
335
|
+
catch (_) { /* ignore */ }
|
|
336
|
+
}
|
|
337
|
+
// ─── Resolve region ─────────────────────────────────────────────────────
|
|
338
|
+
const regions = await regionModule.listRegions({ currency_code: "inr" });
|
|
339
|
+
const region = regions?.[0] ?? null;
|
|
340
|
+
if (!region) {
|
|
341
|
+
framework_1.logger.error(`[Webhook] No INR region found — cannot create Medusa order for ERP order ${erpOrderIdStr}. ` +
|
|
342
|
+
`order_master ${master.id} was created/updated but has no linked Medusa order. ` +
|
|
343
|
+
`Create an INR region and re-trigger the webhook to complete the link.`);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
// ─── Parse taxes and discounts from AddlessDetail ────────────────────────
|
|
347
|
+
const addlessItems = (data.AddlessDetail ?? []);
|
|
348
|
+
const igstEntry = addlessItems.find((a) => /igst/i.test(a.Prompt ?? ""));
|
|
349
|
+
const sgstEntry = addlessItems.find((a) => /sgst/i.test(a.Prompt ?? ""));
|
|
350
|
+
const cgstEntry = addlessItems.find((a) => /cgst/i.test(a.Prompt ?? ""));
|
|
351
|
+
let gstRate = 0;
|
|
352
|
+
if (igstEntry && (igstEntry.AddlessPer ?? 0) > 0) {
|
|
353
|
+
gstRate = igstEntry.AddlessPer;
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
gstRate = (sgstEntry?.AddlessPer ?? 0) + (cgstEntry?.AddlessPer ?? 0);
|
|
357
|
+
}
|
|
358
|
+
const disAmount = addlessItems.find((a) => a.Prompt === "DIS")?.AddLessAmount ?? 0;
|
|
359
|
+
const promoAmount = addlessItems.find((a) => a.Prompt === "PROMOCODE")?.AddLessAmount ?? 0;
|
|
360
|
+
const roundingAmount = addlessItems.find((a) => /rounding/i.test(a.Prompt ?? ""))?.AddLessAmount ?? 0;
|
|
361
|
+
const promoCode = data.Promocode || "PROMOCODE";
|
|
362
|
+
// Look up GST tax_rate_id via Tax Module (best-effort)
|
|
363
|
+
let gstTaxRateId = null;
|
|
364
|
+
if (gstRate > 0) {
|
|
365
|
+
try {
|
|
366
|
+
const taxModule = container.resolve(utils_1.Modules.TAX);
|
|
367
|
+
const taxRegions = await taxModule.listTaxRegions({ country_code: "in" });
|
|
368
|
+
if (taxRegions.length > 0) {
|
|
369
|
+
const taxRates = await taxModule.listTaxRates({
|
|
370
|
+
tax_region_id: taxRegions.map((r) => r.id),
|
|
371
|
+
});
|
|
372
|
+
const match = taxRates.find((r) => Math.abs((r.rate ?? 0) - gstRate) < 0.5);
|
|
373
|
+
gstTaxRateId = match?.id ?? null;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
catch (_) { /* ignore */ }
|
|
377
|
+
}
|
|
378
|
+
// ─── Resolve variants per OrderDetail ────────────────────────────────────
|
|
379
|
+
const resolvedItems = await Promise.all((data.OrderDetail ?? []).map(async (item) => {
|
|
380
|
+
let variants = [];
|
|
381
|
+
// Priority 1: party_style_id (most precise — unique per variant)
|
|
382
|
+
if (item.PartyStyleId && item.PartyStyleId > 0) {
|
|
383
|
+
variants = await extendedVariantService.listExtendedVariants({
|
|
384
|
+
party_style_id: item.PartyStyleId,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
// Priority 2: style_code + metal
|
|
388
|
+
if (!variants.length && item.StyleCode && item.Metal) {
|
|
389
|
+
variants = await extendedVariantService.listExtendedVariants({
|
|
390
|
+
style_code: item.StyleCode,
|
|
391
|
+
metal: item.Metal,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
// Priority 3: style_code only
|
|
395
|
+
if (!variants.length && item.StyleCode) {
|
|
396
|
+
variants = await extendedVariantService.listExtendedVariants({
|
|
397
|
+
style_code: item.StyleCode,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
const variantMappingId = variants?.[0]?.mapping_id ?? null;
|
|
401
|
+
if (!variantMappingId) {
|
|
402
|
+
framework_1.logger.warn(`[Webhook] No variant found for StyleCode=${item.StyleCode} PartyStyleId=${item.PartyStyleId}`);
|
|
403
|
+
}
|
|
404
|
+
// Fetch product info for line item denormalization
|
|
405
|
+
let variantInfo = null;
|
|
406
|
+
if (variantMappingId) {
|
|
407
|
+
try {
|
|
408
|
+
const { data: variantData } = await query.graph({
|
|
409
|
+
entity: "product_variant",
|
|
410
|
+
fields: ["id", "title", "sku", "product.id", "product.title", "product.handle", "product.thumbnail", "product.subtitle"],
|
|
411
|
+
filters: { id: variantMappingId },
|
|
412
|
+
});
|
|
413
|
+
variantInfo = variantData?.[0] ?? null;
|
|
414
|
+
}
|
|
415
|
+
catch (_) { /* ignore */ }
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
item,
|
|
419
|
+
variantMappingId,
|
|
420
|
+
variantInfo,
|
|
421
|
+
unitPrice: Math.round(item.MRP ?? 0),
|
|
422
|
+
};
|
|
423
|
+
}));
|
|
424
|
+
// ─── Build line items (only resolvable variants) ─────────────────────────
|
|
425
|
+
const resolvedFiltered = resolvedItems.filter((i) => i.variantMappingId);
|
|
426
|
+
const totalSubtotal = resolvedFiltered.reduce((sum, i) => sum + i.unitPrice * (i.item.OrderItemPcs ?? 1), 0);
|
|
427
|
+
const lineItems = resolvedFiltered.map((i) => {
|
|
428
|
+
const itemSubtotal = i.unitPrice * (i.item.OrderItemPcs ?? 1);
|
|
429
|
+
const proportion = totalSubtotal > 0 ? itemSubtotal / totalSubtotal : 1;
|
|
430
|
+
const taxLines = [];
|
|
431
|
+
if (gstRate > 0) {
|
|
432
|
+
taxLines.push({
|
|
433
|
+
description: "GST",
|
|
434
|
+
...(gstTaxRateId ? { tax_rate_id: gstTaxRateId } : {}),
|
|
435
|
+
code: "GST",
|
|
436
|
+
provider_id: "system",
|
|
437
|
+
rate: gstRate,
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
const adjustments = [];
|
|
441
|
+
if (disAmount > 0) {
|
|
442
|
+
adjustments.push({
|
|
443
|
+
code: "STORE_DISCOUNT",
|
|
444
|
+
amount: Math.round(disAmount * proportion * 100) / 100,
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
if (promoAmount > 0) {
|
|
448
|
+
adjustments.push({
|
|
449
|
+
code: promoCode,
|
|
450
|
+
amount: Math.round(promoAmount * proportion * 100) / 100,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
if (roundingAmount !== 0) {
|
|
454
|
+
adjustments.push({
|
|
455
|
+
code: "ROUNDED_DISCOUNT",
|
|
456
|
+
amount: Math.round(roundingAmount * proportion * 100) / 100,
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
return {
|
|
460
|
+
variant_id: i.variantMappingId,
|
|
461
|
+
product_id: i.variantInfo?.product?.id ?? null,
|
|
462
|
+
product_title: i.variantInfo?.product?.title ?? null,
|
|
463
|
+
product_handle: i.variantInfo?.product?.handle ?? null,
|
|
464
|
+
product_subtitle: i.variantInfo?.product?.subtitle ?? null,
|
|
465
|
+
thumbnail: i.variantInfo?.product?.thumbnail ?? null,
|
|
466
|
+
variant_title: i.variantInfo?.title ?? null,
|
|
467
|
+
variant_sku: i.variantInfo?.sku ?? null,
|
|
468
|
+
quantity: i.item.OrderItemPcs ?? 1,
|
|
469
|
+
unit_price: i.unitPrice,
|
|
470
|
+
title: i.variantInfo?.product?.title ?? [i.item.StyleCode, i.item.ItemSizeName, i.item.Metal, i.item.Tone].filter(Boolean).join(" - "),
|
|
471
|
+
subtitle: i.variantInfo?.title ?? null,
|
|
472
|
+
...(taxLines.length > 0 ? { tax_lines: taxLines } : {}),
|
|
473
|
+
...(adjustments.length > 0 ? { adjustments } : {}),
|
|
474
|
+
metadata: {
|
|
475
|
+
erp_order_item_id: String(i.item.OrderItemId ?? ""),
|
|
476
|
+
erp_style_id: String(i.item.StyleId ?? ""),
|
|
477
|
+
erp_make_type: i.item.MakeType ?? null,
|
|
478
|
+
erp_stock_type: i.item.StockType ?? null,
|
|
479
|
+
erp_expected_delivery: i.item.Expecteddeliverydate ?? null,
|
|
480
|
+
item_po_no: i.item.ItemPoNo || null,
|
|
481
|
+
},
|
|
482
|
+
};
|
|
483
|
+
});
|
|
484
|
+
if (!lineItems.length) {
|
|
485
|
+
framework_1.logger.warn(`[Webhook] No resolvable variants for ERP order ${erpOrderIdStr} — Medusa order not created. ` +
|
|
486
|
+
`order_master ${master.id} was created/updated but has no linked Medusa order. ` +
|
|
487
|
+
`Resolve variant mappings and re-trigger the webhook to complete the link.`);
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
// ─── Resolve shipping address ─────────────────────────────────────────────
|
|
491
|
+
let shippingAddress = undefined;
|
|
492
|
+
let billingAddress = undefined;
|
|
493
|
+
// Try ShippingId from ERP order first
|
|
494
|
+
if (data.ShippingId) {
|
|
495
|
+
try {
|
|
496
|
+
const shippingList = await shippingInfoService.listShippingInfoMasters({
|
|
497
|
+
shipping_id: data.ShippingId,
|
|
498
|
+
});
|
|
499
|
+
const si = shippingList?.[0];
|
|
500
|
+
if (si) {
|
|
501
|
+
shippingAddress = {
|
|
502
|
+
first_name: si.shipping_name || data.Customer || "",
|
|
503
|
+
last_name: "",
|
|
504
|
+
address_1: si.address1 || "",
|
|
505
|
+
address_2: si.address2 || "",
|
|
506
|
+
city: si.city || "",
|
|
507
|
+
country_code: "in",
|
|
508
|
+
province: si.state || "",
|
|
509
|
+
postal_code: si.pin_code || "",
|
|
510
|
+
phone: si.mobile_no || party?.owner_mobile || "",
|
|
511
|
+
company: "",
|
|
512
|
+
metadata: { party_shipping_id: String(si.shipping_id ?? "") },
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
catch (_) { /* ignore */ }
|
|
517
|
+
}
|
|
518
|
+
// Fallback: build address from party_master firm address
|
|
519
|
+
if (!shippingAddress && party) {
|
|
520
|
+
const addrLine = [party.firm_add1, party.firm_add2, party.firm_add3].filter(Boolean).join(", ");
|
|
521
|
+
if (addrLine) {
|
|
522
|
+
shippingAddress = {
|
|
523
|
+
first_name: party.firm_name || data.Customer || "",
|
|
524
|
+
last_name: "",
|
|
525
|
+
address_1: party.firm_add1 || "",
|
|
526
|
+
address_2: [party.firm_add2, party.firm_add3].filter(Boolean).join(", ") || "",
|
|
527
|
+
city: party.firm_city || "",
|
|
528
|
+
country_code: "in",
|
|
529
|
+
province: party.state || "",
|
|
530
|
+
postal_code: party.firm_pin_code || "",
|
|
531
|
+
phone: party.owner_mobile || "",
|
|
532
|
+
company: "",
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
billingAddress = shippingAddress;
|
|
537
|
+
// ─── Create Medusa order ─────────────────────────────────────────────────
|
|
538
|
+
const erpPaymentsForNewOrder = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
|
|
539
|
+
const newMedusaOrder = await orderModule.createOrders({
|
|
540
|
+
region_id: region.id,
|
|
541
|
+
currency_code: "inr",
|
|
542
|
+
status: erpPaymentsForNewOrder.length > 0 ? "completed" : "pending",
|
|
543
|
+
customer_id: medusaCustomerId ?? undefined,
|
|
544
|
+
email: orderEmail || undefined,
|
|
545
|
+
shipping_address: shippingAddress,
|
|
546
|
+
billing_address: billingAddress,
|
|
547
|
+
items: lineItems,
|
|
548
|
+
metadata: {
|
|
549
|
+
external_id: erpOrderIdStr, // ERP OrderId — prevents Flow 1 re-sync
|
|
550
|
+
sync_erp: true, // tells Flow 1 cron: already synced, skip
|
|
551
|
+
source: "erp", // origin marker
|
|
552
|
+
code: null,
|
|
553
|
+
OrderId: data.OrderId ?? null,
|
|
554
|
+
OrderPrefix: data.OrderPrefix ?? null,
|
|
555
|
+
OrderNo: data.OrderNo ?? null,
|
|
556
|
+
OrderDate: data.OrderDate ?? null,
|
|
557
|
+
customer: {
|
|
558
|
+
name: data.Customer ?? "",
|
|
559
|
+
email: "",
|
|
560
|
+
phone: "",
|
|
561
|
+
},
|
|
562
|
+
branch_no: data.BranchNo ?? null,
|
|
563
|
+
cart_type: "POS_CART",
|
|
564
|
+
sales_person_name: data.SalesPerson ?? null,
|
|
565
|
+
payment_mode: erpPaymentsForNewOrder.length > 1 ? "split" : "single",
|
|
566
|
+
payment_type: "full",
|
|
567
|
+
cart_order_type: "ready_to_sell",
|
|
568
|
+
store_discount: disAmount !== 0 ? { code: "STORE_DISCOUNT", amount: disAmount } : null,
|
|
569
|
+
rounded_discount: roundingAmount !== 0 ? { code: "ROUNDED_DISCOUNT", amount: roundingAmount } : null,
|
|
570
|
+
discount: promoAmount > 0
|
|
571
|
+
? { code: data.Promocode || "PROMOCODE", amount: promoAmount }
|
|
572
|
+
: (data.Promocode ? { code: data.Promocode, amount: data.PromocodeAmount ?? 0 } : null),
|
|
573
|
+
Detail: (data.OrderDetail ?? []).map((item) => ({
|
|
574
|
+
SrNo: item.SrNo,
|
|
575
|
+
JewelId: item.JewelId,
|
|
576
|
+
StyleId: item.StyleId,
|
|
577
|
+
OrderItemId: item.OrderItemId,
|
|
578
|
+
PartyStyleId: item.PartyStyleId,
|
|
579
|
+
})),
|
|
580
|
+
},
|
|
581
|
+
});
|
|
582
|
+
framework_1.logger.info(`[Webhook] Created Medusa order ${newMedusaOrder.id} for ERP order ${erpOrderIdStr}`);
|
|
583
|
+
// ─── Link order_master → new Medusa order ────────────────────────────────
|
|
584
|
+
try {
|
|
585
|
+
await link.create({
|
|
586
|
+
[order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
|
|
587
|
+
[utils_1.Modules.ORDER]: { order_id: newMedusaOrder.id },
|
|
588
|
+
});
|
|
589
|
+
framework_1.logger.info(`[Webhook] Linked order_master ${master.id} → new order ${newMedusaOrder.id}`);
|
|
590
|
+
}
|
|
591
|
+
catch (linkError) {
|
|
592
|
+
if (linkError?.message?.includes("Cannot create multiple links") ||
|
|
593
|
+
linkError?.message?.includes("already exists") ||
|
|
594
|
+
linkError?.code === "23505" ||
|
|
595
|
+
linkError?.name === "UniqueConstraintViolationError") {
|
|
596
|
+
framework_1.logger.info(`[Webhook] Link already exists for order_master ${master.id}`);
|
|
597
|
+
}
|
|
598
|
+
else {
|
|
599
|
+
throw linkError;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
// ─── Create payment collections and extended_order ──────────────────────
|
|
603
|
+
await createPaymentCollectionsFromErp(container, link, newMedusaOrder.id, data);
|
|
604
|
+
await createOrUpdateExtendedOrder(container, link, newMedusaOrder.id, erpOrderIdStr, data, {
|
|
605
|
+
customerId: medusaCustomerId,
|
|
606
|
+
email: orderEmail,
|
|
607
|
+
phone: party?.owner_mobile || "",
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
// ─── Main Step ───────────────────────────────────────────────────────────────
|
|
19
611
|
exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("process-order-master-from-webhook-step", async (fetchResult, { container }) => {
|
|
20
612
|
const orderMasterService = container.resolve(order_master_1.ORDER_MASTER_MODULE);
|
|
613
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
614
|
+
const link = container.resolve("link");
|
|
21
615
|
const orderDataList = normalizeOrderDataList(fetchResult);
|
|
22
616
|
if (!orderDataList.length) {
|
|
23
617
|
framework_1.logger.info("No order data to process from webhook");
|
|
@@ -32,6 +626,7 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
|
|
|
32
626
|
erp_order_id: Number(orderId),
|
|
33
627
|
});
|
|
34
628
|
let master;
|
|
629
|
+
// ─── STEP 1: Upsert order_master ──────────────────────────────────────
|
|
35
630
|
if (existing?.length > 0) {
|
|
36
631
|
framework_1.logger.info(`[Webhook] Updating Order ${orderId}`);
|
|
37
632
|
master = existing[0];
|
|
@@ -56,6 +651,7 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
|
|
|
56
651
|
promocode_percentage: data.PromocodePercentage ?? null,
|
|
57
652
|
promocode_amount: data.PromocodeAmount ?? null,
|
|
58
653
|
});
|
|
654
|
+
// ─── STEP 2: Upsert order_detail_master ───────────────────────────
|
|
59
655
|
if (data?.OrderDetail?.length) {
|
|
60
656
|
for (const d of data.OrderDetail) {
|
|
61
657
|
const existingDetail = await orderMasterService.listOrderDetailMasters({
|
|
@@ -114,6 +710,7 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
|
|
|
114
710
|
}
|
|
115
711
|
}
|
|
116
712
|
}
|
|
713
|
+
// ─── STEP 3: Upsert order_payment_option_master ───────────────────
|
|
117
714
|
if (data?.PaymentOption?.length) {
|
|
118
715
|
for (const p of data.PaymentOption) {
|
|
119
716
|
let existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
|
|
@@ -123,12 +720,11 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
|
|
|
123
720
|
order_master: master.id,
|
|
124
721
|
});
|
|
125
722
|
if (existingPayment?.length === 0 && p.TransNo) {
|
|
126
|
-
existingPayment =
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
});
|
|
723
|
+
existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
|
|
724
|
+
erp_order_id: p.OrderId,
|
|
725
|
+
voucher_entry_id: p.VoucherEntryId,
|
|
726
|
+
order_master: master.id,
|
|
727
|
+
});
|
|
132
728
|
}
|
|
133
729
|
const paymentData = {
|
|
134
730
|
erp_order_id: p.OrderId,
|
|
@@ -153,8 +749,36 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
|
|
|
153
749
|
}
|
|
154
750
|
}
|
|
155
751
|
}
|
|
752
|
+
// ─── STEP 4: Upsert order_addless_detail_master (update path) ────
|
|
753
|
+
if (data?.AddlessDetail?.length) {
|
|
754
|
+
for (const a of data.AddlessDetail) {
|
|
755
|
+
const existingAddless = await orderMasterService.listOrderAddlessDetailMasters({
|
|
756
|
+
erp_order_id: a.OrderId,
|
|
757
|
+
prompt: a.Prompt,
|
|
758
|
+
order_master: master.id,
|
|
759
|
+
});
|
|
760
|
+
const addlessData = {
|
|
761
|
+
erp_order_id: a.OrderId,
|
|
762
|
+
addless_id: a.Id ?? null,
|
|
763
|
+
prompt: a.Prompt,
|
|
764
|
+
addless_per: a.AddlessPer ?? null,
|
|
765
|
+
addless_amount: a.AddLessAmount,
|
|
766
|
+
order_master: master.id,
|
|
767
|
+
};
|
|
768
|
+
if (existingAddless?.length > 0) {
|
|
769
|
+
await orderMasterService.updateOrderAddlessDetailMasters({
|
|
770
|
+
id: existingAddless[0].id,
|
|
771
|
+
...addlessData,
|
|
772
|
+
});
|
|
773
|
+
}
|
|
774
|
+
else {
|
|
775
|
+
await orderMasterService.createOrderAddlessDetailMasters(addlessData);
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
}
|
|
156
779
|
}
|
|
157
780
|
else {
|
|
781
|
+
// ─── Create new order_master ───────────────────────────────────────
|
|
158
782
|
framework_1.logger.info(`[Webhook] Creating new Order ${orderId}`);
|
|
159
783
|
master = await orderMasterService.createOrderMasters({
|
|
160
784
|
erp_order_id: data.OrderId,
|
|
@@ -232,52 +856,62 @@ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("pro
|
|
|
232
856
|
amount: p.Amount,
|
|
233
857
|
})));
|
|
234
858
|
}
|
|
859
|
+
if (data?.AddlessDetail?.length) {
|
|
860
|
+
await orderMasterService.createOrderAddlessDetailMasters(data.AddlessDetail.map((a) => ({
|
|
861
|
+
erp_order_id: a.OrderId,
|
|
862
|
+
addless_id: a.Id ?? null,
|
|
863
|
+
prompt: a.Prompt,
|
|
864
|
+
addless_per: a.AddlessPer ?? null,
|
|
865
|
+
addless_amount: a.AddLessAmount,
|
|
866
|
+
order_master: master.id,
|
|
867
|
+
})));
|
|
868
|
+
}
|
|
235
869
|
}
|
|
236
|
-
//
|
|
870
|
+
// ─── STEP 5: Detect sub-scenario ────────────────────────────────────
|
|
237
871
|
const erpOrderIdStr = String(orderId);
|
|
238
|
-
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
872
|
+
// CHECK 1: PoNo is a Medusa order ID (Sub-scenario B)
|
|
873
|
+
const poNoIsMedusaOrderId = typeof data.PoNo === "string" && data.PoNo.startsWith("order_");
|
|
874
|
+
let medusaOrderId = null;
|
|
875
|
+
if (poNoIsMedusaOrderId) {
|
|
876
|
+
medusaOrderId = data.PoNo;
|
|
877
|
+
framework_1.logger.info(`[Webhook] Order ${erpOrderIdStr} is a returning Medusa order via PoNo: ${medusaOrderId}`);
|
|
878
|
+
}
|
|
879
|
+
// CHECK 2: Existing Medusa order by metadata.external_id (Sub-scenario B)
|
|
880
|
+
if (!medusaOrderId) {
|
|
881
|
+
try {
|
|
882
|
+
const { data: existingOrders } = await query.graph({
|
|
883
|
+
entity: "order",
|
|
884
|
+
fields: ["id"],
|
|
885
|
+
filters: {
|
|
886
|
+
// @ts-ignore - metadata filter for external_id
|
|
887
|
+
metadata: { external_id: erpOrderIdStr },
|
|
248
888
|
},
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
try {
|
|
254
|
-
await link.create({
|
|
255
|
-
[order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
|
|
256
|
-
[utils_1.Modules.ORDER]: { order_id: medusaOrderId },
|
|
257
|
-
});
|
|
258
|
-
framework_1.logger.info(`[Webhook] Linked order_master ${master.id} to order ${medusaOrderId} (ERP OrderId: ${erpOrderIdStr})`);
|
|
259
|
-
}
|
|
260
|
-
catch (linkError) {
|
|
261
|
-
if (linkError?.message?.includes("Cannot create multiple links") ||
|
|
262
|
-
linkError?.message?.includes("already exists") ||
|
|
263
|
-
linkError?.code === "23505" ||
|
|
264
|
-
linkError?.name === "UniqueConstraintViolationError") {
|
|
265
|
-
framework_1.logger.info(`[Webhook] Link already exists order_master ${master.id} to order ${medusaOrderId}`);
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
throw linkError;
|
|
269
|
-
}
|
|
889
|
+
});
|
|
890
|
+
if (existingOrders?.length > 0) {
|
|
891
|
+
medusaOrderId = existingOrders[0].id;
|
|
892
|
+
framework_1.logger.info(`[Webhook] Found Medusa order ${medusaOrderId} by metadata.external_id=${erpOrderIdStr}`);
|
|
270
893
|
}
|
|
271
894
|
}
|
|
895
|
+
catch (queryErr) {
|
|
896
|
+
framework_1.logger.warn(`[Webhook] metadata.external_id lookup failed: ${queryErr?.message}`);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
// ─── STEP 6/7-9: Route to correct handler ───────────────────────────
|
|
900
|
+
try {
|
|
901
|
+
if (medusaOrderId) {
|
|
902
|
+
// Sub-scenario B: link existing Medusa order
|
|
903
|
+
await handleExistingMedusaOrder(medusaOrderId, master, data, erpOrderIdStr, link, query, container);
|
|
904
|
+
}
|
|
272
905
|
else {
|
|
273
|
-
|
|
906
|
+
// Sub-scenario A: create new Medusa order from ERP data
|
|
907
|
+
await handleNewMedusaOrderFromErp(master, data, erpOrderIdStr, link, container);
|
|
274
908
|
}
|
|
275
909
|
}
|
|
276
|
-
catch (
|
|
277
|
-
framework_1.logger.warn(`[Webhook]
|
|
910
|
+
catch (handlerError) {
|
|
911
|
+
framework_1.logger.warn(`[Webhook] Order handler error for ERP order ${erpOrderIdStr}: ${handlerError?.message}`);
|
|
278
912
|
}
|
|
279
913
|
processed.push(master);
|
|
280
914
|
}
|
|
281
915
|
return new workflows_sdk_1.StepResponse(processed);
|
|
282
916
|
});
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlci1tYXN0ZXIvc3RlcHMvcHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFFL0UsZ0VBQW9FO0FBQ3BFLG1EQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQVMsc0JBQXNCLENBQUMsTUFBVztJQUN6QyxJQUFJLE1BQU0sSUFBSSxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakcsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFWSxRQUFBLGlDQUFpQyxHQUFHLElBQUEsMEJBQVUsRUFDekQsd0NBQXdDLEVBQ3hDLEtBQUssRUFBRSxXQUFnQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN4QyxNQUFNLGtCQUFrQixHQUF1QixTQUFTLENBQUMsT0FBTyxDQUM5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
|
|
917
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlci1tYXN0ZXIvc3RlcHMvcHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFFL0UsZ0VBQW9FO0FBQ3BFLGdFQUFvRTtBQUNwRSx3RUFBNEU7QUFDNUUsZ0ZBQW9GO0FBQ3BGLG1EQUE2QztBQUU3Qzs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFFBQWdCO0lBQy9DLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEksT0FBTyxnQ0FBZ0MsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUcsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lB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
|