@shushed/helpers 0.0.289 → 0.0.291

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.
Files changed (76) hide show
  1. package/dist/cjs/contracts/order/address.schema.json +14 -18
  2. package/dist/cjs/contracts/order/item.schema.json +6 -1
  3. package/dist/cjs/contracts/order/payment.schema.json +4 -4
  4. package/dist/cjs/contracts/order/shipment/item.schema.json +6 -1
  5. package/dist/cjs/contracts/order/shipment.schema.json +14 -0
  6. package/dist/cjs/contracts/order.schema.json +53 -53
  7. package/dist/cjs/dist-dereferenced/messages/order/delivered.js +1 -1
  8. package/dist/cjs/dist-dereferenced/messages/order/new.js +1 -1
  9. package/dist/cjs/dist-dereferenced/messages/order/processed.js +1 -1
  10. package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js +1 -1
  11. package/dist/cjs/dist-dereferenced/messages/order/returned.js +1 -1
  12. package/dist/cjs/dist-dereferenced/messages/order/shipped.js +1 -1
  13. package/dist/cjs/dist-dereferenced/order/address.js +1 -1
  14. package/dist/cjs/dist-dereferenced/order/customer.js +1 -1
  15. package/dist/cjs/dist-dereferenced/order/item.js +1 -1
  16. package/dist/cjs/dist-dereferenced/order/orderMain.js +1 -1
  17. package/dist/cjs/dist-dereferenced/order/payment.js +1 -1
  18. package/dist/cjs/dist-dereferenced/order/shipment/item/itemMain.js +1 -1
  19. package/dist/cjs/dist-dereferenced/order/shipment/item/returned.js +1 -1
  20. package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js +1 -1
  21. package/dist/cjs/dist-dereferenced/order/shipment/pos/posMain.js +1 -1
  22. package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js +1 -1
  23. package/dist/cjs/dist-dereferenced/order/shipment/shipmentMain.js +1 -1
  24. package/dist/cjs/dist-dereferenced/order/shipment/shipped/outbound.js +1 -1
  25. package/dist/cjs/dist-dereferenced/order/shipment/shipped/return.js +1 -1
  26. package/dist/cjs/dist-dereferenced/order/shipment/shipped/shippedMain.js +1 -1
  27. package/dist/cjs/src-public/bcOrder.js +167 -154
  28. package/dist/cjs/src-public/pubsub.js +0 -1
  29. package/dist/package.json +1 -0
  30. package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +117 -105
  31. package/dist/types/dist-dereferenced/messages/order/new.d.ts +117 -105
  32. package/dist/types/dist-dereferenced/messages/order/processed.d.ts +117 -105
  33. package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +117 -105
  34. package/dist/types/dist-dereferenced/messages/order/returned.d.ts +117 -105
  35. package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +117 -105
  36. package/dist/types/dist-dereferenced/order/address.d.ts +10 -14
  37. package/dist/types/dist-dereferenced/order/customer.d.ts +10 -14
  38. package/dist/types/dist-dereferenced/order/index.d.ts +117 -105
  39. package/dist/types/dist-dereferenced/order/item.d.ts +3 -0
  40. package/dist/types/dist-dereferenced/order/orderMain.d.ts +117 -105
  41. package/dist/types/dist-dereferenced/order/payment.d.ts +2 -2
  42. package/dist/types/dist-dereferenced/order/shipment/index.d.ts +15 -1
  43. package/dist/types/dist-dereferenced/order/shipment/item/index.d.ts +4 -1
  44. package/dist/types/dist-dereferenced/order/shipment/item/itemMain.d.ts +4 -1
  45. package/dist/types/dist-dereferenced/order/shipment/item/returned.d.ts +4 -1
  46. package/dist/types/dist-dereferenced/order/shipment/pos/index.d.ts +15 -1
  47. package/dist/types/dist-dereferenced/order/shipment/pos/outbound.d.ts +15 -1
  48. package/dist/types/dist-dereferenced/order/shipment/pos/posMain.d.ts +15 -1
  49. package/dist/types/dist-dereferenced/order/shipment/pos/return.d.ts +15 -1
  50. package/dist/types/dist-dereferenced/order/shipment/shipmentMain.d.ts +15 -1
  51. package/dist/types/dist-dereferenced/order/shipment/shipped/index.d.ts +15 -1
  52. package/dist/types/dist-dereferenced/order/shipment/shipped/outbound.d.ts +15 -1
  53. package/dist/types/dist-dereferenced/order/shipment/shipped/return.d.ts +15 -1
  54. package/dist/types/dist-dereferenced/order/shipment/shipped/shippedMain.d.ts +15 -1
  55. package/dist/types/dist-types/messages/order/delivered.d.ts +14 -9
  56. package/dist/types/dist-types/messages/order/new.d.ts +14 -9
  57. package/dist/types/dist-types/messages/order/processed.d.ts +14 -9
  58. package/dist/types/dist-types/messages/order/return-initiated.d.ts +14 -9
  59. package/dist/types/dist-types/messages/order/returned.d.ts +14 -9
  60. package/dist/types/dist-types/messages/order/shipped.d.ts +14 -9
  61. package/dist/types/dist-types/order/address.d.ts +3 -3
  62. package/dist/types/dist-types/order/customer.d.ts +6 -6
  63. package/dist/types/dist-types/order/item.d.ts +1 -0
  64. package/dist/types/dist-types/order/orderMain.d.ts +14 -9
  65. package/dist/types/dist-types/order/payment.d.ts +2 -2
  66. package/dist/types/dist-types/order/shipment/item/itemMain.d.ts +1 -0
  67. package/dist/types/dist-types/order/shipment/item/returned.d.ts +1 -0
  68. package/dist/types/dist-types/order/shipment/pos/outbound.d.ts +4 -0
  69. package/dist/types/dist-types/order/shipment/pos/posMain.d.ts +4 -0
  70. package/dist/types/dist-types/order/shipment/pos/return.d.ts +4 -0
  71. package/dist/types/dist-types/order/shipment/shipmentMain.d.ts +4 -0
  72. package/dist/types/dist-types/order/shipment/shipped/outbound.d.ts +4 -0
  73. package/dist/types/dist-types/order/shipment/shipped/return.d.ts +4 -0
  74. package/dist/types/dist-types/order/shipment/shipped/shippedMain.d.ts +4 -0
  75. package/dist/types/src-public/pubsub.d.ts +0 -1
  76. package/package.json +2 -1
@@ -7,6 +7,7 @@ exports.BCOrderHelper = void 0;
7
7
  exports.buildLineGrouping = buildLineGrouping;
8
8
  exports.transformMasterOrder = transformMasterOrder;
9
9
  exports.validateOrder = validateOrder;
10
+ const currency_js_1 = __importDefault(require("currency.js"));
10
11
  const order_schema_json_1 = __importDefault(require("../contracts/order.schema.json"));
11
12
  const runtime_1 = __importDefault(require("./runtime"));
12
13
  const validate_1 = __importDefault(require("./validate"));
@@ -14,10 +15,7 @@ const GBP = "GBP";
14
15
  function toMinorUnits(amount) {
15
16
  if (typeof amount !== "number" || !isFinite(amount))
16
17
  return 0;
17
- if (Math.abs(amount) > Number.MAX_SAFE_INTEGER / 100) {
18
- return Math.round(Number((amount * 100).toPrecision(15)));
19
- }
20
- return Math.round(amount * 100);
18
+ return (0, currency_js_1.default)(amount).intValue;
21
19
  }
22
20
  function money(value) {
23
21
  const v = toMinorUnits(value);
@@ -40,6 +38,12 @@ function moneyFromMinor(minor) {
40
38
  lcy_decimal_places: 2,
41
39
  };
42
40
  }
41
+ function trimAddr(val) {
42
+ if (val === null || val === undefined)
43
+ return null;
44
+ const s = String(val).replace(/[,\s]+$/g, '').replace(/^[\s]+/, '');
45
+ return s.length > 0 ? s : null;
46
+ }
43
47
  function buildLineGrouping(payload) {
44
48
  const group = {};
45
49
  const makeKey = (orderNo, lineNo) => `${orderNo}:${lineNo}`;
@@ -102,8 +106,10 @@ function buildLineGrouping(payload) {
102
106
  }
103
107
  function transformMasterOrder(payload) {
104
108
  const erp_order_id = payload.no || payload.system_id || "";
105
- const sale0 = Array.isArray(payload.sales) && payload.sales.length > 0 ? payload.sales[0] : undefined;
109
+ const allSales = Array.isArray(payload.sales) ? payload.sales : [];
110
+ const sale0 = allSales.find((s) => (s.sale_lines || []).length > 0) || allSales[0] || undefined;
106
111
  const invoice0 = Array.isArray(payload.invoices) && payload.invoices.length > 0 ? payload.invoices[0] : undefined;
112
+ const allSaleLines = allSales.flatMap((s) => s.sale_lines || []);
107
113
  const normalizeIntegerOrNull = (value) => {
108
114
  if (value === null || value === undefined)
109
115
  return null;
@@ -169,7 +175,7 @@ function transformMasterOrder(payload) {
169
175
  const is_gift = Boolean((sale0?.gift_message && String(sale0?.gift_message).trim().length > 0) ||
170
176
  (payload.invoices?.some((i) => (i.gift_message || "").trim().length > 0)));
171
177
  const invoiceLinesForReturn = payload.invoices?.flatMap((i) => i.invoice_lines || []) || [];
172
- const salesLinesFallbackForReturn = (sale0?.sale_lines || []);
178
+ const salesLinesFallbackForReturn = allSaleLines;
173
179
  const sourceLinesForReturn = invoiceLinesForReturn.length > 0 ? invoiceLinesForReturn : salesLinesFallbackForReturn;
174
180
  const skuByDescription = {};
175
181
  sourceLinesForReturn.forEach((line) => {
@@ -225,7 +231,7 @@ function transformMasterOrder(payload) {
225
231
  });
226
232
  });
227
233
  const invoiceLines = payload.invoices?.flatMap((i) => i.invoice_lines || []) || [];
228
- const salesLinesFallback = (sale0?.sale_lines || []).map((l) => ({
234
+ const salesLinesFallback = allSaleLines.map((l) => ({
229
235
  type: l.type || "Item",
230
236
  no: l.no,
231
237
  variant_code: l.variant_code,
@@ -292,30 +298,30 @@ function transformMasterOrder(payload) {
292
298
  vatRate = vatPercent / 100;
293
299
  }
294
300
  else if (netTotal > 0 && grossTotal > 0) {
295
- vatRate = Math.max(0, (grossTotal - netTotal) / netTotal);
301
+ vatRate = Math.max(0, (0, currency_js_1.default)(grossTotal).subtract(netTotal).divide(netTotal).value);
296
302
  }
297
303
  let unitNet = 0;
298
304
  let unitGross = 0;
299
305
  if (unitPriceRaw > 0) {
300
306
  if (headerPricesInclVat) {
301
307
  unitGross = unitPriceRaw;
302
- unitNet = vatRate > 0 ? (unitGross / (1 + vatRate)) : unitGross;
308
+ unitNet = vatRate > 0 ? (0, currency_js_1.default)(unitGross).divide(1 + vatRate).value : unitGross;
303
309
  }
304
310
  else {
305
311
  unitNet = unitPriceRaw;
306
- unitGross = vatRate > 0 ? (unitNet * (1 + vatRate)) : unitNet;
312
+ unitGross = vatRate > 0 ? (0, currency_js_1.default)(unitNet).multiply(1 + vatRate).value : unitNet;
307
313
  }
308
314
  }
309
315
  else {
310
316
  unitNet = quantity > 0
311
317
  ? (netTotal > 0
312
- ? netTotal / quantity
313
- : (grossTotal > 0 && vatRate > 0 ? (grossTotal / (1 + vatRate)) / quantity : 0))
318
+ ? (0, currency_js_1.default)(netTotal).divide(quantity).value
319
+ : (grossTotal > 0 && vatRate > 0 ? (0, currency_js_1.default)(grossTotal).divide(1 + vatRate).divide(quantity).value : 0))
314
320
  : 0;
315
321
  unitGross = quantity > 0
316
322
  ? (grossTotal > 0
317
- ? grossTotal / quantity
318
- : (netTotal > 0 && vatRate > 0 ? (netTotal * (1 + vatRate)) / quantity : 0))
323
+ ? (0, currency_js_1.default)(grossTotal).divide(quantity).value
324
+ : (netTotal > 0 && vatRate > 0 ? (0, currency_js_1.default)(netTotal).multiply(1 + vatRate).divide(quantity).value : 0))
319
325
  : 0;
320
326
  }
321
327
  const discountCode = (line.salesforce_promotion_id && line.salesforce_promotion_id.trim().length > 0)
@@ -336,22 +342,22 @@ function transformMasterOrder(payload) {
336
342
  if (discountAmountRaw > 0) {
337
343
  if (headerPricesInclVat) {
338
344
  discountGross = discountAmountRaw;
339
- discountNet = vatRate > 0 ? (discountGross / (1 + vatRate)) : discountGross;
345
+ discountNet = vatRate > 0 ? (0, currency_js_1.default)(discountGross).divide(1 + vatRate).value : discountGross;
340
346
  }
341
347
  else {
342
348
  discountNet = discountAmountRaw;
343
- discountGross = vatRate > 0 ? (discountNet * (1 + vatRate)) : discountNet;
349
+ discountGross = vatRate > 0 ? (0, currency_js_1.default)(discountNet).multiply(1 + vatRate).value : discountNet;
344
350
  }
345
351
  }
346
352
  else if (discountPercent > 0) {
347
353
  if (netTotal > 0)
348
- discountNet = (netTotal * discountPercent) / 100;
354
+ discountNet = (0, currency_js_1.default)(netTotal).multiply(discountPercent).divide(100).value;
349
355
  if (grossTotal > 0)
350
- discountGross = (grossTotal * discountPercent) / 100;
356
+ discountGross = (0, currency_js_1.default)(grossTotal).multiply(discountPercent).divide(100).value;
351
357
  if (grossTotal === 0 && discountNet > 0 && vatRate > 0)
352
- discountGross = discountNet * (1 + vatRate);
358
+ discountGross = (0, currency_js_1.default)(discountNet).multiply(1 + vatRate).value;
353
359
  if (netTotal === 0 && discountGross > 0 && vatRate > 0)
354
- discountNet = discountGross / (1 + vatRate);
360
+ discountNet = (0, currency_js_1.default)(discountGross).divide(1 + vatRate).value;
355
361
  }
356
362
  const take = Math.min(shippedRemainingBySku[sku] || 0, quantity);
357
363
  const remaining = quantity - take;
@@ -375,10 +381,10 @@ function transformMasterOrder(payload) {
375
381
  ...baseFields,
376
382
  quantity: qty,
377
383
  returned_quantity: Math.max(0, Number(returnedQtyForLine || 0)),
378
- amount_net: money(unitNet * qty),
379
- amount_gross: money(unitGross * qty),
380
- discount_amount_net: money(discountNet * (qty / Math.max(1, quantity))),
381
- discount_amount_gross: money(discountGross * (qty / Math.max(1, quantity))),
384
+ amount_net: money((0, currency_js_1.default)(unitNet).multiply(qty).value),
385
+ amount_gross: money((0, currency_js_1.default)(unitGross).multiply(qty).value),
386
+ discount_amount_net: money((0, currency_js_1.default)(discountNet).multiply(qty).divide(Math.max(1, quantity)).value),
387
+ discount_amount_gross: money((0, currency_js_1.default)(discountGross).multiply(qty).divide(Math.max(1, quantity)).value),
382
388
  discount_amount_percent: line.line_discount_percent || 0,
383
389
  });
384
390
  };
@@ -414,10 +420,10 @@ function transformMasterOrder(payload) {
414
420
  });
415
421
  });
416
422
  if (invoicesGrossMinor === 0 && (payload.invoices || []).length > 0) {
417
- invoicesGrossMinor = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_incl_vat || 0), 0));
423
+ invoicesGrossMinor = toMinorUnits((payload.invoices || []).reduce((acc, inv) => (0, currency_js_1.default)(acc).add(inv.amount_incl_vat || 0).value, 0));
418
424
  }
419
- if (invoicesGrossMinor === 0 && invoicedLineNos.size > 0 && sale0?.sale_lines) {
420
- const invoicedSaleLines = (sale0?.sale_lines || []).filter((l) => {
425
+ if (invoicesGrossMinor === 0 && invoicedLineNos.size > 0 && allSaleLines.length > 0) {
426
+ const invoicedSaleLineItems = allSaleLines.filter((l) => {
421
427
  if (isDeliveryItem(l))
422
428
  return false;
423
429
  if (String(l?.type || '').toLowerCase() !== 'item')
@@ -425,18 +431,18 @@ function transformMasterOrder(payload) {
425
431
  const lineNo = Number(l?.line_no || -1);
426
432
  return invoicedLineNos.has(lineNo);
427
433
  });
428
- invoicesGrossMinor = toMinorUnits(invoicedSaleLines.reduce((acc, l) => acc + (Number(l?.amount_including_vat || 0)), 0));
434
+ invoicesGrossMinor = toMinorUnits(invoicedSaleLineItems.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount_including_vat || 0)).value, 0));
429
435
  }
430
436
  let nonInvSalesGrossMinor = 0;
431
- if (sale0?.sale_lines && sale0.sale_lines.length > 0) {
432
- const allSaleLines = (sale0.sale_lines || []).filter((l) => {
437
+ if (allSaleLines.length > 0) {
438
+ const saleLinesNoDelivery = allSaleLines.filter((l) => {
433
439
  if (isDeliveryItem(l))
434
440
  return false;
435
441
  if (String(l?.type || '').toLowerCase() !== 'item')
436
442
  return false;
437
443
  return true;
438
444
  });
439
- const totalSaleGrossMinor = toMinorUnits(allSaleLines.reduce((acc, l) => acc + (Number(l?.amount_including_vat || 0)), 0));
445
+ const totalSaleGrossMinor = toMinorUnits(saleLinesNoDelivery.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount_including_vat || 0)).value, 0));
440
446
  if (invoicesGrossMinor > 0) {
441
447
  nonInvSalesGrossMinor = Math.max(0, totalSaleGrossMinor - invoicesGrossMinor);
442
448
  }
@@ -445,7 +451,7 @@ function transformMasterOrder(payload) {
445
451
  }
446
452
  }
447
453
  else if (sale0 && (sale0.amount_excl_vat || sale0.amount_incl_vat)) {
448
- const saleGrossMinor = toMinorUnits(sale0.amount_incl_vat || 0);
454
+ const saleGrossMinor = toMinorUnits(allSales.reduce((acc, s) => (0, currency_js_1.default)(acc).add(s.amount_incl_vat || 0).value, 0));
449
455
  if (invoicesGrossMinor > 0) {
450
456
  nonInvSalesGrossMinor = Math.max(0, saleGrossMinor - invoicesGrossMinor);
451
457
  }
@@ -454,7 +460,7 @@ function transformMasterOrder(payload) {
454
460
  }
455
461
  }
456
462
  else {
457
- const nonInvoicedSales = (sale0?.sale_lines || []).filter((l) => {
463
+ const nonInvoicedSaleItems = allSaleLines.filter((l) => {
458
464
  if (isDeliveryItem(l))
459
465
  return false;
460
466
  if (String(l?.type || '').toLowerCase() !== 'item')
@@ -462,21 +468,21 @@ function transformMasterOrder(payload) {
462
468
  const lineNo = Number(l?.line_no || -1);
463
469
  return !invoicedLineNos.has(lineNo);
464
470
  });
465
- nonInvSalesGrossMinor = toMinorUnits(nonInvoicedSales.reduce((acc, l) => acc + (Number(l?.amount_including_vat || 0)), 0));
471
+ nonInvSalesGrossMinor = toMinorUnits(nonInvoicedSaleItems.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount_including_vat || 0)).value, 0));
466
472
  }
467
473
  const totalGrossMinor = invoicesGrossMinor + nonInvSalesGrossMinor;
468
- const invoicesNetMinorWithDelivery = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_excl_vat || 0), 0));
469
- const invoicesGrossMinorWithDelivery = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_incl_vat || 0), 0));
474
+ const invoicesNetMinorWithDelivery = toMinorUnits((payload.invoices || []).reduce((acc, inv) => (0, currency_js_1.default)(acc).add(inv.amount_excl_vat || 0).value, 0));
475
+ const invoicesGrossMinorWithDelivery = toMinorUnits((payload.invoices || []).reduce((acc, inv) => (0, currency_js_1.default)(acc).add(inv.amount_incl_vat || 0).value, 0));
470
476
  let nonInvSalesNetMinorWithDelivery = 0;
471
477
  let nonInvSalesGrossMinorWithDelivery = 0;
472
- if (sale0?.sale_lines && sale0.sale_lines.length > 0) {
473
- const allSaleLinesWithDelivery = (sale0.sale_lines || []).filter((l) => {
478
+ if (allSaleLines.length > 0) {
479
+ const saleLinesWithDelivery = allSaleLines.filter((l) => {
474
480
  if (String(l?.type || '').toLowerCase() !== 'item')
475
481
  return false;
476
482
  return true;
477
483
  });
478
- const totalSaleNetMinorWithDelivery = toMinorUnits(allSaleLinesWithDelivery.reduce((acc, l) => acc + (Number(l?.amount || 0)), 0));
479
- const totalSaleGrossMinorWithDelivery = toMinorUnits(allSaleLinesWithDelivery.reduce((acc, l) => acc + (Number(l?.amount_including_vat || 0)), 0));
484
+ const totalSaleNetMinorWithDelivery = toMinorUnits(saleLinesWithDelivery.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount || 0)).value, 0));
485
+ const totalSaleGrossMinorWithDelivery = toMinorUnits(saleLinesWithDelivery.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount_including_vat || 0)).value, 0));
480
486
  if (invoicesGrossMinorWithDelivery > 0) {
481
487
  nonInvSalesNetMinorWithDelivery = Math.max(0, totalSaleNetMinorWithDelivery - invoicesNetMinorWithDelivery);
482
488
  nonInvSalesGrossMinorWithDelivery = Math.max(0, totalSaleGrossMinorWithDelivery - invoicesGrossMinorWithDelivery);
@@ -487,8 +493,8 @@ function transformMasterOrder(payload) {
487
493
  }
488
494
  }
489
495
  else if (sale0 && (sale0.amount_excl_vat || sale0.amount_incl_vat)) {
490
- const saleNetMinor = toMinorUnits(sale0.amount_excl_vat || 0);
491
- const saleGrossMinor = toMinorUnits(sale0.amount_incl_vat || 0);
496
+ const saleNetMinor = toMinorUnits(allSales.reduce((acc, s) => (0, currency_js_1.default)(acc).add(s.amount_excl_vat || 0).value, 0));
497
+ const saleGrossMinor = toMinorUnits(allSales.reduce((acc, s) => (0, currency_js_1.default)(acc).add(s.amount_incl_vat || 0).value, 0));
492
498
  if (invoicesGrossMinorWithDelivery > 0) {
493
499
  nonInvSalesNetMinorWithDelivery = Math.max(0, saleNetMinor - invoicesNetMinorWithDelivery);
494
500
  nonInvSalesGrossMinorWithDelivery = Math.max(0, saleGrossMinor - invoicesGrossMinorWithDelivery);
@@ -499,14 +505,14 @@ function transformMasterOrder(payload) {
499
505
  }
500
506
  }
501
507
  else {
502
- const nonInvoicedSalesWithDelivery = (sale0?.sale_lines || []).filter((l) => {
508
+ const nonInvoicedSalesWithDelivery = allSaleLines.filter((l) => {
503
509
  if (String(l?.type || '').toLowerCase() !== 'item')
504
510
  return false;
505
511
  const lineNo = Number(l?.line_no || -1);
506
512
  return !invoicedLineNos.has(lineNo);
507
513
  });
508
- nonInvSalesNetMinorWithDelivery = toMinorUnits(nonInvoicedSalesWithDelivery.reduce((acc, l) => acc + (Number(l?.amount || 0)), 0));
509
- nonInvSalesGrossMinorWithDelivery = toMinorUnits(nonInvoicedSalesWithDelivery.reduce((acc, l) => acc + (Number(l?.amount_including_vat || 0)), 0));
514
+ nonInvSalesNetMinorWithDelivery = toMinorUnits(nonInvoicedSalesWithDelivery.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount || 0)).value, 0));
515
+ nonInvSalesGrossMinorWithDelivery = toMinorUnits(nonInvoicedSalesWithDelivery.reduce((acc, l) => (0, currency_js_1.default)(acc).add(Number(l?.amount_including_vat || 0)).value, 0));
510
516
  }
511
517
  const totalNetMinorWithDelivery = invoicesNetMinorWithDelivery + nonInvSalesNetMinorWithDelivery;
512
518
  const totalGrossMinorWithDelivery = invoicesGrossMinorWithDelivery + nonInvSalesGrossMinorWithDelivery;
@@ -542,7 +548,26 @@ function transformMasterOrder(payload) {
542
548
  }
543
549
  return 'STANDARD';
544
550
  };
545
- const mappedShipments = (payload.shipments || []).map((s) => {
551
+ let deliveryGrossMinor = 0;
552
+ let deliveryNetMinor = 0;
553
+ let deliveryDiscountGrossMinor = 0;
554
+ let deliveryDiscountNetMinor = 0;
555
+ const deliverySourceLines = invoiceLines.length > 0 ? invoiceLines : allSaleLines;
556
+ deliverySourceLines.forEach((line) => {
557
+ if (!isDeliveryItem(line))
558
+ return;
559
+ const gross = toMinorUnits(Number(line?.amount_including_vat || line?.amount_incl_vat || 0));
560
+ const net = toMinorUnits(Number(line?.amount || line?.amount_excl_vat || 0));
561
+ deliveryGrossMinor += gross;
562
+ deliveryNetMinor += net;
563
+ const lineDiscGross = toMinorUnits(Number(line?.line_discount_amount || 0));
564
+ const lineDiscNet = headerPricesInclVat
565
+ ? (0, currency_js_1.default)(lineDiscGross, { fromCents: true }).divide(1.2).intValue
566
+ : lineDiscGross;
567
+ deliveryDiscountGrossMinor += lineDiscGross;
568
+ deliveryDiscountNetMinor += lineDiscNet;
569
+ });
570
+ const mappedShipments = (payload.shipments || []).map((s, shipIdx) => {
546
571
  const rawLines = (s.shipment_lines || [])
547
572
  .filter((l) => isShippableItem(l));
548
573
  const qtyBySku = new Map();
@@ -559,6 +584,11 @@ function transformMasterOrder(payload) {
559
584
  sku,
560
585
  quantity: Math.max(1, qtyBySku.get(sku) || 0),
561
586
  }));
587
+ const isFirstShipment = shipIdx === 0;
588
+ const shipGross = isFirstShipment ? deliveryGrossMinor : 0;
589
+ const shipNet = isFirstShipment ? deliveryNetMinor : 0;
590
+ const shipDiscGross = isFirstShipment ? deliveryDiscountGrossMinor : 0;
591
+ const shipDiscNet = isFirstShipment ? deliveryDiscountNetMinor : 0;
562
592
  const statusVal = shipmentLines.length > 0 ? "SHIPPED" : "PENDING";
563
593
  return {
564
594
  erp_id: s.no || s.system_id || "",
@@ -570,10 +600,10 @@ function transformMasterOrder(payload) {
570
600
  tracking_code: (s.torque_tracking_id && typeof s.torque_tracking_id === 'string') ? s.torque_tracking_id : null,
571
601
  class_name: mapClassName(s.shipping_agent_service_code),
572
602
  items: shipmentLines,
573
- amount_net: money(0),
574
- amount_gross: money(0),
575
- discount_amount_net: money(0),
576
- discount_amount_gross: money(0),
603
+ amount_net: moneyFromMinor(shipNet),
604
+ amount_gross: moneyFromMinor(shipGross),
605
+ discount_amount_net: moneyFromMinor(shipDiscNet),
606
+ discount_amount_gross: moneyFromMinor(shipDiscGross),
577
607
  discount_amount_percent: 0,
578
608
  };
579
609
  });
@@ -660,7 +690,7 @@ function transformMasterOrder(payload) {
660
690
  const isRefund = itemNo.toUpperCase() === 'REFUND';
661
691
  if ((l?.quantity || 0) > 0 && isItemish && !isRefund && !isDeliveryItem(l)) {
662
692
  hasQualifying = true;
663
- return s + (l?.amount_including_vat || 0);
693
+ return (0, currency_js_1.default)(s).add(l?.amount_including_vat || 0).value;
664
694
  }
665
695
  return s;
666
696
  }, 0);
@@ -672,16 +702,16 @@ function transformMasterOrder(payload) {
672
702
  const isItemish = typeStr.includes('item') || looksProduct;
673
703
  const isRefund = itemNo.toUpperCase() === 'REFUND';
674
704
  if ((l?.quantity || 0) > 0 && isItemish && !isRefund && !isDeliveryItem(l)) {
675
- return s + (l?.amount || l?.amount_excl_vat || 0);
705
+ return (0, currency_js_1.default)(s).add(l?.amount || l?.amount_excl_vat || 0).value;
676
706
  }
677
707
  return s;
678
708
  }, 0);
679
709
  if (!hasQualifying)
680
710
  return acc;
681
711
  if (cm?.amount_incl_vat != null && cm.amount_incl_vat > 0) {
682
- return { gross: acc.gross + cm.amount_incl_vat, net: acc.net + (cm.amount_excl_vat || 0) };
712
+ return { gross: (0, currency_js_1.default)(acc.gross).add(cm.amount_incl_vat).value, net: (0, currency_js_1.default)(acc.net).add(cm.amount_excl_vat || 0).value };
683
713
  }
684
- return { gross: acc.gross + sumGross, net: acc.net + sumNet };
714
+ return { gross: (0, currency_js_1.default)(acc.gross).add(sumGross).value, net: (0, currency_js_1.default)(acc.net).add(sumNet).value };
685
715
  }, { gross: 0, net: 0 });
686
716
  const merchReturnGrossFromReturnSales = (payload.sales || []).reduce((acc, sale) => {
687
717
  const docTypeRaw = String(sale?.document_type || sale?.documentType || "");
@@ -689,7 +719,7 @@ function transformMasterOrder(payload) {
689
719
  if (!isReturnOrder)
690
720
  return acc;
691
721
  if (sale?.amount_incl_vat != null && sale.amount_incl_vat > 0) {
692
- return { gross: acc.gross + sale.amount_incl_vat, net: acc.net + (sale.amount_excl_vat || sale.amount || 0) };
722
+ return { gross: (0, currency_js_1.default)(acc.gross).add(sale.amount_incl_vat).value, net: (0, currency_js_1.default)(acc.net).add(sale.amount_excl_vat || sale.amount || 0).value };
693
723
  }
694
724
  const lines = sale?.sale_lines || [];
695
725
  let hasQualifying = false;
@@ -702,7 +732,7 @@ function transformMasterOrder(payload) {
702
732
  const isRefund = itemNo.toUpperCase() === 'REFUND';
703
733
  if ((l?.quantity || 0) > 0 && isItemish && !isRefund && !isDeliveryItem(l)) {
704
734
  hasQualifying = true;
705
- return s + (l?.amount_including_vat || 0);
735
+ return (0, currency_js_1.default)(s).add(l?.amount_including_vat || 0).value;
706
736
  }
707
737
  return s;
708
738
  }, 0);
@@ -714,22 +744,22 @@ function transformMasterOrder(payload) {
714
744
  const isItemish = typeStr.includes('item') || looksProduct;
715
745
  const isRefund = itemNo.toUpperCase() === 'REFUND';
716
746
  if ((l?.quantity || 0) > 0 && isItemish && !isRefund && !isDeliveryItem(l)) {
717
- return s + (l?.amount || l?.amount_excl_vat || 0);
747
+ return (0, currency_js_1.default)(s).add(l?.amount || l?.amount_excl_vat || 0).value;
718
748
  }
719
749
  return s;
720
750
  }, 0);
721
751
  if (sumGross > 0) {
722
- return { gross: acc.gross + sumGross, net: acc.net + sumNet };
752
+ return { gross: (0, currency_js_1.default)(acc.gross).add(sumGross).value, net: (0, currency_js_1.default)(acc.net).add(sumNet).value };
723
753
  }
724
754
  if (hasQualifying) {
725
- return { gross: acc.gross + (sale?.amount_incl_vat || sale?.amount_including_vat || 0), net: acc.net + (sale?.amount_excl_vat || sale?.amount || 0) };
755
+ return { gross: (0, currency_js_1.default)(acc.gross).add(sale?.amount_incl_vat || sale?.amount_including_vat || 0).value, net: (0, currency_js_1.default)(acc.net).add(sale?.amount_excl_vat || sale?.amount || 0).value };
726
756
  }
727
757
  return acc;
728
758
  }, { gross: 0, net: 0 });
729
- const merchReturnGross = merchReturnGrossFromCreditMemos.gross + merchReturnGrossFromReturnSales.gross;
759
+ const merchReturnGross = (0, currency_js_1.default)(merchReturnGrossFromCreditMemos.gross).add(merchReturnGrossFromReturnSales.gross).value;
730
760
  const hasMerchReturn = merchReturnGross > 0;
731
- const returnsNetMinor = toMinorUnits((payload.credit_memos || []).reduce((acc, cm) => acc + (cm.amount_excl_vat || 0), 0));
732
- const returnsGrossMinor = toMinorUnits((payload.credit_memos || []).reduce((acc, cm) => acc + (cm.amount_incl_vat || 0), 0));
761
+ const returnsNetMinor = toMinorUnits((payload.credit_memos || []).reduce((acc, cm) => (0, currency_js_1.default)(acc).add(cm.amount_excl_vat || 0).value, 0));
762
+ const returnsGrossMinor = toMinorUnits((payload.credit_memos || []).reduce((acc, cm) => (0, currency_js_1.default)(acc).add(cm.amount_incl_vat || 0).value, 0));
733
763
  const return_total = (returnsGrossMinor > 0)
734
764
  ? {
735
765
  amount_net: moneyFromMinor(returnsNetMinor),
@@ -754,7 +784,7 @@ function transformMasterOrder(payload) {
754
784
  sourceLineMap.set(lineNo, line);
755
785
  }
756
786
  });
757
- (sale0?.sale_lines || []).forEach((line) => {
787
+ allSaleLines.forEach((line) => {
758
788
  const lineNo = Number(line.line_no || -1);
759
789
  if (lineNo > 0) {
760
790
  const existing = sourceLineMap.get(lineNo);
@@ -779,7 +809,7 @@ function transformMasterOrder(payload) {
779
809
  }
780
810
  }
781
811
  });
782
- (sale0?.sale_lines || []).forEach((line) => {
812
+ allSaleLines.forEach((line) => {
783
813
  if (line.type === "Item") {
784
814
  const itemNo = String(line.no || "");
785
815
  const variant = String(line.variant_code || "");
@@ -797,7 +827,7 @@ function transformMasterOrder(payload) {
797
827
  });
798
828
  const shippedGrossDecimal = (payload.shipments || []).reduce((acc, s) => {
799
829
  if (s.amount_incl_vat != null && s.amount_incl_vat > 0) {
800
- return acc + (s.amount_incl_vat || 0);
830
+ return (0, currency_js_1.default)(acc).add(s.amount_incl_vat || 0).value;
801
831
  }
802
832
  const lineAmounts = (s.shipment_lines || []).reduce((lineAcc, l) => {
803
833
  if (!isShippableItem(l))
@@ -815,18 +845,18 @@ function transformMasterOrder(payload) {
815
845
  const sourceGross = Number(sourceLine.amount_including_vat || sourceLine.amount_incl_vat || 0);
816
846
  const shippedQty = Number(l?.quantity || 0);
817
847
  if (sourceQty > 0 && sourceGross > 0) {
818
- const unitPrice = sourceGross / sourceQty;
819
- return lineAcc + (unitPrice * shippedQty);
848
+ const unitPrice = (0, currency_js_1.default)(sourceGross).divide(sourceQty).value;
849
+ return (0, currency_js_1.default)(lineAcc).add((0, currency_js_1.default)(unitPrice).multiply(shippedQty)).value;
820
850
  }
821
851
  }
822
- return lineAcc + (l?.amount_including_vat || l?.amount_incl_vat || 0);
852
+ return (0, currency_js_1.default)(lineAcc).add(l?.amount_including_vat || l?.amount_incl_vat || 0).value;
823
853
  }, 0);
824
- return acc + lineAmounts;
854
+ return (0, currency_js_1.default)(acc).add(lineAmounts).value;
825
855
  }, 0);
826
856
  const shippedGrossMinor = toMinorUnits(shippedGrossDecimal);
827
857
  let status = "PROCESSED";
828
858
  if (hasMerchReturn) {
829
- const totalOrderGrossDecimal = totalOrderGrossMinor / 100;
859
+ const totalOrderGrossDecimal = (0, currency_js_1.default)(totalOrderGrossMinor, { fromCents: true }).value;
830
860
  status = totalOrderGrossDecimal > 0 && merchReturnGross >= totalOrderGrossDecimal ? "RETURNED" : "PARTIALLY-RETURNED";
831
861
  }
832
862
  else if (shippedGrossMinor > 0 && totalOrderGrossMinor > 0) {
@@ -857,7 +887,7 @@ function transformMasterOrder(payload) {
857
887
  }
858
888
  if (c.includes('MOTO'))
859
889
  return 'MOTO';
860
- if (c.includes('ADYEN') && cardType === 'credit card' && giftCertId.length === 0) {
890
+ if (c.includes('ADYEN') && giftCertId.length === 0) {
861
891
  return 'CREDIT-CARD';
862
892
  }
863
893
  const serviceType = String(card?.service_type || '').toUpperCase();
@@ -884,23 +914,27 @@ function transformMasterOrder(payload) {
884
914
  order_no: c.order_no,
885
915
  captured: c.captured,
886
916
  }));
887
- const normalPays = (payload.payments || []).map((p) => ({
888
- created_at: p.created_at,
889
- amount: p.amount,
890
- type: p.type,
891
- payment_method_code: p.payment_method_code,
892
- transaction_id: p.transaction_id,
893
- card_number: undefined,
894
- psp_reference: p.psp_reference,
895
- payment_gateway_token: p.payment_gateway_token,
896
- payment_number: p.payment_number,
897
- payment_refund_number: p.payment_refund_number,
898
- original_payment_refund_id: p.original_payment_refund_id,
899
- created_by: p.created_by || invoice0?.created_by || sale0?.created_by,
900
- source: 'payment',
901
- order_no: p.master_order_no,
902
- ledger_entry_no: p.ledger_entry_no,
903
- }));
917
+ const normalPays = (payload.payments || []).map((p) => {
918
+ const pc = (p.payment_cards || [])[0];
919
+ return {
920
+ created_at: p.created_at,
921
+ amount: p.amount,
922
+ type: p.type,
923
+ payment_method_code: p.payment_method_code,
924
+ transaction_id: p.transaction_id,
925
+ card_number: pc?.card_number || undefined,
926
+ psp_reference: p.psp_reference,
927
+ payment_gateway_token: p.payment_gateway_token,
928
+ payment_number: p.payment_number || p.payment_no,
929
+ payment_refund_number: p.payment_refund_number || p.payment_reference_no,
930
+ original_payment_refund_id: p.original_payment_refund_id,
931
+ created_by: p.created_by || invoice0?.created_by || sale0?.created_by,
932
+ source: 'payment',
933
+ order_no: p.master_order_no,
934
+ ledger_entry_no: p.ledger_entry_no,
935
+ service_type: pc?.card_type || p.card_type || undefined,
936
+ };
937
+ });
904
938
  const flat = [...cardPays, ...normalPays];
905
939
  const groupsMap = new Map();
906
940
  flat.forEach((p) => {
@@ -1105,13 +1139,15 @@ function transformMasterOrder(payload) {
1105
1139
  }
1106
1140
  if (originalPaymentForTransaction?.payment_gateway_token) {
1107
1141
  const originalCardPayment = cardPaymentsByToken.get(originalPaymentForTransaction.payment_gateway_token);
1108
- transaction_id = originalCardPayment?.transaction_id || null;
1142
+ transaction_id = originalCardPayment?.transaction_id || originalPaymentForTransaction.payment_gateway_token || null;
1109
1143
  }
1110
1144
  }
1111
1145
  else {
1112
- transaction_id = cardPaymentEntryForTransaction?.transaction_id || primary.transaction_id || null;
1146
+ transaction_id = cardPaymentEntryForTransaction?.transaction_id || primary.transaction_id || primary.payment_gateway_token || null;
1113
1147
  }
1114
- const psp_reference = transaction_id;
1148
+ const psp_reference = transaction_id
1149
+ || sortedEntries.find(e => e.payment_gateway_token)?.payment_gateway_token
1150
+ || null;
1115
1151
  const paymentCreatedByRaw = invoice0?.created_by || primary.created_by || sale0?.created_by || "";
1116
1152
  const paymentCreatedByUpper = String(paymentCreatedByRaw).toUpperCase();
1117
1153
  const isEmail = typeof paymentCreatedByRaw === 'string' && paymentCreatedByRaw.includes('@');
@@ -1130,12 +1166,16 @@ function transformMasterOrder(payload) {
1130
1166
  card_number = cardPaymentEntryForTransaction.card_number || null;
1131
1167
  }
1132
1168
  let cardPaymentForBrand = sortedEntries.find(e => e.source === 'card_payment' && e.service_type);
1169
+ if (!cardPaymentForBrand) {
1170
+ cardPaymentForBrand = sortedEntries.find(e => e.service_type);
1171
+ }
1133
1172
  if (!cardPaymentForBrand && g.type === 'REFUND' && cardPaymentEntryForTransaction) {
1134
1173
  cardPaymentForBrand = cardPaymentEntryForTransaction;
1135
1174
  }
1136
- const card_brand = cardPaymentForBrand?.service_type
1175
+ const rawBrand = cardPaymentForBrand?.service_type
1137
1176
  ? String(cardPaymentForBrand.service_type).trim() || null
1138
1177
  : null;
1178
+ const card_brand = (pm === 'PAYPAL' || pm === 'GIFT-CARD' || rawBrand === 'VOUCHER') ? null : rawBrand;
1139
1179
  let status = 'CAPTURED';
1140
1180
  const isVoucher = pm === 'GIFT-CARD' ||
1141
1181
  sortedEntries.some(e => e.gift_certificate_id) ||
@@ -1199,39 +1239,6 @@ function transformMasterOrder(payload) {
1199
1239
  };
1200
1240
  });
1201
1241
  const shipmentsWithItems = shipments.filter((s) => s.items && s.items.length > 0);
1202
- shipmentsWithItems.forEach((shipment) => {
1203
- let shipmentNetMinor = 0;
1204
- let shipmentGrossMinor = 0;
1205
- let shipmentDiscountNetMinor = 0;
1206
- let shipmentDiscountGrossMinor = 0;
1207
- let maxDiscountPercent = 0;
1208
- (shipment.items || []).forEach((shipItem) => {
1209
- const sku = shipItem.sku;
1210
- const shipQty = Number(shipItem.quantity || 0);
1211
- const matchingItems = itemsList.filter((item) => item.sku === sku);
1212
- let remainingQty = shipQty;
1213
- for (const item of matchingItems) {
1214
- if (remainingQty <= 0)
1215
- break;
1216
- const itemQty = Number(item.quantity || 0);
1217
- if (itemQty > 0) {
1218
- const takeQty = Math.min(remainingQty, itemQty);
1219
- const ratio = takeQty / itemQty;
1220
- shipmentNetMinor += item.amount_net.value * ratio;
1221
- shipmentGrossMinor += item.amount_gross.value * ratio;
1222
- shipmentDiscountNetMinor += item.discount_amount_net.value * ratio;
1223
- shipmentDiscountGrossMinor += item.discount_amount_gross.value * ratio;
1224
- maxDiscountPercent = Math.max(maxDiscountPercent, item.discount_amount_percent || 0);
1225
- remainingQty -= takeQty;
1226
- }
1227
- }
1228
- });
1229
- shipment.amount_net = moneyFromMinor(shipmentNetMinor);
1230
- shipment.amount_gross = moneyFromMinor(shipmentGrossMinor);
1231
- shipment.discount_amount_net = moneyFromMinor(shipmentDiscountNetMinor);
1232
- shipment.discount_amount_gross = moneyFromMinor(shipmentDiscountGrossMinor);
1233
- shipment.discount_amount_percent = maxDiscountPercent;
1234
- });
1235
1242
  let totalDiscountNetMinor = 0;
1236
1243
  let totalDiscountGrossMinor = 0;
1237
1244
  let maxTotalDiscountPercent = 0;
@@ -1252,45 +1259,51 @@ function transformMasterOrder(payload) {
1252
1259
  centra_order_id,
1253
1260
  sfcc_order_id,
1254
1261
  globale_order_id: (() => {
1255
- const v = (invoice0?.globale_order_id ?? sale0?.globale_order_id ?? null);
1262
+ const v = (invoice0?.globale_order_id ?? sale0?.globale_order_id ?? payload.glopal_order_id ?? null);
1256
1263
  if (typeof v !== 'string')
1257
1264
  return v;
1258
1265
  const s = v.trim();
1259
1266
  return s.length > 0 ? s : null;
1260
1267
  })(),
1261
- sitoo_order_id: null,
1268
+ sitoo_order_id: (() => {
1269
+ const v = payload.sitoo_order_id ?? sale0?.sitoo_order_id ?? null;
1270
+ if (v === null || v === undefined)
1271
+ return null;
1272
+ const s = String(v).trim();
1273
+ return s.length > 0 ? s : null;
1274
+ })(),
1262
1275
  system_created_by,
1263
1276
  ordered_at,
1264
1277
  is_gift,
1265
1278
  is_pos: created_by_raw === "SITOO",
1266
1279
  billing_address: billing_from ? (() => {
1267
1280
  const billToName = billing_from.bill_to_name || "";
1268
- const firstName = billing_from.bill_to_first_name || (billToName ? billToName.split(' ')[0] : "");
1269
- const lastName = billing_from.bill_to_surname || (billToName ? billToName.split(' ').slice(1).join(' ') : "");
1281
+ const firstName = trimAddr(billing_from.bill_to_first_name) || trimAddr(billToName ? billToName.split(' ')[0] : "");
1282
+ const lastName = trimAddr(billing_from.bill_to_surname) || trimAddr(billToName ? billToName.split(' ').slice(1).join(' ') : "");
1270
1283
  return {
1271
- first_name: firstName,
1272
- last_name: lastName,
1273
- address1: billing_from.bill_to_address || "",
1274
- address2: billing_from.bill_to_address_2 || null,
1275
- city: billing_from.bill_to_city || "",
1276
- post_code: billing_from.bill_to_post_code || null,
1277
- country_code: billing_from.bill_to_country_region_code || "",
1278
- phone: billing_from.sell_to_phone_no || null,
1284
+ first_name: firstName || null,
1285
+ last_name: lastName || null,
1286
+ address1: trimAddr(billing_from.bill_to_address) || "",
1287
+ address2: trimAddr(billing_from.bill_to_address_2) || null,
1288
+ city: trimAddr(billing_from.bill_to_city) || null,
1289
+ post_code: trimAddr(billing_from.bill_to_post_code) || null,
1290
+ country_code: trimAddr(billing_from.bill_to_country_region_code) || "",
1291
+ phone: trimAddr(billing_from.sell_to_phone_no) || null,
1279
1292
  created_at: (typeof billing_from.system_created_at === 'string' && billing_from.system_created_at) || undefined,
1280
1293
  };
1281
1294
  })() : null,
1282
1295
  shipping_address: shipping_from ? (() => {
1283
1296
  const shipToName = shipping_from.ship_to_name || "";
1284
- const firstName = shipping_from.ship_to_first_name || (shipToName ? shipToName.split(' ')[0] : "");
1285
- const lastName = shipping_from.ship_to_surname || (shipToName ? shipToName.split(' ').slice(1).join(' ') : "");
1297
+ const firstName = trimAddr(shipping_from.ship_to_first_name) || trimAddr(shipToName ? shipToName.split(' ')[0] : "");
1298
+ const lastName = trimAddr(shipping_from.ship_to_surname) || trimAddr(shipToName ? shipToName.split(' ').slice(1).join(' ') : "");
1286
1299
  return {
1287
- first_name: firstName,
1288
- last_name: lastName,
1289
- address1: shipping_from.ship_to_address || "",
1290
- address2: shipping_from.ship_to_address_2 || null,
1291
- city: shipping_from.ship_to_city || "",
1292
- post_code: shipping_from.ship_to_post_code || null,
1293
- country_code: shipping_from.ship_to_country_region_code || "",
1300
+ first_name: firstName || null,
1301
+ last_name: lastName || null,
1302
+ address1: trimAddr(shipping_from.ship_to_address) || "",
1303
+ address2: trimAddr(shipping_from.ship_to_address_2) || null,
1304
+ city: trimAddr(shipping_from.ship_to_city) || null,
1305
+ post_code: trimAddr(shipping_from.ship_to_post_code) || null,
1306
+ country_code: trimAddr(shipping_from.ship_to_country_region_code) || "",
1294
1307
  phone: shipping_from.ship_to_phone_no || null,
1295
1308
  created_at: (typeof shipping_from.system_created_at === 'string' && shipping_from.system_created_at) || undefined,
1296
1309
  };
@@ -1313,14 +1326,14 @@ function transformMasterOrder(payload) {
1313
1326
  if (c.no || payload.customer_no)
1314
1327
  mapped.bc_customer_id = String(c.no || payload.customer_no);
1315
1328
  const buildAddr = (src) => src ? {
1316
- first_name: src.bill_to_first_name || src.ship_to_first_name || "",
1317
- last_name: src.bill_to_surname || src.ship_to_surname || "",
1318
- address1: (src.bill_to_address || src.ship_to_address || ""),
1319
- address2: (src.bill_to_address_2 || src.ship_to_address_2 || null),
1320
- city: (src.bill_to_city || src.ship_to_city || ""),
1321
- post_code: (src.bill_to_post_code || src.ship_to_post_code || null),
1322
- country_code: (src.bill_to_country_region_code || src.ship_to_country_region_code || ""),
1323
- phone: (src.sell_to_phone_no || src.ship_to_phone_no || null),
1329
+ first_name: trimAddr(src.bill_to_first_name || src.ship_to_first_name) || null,
1330
+ last_name: trimAddr(src.bill_to_surname || src.ship_to_surname) || null,
1331
+ address1: trimAddr(src.bill_to_address || src.ship_to_address) || "",
1332
+ address2: trimAddr(src.bill_to_address_2 || src.ship_to_address_2) || null,
1333
+ city: trimAddr(src.bill_to_city || src.ship_to_city) || null,
1334
+ post_code: trimAddr(src.bill_to_post_code || src.ship_to_post_code) || null,
1335
+ country_code: trimAddr(src.bill_to_country_region_code || src.ship_to_country_region_code) || "",
1336
+ phone: trimAddr(src.sell_to_phone_no || src.ship_to_phone_no) || null,
1324
1337
  created_at: (typeof src.system_created_at === 'string' && src.system_created_at) || undefined,
1325
1338
  } : null;
1326
1339
  const custBilling = buildAddr(billing_from);