@shushed/helpers 0.0.203-bug-erp-770-20251208155429 → 0.0.203-validate-fix-20251208135314
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/dist/cjs/dist-dereferenced/asset.js +1 -0
- package/dist/cjs/dist-dereferenced/asset.js.map +1 -0
- package/dist/cjs/dist-dereferenced/category.js +1 -0
- package/dist/cjs/dist-dereferenced/category.js.map +1 -0
- package/dist/cjs/dist-dereferenced/country.js +1 -0
- package/dist/cjs/dist-dereferenced/country.js.map +1 -0
- package/dist/cjs/dist-dereferenced/currency.js +1 -0
- package/dist/cjs/dist-dereferenced/currency.js.map +1 -0
- package/dist/cjs/dist-dereferenced/customer-segment.js +1 -0
- package/dist/cjs/dist-dereferenced/customer-segment.js.map +1 -0
- package/dist/cjs/dist-dereferenced/development-colour.js +1 -0
- package/dist/cjs/dist-dereferenced/development-colour.js.map +1 -0
- package/dist/cjs/dist-dereferenced/index.js +1 -0
- package/dist/cjs/dist-dereferenced/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/marketing-preferences.js +1 -0
- package/dist/cjs/dist-dereferenced/marketing-preferences.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/ean-change.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/ean-change.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/index.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/delivered.js +2 -1
- package/dist/cjs/dist-dereferenced/messages/order/delivered.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/index.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/new.js +2 -1
- package/dist/cjs/dist-dereferenced/messages/order/new.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/processed.js +2 -1
- package/dist/cjs/dist-dereferenced/messages/order/processed.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js +2 -1
- package/dist/cjs/dist-dereferenced/messages/order/return-initiated.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/returned.js +2 -1
- package/dist/cjs/dist-dereferenced/messages/order/returned.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/order/shipped.js +2 -1
- package/dist/cjs/dist-dereferenced/messages/order/shipped.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/price-change.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/price-change.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/product-category.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/product-category.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/product-draft.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/product-draft.js.map +1 -0
- package/dist/cjs/dist-dereferenced/messages/product.js +1 -0
- package/dist/cjs/dist-dereferenced/messages/product.js.map +1 -0
- package/dist/cjs/dist-dereferenced/money.js +1 -0
- package/dist/cjs/dist-dereferenced/money.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/address.js +1 -0
- package/dist/cjs/dist-dereferenced/order/address.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/customer.js +1 -0
- package/dist/cjs/dist-dereferenced/order/customer.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/index.js +1 -0
- package/dist/cjs/dist-dereferenced/order/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/item.js +1 -0
- package/dist/cjs/dist-dereferenced/order/item.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/orderMain.js +2 -1
- package/dist/cjs/dist-dereferenced/order/orderMain.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/payment.js +2 -1
- package/dist/cjs/dist-dereferenced/order/payment.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/index.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/item/index.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/item/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/item/itemMain.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/item/itemMain.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/item/returned.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/item/returned.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/index.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/outbound.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/posMain.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/posMain.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/pos/return.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipmentMain.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipmentMain.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/index.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/index.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/outbound.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/outbound.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/return.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/return.js.map +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/shippedMain.js +1 -0
- package/dist/cjs/dist-dereferenced/order/shipment/shipped/shippedMain.js.map +1 -0
- package/dist/cjs/dist-dereferenced/price.js +1 -0
- package/dist/cjs/dist-dereferenced/price.js.map +1 -0
- package/dist/cjs/dist-dereferenced/product-category.js +1 -0
- package/dist/cjs/dist-dereferenced/product-category.js.map +1 -0
- package/dist/cjs/dist-dereferenced/product-draft.js +1 -0
- package/dist/cjs/dist-dereferenced/product-draft.js.map +1 -0
- package/dist/cjs/dist-dereferenced/product.js +1 -0
- package/dist/cjs/dist-dereferenced/product.js.map +1 -0
- package/dist/cjs/dist-dereferenced/stock.js +1 -0
- package/dist/cjs/dist-dereferenced/stock.js.map +1 -0
- package/dist/cjs/dist-dereferenced/total.js +1 -0
- package/dist/cjs/dist-dereferenced/total.js.map +1 -0
- package/dist/cjs/dist-types/asset.js +1 -0
- package/dist/cjs/dist-types/asset.js.map +1 -0
- package/dist/cjs/dist-types/category.js +1 -0
- package/dist/cjs/dist-types/category.js.map +1 -0
- package/dist/cjs/dist-types/country.js +1 -0
- package/dist/cjs/dist-types/country.js.map +1 -0
- package/dist/cjs/dist-types/currency.js +1 -0
- package/dist/cjs/dist-types/currency.js.map +1 -0
- package/dist/cjs/dist-types/customer-segment.js +1 -0
- package/dist/cjs/dist-types/customer-segment.js.map +1 -0
- package/dist/cjs/dist-types/development-colour.js +1 -0
- package/dist/cjs/dist-types/development-colour.js.map +1 -0
- package/dist/cjs/dist-types/index.js +1 -0
- package/dist/cjs/dist-types/index.js.map +1 -0
- package/dist/cjs/dist-types/marketing-preferences.js +1 -0
- package/dist/cjs/dist-types/marketing-preferences.js.map +1 -0
- package/dist/cjs/dist-types/messages/ean-change.js +1 -0
- package/dist/cjs/dist-types/messages/ean-change.js.map +1 -0
- package/dist/cjs/dist-types/messages/index.js +1 -0
- package/dist/cjs/dist-types/messages/index.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/delivered.js +1 -0
- package/dist/cjs/dist-types/messages/order/delivered.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/index.js +1 -0
- package/dist/cjs/dist-types/messages/order/index.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/new.js +1 -0
- package/dist/cjs/dist-types/messages/order/new.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/processed.js +1 -0
- package/dist/cjs/dist-types/messages/order/processed.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/return-initiated.js +1 -0
- package/dist/cjs/dist-types/messages/order/return-initiated.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/returned.js +1 -0
- package/dist/cjs/dist-types/messages/order/returned.js.map +1 -0
- package/dist/cjs/dist-types/messages/order/shipped.js +1 -0
- package/dist/cjs/dist-types/messages/order/shipped.js.map +1 -0
- package/dist/cjs/dist-types/messages/price-change.js +1 -0
- package/dist/cjs/dist-types/messages/price-change.js.map +1 -0
- package/dist/cjs/dist-types/messages/product-category.js +1 -0
- package/dist/cjs/dist-types/messages/product-category.js.map +1 -0
- package/dist/cjs/dist-types/messages/product-draft.js +1 -0
- package/dist/cjs/dist-types/messages/product-draft.js.map +1 -0
- package/dist/cjs/dist-types/messages/product.js +1 -0
- package/dist/cjs/dist-types/messages/product.js.map +1 -0
- package/dist/cjs/dist-types/money.js +1 -0
- package/dist/cjs/dist-types/money.js.map +1 -0
- package/dist/cjs/dist-types/order/address.js +1 -0
- package/dist/cjs/dist-types/order/address.js.map +1 -0
- package/dist/cjs/dist-types/order/customer.js +1 -0
- package/dist/cjs/dist-types/order/customer.js.map +1 -0
- package/dist/cjs/dist-types/order/index.js +1 -0
- package/dist/cjs/dist-types/order/index.js.map +1 -0
- package/dist/cjs/dist-types/order/item.js +1 -0
- package/dist/cjs/dist-types/order/item.js.map +1 -0
- package/dist/cjs/dist-types/order/orderMain.js +1 -0
- package/dist/cjs/dist-types/order/orderMain.js.map +1 -0
- package/dist/cjs/dist-types/order/payment.js +1 -0
- package/dist/cjs/dist-types/order/payment.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/index.js +1 -0
- package/dist/cjs/dist-types/order/shipment/index.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/item/index.js +1 -0
- package/dist/cjs/dist-types/order/shipment/item/index.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/item/itemMain.js +1 -0
- package/dist/cjs/dist-types/order/shipment/item/itemMain.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/item/returned.js +1 -0
- package/dist/cjs/dist-types/order/shipment/item/returned.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/index.js +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/index.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/outbound.js +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/outbound.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/posMain.js +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/posMain.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/return.js +1 -0
- package/dist/cjs/dist-types/order/shipment/pos/return.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/shipmentMain.js +1 -0
- package/dist/cjs/dist-types/order/shipment/shipmentMain.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/index.js +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/index.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/outbound.js +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/outbound.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/return.js +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/return.js.map +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/shippedMain.js +1 -0
- package/dist/cjs/dist-types/order/shipment/shipped/shippedMain.js.map +1 -0
- package/dist/cjs/dist-types/price.js +1 -0
- package/dist/cjs/dist-types/price.js.map +1 -0
- package/dist/cjs/dist-types/product-category.js +1 -0
- package/dist/cjs/dist-types/product-category.js.map +1 -0
- package/dist/cjs/dist-types/product-draft.js +1 -0
- package/dist/cjs/dist-types/product-draft.js.map +1 -0
- package/dist/cjs/dist-types/product.js +1 -0
- package/dist/cjs/dist-types/product.js.map +1 -0
- package/dist/cjs/dist-types/stock.js +1 -0
- package/dist/cjs/dist-types/stock.js.map +1 -0
- package/dist/cjs/dist-types/total.js +1 -0
- package/dist/cjs/dist-types/total.js.map +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/src-public/airtable.js +1 -0
- package/dist/cjs/src-public/airtable.js.map +1 -0
- package/dist/cjs/src-public/bcOrder.js +72 -403
- package/dist/cjs/src-public/bcOrder.js.map +1 -0
- package/dist/cjs/src-public/bigquery.js +1 -0
- package/dist/cjs/src-public/bigquery.js.map +1 -0
- package/dist/cjs/src-public/centra.js +1 -0
- package/dist/cjs/src-public/centra.js.map +1 -0
- package/dist/cjs/src-public/cloudtasks.js +1 -0
- package/dist/cjs/src-public/cloudtasks.js.map +1 -0
- package/dist/cjs/src-public/dato.js +1 -0
- package/dist/cjs/src-public/dato.js.map +1 -0
- package/dist/cjs/src-public/env.js +1 -0
- package/dist/cjs/src-public/env.js.map +1 -0
- package/dist/cjs/src-public/getEventTime.js +1 -0
- package/dist/cjs/src-public/getEventTime.js.map +1 -0
- package/dist/cjs/src-public/index.js +1 -0
- package/dist/cjs/src-public/index.js.map +1 -0
- package/dist/cjs/src-public/ipValidation.js +1 -0
- package/dist/cjs/src-public/ipValidation.js.map +1 -0
- package/dist/cjs/src-public/jwks.js +1 -0
- package/dist/cjs/src-public/jwks.js.map +1 -0
- package/dist/cjs/src-public/pubsub.js +1 -0
- package/dist/cjs/src-public/pubsub.js.map +1 -0
- package/dist/cjs/src-public/rateLimit.js +1 -0
- package/dist/cjs/src-public/rateLimit.js.map +1 -0
- package/dist/cjs/src-public/redisClient.js +1 -0
- package/dist/cjs/src-public/redisClient.js.map +1 -0
- package/dist/cjs/src-public/runtime.js +1 -0
- package/dist/cjs/src-public/runtime.js.map +1 -0
- package/dist/cjs/src-public/sanitize.js +1 -0
- package/dist/cjs/src-public/sanitize.js.map +1 -0
- package/dist/cjs/src-public/scheduler.js +1 -0
- package/dist/cjs/src-public/scheduler.js.map +1 -0
- package/dist/cjs/src-public/secret.js +1 -0
- package/dist/cjs/src-public/secret.js.map +1 -0
- package/dist/cjs/src-public/setHeaders.js +1 -0
- package/dist/cjs/src-public/setHeaders.js.map +1 -0
- package/dist/cjs/src-public/types.js +1 -0
- package/dist/cjs/src-public/types.js.map +1 -0
- package/dist/cjs/src-public/utils.js +1 -0
- package/dist/cjs/src-public/utils.js.map +1 -0
- package/dist/cjs/src-public/validate.js +1 -28
- package/dist/cjs/src-public/validate.js.map +1 -0
- package/dist/types/dist-dereferenced/messages/order/delivered.d.ts +4 -4
- package/dist/types/dist-dereferenced/messages/order/new.d.ts +4 -4
- package/dist/types/dist-dereferenced/messages/order/processed.d.ts +4 -4
- package/dist/types/dist-dereferenced/messages/order/return-initiated.d.ts +4 -4
- package/dist/types/dist-dereferenced/messages/order/returned.d.ts +4 -4
- package/dist/types/dist-dereferenced/messages/order/shipped.d.ts +4 -4
- package/dist/types/dist-dereferenced/order/index.d.ts +4 -4
- package/dist/types/dist-dereferenced/order/orderMain.d.ts +4 -4
- package/dist/types/dist-dereferenced/order/payment.d.ts +4 -4
- package/dist/types/dist-types/messages/order/delivered.d.ts +2 -2
- package/dist/types/dist-types/messages/order/new.d.ts +2 -2
- package/dist/types/dist-types/messages/order/processed.d.ts +2 -2
- package/dist/types/dist-types/messages/order/return-initiated.d.ts +2 -2
- package/dist/types/dist-types/messages/order/returned.d.ts +2 -2
- package/dist/types/dist-types/messages/order/shipped.d.ts +2 -2
- package/dist/types/dist-types/order/orderMain.d.ts +2 -2
- package/dist/types/dist-types/order/payment.d.ts +2 -2
- package/package.json +1 -1
- package/dist/cjs/contracts/asset.schema.json +0 -78
- package/dist/cjs/contracts/category.schema.json +0 -86
- package/dist/cjs/contracts/country.schema.json +0 -258
- package/dist/cjs/contracts/currency.schema.json +0 -177
- package/dist/cjs/contracts/customer-segment.schema.json +0 -32
- package/dist/cjs/contracts/development-colour.schema.json +0 -97
- package/dist/cjs/contracts/index.js +0 -48
- package/dist/cjs/contracts/marketing-preferences.schema.json +0 -41
- package/dist/cjs/contracts/messages/ean-change.schema.json +0 -22
- package/dist/cjs/contracts/messages/index.js +0 -29
- package/dist/cjs/contracts/messages/order/delivered.schema.json +0 -26
- package/dist/cjs/contracts/messages/order/index.js +0 -18
- package/dist/cjs/contracts/messages/order/new.schema.json +0 -32
- package/dist/cjs/contracts/messages/order/processed.schema.json +0 -15
- package/dist/cjs/contracts/messages/order/return-initiated.schema.json +0 -26
- package/dist/cjs/contracts/messages/order/returned.schema.json +0 -25
- package/dist/cjs/contracts/messages/order/shipped.schema.json +0 -26
- package/dist/cjs/contracts/messages/product-category.schema.json +0 -21
- package/dist/cjs/contracts/messages/product-draft.schema.json +0 -66
- package/dist/cjs/contracts/messages/product.schema.json +0 -29
- package/dist/cjs/contracts/money.schema.json +0 -54
- package/dist/cjs/contracts/order/address.schema.json +0 -127
- package/dist/cjs/contracts/order/customer.schema.json +0 -149
- package/dist/cjs/contracts/order/index.js +0 -31
- package/dist/cjs/contracts/order/item.schema.json +0 -98
- package/dist/cjs/contracts/order/payment.schema.json +0 -115
- package/dist/cjs/contracts/order/shipment/index.js +0 -29
- package/dist/cjs/contracts/order/shipment/item/index.js +0 -8
- package/dist/cjs/contracts/order/shipment/item/returned.schema.json +0 -30
- package/dist/cjs/contracts/order/shipment/item.schema.json +0 -22
- package/dist/cjs/contracts/order/shipment/pos/index.js +0 -10
- package/dist/cjs/contracts/order/shipment/pos/outbound.schema.json +0 -37
- package/dist/cjs/contracts/order/shipment/pos/return.schema.json +0 -31
- package/dist/cjs/contracts/order/shipment/pos.schema.json +0 -48
- package/dist/cjs/contracts/order/shipment/shipped/index.js +0 -10
- package/dist/cjs/contracts/order/shipment/shipped/outbound.schema.json +0 -34
- package/dist/cjs/contracts/order/shipment/shipped/return.schema.json +0 -43
- package/dist/cjs/contracts/order/shipment/shipped.schema.json +0 -52
- package/dist/cjs/contracts/order/shipment.schema.json +0 -58
- package/dist/cjs/contracts/product-category.schema.json +0 -34
- package/dist/cjs/contracts/product-draft.schema.json +0 -782
- package/dist/cjs/contracts/product.schema.json +0 -816
- package/dist/cjs/contracts/total.schema.json +0 -41
- package/dist/types/contracts/index.d.ts +0 -15
- package/dist/types/contracts/messages/index.d.ts +0 -5
- package/dist/types/contracts/messages/order/index.d.ts +0 -6
- package/dist/types/contracts/order/index.d.ts +0 -6
- package/dist/types/contracts/order/shipment/index.d.ts +0 -6
- package/dist/types/contracts/order/shipment/item/index.d.ts +0 -1
- package/dist/types/contracts/order/shipment/pos/index.d.ts +0 -2
- package/dist/types/contracts/order/shipment/shipped/index.d.ts +0 -2
|
@@ -14,9 +14,6 @@ const GBP = "GBP";
|
|
|
14
14
|
function toMinorUnits(amount) {
|
|
15
15
|
if (typeof amount !== "number" || !isFinite(amount))
|
|
16
16
|
return 0;
|
|
17
|
-
if (Math.abs(amount) > Number.MAX_SAFE_INTEGER / 100) {
|
|
18
|
-
return Math.round(Number((amount * 100).toPrecision(15)));
|
|
19
|
-
}
|
|
20
17
|
return Math.round(amount * 100);
|
|
21
18
|
}
|
|
22
19
|
function money(value) {
|
|
@@ -102,45 +99,28 @@ function buildLineGrouping(payload) {
|
|
|
102
99
|
}
|
|
103
100
|
function transformMasterOrder(payload) {
|
|
104
101
|
const erp_order_id = payload.no || payload.system_id || "";
|
|
105
|
-
const sale0 =
|
|
106
|
-
const invoice0 =
|
|
107
|
-
const normalizeDateForSort = (dateStr) => {
|
|
108
|
-
if (!dateStr || typeof dateStr !== 'string')
|
|
109
|
-
return '';
|
|
110
|
-
if (dateStr.includes('T'))
|
|
111
|
-
return dateStr;
|
|
112
|
-
if (/^\d{4}-\d{2}-\d{2}$/.test(dateStr))
|
|
113
|
-
return `${dateStr}T00:00:00Z`;
|
|
114
|
-
try {
|
|
115
|
-
const date = new Date(dateStr);
|
|
116
|
-
if (!isNaN(date.getTime()))
|
|
117
|
-
return date.toISOString();
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
}
|
|
121
|
-
return dateStr;
|
|
122
|
-
};
|
|
102
|
+
const sale0 = (payload.sales || [])[0];
|
|
103
|
+
const invoice0 = (payload.invoices || [])[0];
|
|
123
104
|
const ordered_at_candidates = [];
|
|
124
105
|
if (sale0?.system_created_at)
|
|
125
|
-
ordered_at_candidates.push(
|
|
106
|
+
ordered_at_candidates.push(sale0.system_created_at);
|
|
126
107
|
if (Array.isArray(payload.invoices) && payload.invoices.length > 0) {
|
|
127
|
-
const invDates = payload.invoices
|
|
128
|
-
.map((i) => i.system_created_at)
|
|
129
|
-
.filter(Boolean)
|
|
130
|
-
.map((d) => normalizeDateForSort(String(d)));
|
|
108
|
+
const invDates = payload.invoices.map((i) => i.system_created_at).filter(Boolean);
|
|
131
109
|
ordered_at_candidates.push(...invDates);
|
|
132
110
|
}
|
|
133
111
|
if (payload.ordered_at)
|
|
134
|
-
ordered_at_candidates.push(
|
|
112
|
+
ordered_at_candidates.push(String(payload.ordered_at));
|
|
135
113
|
if (payload.created_at)
|
|
136
|
-
ordered_at_candidates.push(
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
? validDates.sort()[0]
|
|
114
|
+
ordered_at_candidates.push(String(payload.created_at));
|
|
115
|
+
const orderedAtRaw = ordered_at_candidates.length > 0
|
|
116
|
+
? ordered_at_candidates.sort()[0]
|
|
140
117
|
: new Date().toISOString();
|
|
141
118
|
let ordered_at;
|
|
142
119
|
try {
|
|
143
|
-
const
|
|
120
|
+
const dateStr = typeof orderedAtRaw === 'string' && orderedAtRaw.includes('T')
|
|
121
|
+
? orderedAtRaw
|
|
122
|
+
: `${orderedAtRaw}T00:00:00Z`;
|
|
123
|
+
const date = new Date(dateStr);
|
|
144
124
|
if (isNaN(date.getTime())) {
|
|
145
125
|
ordered_at = new Date().toISOString();
|
|
146
126
|
}
|
|
@@ -153,7 +133,7 @@ function transformMasterOrder(payload) {
|
|
|
153
133
|
}
|
|
154
134
|
const created_by_raw = sale0?.created_by ?? invoice0?.created_by ?? "";
|
|
155
135
|
const system_created_by = created_by_raw === "SITOO" ? "POS" : created_by_raw === "STOREFRONT" ? "ECOMMERCE" : "SYSTEM";
|
|
156
|
-
const is_gift = Boolean((sale0?.gift_message && String(sale0
|
|
136
|
+
const is_gift = Boolean((sale0?.gift_message && String(sale0.gift_message).trim().length > 0) ||
|
|
157
137
|
(payload.invoices?.some((i) => (i.gift_message || "").trim().length > 0)));
|
|
158
138
|
const invoiceLinesForReturn = payload.invoices?.flatMap((i) => i.invoice_lines || []) || [];
|
|
159
139
|
const salesLinesFallbackForReturn = (sale0?.sale_lines || []);
|
|
@@ -396,31 +376,16 @@ function transformMasterOrder(payload) {
|
|
|
396
376
|
itemsMap[it.sku].push(it);
|
|
397
377
|
});
|
|
398
378
|
const invoicedLineNos = new Set((payload.invoices || []).flatMap((inv) => (inv?.invoice_lines || []).map((l) => Number(l?.order_line_no || -1))));
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
return desc === 'delivery';
|
|
402
|
-
};
|
|
403
|
-
let invoicesNetMinor = 0;
|
|
404
|
-
let invoicesGrossMinor = 0;
|
|
405
|
-
(payload.invoices || []).forEach((inv) => {
|
|
406
|
-
(inv.invoice_lines || []).forEach((line) => {
|
|
407
|
-
if (!isDeliveryItem(line)) {
|
|
408
|
-
invoicesNetMinor += toMinorUnits(Number(line?.amount || line?.amount_excl_vat || 0));
|
|
409
|
-
invoicesGrossMinor += toMinorUnits(Number(line?.amount_including_vat || line?.amount_incl_vat || 0));
|
|
410
|
-
}
|
|
411
|
-
});
|
|
412
|
-
});
|
|
413
|
-
if (invoicesGrossMinor === 0 && (payload.invoices || []).length > 0) {
|
|
414
|
-
invoicesNetMinor = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_excl_vat || 0), 0));
|
|
415
|
-
invoicesGrossMinor = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_incl_vat || 0), 0));
|
|
416
|
-
}
|
|
379
|
+
let invoicesNetMinor = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_excl_vat || 0), 0));
|
|
380
|
+
let invoicesGrossMinor = toMinorUnits((payload.invoices || []).reduce((acc, inv) => acc + (inv.amount_incl_vat || 0), 0));
|
|
417
381
|
if (invoicesGrossMinor === 0 && invoicedLineNos.size > 0 && sale0?.sale_lines) {
|
|
418
|
-
const invoicedSaleLines = (sale0
|
|
419
|
-
|
|
382
|
+
const invoicedSaleLines = (sale0.sale_lines || []).filter((l) => {
|
|
383
|
+
const lineNo = Number(l?.line_no || -1);
|
|
384
|
+
const itemNo = String(l?.item_no || l?.no || '').toUpperCase();
|
|
385
|
+
if (itemNo === 'X DELCHR')
|
|
420
386
|
return false;
|
|
421
387
|
if (String(l?.type || '').toLowerCase() !== 'item')
|
|
422
388
|
return false;
|
|
423
|
-
const lineNo = Number(l?.line_no || -1);
|
|
424
389
|
return invoicedLineNos.has(lineNo);
|
|
425
390
|
});
|
|
426
391
|
invoicesNetMinor = toMinorUnits(invoicedSaleLines.reduce((acc, l) => acc + (Number(l?.amount || 0)), 0));
|
|
@@ -428,26 +393,7 @@ function transformMasterOrder(payload) {
|
|
|
428
393
|
}
|
|
429
394
|
let nonInvSalesNetMinor = 0;
|
|
430
395
|
let nonInvSalesGrossMinor = 0;
|
|
431
|
-
if (sale0
|
|
432
|
-
const allSaleLines = (sale0.sale_lines || []).filter((l) => {
|
|
433
|
-
if (isDeliveryItem(l))
|
|
434
|
-
return false;
|
|
435
|
-
if (String(l?.type || '').toLowerCase() !== 'item')
|
|
436
|
-
return false;
|
|
437
|
-
return true;
|
|
438
|
-
});
|
|
439
|
-
const totalSaleNetMinor = toMinorUnits(allSaleLines.reduce((acc, l) => acc + (Number(l?.amount || 0)), 0));
|
|
440
|
-
const totalSaleGrossMinor = toMinorUnits(allSaleLines.reduce((acc, l) => acc + (Number(l?.amount_including_vat || 0)), 0));
|
|
441
|
-
if (invoicesGrossMinor > 0) {
|
|
442
|
-
nonInvSalesNetMinor = Math.max(0, totalSaleNetMinor - invoicesNetMinor);
|
|
443
|
-
nonInvSalesGrossMinor = Math.max(0, totalSaleGrossMinor - invoicesGrossMinor);
|
|
444
|
-
}
|
|
445
|
-
else {
|
|
446
|
-
nonInvSalesNetMinor = totalSaleNetMinor;
|
|
447
|
-
nonInvSalesGrossMinor = totalSaleGrossMinor;
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
else if (sale0 && (sale0.amount_excl_vat || sale0.amount_incl_vat)) {
|
|
396
|
+
if (sale0 && (sale0.amount_excl_vat || sale0.amount_incl_vat)) {
|
|
451
397
|
const saleNetMinor = toMinorUnits(sale0.amount_excl_vat || 0);
|
|
452
398
|
const saleGrossMinor = toMinorUnits(sale0.amount_incl_vat || 0);
|
|
453
399
|
if (invoicesGrossMinor > 0) {
|
|
@@ -461,11 +407,12 @@ function transformMasterOrder(payload) {
|
|
|
461
407
|
}
|
|
462
408
|
else {
|
|
463
409
|
const nonInvoicedSales = (sale0?.sale_lines || []).filter((l) => {
|
|
464
|
-
|
|
410
|
+
const lineNo = Number(l?.line_no || -1);
|
|
411
|
+
const itemNo = String(l?.item_no || l?.no || '').toUpperCase();
|
|
412
|
+
if (itemNo === 'X DELCHR')
|
|
465
413
|
return false;
|
|
466
414
|
if (String(l?.type || '').toLowerCase() !== 'item')
|
|
467
415
|
return false;
|
|
468
|
-
const lineNo = Number(l?.line_no || -1);
|
|
469
416
|
return !invoicedLineNos.has(lineNo);
|
|
470
417
|
});
|
|
471
418
|
nonInvSalesNetMinor = toMinorUnits(nonInvoicedSales.reduce((acc, l) => acc + (Number(l?.amount || 0)), 0));
|
|
@@ -610,27 +557,21 @@ function transformMasterOrder(payload) {
|
|
|
610
557
|
const typeStr = String(l?.type || "").toLowerCase();
|
|
611
558
|
const isItemish = typeStr.includes('item') || looksProduct;
|
|
612
559
|
const isRefund = itemNo.toUpperCase() === 'REFUND';
|
|
613
|
-
|
|
560
|
+
const isDelivery = itemNo.toUpperCase() === 'X DELCHR';
|
|
561
|
+
if ((l?.quantity || 0) > 0 && isItemish && !isRefund && !isDelivery) {
|
|
614
562
|
hasQualifying = true;
|
|
615
563
|
return s + (l?.amount_including_vat || 0);
|
|
616
564
|
}
|
|
617
565
|
return s;
|
|
618
566
|
}, 0);
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
if (cm?.amount_incl_vat != null && cm.amount_incl_vat > 0) {
|
|
622
|
-
return acc + cm.amount_incl_vat;
|
|
623
|
-
}
|
|
624
|
-
return acc + sum;
|
|
567
|
+
const add = sum > 0 ? sum : (hasQualifying ? (cm?.amount_incl_vat || 0) : 0);
|
|
568
|
+
return acc + add;
|
|
625
569
|
}, 0);
|
|
626
570
|
const merchReturnGrossFromReturnSales = (payload.sales || []).reduce((acc, sale) => {
|
|
627
571
|
const docTypeRaw = String(sale?.document_type || sale?.documentType || "");
|
|
628
572
|
const isReturnOrder = docTypeRaw.toLowerCase().includes('return');
|
|
629
573
|
if (!isReturnOrder)
|
|
630
574
|
return acc;
|
|
631
|
-
if (sale?.amount_incl_vat != null && sale.amount_incl_vat > 0) {
|
|
632
|
-
return acc + sale.amount_incl_vat;
|
|
633
|
-
}
|
|
634
575
|
const lines = sale?.sale_lines || [];
|
|
635
576
|
let hasQualifying = false;
|
|
636
577
|
const sum = lines.reduce((s, l) => {
|
|
@@ -640,13 +581,15 @@ function transformMasterOrder(payload) {
|
|
|
640
581
|
const typeStr = String(l?.type || "").toLowerCase();
|
|
641
582
|
const isItemish = typeStr.includes('item') || looksProduct;
|
|
642
583
|
const isRefund = itemNo.toUpperCase() === 'REFUND';
|
|
643
|
-
|
|
584
|
+
const isDelivery = itemNo.toUpperCase() === 'X DELCHR';
|
|
585
|
+
if ((l?.quantity || 0) > 0 && isItemish && !isRefund && !isDelivery) {
|
|
644
586
|
hasQualifying = true;
|
|
645
587
|
return s + (l?.amount_including_vat || 0);
|
|
646
588
|
}
|
|
647
589
|
return s;
|
|
648
590
|
}, 0);
|
|
649
|
-
|
|
591
|
+
const add = sum > 0 ? sum : (hasQualifying ? (sale?.amount_incl_vat || sale?.amount_including_vat || 0) : 0);
|
|
592
|
+
return acc + add;
|
|
650
593
|
}, 0);
|
|
651
594
|
const merchReturnGross = merchReturnGrossFromCreditMemos + merchReturnGrossFromReturnSales;
|
|
652
595
|
const hasMerchReturn = merchReturnGross > 0;
|
|
@@ -704,12 +647,12 @@ function transformMasterOrder(payload) {
|
|
|
704
647
|
return acc + (s.amount_incl_vat || 0);
|
|
705
648
|
}
|
|
706
649
|
const lineAmounts = (s.shipment_lines || []).reduce((lineAcc, l) => {
|
|
707
|
-
|
|
650
|
+
const itemNo = String(l?.item_no || l?.no || "").toUpperCase();
|
|
651
|
+
if (itemNo === 'X DELCHR')
|
|
708
652
|
return lineAcc;
|
|
709
653
|
const orderLineNo = Number(l?.order_line_no || -1);
|
|
710
654
|
let sourceLine = orderLineNo > 0 ? sourceLineMap.get(orderLineNo) : null;
|
|
711
655
|
if (!sourceLine) {
|
|
712
|
-
const itemNo = String(l?.item_no || l?.no || "").toUpperCase();
|
|
713
656
|
const variant = String(l?.variant_code || "");
|
|
714
657
|
const sku = variant ? `${itemNo}-${variant}` : itemNo;
|
|
715
658
|
sourceLine = sourceLineBySku.get(sku);
|
|
@@ -743,358 +686,85 @@ function transformMasterOrder(payload) {
|
|
|
743
686
|
const shipping_from = invoice0 || sale0 || null;
|
|
744
687
|
const mapPaymentMethod = (code, card) => {
|
|
745
688
|
const c = String(code || '').toUpperCase();
|
|
746
|
-
|
|
747
|
-
const giftCertId = String(card?.gift_certificate_id || '').trim();
|
|
748
|
-
const cardType = String(card?.type || '').trim().toLowerCase();
|
|
749
|
-
if (giftCertId.length > 0)
|
|
750
|
-
return 'GIFT-CARD';
|
|
751
|
-
if (cardType === 'gift certificate')
|
|
752
|
-
return 'GIFT-CARD';
|
|
753
|
-
if (processorId.includes('GIFT_CERTIFICATE') || processorId.includes('GIFT-CERTIFICATE'))
|
|
689
|
+
if (/(GVOUCHER|VOUCHER|GIFT|EGIFT)/.test(c) || String(card?.service_type || '').toUpperCase().includes('VOUCHER'))
|
|
754
690
|
return 'GIFT-CARD';
|
|
755
|
-
if (
|
|
756
|
-
return 'GIFT-CARD';
|
|
757
|
-
if (c.includes('APPLE'))
|
|
691
|
+
if (c.includes('ADYEN') && !card?.card_number)
|
|
758
692
|
return 'APPLE-PAY';
|
|
759
|
-
if (
|
|
760
|
-
return '
|
|
761
|
-
|
|
762
|
-
if (c.includes('MOTO'))
|
|
763
|
-
return 'MOTO';
|
|
764
|
-
if (c.includes('ADYEN') && cardType === 'credit card' && giftCertId.length === 0) {
|
|
765
|
-
return 'CREDIT-CARD';
|
|
766
|
-
}
|
|
767
|
-
const serviceType = String(card?.service_type || '').toUpperCase();
|
|
768
|
-
if (serviceType.includes('VOUCHER') && giftCertId.length === 0 && processorId !== 'PAYPAL') {
|
|
769
|
-
return 'GIFT-CARD';
|
|
770
|
-
}
|
|
771
|
-
if (card?.card_number)
|
|
693
|
+
if (c.includes('APPLE') || String(card?.service_type || '').toUpperCase().includes('APPLE'))
|
|
694
|
+
return 'APPLE-PAY';
|
|
695
|
+
if (card?.transaction_id || card?.card_number)
|
|
772
696
|
return 'CREDIT-CARD';
|
|
773
697
|
return 'OTHER';
|
|
774
698
|
};
|
|
699
|
+
const journeyFromCreatedBy = (createdBy) => {
|
|
700
|
+
const v = String(createdBy || '').toUpperCase();
|
|
701
|
+
if (v === 'SITOO')
|
|
702
|
+
return 'POS';
|
|
703
|
+
if (v === 'STOREFRONT')
|
|
704
|
+
return 'CHECKOUT';
|
|
705
|
+
if (v === 'CENTRA')
|
|
706
|
+
return 'CHECKOUT';
|
|
707
|
+
return 'SYSTEM';
|
|
708
|
+
};
|
|
775
709
|
const cardPays = (payload.card_payments || []).map((c) => ({
|
|
776
710
|
created_at: c.created_at,
|
|
777
|
-
amount: c.
|
|
778
|
-
type:
|
|
711
|
+
amount: c.amount,
|
|
712
|
+
type: 'Payment',
|
|
779
713
|
payment_method_code: String(c.service_type || ''),
|
|
780
714
|
transaction_id: c.transaction_id,
|
|
781
715
|
card_number: c.card_number,
|
|
782
716
|
psp_reference: c.psp_reference,
|
|
783
|
-
gift_certificate_id: c.gift_certificate_id,
|
|
784
|
-
service_type: c.service_type,
|
|
785
|
-
processor_id: c.processor_id,
|
|
786
717
|
created_by: invoice0?.created_by || sale0?.created_by,
|
|
787
|
-
source: 'card_payment',
|
|
788
|
-
order_no: c.order_no,
|
|
789
|
-
captured: c.captured,
|
|
790
718
|
}));
|
|
791
719
|
const normalPays = (payload.payments || []).map((p) => ({
|
|
792
720
|
created_at: p.created_at,
|
|
793
721
|
amount: p.amount,
|
|
794
722
|
type: p.type,
|
|
795
723
|
payment_method_code: p.payment_method_code,
|
|
796
|
-
transaction_id: p.
|
|
724
|
+
transaction_id: p.ledger_entry_no ? String(p.ledger_entry_no) : undefined,
|
|
797
725
|
card_number: undefined,
|
|
798
726
|
psp_reference: p.psp_reference,
|
|
799
|
-
payment_gateway_token: p.payment_gateway_token,
|
|
800
|
-
payment_number: p.payment_number,
|
|
801
|
-
payment_refund_number: p.payment_refund_number,
|
|
802
|
-
original_payment_refund_id: p.original_payment_refund_id,
|
|
803
727
|
created_by: p.created_by || invoice0?.created_by || sale0?.created_by,
|
|
804
|
-
source: 'payment',
|
|
805
|
-
order_no: p.master_order_no,
|
|
806
|
-
ledger_entry_no: p.ledger_entry_no,
|
|
807
728
|
}));
|
|
808
729
|
const flat = [...cardPays, ...normalPays];
|
|
809
730
|
const groupsMap = new Map();
|
|
810
|
-
flat.forEach((p) => {
|
|
811
|
-
try {
|
|
812
|
-
const isRefund = String(p.type || '').toLowerCase() === 'refund';
|
|
813
|
-
const logicalType = isRefund ? 'REFUND' : 'CHARGE';
|
|
814
|
-
let keyBase;
|
|
815
|
-
const unifiedId = p.transaction_id || p.payment_gateway_token;
|
|
816
|
-
if (unifiedId) {
|
|
817
|
-
keyBase = unifiedId;
|
|
818
|
-
}
|
|
819
|
-
else if (p.payment_number) {
|
|
820
|
-
keyBase = `PN:${p.payment_number}`;
|
|
821
|
-
}
|
|
822
|
-
else if (!isRefund) {
|
|
823
|
-
const paymentType = String(p.type || '').toUpperCase();
|
|
824
|
-
const amount = Number(p.amount || 0);
|
|
825
|
-
const paymentMethod = String(p.payment_method_code || '').toUpperCase().trim();
|
|
826
|
-
const orderNo = p.order_no || erp_order_id;
|
|
827
|
-
if (paymentType === 'CAPTURE' || paymentType === 'AUTHORISATION') {
|
|
828
|
-
keyBase = `CHARGE-${orderNo}-${amount}-${paymentMethod}`;
|
|
829
|
-
}
|
|
830
|
-
else if (p.gift_certificate_id) {
|
|
831
|
-
keyBase = `GIFT:${p.gift_certificate_id}`;
|
|
832
|
-
}
|
|
833
|
-
else {
|
|
834
|
-
const orderNo = p.order_no || erp_order_id;
|
|
835
|
-
const paymentMethod = String(p.payment_method_code || '').toUpperCase().trim();
|
|
836
|
-
keyBase = `${orderNo}-${amount}-${paymentMethod}`;
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
else {
|
|
840
|
-
if (p.payment_refund_number) {
|
|
841
|
-
keyBase = `PRN:${p.payment_refund_number}`;
|
|
842
|
-
}
|
|
843
|
-
else {
|
|
844
|
-
const orderNo = p.order_no || erp_order_id;
|
|
845
|
-
const amount = Number(p.amount || 0);
|
|
846
|
-
const paymentMethod = String(p.payment_method_code || '').toUpperCase().trim();
|
|
847
|
-
keyBase = `${orderNo}-${amount}-${paymentMethod}`;
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
const key = `${logicalType}:${keyBase}`;
|
|
851
|
-
const g = groupsMap.get(key) || { entries: [], type: logicalType, key };
|
|
852
|
-
g.entries.push(p);
|
|
853
|
-
groupsMap.set(key, g);
|
|
854
|
-
}
|
|
855
|
-
catch (error) {
|
|
856
|
-
console.error(`Error processing payment entry:`, {
|
|
857
|
-
error: error instanceof Error ? error.message : String(error),
|
|
858
|
-
payment_type: p?.type,
|
|
859
|
-
amount: p?.amount,
|
|
860
|
-
order_no: p?.order_no || erp_order_id,
|
|
861
|
-
transaction_id: p?.transaction_id,
|
|
862
|
-
payment_gateway_token: p?.payment_gateway_token,
|
|
863
|
-
});
|
|
864
|
-
}
|
|
865
|
-
});
|
|
866
|
-
const allPaymentEntriesByOrder = new Map();
|
|
867
|
-
flat.forEach(p => {
|
|
868
|
-
const orderNo = p.order_no || erp_order_id;
|
|
869
|
-
const amount = Number(p.amount || 0);
|
|
870
|
-
const key = `${orderNo}-${amount}`;
|
|
871
|
-
if (!allPaymentEntriesByOrder.has(key)) {
|
|
872
|
-
allPaymentEntriesByOrder.set(key, []);
|
|
873
|
-
}
|
|
874
|
-
allPaymentEntriesByOrder.get(key).push(p);
|
|
875
|
-
});
|
|
876
|
-
const cardPaymentsByToken = new Map();
|
|
877
|
-
cardPays.forEach(cp => {
|
|
878
|
-
if (cp.transaction_id) {
|
|
879
|
-
cardPaymentsByToken.set(cp.transaction_id, cp);
|
|
880
|
-
}
|
|
881
|
-
});
|
|
882
|
-
const paymentsByOriginalRefundId = new Map();
|
|
883
|
-
const paymentsByPaymentNumber = new Map();
|
|
884
|
-
const paymentsByPaymentRefundNumber = new Map();
|
|
885
|
-
normalPays.forEach(p => {
|
|
731
|
+
flat.forEach((p, idx) => {
|
|
886
732
|
const isRefund = String(p.type || '').toLowerCase() === 'refund';
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
}
|
|
894
|
-
if (p.payment_refund_number) {
|
|
895
|
-
paymentsByPaymentRefundNumber.set(p.payment_refund_number, p);
|
|
896
|
-
}
|
|
897
|
-
}
|
|
733
|
+
const logicalType = isRefund ? 'REFUND' : 'CHARGE';
|
|
734
|
+
const keyBase = p.transaction_id || `${erp_order_id}-${logicalType}-${idx + 1}`;
|
|
735
|
+
const key = `${logicalType}:${keyBase}`;
|
|
736
|
+
const g = groupsMap.get(key) || { entries: [], type: logicalType, key };
|
|
737
|
+
g.entries.push(p);
|
|
738
|
+
groupsMap.set(key, g);
|
|
898
739
|
});
|
|
899
|
-
const payments = Array.from(groupsMap.values()).map((g) => {
|
|
900
|
-
const sortedEntries = [...g.entries].sort((a, b) => {
|
|
901
|
-
if (a.source === 'card_payment' && b.source !== 'card_payment')
|
|
902
|
-
return -1;
|
|
903
|
-
if (b.source === 'card_payment' && a.source !== 'card_payment')
|
|
904
|
-
return 1;
|
|
905
|
-
if (a.source === 'payment' && b.source === 'payment') {
|
|
906
|
-
const aType = String(a.type || '').toUpperCase();
|
|
907
|
-
const bType = String(b.type || '').toUpperCase();
|
|
908
|
-
if (aType === 'AUTHORISATION' && bType !== 'AUTHORISATION')
|
|
909
|
-
return -1;
|
|
910
|
-
if (bType === 'AUTHORISATION' && aType !== 'AUTHORISATION')
|
|
911
|
-
return 1;
|
|
912
|
-
if (aType === 'CAPTURE' && bType !== 'CAPTURE' && bType !== 'AUTHORISATION')
|
|
913
|
-
return -1;
|
|
914
|
-
if (bType === 'CAPTURE' && aType !== 'CAPTURE' && aType !== 'AUTHORISATION')
|
|
915
|
-
return 1;
|
|
916
|
-
}
|
|
917
|
-
return 0;
|
|
918
|
-
});
|
|
740
|
+
const payments = Array.from(groupsMap.values()).map((g, i) => {
|
|
919
741
|
const created_at = g.entries
|
|
920
742
|
.map(e => e.created_at)
|
|
921
743
|
.filter(Boolean)
|
|
922
744
|
.map(d => new Date(d).toISOString())
|
|
923
745
|
.sort()[0] || ordered_at;
|
|
924
|
-
const
|
|
925
|
-
const
|
|
926
|
-
const
|
|
927
|
-
const
|
|
928
|
-
const
|
|
929
|
-
|
|
930
|
-
const
|
|
931
|
-
card_number: cardPaymentEntryForMethod?.card_number || sortedEntries.find(e => e.card_number)?.card_number,
|
|
932
|
-
transaction_id: cardPaymentEntryForMethod?.transaction_id || sortedEntries.find(e => e.transaction_id)?.transaction_id,
|
|
933
|
-
service_type: cardPaymentEntryForMethod?.service_type || sortedEntries.find(e => e.service_type)?.service_type,
|
|
934
|
-
processor_id: cardPaymentEntryForMethod?.processor_id || sortedEntries.find(e => e.processor_id)?.processor_id,
|
|
935
|
-
gift_certificate_id: cardPaymentEntryForMethod?.gift_certificate_id || sortedEntries.find(e => e.gift_certificate_id)?.gift_certificate_id,
|
|
936
|
-
type: cardPaymentEntryForMethod?.type || sortedEntries.find(e => e.type && e.source === 'card_payment')?.type,
|
|
937
|
-
};
|
|
938
|
-
let pm;
|
|
939
|
-
if (cardPaymentEntryForMethod?.type && String(cardPaymentEntryForMethod.type).trim().toLowerCase() === 'apple pay') {
|
|
940
|
-
pm = 'APPLE-PAY';
|
|
941
|
-
}
|
|
942
|
-
else {
|
|
943
|
-
pm = mapPaymentMethod(paymentMethodCode, groupCardData);
|
|
944
|
-
}
|
|
945
|
-
let cardPaymentEntryForTransaction = sortedEntries.find(e => e.source === 'card_payment' && e.transaction_id);
|
|
946
|
-
if (!cardPaymentEntryForTransaction && primary.payment_gateway_token) {
|
|
947
|
-
cardPaymentEntryForTransaction = cardPaymentsByToken.get(primary.payment_gateway_token);
|
|
948
|
-
}
|
|
949
|
-
if (!cardPaymentEntryForTransaction && g.type === 'REFUND') {
|
|
950
|
-
let originalPayment;
|
|
951
|
-
const refundEntryWithPaymentNumber = sortedEntries.find(e => e.payment_number && String(e.payment_number).trim().length > 0);
|
|
952
|
-
if (refundEntryWithPaymentNumber?.payment_number) {
|
|
953
|
-
originalPayment = paymentsByPaymentNumber.get(refundEntryWithPaymentNumber.payment_number);
|
|
954
|
-
}
|
|
955
|
-
if (!originalPayment) {
|
|
956
|
-
const refundEntryWithOriginalId = sortedEntries.find(e => e.original_payment_refund_id);
|
|
957
|
-
if (refundEntryWithOriginalId?.original_payment_refund_id) {
|
|
958
|
-
originalPayment = Array.from(normalPays).find(p => p.ledger_entry_no === refundEntryWithOriginalId.original_payment_refund_id &&
|
|
959
|
-
String(p.type || '').toLowerCase() !== 'refund');
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
if (!originalPayment) {
|
|
963
|
-
const refundEntryWithRefundNumber = sortedEntries.find(e => e.payment_refund_number && String(e.payment_refund_number).trim().length > 0);
|
|
964
|
-
if (refundEntryWithRefundNumber?.payment_refund_number) {
|
|
965
|
-
originalPayment = paymentsByPaymentRefundNumber.get(refundEntryWithRefundNumber.payment_refund_number);
|
|
966
|
-
}
|
|
967
|
-
}
|
|
968
|
-
if (originalPayment?.payment_gateway_token) {
|
|
969
|
-
cardPaymentEntryForTransaction = cardPaymentsByToken.get(originalPayment.payment_gateway_token);
|
|
970
|
-
if (!cardPaymentEntryForMethod && cardPaymentEntryForTransaction) {
|
|
971
|
-
cardPaymentEntryForMethod = cardPaymentEntryForTransaction;
|
|
972
|
-
if (cardPaymentEntryForMethod?.type && String(cardPaymentEntryForMethod.type).trim().toLowerCase() === 'apple pay') {
|
|
973
|
-
pm = 'APPLE-PAY';
|
|
974
|
-
}
|
|
975
|
-
else {
|
|
976
|
-
const refundCardData = {
|
|
977
|
-
card_number: cardPaymentEntryForMethod?.card_number,
|
|
978
|
-
transaction_id: cardPaymentEntryForMethod?.transaction_id,
|
|
979
|
-
service_type: cardPaymentEntryForMethod?.service_type,
|
|
980
|
-
processor_id: cardPaymentEntryForMethod?.processor_id,
|
|
981
|
-
gift_certificate_id: cardPaymentEntryForMethod?.gift_certificate_id,
|
|
982
|
-
type: cardPaymentEntryForMethod?.type,
|
|
983
|
-
};
|
|
984
|
-
pm = mapPaymentMethod(paymentMethodCode, refundCardData);
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
}
|
|
988
|
-
}
|
|
989
|
-
let transaction_id = null;
|
|
990
|
-
if (g.type === 'REFUND' && !cardPaymentEntryForTransaction && !primary.transaction_id && !primary.payment_gateway_token) {
|
|
991
|
-
let originalPaymentForTransaction;
|
|
992
|
-
const refundEntryWithPaymentNumber = sortedEntries.find(e => e.payment_number && String(e.payment_number).trim().length > 0);
|
|
993
|
-
if (refundEntryWithPaymentNumber?.payment_number) {
|
|
994
|
-
originalPaymentForTransaction = paymentsByPaymentNumber.get(refundEntryWithPaymentNumber.payment_number);
|
|
995
|
-
}
|
|
996
|
-
if (!originalPaymentForTransaction && primary.original_payment_refund_id) {
|
|
997
|
-
originalPaymentForTransaction = Array.from(normalPays).find(p => p.ledger_entry_no === primary.original_payment_refund_id &&
|
|
998
|
-
String(p.type || '').toLowerCase() !== 'refund');
|
|
999
|
-
}
|
|
1000
|
-
if (!originalPaymentForTransaction && primary.payment_refund_number) {
|
|
1001
|
-
const refundEntryWithRefundNumber = sortedEntries.find(e => e.payment_refund_number && String(e.payment_refund_number).trim().length > 0);
|
|
1002
|
-
if (refundEntryWithRefundNumber?.payment_refund_number) {
|
|
1003
|
-
originalPaymentForTransaction = paymentsByPaymentRefundNumber.get(refundEntryWithRefundNumber.payment_refund_number);
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
if (originalPaymentForTransaction?.payment_gateway_token) {
|
|
1007
|
-
const originalCardPayment = cardPaymentsByToken.get(originalPaymentForTransaction.payment_gateway_token);
|
|
1008
|
-
transaction_id = originalCardPayment?.transaction_id || null;
|
|
1009
|
-
}
|
|
1010
|
-
}
|
|
1011
|
-
else {
|
|
1012
|
-
transaction_id = cardPaymentEntryForTransaction?.transaction_id || primary.transaction_id || null;
|
|
1013
|
-
}
|
|
1014
|
-
const psp_reference = transaction_id;
|
|
1015
|
-
const paymentCreatedByRaw = invoice0?.created_by || primary.created_by || sale0?.created_by || "";
|
|
1016
|
-
const paymentCreatedByUpper = String(paymentCreatedByRaw).toUpperCase();
|
|
1017
|
-
const isEmail = typeof paymentCreatedByRaw === 'string' && paymentCreatedByRaw.includes('@');
|
|
1018
|
-
const validEnumValues = ['CUSTOMER', 'SYSTEM', 'CENTRA', 'SITOO', 'STOREFRONT', 'MOTO'];
|
|
1019
|
-
const isValidEnum = validEnumValues.includes(paymentCreatedByUpper);
|
|
1020
|
-
const created_by = isEmail
|
|
1021
|
-
? paymentCreatedByRaw
|
|
1022
|
-
: isValidEnum
|
|
1023
|
-
? paymentCreatedByUpper
|
|
1024
|
-
: 'MOTO';
|
|
1025
|
-
const journey_label = null;
|
|
1026
|
-
let card_number = sortedEntries.find(e => e.source === 'card_payment' && e.card_number)?.card_number
|
|
1027
|
-
|| primary.card_number
|
|
1028
|
-
|| null;
|
|
1029
|
-
if (!card_number && g.type === 'REFUND' && cardPaymentEntryForTransaction) {
|
|
1030
|
-
card_number = cardPaymentEntryForTransaction.card_number || null;
|
|
1031
|
-
}
|
|
1032
|
-
let cardPaymentForBrand = sortedEntries.find(e => e.source === 'card_payment' && e.service_type);
|
|
1033
|
-
if (!cardPaymentForBrand && g.type === 'REFUND' && cardPaymentEntryForTransaction) {
|
|
1034
|
-
cardPaymentForBrand = cardPaymentEntryForTransaction;
|
|
1035
|
-
}
|
|
1036
|
-
const card_brand = cardPaymentForBrand?.service_type
|
|
1037
|
-
? String(cardPaymentForBrand.service_type).trim() || null
|
|
1038
|
-
: null;
|
|
1039
|
-
let status = 'CAPTURED';
|
|
1040
|
-
const isVoucher = pm === 'GIFT-CARD' ||
|
|
1041
|
-
sortedEntries.some(e => e.gift_certificate_id) ||
|
|
1042
|
-
sortedEntries.some(e => /(GVOUCHER|VOUCHER|GIFT|EGIFT)/.test(String(e.payment_method_code || '').toUpperCase())) ||
|
|
1043
|
-
sortedEntries.some(e => String(e.service_type || '').toUpperCase().includes('VOUCHER'));
|
|
1044
|
-
const cardPaymentEntry = sortedEntries.find(e => e.source === 'card_payment');
|
|
1045
|
-
if (isVoucher) {
|
|
1046
|
-
let paymentEntry = g.entries.find(e => e.source === 'payment' &&
|
|
1047
|
-
(String(e.type || '').toUpperCase() === 'PAYMENT' || String(e.type || '').toUpperCase() === 'CAPTURE'));
|
|
1048
|
-
let paymentType = paymentEntry ? String(paymentEntry.type || '').toUpperCase() : '';
|
|
1049
|
-
if (!paymentEntry && g.entries.length > 0) {
|
|
1050
|
-
const firstEntry = g.entries[0];
|
|
1051
|
-
const orderNo = firstEntry.order_no || erp_order_id;
|
|
1052
|
-
const amount = Number(firstEntry.amount || 0);
|
|
1053
|
-
const lookupKey = `${orderNo}-${amount}`;
|
|
1054
|
-
const relatedEntries = allPaymentEntriesByOrder.get(lookupKey) || [];
|
|
1055
|
-
paymentEntry = relatedEntries.find(e => e.source === 'payment' &&
|
|
1056
|
-
(String(e.type || '').toUpperCase() === 'PAYMENT' || String(e.type || '').toUpperCase() === 'CAPTURE'));
|
|
1057
|
-
paymentType = paymentEntry ? String(paymentEntry.type || '').toUpperCase() : '';
|
|
1058
|
-
}
|
|
1059
|
-
if (paymentType === 'PAYMENT' || paymentType === 'CAPTURE') {
|
|
1060
|
-
status = 'CAPTURED';
|
|
1061
|
-
}
|
|
1062
|
-
else {
|
|
1063
|
-
status = 'FAILED';
|
|
1064
|
-
}
|
|
1065
|
-
}
|
|
1066
|
-
else {
|
|
1067
|
-
if (cardPaymentEntry?.captured === true) {
|
|
1068
|
-
status = 'CAPTURED';
|
|
1069
|
-
}
|
|
1070
|
-
else if (cardPaymentEntry?.captured === false) {
|
|
1071
|
-
status = 'FAILED';
|
|
1072
|
-
}
|
|
1073
|
-
else {
|
|
1074
|
-
const paymentType = String(primary.type || '').toUpperCase();
|
|
1075
|
-
if (paymentType === 'CAPTURE' || paymentType === 'PAYMENT') {
|
|
1076
|
-
status = 'CAPTURED';
|
|
1077
|
-
}
|
|
1078
|
-
else {
|
|
1079
|
-
status = 'CAPTURED';
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
|
-
}
|
|
746
|
+
const amount = Math.max(...g.entries.map(e => Number(e.amount || 0)), 0);
|
|
747
|
+
const any = g.entries[0] || {};
|
|
748
|
+
const pm = mapPaymentMethod(any.payment_method_code, any);
|
|
749
|
+
const transaction_id = (any.transaction_id) || `${erp_order_id}-PAY-${i + 1}`;
|
|
750
|
+
const psp_reference = any.psp_reference || transaction_id;
|
|
751
|
+
const created_by = 'CUSTOMER';
|
|
752
|
+
const journey_label = journeyFromCreatedBy(invoice0?.created_by || sale0?.created_by);
|
|
1083
753
|
return {
|
|
1084
754
|
type: g.type,
|
|
1085
755
|
created_at,
|
|
1086
756
|
payment_method: pm,
|
|
1087
757
|
transaction_id,
|
|
1088
|
-
card_number,
|
|
758
|
+
card_number: any.card_number || null,
|
|
1089
759
|
card_holder: null,
|
|
1090
760
|
card_token: null,
|
|
1091
761
|
expiration_month: null,
|
|
1092
762
|
expiration_year: null,
|
|
1093
763
|
journey_label,
|
|
1094
764
|
psp_reference,
|
|
1095
|
-
card_brand,
|
|
1096
|
-
status,
|
|
1097
|
-
amount,
|
|
765
|
+
card_brand: null,
|
|
766
|
+
status: 'CAPTURED',
|
|
767
|
+
amount: money(amount),
|
|
1098
768
|
created_by,
|
|
1099
769
|
};
|
|
1100
770
|
});
|
|
@@ -1247,10 +917,8 @@ function transformMasterOrder(payload) {
|
|
|
1247
917
|
return_total,
|
|
1248
918
|
net_total,
|
|
1249
919
|
shipping_method,
|
|
920
|
+
payments,
|
|
1250
921
|
};
|
|
1251
|
-
if (payments.length > 0) {
|
|
1252
|
-
result.payments = payments;
|
|
1253
|
-
}
|
|
1254
922
|
if (shipmentsWithItems.length > 0) {
|
|
1255
923
|
result.shipments = shipmentsWithItems;
|
|
1256
924
|
}
|
|
@@ -1273,3 +941,4 @@ class BCOrderHelper extends runtime_1.default {
|
|
|
1273
941
|
}
|
|
1274
942
|
exports.BCOrderHelper = BCOrderHelper;
|
|
1275
943
|
exports.default = BCOrderHelper;
|
|
944
|
+
//# sourceMappingURL=bcOrder.js.map
|