@devx-commerce/plugin-gati 0.0.34-beta.8 → 0.0.34-beta.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +3 -1
- package/.medusa/server/src/admin/index.mjs +3 -1
- package/.medusa/server/src/api/admin/erp-event/query-config.js +8 -1
- package/.medusa/server/src/api/admin/generate-invoice/route.js +158 -0
- package/.medusa/server/src/api/admin/masters/utils.js +29 -1
- package/.medusa/server/src/api/admin/masters/validators.js +2 -2
- package/.medusa/server/src/api/admin/variant-options/recalculate/route.js +446 -0
- package/.medusa/server/src/api/admin/variant-options/sync/route.js +21 -5
- package/.medusa/server/src/api/erp/webhook/config.js +73 -5
- package/.medusa/server/src/api/erp/webhook/route.js +10 -137
- package/.medusa/server/src/api/erp/webhook/utils.js +8 -1
- package/.medusa/server/src/api/pos/customer-ledger/middleware.js +13 -0
- package/.medusa/server/src/api/pos/customer-ledger/route.js +50 -0
- package/.medusa/server/src/api/pos/generate-invoice/route.js +164 -0
- package/.medusa/server/src/api/pos/gold/calculate/route.js +104 -0
- package/.medusa/server/src/api/pos/gold/item-master-purity.js +46 -0
- package/.medusa/server/src/api/pos/gold/middleware.js +18 -0
- package/.medusa/server/src/api/pos/gold/route.js +83 -0
- package/.medusa/server/src/api/pos/gold-rate/route.js +37 -24
- package/.medusa/server/src/api/pos/middleware.js +13 -1
- package/.medusa/server/src/api/pos/old-gold-item/middleware.js +10 -0
- package/.medusa/server/src/api/pos/old-gold-item/route.js +52 -0
- package/.medusa/server/src/api/pos/platinumdata/middleware.js +13 -0
- package/.medusa/server/src/api/pos/platinumdata/route.js +41 -0
- package/.medusa/server/src/api/pos/silverdata/middleware.js +13 -0
- package/.medusa/server/src/api/pos/silverdata/route.js +41 -0
- package/.medusa/server/src/api/pos/wallet-balance/middleware.js +13 -0
- package/.medusa/server/src/api/pos/wallet-balance/route.js +68 -0
- package/.medusa/server/src/api/store/custom-price/validators.js +2 -2
- package/.medusa/server/src/api/store/customer-ledger/middleware.js +13 -0
- package/.medusa/server/src/api/store/customer-ledger/route.js +49 -0
- package/.medusa/server/src/api/store/gold-rate/validators.js +2 -2
- package/.medusa/server/src/api/store/middleware.js +5 -1
- package/.medusa/server/src/api/store/wallet-balance/middleware.js +13 -0
- package/.medusa/server/src/api/store/wallet-balance/route.js +67 -0
- package/.medusa/server/src/jobs/process-erp-events.js +128 -0
- package/.medusa/server/src/jobs/process-variant-option-sync.js +46 -29
- package/.medusa/server/src/jobs/sync-addless-detail.js +68 -0
- package/.medusa/server/src/jobs/sync-book-list-and-applicable-policy.js +97 -0
- package/.medusa/server/src/jobs/sync-customer-advance-payment-erp.js +105 -0
- package/.medusa/server/src/jobs/sync-customer-erp.js +128 -0
- package/.medusa/server/src/jobs/sync-item-master.js +29 -0
- package/.medusa/server/src/jobs/sync-labour-chart-master.js +29 -0
- package/.medusa/server/src/jobs/sync-order-erp.js +46 -20
- package/.medusa/server/src/jobs/sync-order-request-erp.js +64 -0
- package/.medusa/server/src/jobs/sync-payment-book-master.js +78 -0
- package/.medusa/server/src/jobs/sync-rate-chart-master.js +29 -0
- package/.medusa/server/src/jobs/sync-report-master.js +54 -0
- package/.medusa/server/src/jobs/sync-sale-return-policy-master.js +38 -0
- package/.medusa/server/src/jobs/sync-urd-purchase-erp.js +84 -0
- package/.medusa/server/src/lib/api-response.js +2 -1
- package/.medusa/server/src/links/jewel-trans-master.js +13 -0
- package/.medusa/server/src/links/order-master.js +13 -0
- package/.medusa/server/src/links/sale-master.js +13 -0
- package/.medusa/server/src/modules/addless-detail/index.js +13 -0
- package/.medusa/server/src/modules/addless-detail/migrations/Migration20260212101102.js +15 -0
- package/.medusa/server/src/modules/addless-detail/migrations/Migration20260213000000.js +47 -0
- package/.medusa/server/src/modules/addless-detail/migrations/Migration20260226053037.js +15 -0
- package/.medusa/server/src/modules/addless-detail/models/addless-master.js +17 -0
- package/.medusa/server/src/modules/addless-detail/service.js +10 -0
- package/.medusa/server/src/modules/applicable-sale-return-policy/index.js +13 -0
- package/.medusa/server/src/modules/applicable-sale-return-policy/migrations/Migration20260123083526.js +15 -0
- package/.medusa/server/src/modules/applicable-sale-return-policy/models/applicable-sale-return-policy.js +23 -0
- package/.medusa/server/src/modules/applicable-sale-return-policy/service.js +10 -0
- package/.medusa/server/src/modules/book-list/index.js +13 -0
- package/.medusa/server/src/modules/book-list/migrations/Migration20260123083525.js +15 -0
- package/.medusa/server/src/modules/book-list/migrations/Migration20260401051011.js +14 -0
- package/.medusa/server/src/modules/book-list/models/book-list.js +13 -0
- package/.medusa/server/src/modules/book-list/service.js +10 -0
- package/.medusa/server/src/modules/category-group-master/migrations/Migration20250729035221.js +2 -2
- package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +2 -2
- package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +2 -2
- package/.medusa/server/src/modules/category-master/migrations/Migration20250513122212.js +2 -2
- package/.medusa/server/src/modules/category-master/migrations/Migration20250519180539.js +2 -2
- package/.medusa/server/src/modules/category-master/migrations/Migration20250531004724.js +2 -2
- package/.medusa/server/src/modules/category-master/migrations/Migration20250729040659.js +2 -2
- package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +2 -2
- package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +2 -2
- package/.medusa/server/src/modules/collection-group-master/migrations/Migration20250531022203.js +2 -2
- package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +2 -2
- package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +2 -2
- package/.medusa/server/src/modules/collection-master/migrations/Migration20250513122211.js +2 -2
- package/.medusa/server/src/modules/collection-master/migrations/Migration20250531025048.js +2 -2
- package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +2 -2
- package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +2 -2
- package/.medusa/server/src/modules/customer-receive-voucher/index.js +13 -0
- package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20250115000000.js +51 -0
- package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20260106050934.js +18 -0
- package/.medusa/server/src/modules/customer-receive-voucher/models/customer-receive-voucher.js +35 -0
- package/.medusa/server/src/modules/customer-receive-voucher/service.js +10 -0
- package/.medusa/server/src/modules/discount-master/migrations/Migration20250707232514.js +2 -2
- package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051709.js +2 -2
- package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051737.js +2 -2
- package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +2 -2
- package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +2 -2
- package/.medusa/server/src/modules/erp/migrations/Migration20250513121436.js +2 -2
- package/.medusa/server/src/modules/erp/service.js +611 -8
- package/.medusa/server/src/modules/erp-event/migrations/Migration20250908040911.js +2 -2
- package/.medusa/server/src/modules/erp-event/migrations/Migration20250922095956.js +2 -2
- package/.medusa/server/src/modules/erp-event/migrations/Migration20260529052734.js +14 -0
- package/.medusa/server/src/modules/erp-event/models/erp-event.js +6 -1
- package/.medusa/server/src/modules/extended-product/migrations/Migration20250620030100.js +2 -2
- package/.medusa/server/src/modules/extended-product/migrations/Migration20250716041546.js +2 -2
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +2 -2
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +2 -2
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +2 -2
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +2 -2
- package/.medusa/server/src/modules/extended-product/migrations/Migration20260323103543.js +14 -0
- package/.medusa/server/src/modules/extended-product/models/extended-product.js +2 -1
- package/.medusa/server/src/modules/extended-product/service.js +37 -1
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030335.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030522.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629220100.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629223425.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250704064831.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250716121609.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250725104852.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250726232339.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20250916065103.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +2 -2
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20260616000001.js +14 -0
- package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +4 -2
- package/.medusa/server/src/modules/extended-variant/service.js +37 -1
- package/.medusa/server/src/modules/item-master/index.js +13 -0
- package/.medusa/server/src/modules/item-master/migrations/Migration20260212101055.js +15 -0
- package/.medusa/server/src/modules/item-master/models/item-master.js +20 -0
- package/.medusa/server/src/modules/item-master/service.js +10 -0
- package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +2 -2
- package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
- package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260226053036.js +57 -0
- package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
- package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
- package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
- package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
- package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
- package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
- package/.medusa/server/src/modules/material-purchase-master/index.js +13 -0
- package/.medusa/server/src/modules/material-purchase-master/migrations/Migration20260310090700.js +18 -0
- package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-detail-line.js +24 -0
- package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-master.js +21 -0
- package/.medusa/server/src/modules/material-purchase-master/service.js +12 -0
- package/.medusa/server/src/modules/order-master/index.js +13 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20260226053036.js +29 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20260303000001.js +30 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20260319094758.js +26 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20260320000001.js +19 -0
- package/.medusa/server/src/modules/order-master/models/order-master.js +112 -0
- package/.medusa/server/src/modules/order-master/service.js +13 -0
- package/.medusa/server/src/modules/order-proceed-master/index.js +13 -0
- package/.medusa/server/src/modules/order-proceed-master/migrations/Migration20260327100226.js +31 -0
- package/.medusa/server/src/modules/order-proceed-master/models/order-proceed-master.js +38 -0
- package/.medusa/server/src/modules/order-proceed-master/service.js +11 -0
- package/.medusa/server/src/modules/party-master/migrations/Migration20250604104235.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250604115453.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250604120348.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250604120701.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250608220924.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250612225738.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250612231031.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20250708123734.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +2 -2
- package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +2 -2
- package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
- package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
- package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
- package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
- package/.medusa/server/src/modules/promocode-master/migrations/Migration20250819123821.js +2 -2
- package/.medusa/server/src/modules/promocode-master/migrations/Migration20250918095713.js +2 -2
- package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +2 -2
- package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +2 -2
- package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +2 -2
- package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +2 -2
- package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
- package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
- package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
- package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
- package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190057.js +2 -2
- package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190322.js +2 -2
- package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +2 -2
- package/.medusa/server/src/modules/receive-voucher-master/index.js +13 -0
- package/.medusa/server/src/modules/receive-voucher-master/migrations/Migration20260328053649.js +16 -0
- package/.medusa/server/src/modules/receive-voucher-master/models/receive-voucher-master.js +27 -0
- package/.medusa/server/src/modules/receive-voucher-master/service.js +10 -0
- package/.medusa/server/src/modules/report-master/index.js +13 -0
- package/.medusa/server/src/modules/report-master/migrations/Migration20260121060955.js +15 -0
- package/.medusa/server/src/modules/report-master/migrations/Migration20260121112624.js +15 -0
- package/.medusa/server/src/modules/report-master/models/report-master.js +12 -0
- package/.medusa/server/src/modules/report-master/service.js +10 -0
- package/.medusa/server/src/modules/sale-master/index.js +13 -0
- package/.medusa/server/src/modules/sale-master/migrations/Migration20260205092935.js +15 -0
- package/.medusa/server/src/modules/sale-master/migrations/Migration20260205100000.js +16 -0
- package/.medusa/server/src/modules/sale-master/models/sale-master.js +27 -0
- package/.medusa/server/src/modules/sale-master/service.js +10 -0
- package/.medusa/server/src/modules/sale-return-master/index.js +13 -0
- package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260205093034.js +15 -0
- package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260327084135.js +14 -0
- package/.medusa/server/src/modules/sale-return-master/models/sale-return-master.js +18 -0
- package/.medusa/server/src/modules/sale-return-master/service.js +10 -0
- package/.medusa/server/src/modules/sale-return-policy-master/index.js +13 -0
- package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260105061449.js +21 -0
- package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129084920.js +14 -0
- package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129085620.js +20 -0
- package/.medusa/server/src/modules/sale-return-policy-master/models/sale-return-policy-master.js +37 -0
- package/.medusa/server/src/modules/sale-return-policy-master/service.js +12 -0
- package/.medusa/server/src/modules/shape-master/migrations/Migration20250509174455.js +2 -2
- package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +2 -2
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713113247.js +2 -2
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713121440.js +2 -2
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +2 -2
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +2 -2
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250513115356.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250519180538.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250531010409.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025135.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025307.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730032130.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +2 -2
- package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +2 -2
- package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +2 -2
- package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +2 -2
- package/.medusa/server/src/subscribers/cutomer-updated.js +3 -1
- package/.medusa/server/src/subscribers/erp-batch-processor.js +147 -0
- package/.medusa/server/src/subscribers/order-item-update.js +11 -0
- package/.medusa/server/src/subscribers/party-master.js +39 -35
- package/.medusa/server/src/subscribers/product-sync.js +1 -1
- package/.medusa/server/src/subscribers/product-variant-deleted.js +27 -0
- package/.medusa/server/src/subscribers/shipping-info-master.js +10 -4
- package/.medusa/server/src/utils/build-redis-key.js +3 -1
- package/.medusa/server/src/utils/erp-health.js +24 -0
- package/.medusa/server/src/utils/state-helper.js +3 -2
- package/.medusa/server/src/workflows/addless-detail/index.js +11 -0
- package/.medusa/server/src/workflows/addless-detail/steps/create-or-update-addless-detail.js +36 -0
- package/.medusa/server/src/workflows/addless-detail/steps/fetch-addless-detail.js +73 -0
- package/.medusa/server/src/workflows/applicable-sale-return-policy/index.js +11 -0
- package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/create-or-update-applicable-sale-return-policy.js +74 -0
- package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/fetch-applicable-sale-return-policy.js +64 -0
- package/.medusa/server/src/workflows/book-list/index.js +11 -0
- package/.medusa/server/src/workflows/book-list/steps/create-or-update-book-list.js +59 -0
- package/.medusa/server/src/workflows/book-list/steps/fetch-book-list.js +64 -0
- package/.medusa/server/src/workflows/create-extended-product-from-product/index.js +9 -8
- package/.medusa/server/src/workflows/create-extended-variant-from-variant/index.js +9 -18
- package/.medusa/server/src/workflows/customer-advance-payment/index.js +18 -0
- package/.medusa/server/src/workflows/customer-advance-payment/steps/create-receive-voucher.js +71 -0
- package/.medusa/server/src/workflows/customer-advance-payment/steps/index.js +18 -0
- package/.medusa/server/src/workflows/customer-advance-payment/workflows/create-receive-voucher-workflow.js +11 -0
- package/.medusa/server/src/workflows/customer-advance-payment/workflows/index.js +18 -0
- package/.medusa/server/src/workflows/daily-rate/index.js +37 -0
- package/.medusa/server/src/workflows/daily-rate/perf.js +89 -0
- package/.medusa/server/src/workflows/daily-rate/steps/fetch-gold-rate-step.js +29 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-inward-metal-rates-step.js +154 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-party-style-metal-rates-step.js +224 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-style-master-metal-rates-step.js +180 -0
- package/.medusa/server/src/workflows/daily-rate/steps/update-unfix-order-items-on-gold-rate.js +308 -0
- package/.medusa/server/src/workflows/erp-batch-processing/index.js +19 -0
- package/.medusa/server/src/workflows/erp-batch-processing/steps/finalize-batch-processing.js +55 -0
- package/.medusa/server/src/workflows/erp-batch-processing/steps/index.js +20 -0
- package/.medusa/server/src/workflows/erp-batch-processing/steps/initialize-batch-processing.js +40 -0
- package/.medusa/server/src/workflows/erp-batch-processing/steps/start-batch-processing.js +22 -0
- package/.medusa/server/src/workflows/erp-batch-processing/workflows/erp-batch-processing.js +25 -0
- package/.medusa/server/src/workflows/erp-batch-processing/workflows/index.js +18 -0
- package/.medusa/server/src/workflows/erp-event/steps/update-erp-event.js +24 -7
- package/.medusa/server/src/workflows/erp-event/workflows/update-erp-event.js +1 -1
- package/.medusa/server/src/workflows/helpers/product-helper.js +212 -21
- package/.medusa/server/src/workflows/helpers/variant-helper.js +165 -162
- package/.medusa/server/src/workflows/hooks/product-updated.js +23 -15
- package/.medusa/server/src/workflows/hooks/variant-updated.js +24 -22
- package/.medusa/server/src/workflows/index.js +4 -1
- package/.medusa/server/src/workflows/inward-master/helper/index.js +28 -13
- package/.medusa/server/src/workflows/inward-master/steps/create-inward-exploration-lines.js +1 -2
- package/.medusa/server/src/workflows/inward-master/steps/create-inward-extra-charges-lines.js +1 -2
- package/.medusa/server/src/workflows/inward-master/steps/create-order-fulfillment-for-inward.js +196 -0
- package/.medusa/server/src/workflows/inward-master/steps/fetch-inward-master.js +17 -25
- package/.medusa/server/src/workflows/inward-master/steps/index.js +3 -1
- package/.medusa/server/src/workflows/inward-master/steps/notify-inward-skipped.js +38 -0
- package/.medusa/server/src/workflows/inward-master/steps/update-order-item-from-inward.js +259 -0
- package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +89 -75
- package/.medusa/server/src/workflows/inward-master/workflows/delete-inward.js +6 -9
- package/.medusa/server/src/workflows/inward-master/workflows/update-instock.js +2 -1
- package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +49 -7
- package/.medusa/server/src/workflows/item-master/index.js +11 -0
- package/.medusa/server/src/workflows/item-master/steps/create-or-update-item-master.js +50 -0
- package/.medusa/server/src/workflows/item-master/steps/fetch-item-master.js +29 -0
- package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
- package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
- package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
- package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
- package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
- package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
- package/.medusa/server/src/workflows/material-purchase-master/index.js +24 -0
- package/.medusa/server/src/workflows/material-purchase-master/steps/create-material-purchase-master.js +119 -0
- package/.medusa/server/src/workflows/material-purchase-master/steps/delete-material-purchase-master.js +102 -0
- package/.medusa/server/src/workflows/material-purchase-master/steps/fetch-material-purchase-master.js +60 -0
- package/.medusa/server/src/workflows/material-purchase-master/steps/update-material-purchase-master.js +149 -0
- package/.medusa/server/src/workflows/order-master/index.js +3 -0
- package/.medusa/server/src/workflows/order-master/order-master-webhook.js +24 -0
- package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +275 -0
- package/.medusa/server/src/workflows/order-master/steps/delete-order-master-by-erp-ids.js +61 -0
- package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +1038 -0
- package/.medusa/server/src/workflows/order-proceed-master/index.js +6 -0
- package/.medusa/server/src/workflows/order-proceed-master/order-proceed-master-webhook.js +26 -0
- package/.medusa/server/src/workflows/order-proceed-master/steps/create-or-update-order-proceed-master.js +186 -0
- package/.medusa/server/src/workflows/order-proceed-master/steps/delete-order-proceed-master-by-erp-ids.js +28 -0
- package/.medusa/server/src/workflows/orders/steps/create-sale-for-order-step.js +218 -0
- package/.medusa/server/src/workflows/orders/steps/find-nearest-pincodes-step.js +336 -0
- package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +83 -0
- package/.medusa/server/src/workflows/orders/steps/index.js +16 -1
- package/.medusa/server/src/workflows/orders/steps/revert-to-wallet-step.js +165 -0
- package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +191 -0
- package/.medusa/server/src/workflows/orders/steps/sync-buyback-to-erp-step.js +99 -0
- package/.medusa/server/src/workflows/orders/steps/sync-cancel-to-erp-step.js +120 -0
- package/.medusa/server/src/workflows/orders/steps/sync-exchange-to-erp-step.js +101 -0
- package/.medusa/server/src/workflows/orders/steps/sync-old-gold-to-erp-step.js +161 -0
- package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +756 -20
- package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +277 -0
- package/.medusa/server/src/workflows/orders/steps/update-old-gold-sync-status-step.js +64 -0
- package/.medusa/server/src/workflows/orders/utils/apply-order-item-price-change.js +79 -0
- package/.medusa/server/src/workflows/orders/utils/order-helper.js +182 -37
- package/.medusa/server/src/workflows/orders/utils/order-request-helper.js +235 -0
- package/.medusa/server/src/workflows/orders/workflows/create-sale-for-order.js +10 -0
- package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
- package/.medusa/server/src/workflows/orders/workflows/index.js +4 -1
- package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
- package/.medusa/server/src/workflows/orders/workflows/sync-old-gold-to-erp.js +24 -0
- package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +54 -5
- package/.medusa/server/src/workflows/orders/workflows/sync-sale-return-to-erp.js +11 -0
- package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +66 -33
- package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +115 -0
- package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
- package/.medusa/server/src/workflows/party-master/steps/index.js +2 -1
- package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +2 -2
- package/.medusa/server/src/workflows/party-master/workflows/create-user-erp.js +11 -0
- package/.medusa/server/src/workflows/party-master/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +16 -249
- package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +103 -22
- package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +49 -18
- package/.medusa/server/src/workflows/party-style-master/workflows/delete-party-style-master.js +4 -15
- package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
- package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +37 -0
- package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
- package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
- package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +25 -0
- package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
- package/.medusa/server/src/workflows/receive-voucher-master/index.js +24 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/create-receive-voucher-master.js +125 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/delete-receive-voucher-master.js +45 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/fetch-receive-voucher-master.js +22 -0
- package/.medusa/server/src/workflows/receive-voucher-master/steps/update-receive-voucher-master.js +44 -0
- package/.medusa/server/src/workflows/report-master/index.js +11 -0
- package/.medusa/server/src/workflows/report-master/steps/create-or-update-report-master.js +53 -0
- package/.medusa/server/src/workflows/report-master/steps/fetch-report.js +71 -0
- package/.medusa/server/src/workflows/sale-master/index.js +35 -0
- package/.medusa/server/src/workflows/sale-master/steps/create-sale-master.js +72 -0
- package/.medusa/server/src/workflows/sale-master/steps/delete-sale-master.js +59 -0
- package/.medusa/server/src/workflows/sale-master/steps/sync-extended-order-from-sale.js +40 -0
- package/.medusa/server/src/workflows/sale-master/steps/update-sale-master.js +95 -0
- package/.medusa/server/src/workflows/sale-return-master/index.js +6 -0
- package/.medusa/server/src/workflows/sale-return-master/sale-return-master-webhook.js +28 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/create-or-update-sale-return-master.js +109 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/create-sale-return-master.js +45 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master-by-erp-ids.js +36 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master.js +36 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/process-sale-return-from-webhook.js +234 -0
- package/.medusa/server/src/workflows/sale-return-master/steps/update-sale-return-master.js +53 -0
- package/.medusa/server/src/workflows/sale-return-policy-master/index.js +11 -0
- package/.medusa/server/src/workflows/sale-return-policy-master/steps/create-or-update-sale-return-policy-master.js +91 -0
- package/.medusa/server/src/workflows/sale-return-policy-master/steps/fetch-sale-return-policy.js +31 -0
- package/.medusa/server/src/workflows/shipping-info-master/workflows/create-or-update-shipping-info.js +59 -0
- package/.medusa/server/src/workflows/shipping-info-master/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master.js +116 -10
- package/.medusa/server/src/workflows/style-master/workflows/delete-style-master.js +9 -1
- package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +6 -16
- package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +5 -17
- package/package.json +18 -33
|
@@ -4,56 +4,792 @@ exports.syncOrderToErpStep = void 0;
|
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
6
|
const order_helper_1 = require("../utils/order-helper");
|
|
7
|
+
const framework_1 = require("@medusajs/framework");
|
|
8
|
+
const state_helper_1 = require("../../../utils/state-helper");
|
|
7
9
|
exports.syncOrderToErpStep = (0, workflows_sdk_1.createStep)("sync-order-to-erp", async ({ order }, { container }) => {
|
|
8
|
-
|
|
10
|
+
// Anti-loop guard: skip orders that originated from ERP to prevent infinite sync loops
|
|
11
|
+
if (order?.metadata?.source === "erp" ||
|
|
12
|
+
order?.metadata?.sync_erp === true) {
|
|
13
|
+
framework_1.logger.info(`[SyncToERP] Skipping order ${order.id} — originated from ERP (source=${order?.metadata?.source}, sync_erp=${order?.metadata?.sync_erp})`);
|
|
14
|
+
return new workflows_sdk_1.StepResponse({ order: null, sale: null });
|
|
15
|
+
}
|
|
9
16
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
10
17
|
const { data: [customer], } = await query.graph({
|
|
11
18
|
entity: "customer",
|
|
12
19
|
fields: ["*", "extended_customer.*"],
|
|
13
|
-
filters: { id: order.customer_id },
|
|
20
|
+
filters: { id: order.customer_id || "" },
|
|
14
21
|
});
|
|
15
|
-
|
|
16
|
-
const
|
|
22
|
+
const branch_no = order?.metadata?.branch_no || "";
|
|
23
|
+
const ownerMobileFilter = customer.phone?.replace("+91", "") || "";
|
|
24
|
+
framework_1.logger.info(`[SyncToERP] Fetching party for owner_mobile="${ownerMobileFilter}", customer.phone="${customer.phone}"`);
|
|
25
|
+
const { data: partyData } = await query.graph({
|
|
17
26
|
entity: "party_master",
|
|
18
27
|
fields: ["*"],
|
|
19
28
|
filters: {
|
|
20
|
-
owner_mobile:
|
|
29
|
+
owner_mobile: ownerMobileFilter,
|
|
30
|
+
is_main_client: true,
|
|
21
31
|
},
|
|
22
32
|
});
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
framework_1.logger.info(`[SyncToERP] partyData results: ${partyData.length}, party_no=${partyData[0]?.party_no ?? "NOT FOUND"}`);
|
|
34
|
+
const { data: [branch_data], } = await query.graph({
|
|
35
|
+
entity: "party_master",
|
|
36
|
+
fields: ["*"],
|
|
37
|
+
filters: {
|
|
38
|
+
branch_no: branch_no,
|
|
39
|
+
is_location: true,
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
const payment = {
|
|
43
|
+
pp_cash_cash: "cash",
|
|
44
|
+
pp_cheque_cheque: "cheque",
|
|
45
|
+
pp_bank_transfer_bank_transfer: "bank",
|
|
46
|
+
pp_gokwik_gokwik: "payu",
|
|
47
|
+
pp_razorpay_razorpay: "razorpay",
|
|
48
|
+
pp_wallet_wallet: "wallet",
|
|
49
|
+
"pp_worldline-pos_worldline_pos": "pos",
|
|
50
|
+
};
|
|
51
|
+
const partyToUse = partyData[0];
|
|
27
52
|
const { data: [promocode_series_master], } = await query.graph({
|
|
28
53
|
entity: "promocode_series_master",
|
|
29
54
|
fields: ["promocode_series_id", "promocode_master_id", "promocode"],
|
|
30
55
|
filters: {
|
|
31
|
-
promocode: order?.metadata?.discount?.code,
|
|
56
|
+
promocode: order?.metadata?.discount?.code || "",
|
|
32
57
|
},
|
|
33
58
|
});
|
|
59
|
+
const { data: payment_info } = await query.graph({
|
|
60
|
+
entity: "payment_book_master",
|
|
61
|
+
fields: ["id", "book_name"],
|
|
62
|
+
filters: {
|
|
63
|
+
branch_no: order?.metadata?.cart_type === "POS_CART"
|
|
64
|
+
? (branch_data?.branch_no ?? "")
|
|
65
|
+
: "",
|
|
66
|
+
type: "order",
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const payment_collections = order?.payment_collections?.[0].payments;
|
|
70
|
+
console.log("payment_collections", payment_collections);
|
|
71
|
+
let payment_option = [];
|
|
72
|
+
if (payment_collections) {
|
|
73
|
+
payment_option = payment_collections?.map((paymentItem) => {
|
|
74
|
+
const provider = payment[paymentItem.provider_id];
|
|
75
|
+
let book_name = "";
|
|
76
|
+
let remarks = "";
|
|
77
|
+
if (provider === "pos") {
|
|
78
|
+
const posType = paymentItem.data?.pos_type || "";
|
|
79
|
+
book_name =
|
|
80
|
+
payment_info?.find((bookItem) => bookItem.book_name
|
|
81
|
+
?.toLowerCase()
|
|
82
|
+
?.includes(posType.toLowerCase()))?.book_name || "";
|
|
83
|
+
const otherFields = { ...paymentItem.data };
|
|
84
|
+
delete otherFields.amount;
|
|
85
|
+
delete otherFields.session_id;
|
|
86
|
+
if (otherFields.worldline_pos) {
|
|
87
|
+
const worldlineData = otherFields.worldline_pos;
|
|
88
|
+
if (worldlineData.verification_response) {
|
|
89
|
+
const verifyResponse = worldlineData.verification_response;
|
|
90
|
+
remarks = Object.entries({
|
|
91
|
+
pos_id: otherFields.pos_id || "",
|
|
92
|
+
pos_type: otherFields.pos_type || "",
|
|
93
|
+
transaction_id: verifyResponse.rrn || verifyResponse.transaction_id || "",
|
|
94
|
+
response_code: verifyResponse.response_code || "",
|
|
95
|
+
response_message: verifyResponse.response_message || "",
|
|
96
|
+
status: verifyResponse.status || "",
|
|
97
|
+
})
|
|
98
|
+
.filter(([_, v]) => v !== "")
|
|
99
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
100
|
+
.join(", ");
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
remarks = Object.entries({
|
|
104
|
+
pos_id: otherFields.pos_id || "",
|
|
105
|
+
pos_type: otherFields.pos_type || "",
|
|
106
|
+
urn: worldlineData.urn || "",
|
|
107
|
+
})
|
|
108
|
+
.filter(([_, v]) => v !== "")
|
|
109
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
110
|
+
.join(", ");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
remarks = Object.entries(otherFields)
|
|
115
|
+
.filter(([_, v]) => v !== "")
|
|
116
|
+
.map(([k, v]) => {
|
|
117
|
+
if (typeof v === "object" && v !== null) {
|
|
118
|
+
return `${k}: ${JSON.stringify(v)}`;
|
|
119
|
+
}
|
|
120
|
+
return `${k}: ${v}`;
|
|
121
|
+
})
|
|
122
|
+
.join(", ");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else if (provider === "wallet") {
|
|
126
|
+
book_name = "Wallet Balance";
|
|
127
|
+
const otherFields = { ...paymentItem.data };
|
|
128
|
+
remarks = Object.entries(otherFields)
|
|
129
|
+
.filter(([_, v]) => v !== "")
|
|
130
|
+
.map(([k, v]) => {
|
|
131
|
+
if (typeof v === "object" && v !== null) {
|
|
132
|
+
return `${k}: ${JSON.stringify(v)}`;
|
|
133
|
+
}
|
|
134
|
+
return `${k}: ${String(v)}`;
|
|
135
|
+
})
|
|
136
|
+
.join(", ");
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
if (provider == "payu") {
|
|
140
|
+
const paymentData = paymentItem?.data;
|
|
141
|
+
const paymentMethod = paymentData?.body?.payment_details?.payment_method ||
|
|
142
|
+
paymentData?.payment_details?.payment_method;
|
|
143
|
+
if (paymentMethod === "cod") {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
book_name =
|
|
148
|
+
payment_info?.find((bookItem) => bookItem.book_name?.toLowerCase()?.includes(provider))?.book_name || "";
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
book_name =
|
|
153
|
+
payment_info?.find((bookItem) => bookItem.book_name?.toLowerCase()?.includes(provider))?.book_name || "";
|
|
154
|
+
}
|
|
155
|
+
const otherFields = { ...paymentItem.data };
|
|
156
|
+
delete otherFields.amount;
|
|
157
|
+
delete otherFields.session_id;
|
|
158
|
+
delete otherFields?.cart_id;
|
|
159
|
+
delete otherFields?.billing_address;
|
|
160
|
+
delete otherFields?.shipping_address;
|
|
161
|
+
delete otherFields?.extra?.billing_address;
|
|
162
|
+
delete otherFields?.extra?.shipping_address;
|
|
163
|
+
remarks = Object.entries(otherFields)
|
|
164
|
+
.filter(([_, v]) => v !== "")
|
|
165
|
+
.map(([k, v]) => {
|
|
166
|
+
if (typeof v === "object" && v !== null) {
|
|
167
|
+
return `${k}: ${JSON.stringify(v)}`;
|
|
168
|
+
}
|
|
169
|
+
return `${k}: ${String(v)}`;
|
|
170
|
+
})
|
|
171
|
+
.join(", ");
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
OrderId: 0,
|
|
175
|
+
BookName: book_name || "Razorpay Receipt - Self/Shiv.Adi.",
|
|
176
|
+
Amount: Number(paymentItem.amount) || 0,
|
|
177
|
+
Remarks: remarks ? JSON.stringify(remarks) : "",
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
}
|
|
34
181
|
const { data: [promocode_master], } = await query.graph({
|
|
35
182
|
entity: "promocode_master",
|
|
36
183
|
fields: ["per_amt_on", "per_amt_value"],
|
|
37
184
|
filters: {
|
|
38
|
-
id: promocode_series_master?.promocode_master_id,
|
|
185
|
+
id: promocode_series_master?.promocode_master_id || "",
|
|
39
186
|
},
|
|
40
187
|
});
|
|
41
188
|
const promocode_data = {
|
|
42
189
|
promocode_series_id: promocode_series_master?.promocode_series_id || 0,
|
|
43
190
|
promocode: promocode_series_master?.promocode || "",
|
|
44
|
-
promocode_percentage: promocode_master?.per_amt_on
|
|
191
|
+
promocode_percentage: promocode_series_master?.promocode && promocode_master?.per_amt_on
|
|
45
192
|
? 0
|
|
46
193
|
: promocode_master?.per_amt_value || 0,
|
|
47
|
-
promocode_amount: promocode_master?.per_amt_on
|
|
194
|
+
promocode_amount: promocode_series_master?.promocode && promocode_master?.per_amt_on
|
|
48
195
|
? promocode_master?.per_amt_value || 0
|
|
49
196
|
: 0,
|
|
50
197
|
};
|
|
51
|
-
|
|
52
|
-
console.log("
|
|
53
|
-
const orderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data);
|
|
54
|
-
console.log("orderPayload", JSON.stringify(orderPayload, null, 2));
|
|
198
|
+
const orderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data, payment_option.filter(Boolean), branch_data);
|
|
199
|
+
console.log("___", orderPayload);
|
|
55
200
|
const erpModuleService = container.resolve("erp");
|
|
56
|
-
|
|
57
|
-
|
|
201
|
+
// Update party's address in ERP with the billing address from this order
|
|
202
|
+
// before creating the order so ERP always has the latest address on file.
|
|
203
|
+
const billingAddress = order.billing_address;
|
|
204
|
+
const isWebsiteOrder = order?.metadata?.cart_type !== "POS_CART";
|
|
205
|
+
framework_1.logger.info(`[SyncToERP] Party address update check — party_no="${partyToUse?.party_no}", isWebsiteOrder=${isWebsiteOrder}, billingAddress.address_1="${billingAddress?.address_1}", billingAddress.city="${billingAddress?.city}", billingAddress.province="${billingAddress?.province}", billingAddress.postal_code="${billingAddress?.postal_code}"`);
|
|
206
|
+
if (partyToUse?.party_no && billingAddress && isWebsiteOrder) {
|
|
207
|
+
try {
|
|
208
|
+
await erpModuleService.updateCustomer({
|
|
209
|
+
PartyNo: partyToUse.party_no,
|
|
210
|
+
FirmName: partyToUse.firm_name || "",
|
|
211
|
+
LegalName: partyToUse.legal_name || "",
|
|
212
|
+
FirmAdd1: billingAddress.address_1 || partyToUse.firm_add1 || "",
|
|
213
|
+
FirmAdd2: billingAddress.address_2 || partyToUse.firm_add2 || "",
|
|
214
|
+
FirmAdd3: partyToUse.firm_add3 || "",
|
|
215
|
+
FirmCity: billingAddress.city || partyToUse.firm_city || "",
|
|
216
|
+
State: (0, state_helper_1.getStateNameWithCode)(billingAddress.province ?? "") ||
|
|
217
|
+
partyToUse.state ||
|
|
218
|
+
"",
|
|
219
|
+
FirmPinCode: billingAddress.postal_code || partyToUse.firm_pin_code || "",
|
|
220
|
+
FirmEmail: partyToUse.firm_email || "",
|
|
221
|
+
OwnerMobile: partyToUse.owner_mobile || "",
|
|
222
|
+
FirmTele: partyToUse.firm_tele || "",
|
|
223
|
+
WhatsAppNo: partyToUse.whatsapp_no || "",
|
|
224
|
+
Country: "India",
|
|
225
|
+
FirmBirthDate: partyToUse.firm_birth_date || "",
|
|
226
|
+
FirmAnniversaryDate: partyToUse.firm_anniversary_date || "",
|
|
227
|
+
BranchNo: partyToUse.branch_no || "",
|
|
228
|
+
BranchName: partyToUse.branch_name || "",
|
|
229
|
+
LocationId: partyToUse.location_id || "",
|
|
230
|
+
LocationName: partyToUse.location_name || "All",
|
|
231
|
+
FirmPan: partyToUse.firm_pan || "",
|
|
232
|
+
GSTNo: partyToUse.gst_no || "",
|
|
233
|
+
IsCustomer: partyToUse.is_customer ?? true,
|
|
234
|
+
IsSupplier: partyToUse.is_supplier ?? false,
|
|
235
|
+
IsAccount: partyToUse.is_account ?? false,
|
|
236
|
+
IsSalesMan: partyToUse.is_salesman ?? false,
|
|
237
|
+
IsFactory: partyToUse.is_factory ?? false,
|
|
238
|
+
FactoryType: partyToUse.factory_type ?? false,
|
|
239
|
+
IsTools: partyToUse.is_tools ?? false,
|
|
240
|
+
IsLocation: partyToUse.is_location ?? false,
|
|
241
|
+
IsPdHead: partyToUse.is_pd_head ?? 0,
|
|
242
|
+
IsInlineBranch: partyToUse.is_inline_branch ?? false,
|
|
243
|
+
IsSchemeMember: partyToUse.is_scheme_member ?? false,
|
|
244
|
+
});
|
|
245
|
+
framework_1.logger.info(`[SyncToERP] Updated party address for PartyNo: ${partyToUse.party_no}`);
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
// Non-fatal: log and continue — order sync should not fail because of this
|
|
249
|
+
framework_1.logger.error(`[SyncToERP] Failed to update party address for PartyNo ${partyToUse.party_no}: ${err?.message}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
let erpResponse = await erpModuleService.createOrder(orderPayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
|
|
253
|
+
if (erpResponse?.status === false &&
|
|
254
|
+
erpResponse?.message?.includes("JewelCode Assign to Other Order")) {
|
|
255
|
+
console.log("[SYNC ORDER TO ERP] Detected jewel code conflict, attempting resolution...");
|
|
256
|
+
// Parse the conflicting jewel_code from error message
|
|
257
|
+
const jewelCodeMatch = erpResponse.message.match(/([A-Z]{2}\d+)/i);
|
|
258
|
+
const conflictingJewelCode = jewelCodeMatch?.[1];
|
|
259
|
+
if (conflictingJewelCode) {
|
|
260
|
+
console.log("[SYNC ORDER TO ERP] Conflicting jewel_code:", conflictingJewelCode);
|
|
261
|
+
// Find the item with this jewel_code
|
|
262
|
+
const conflictingItem = (order.items || []).find((item) => item?.variant_barcode === conflictingJewelCode);
|
|
263
|
+
if (conflictingItem) {
|
|
264
|
+
const styleCode = conflictingItem.variant?.extended_variant
|
|
265
|
+
?.style_code;
|
|
266
|
+
const branchNo = partyToUse?.branch_no;
|
|
267
|
+
// Find alternative jewel_code with same style and branch
|
|
268
|
+
const { data: availableInwards } = await query.graph({
|
|
269
|
+
entity: "inward_master",
|
|
270
|
+
fields: [
|
|
271
|
+
"jewel_code",
|
|
272
|
+
"jewel_id",
|
|
273
|
+
"style_code",
|
|
274
|
+
"branch_no",
|
|
275
|
+
"status",
|
|
276
|
+
"mrp",
|
|
277
|
+
],
|
|
278
|
+
filters: {
|
|
279
|
+
style_code: styleCode,
|
|
280
|
+
branch_no: branchNo,
|
|
281
|
+
status: "In Stock",
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
const alternativeInward = availableInwards?.find((inward) => inward.jewel_code !== conflictingJewelCode);
|
|
285
|
+
const orderService = container.resolve(utils_1.Modules.ORDER);
|
|
286
|
+
const cartService = container.resolve(utils_1.Modules.CART);
|
|
287
|
+
if (alternativeInward) {
|
|
288
|
+
// Found alternative - update variant_barcode and metadata, then retry
|
|
289
|
+
console.log("[SYNC ORDER TO ERP] Found alternative jewel_code:", alternativeInward.jewel_code);
|
|
290
|
+
// Update order item with new variant_barcode and jewel_id
|
|
291
|
+
await orderService.updateOrderLineItems([
|
|
292
|
+
{
|
|
293
|
+
selector: { id: conflictingItem.id },
|
|
294
|
+
data: {
|
|
295
|
+
variant_barcode: alternativeInward.jewel_code,
|
|
296
|
+
metadata: {
|
|
297
|
+
...(conflictingItem.metadata || {}),
|
|
298
|
+
jewel_id: alternativeInward.jewel_id,
|
|
299
|
+
previous_jewel_code: conflictingJewelCode,
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
},
|
|
303
|
+
]);
|
|
304
|
+
// Update in-memory order for payload rebuild
|
|
305
|
+
conflictingItem.variant_barcode = alternativeInward.jewel_code;
|
|
306
|
+
conflictingItem.metadata = {
|
|
307
|
+
...(conflictingItem.metadata || {}),
|
|
308
|
+
jewel_id: alternativeInward.jewel_id,
|
|
309
|
+
};
|
|
310
|
+
// Update cart item if exists
|
|
311
|
+
const cartId = order.metadata?.cart_id;
|
|
312
|
+
if (cartId && typeof cartId === "string") {
|
|
313
|
+
try {
|
|
314
|
+
const cart = await cartService.retrieveCart(cartId, {
|
|
315
|
+
relations: ["items"],
|
|
316
|
+
});
|
|
317
|
+
const cartItem = cart?.items?.find((item) => item.variant_id === conflictingItem.variant_id);
|
|
318
|
+
if (cartItem) {
|
|
319
|
+
await cartService.updateLineItems([
|
|
320
|
+
{
|
|
321
|
+
id: cartItem.id,
|
|
322
|
+
variant_barcode: alternativeInward.jewel_code,
|
|
323
|
+
metadata: {
|
|
324
|
+
...(cartItem.metadata || {}),
|
|
325
|
+
jewel_id: alternativeInward.jewel_id,
|
|
326
|
+
previous_jewel_code: conflictingJewelCode,
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
]);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
console.error("[SYNC ORDER TO ERP] Cart item update error:", e);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Rebuild order payload with new jewel_code and retry
|
|
337
|
+
const retryOrderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data, payment_option.filter(Boolean), branch_data);
|
|
338
|
+
console.log("[SYNC ORDER TO ERP] Retrying order creation with new jewel_code...", retryOrderPayload);
|
|
339
|
+
erpResponse = await erpModuleService.createOrder(retryOrderPayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
|
|
340
|
+
if (erpResponse?.status !== false) {
|
|
341
|
+
console.log("[SYNC ORDER TO ERP] ✅ Order created successfully after jewel_code replacement");
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
// No alternative - convert to make_to_order
|
|
346
|
+
console.log("[SYNC ORDER TO ERP] No alternative jewel_code found, converting to make_to_order");
|
|
347
|
+
// Reset inward_master for conflicting jewel code
|
|
348
|
+
if (conflictingJewelCode) {
|
|
349
|
+
try {
|
|
350
|
+
const { data: inwardRecords } = await query.graph({
|
|
351
|
+
entity: "inward_master",
|
|
352
|
+
fields: ["id"],
|
|
353
|
+
filters: { jewel_code: conflictingJewelCode },
|
|
354
|
+
});
|
|
355
|
+
if (inwardRecords?.length) {
|
|
356
|
+
await container.resolve("extended_variant").updateInwardMasters(inwardRecords.map((r) => ({
|
|
357
|
+
id: r.id,
|
|
358
|
+
is_inward_marked: false,
|
|
359
|
+
inward_order_id: null,
|
|
360
|
+
inward_marked_at: null,
|
|
361
|
+
})));
|
|
362
|
+
console.log(`[SYNC ORDER TO ERP] Released inward reservation for conflicting jewel_code: ${conflictingJewelCode}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
catch (inwardErr) {
|
|
366
|
+
console.error(`[SYNC ORDER TO ERP] Failed to reset inward for conflicting jewel_code:`, inwardErr);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// Update order item - remove variant_barcode and metadata.jewel_id
|
|
370
|
+
const updatedItemMetadata = { ...(conflictingItem.metadata || {}) };
|
|
371
|
+
delete updatedItemMetadata.jewel_id;
|
|
372
|
+
updatedItemMetadata.converted_to_mto = true;
|
|
373
|
+
updatedItemMetadata.conversion_timestamp = new Date().toISOString();
|
|
374
|
+
await orderService.updateOrderLineItems([
|
|
375
|
+
{
|
|
376
|
+
selector: { id: conflictingItem.id },
|
|
377
|
+
data: {
|
|
378
|
+
variant_barcode: undefined,
|
|
379
|
+
metadata: updatedItemMetadata,
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
]);
|
|
383
|
+
// Update in-memory order
|
|
384
|
+
conflictingItem.metadata = updatedItemMetadata;
|
|
385
|
+
conflictingItem.variant_barcode = null;
|
|
386
|
+
// Update cart if exists
|
|
387
|
+
const cartId = order.metadata?.cart_id;
|
|
388
|
+
if (cartId && typeof cartId === "string") {
|
|
389
|
+
try {
|
|
390
|
+
const cart = await cartService.retrieveCart(cartId, {
|
|
391
|
+
relations: ["items"],
|
|
392
|
+
});
|
|
393
|
+
const cartItem = cart?.items?.find((item) => item.variant_id === conflictingItem.variant_id);
|
|
394
|
+
if (cartItem) {
|
|
395
|
+
const updatedCartMeta = { ...(cartItem.metadata || {}) };
|
|
396
|
+
delete updatedCartMeta.jewel_id;
|
|
397
|
+
updatedCartMeta.converted_to_mto = true;
|
|
398
|
+
await cartService.updateLineItems([
|
|
399
|
+
{
|
|
400
|
+
id: cartItem.id,
|
|
401
|
+
variant_barcode: undefined,
|
|
402
|
+
metadata: updatedCartMeta,
|
|
403
|
+
},
|
|
404
|
+
]);
|
|
405
|
+
}
|
|
406
|
+
// Update cart order type
|
|
407
|
+
await cartService.updateCarts([
|
|
408
|
+
{
|
|
409
|
+
id: cartId,
|
|
410
|
+
metadata: {
|
|
411
|
+
...(cart?.metadata || {}),
|
|
412
|
+
cart_order_type: "make_to_order",
|
|
413
|
+
original_order_type: cart?.metadata?.cart_order_type,
|
|
414
|
+
mto_conversion_reason: "no_alternative_jewel_code",
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
]);
|
|
418
|
+
}
|
|
419
|
+
catch (e) {
|
|
420
|
+
console.error("[SYNC ORDER TO ERP] Cart update error:", e);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
// Update order type
|
|
424
|
+
await orderService.updateOrders([
|
|
425
|
+
{
|
|
426
|
+
id: order.id,
|
|
427
|
+
metadata: {
|
|
428
|
+
...(order.metadata || {}),
|
|
429
|
+
cart_order_type: "make_to_order",
|
|
430
|
+
original_order_type: order.metadata?.cart_order_type,
|
|
431
|
+
mto_conversion_reason: "no_alternative_jewel_code",
|
|
432
|
+
},
|
|
433
|
+
},
|
|
434
|
+
]);
|
|
435
|
+
// Update extended_order
|
|
436
|
+
const { data: extOrderData } = await query.graph({
|
|
437
|
+
entity: "extended_order",
|
|
438
|
+
fields: ["id"],
|
|
439
|
+
filters: { order_id: order.id },
|
|
440
|
+
});
|
|
441
|
+
if (extOrderData?.[0]?.id) {
|
|
442
|
+
try {
|
|
443
|
+
const extOrderService = container.resolve("extended_order");
|
|
444
|
+
await extOrderService.updateExtendedOrders({
|
|
445
|
+
id: extOrderData[0].id,
|
|
446
|
+
order_type: "make_to_order",
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
catch (e) {
|
|
450
|
+
console.error("[SYNC ORDER TO ERP] Extended order update error:", e);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// Rebuild order payload without jewel_code and retry
|
|
454
|
+
order.metadata = {
|
|
455
|
+
...(order.metadata || {}),
|
|
456
|
+
cart_order_type: "make_to_order",
|
|
457
|
+
};
|
|
458
|
+
const retryOrderPayload = (0, order_helper_1.buildOrderData)(order, customer, partyToUse, promocode_data, payment_option.filter(Boolean), branch_data);
|
|
459
|
+
console.log("[SYNC ORDER TO ERP] Retrying order creation as make_to_order...");
|
|
460
|
+
erpResponse = await erpModuleService.createOrder(retryOrderPayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
|
|
461
|
+
if (erpResponse?.status !== false) {
|
|
462
|
+
console.log("[SYNC ORDER TO ERP] ✅ Order created successfully as make_to_order");
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
// Check if ERP response has status false and send Slack notification
|
|
469
|
+
if (erpResponse?.status === false) {
|
|
470
|
+
try {
|
|
471
|
+
const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
472
|
+
await notificationService.createNotifications([
|
|
473
|
+
{
|
|
474
|
+
to: "slack",
|
|
475
|
+
channel: "slack",
|
|
476
|
+
template: "slack-alert",
|
|
477
|
+
data: {
|
|
478
|
+
alertType: "gati_create_order_failure",
|
|
479
|
+
message: `ERP Order Creation Failed for Order ID: ${order.id}`,
|
|
480
|
+
error: erpResponse.message || "Unknown error occurred",
|
|
481
|
+
severity: "high",
|
|
482
|
+
metadata: {
|
|
483
|
+
order_id: order.id,
|
|
484
|
+
order_display_id: order.display_id,
|
|
485
|
+
error_message: erpResponse.message,
|
|
486
|
+
cart_type: order?.metadata?.cart_type || "WEBSITE",
|
|
487
|
+
},
|
|
488
|
+
timestamp: new Date(),
|
|
489
|
+
},
|
|
490
|
+
},
|
|
491
|
+
]);
|
|
492
|
+
}
|
|
493
|
+
catch (slackError) {
|
|
494
|
+
console.error("Failed to send Slack notification:", slackError);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
// Create sale after order is created successfully
|
|
498
|
+
let saleResponse = null;
|
|
499
|
+
if (erpResponse?.status !== false &&
|
|
500
|
+
erpResponse?.data &&
|
|
501
|
+
order?.metadata?.cart_type === "POS_CART" &&
|
|
502
|
+
order.metadata.cart_order_type === "ready_to_sell") {
|
|
503
|
+
// Check if all items with jewel_code exist in inward_master with matching branch_no
|
|
504
|
+
const itemsWithJewelCode = (order.items || []).filter((item) => item.variant_barcode);
|
|
505
|
+
let allItemsMatch = true;
|
|
506
|
+
if (itemsWithJewelCode.length > 0) {
|
|
507
|
+
const branchNo = branch_data?.branch_no;
|
|
508
|
+
if (!branchNo) {
|
|
509
|
+
console.log("Branch number not found, skipping sale creation");
|
|
510
|
+
allItemsMatch = false;
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
// Check each item with jewel_code in inward_master
|
|
514
|
+
const inwardChecks = await Promise.all(itemsWithJewelCode.map(async (item) => {
|
|
515
|
+
const jewelCode = item?.variant_barcode;
|
|
516
|
+
if (!jewelCode)
|
|
517
|
+
return true;
|
|
518
|
+
const { data: [inwardMaster], } = await query.graph({
|
|
519
|
+
entity: "inward_master",
|
|
520
|
+
fields: ["jewel_code", "branch_no"],
|
|
521
|
+
filters: {
|
|
522
|
+
jewel_code: jewelCode,
|
|
523
|
+
branch_no: branchNo,
|
|
524
|
+
},
|
|
525
|
+
});
|
|
526
|
+
if (!inwardMaster) {
|
|
527
|
+
console.log(`Inward master not found for jewel_code: ${jewelCode} and branch_no: ${branchNo}`);
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
return true;
|
|
531
|
+
}));
|
|
532
|
+
allItemsMatch = inwardChecks.every((match) => match);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
if (!allItemsMatch) {
|
|
536
|
+
console.log("Not all items match in inward_master, skipping sale creation");
|
|
537
|
+
try {
|
|
538
|
+
const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
539
|
+
await notificationService.createNotifications([
|
|
540
|
+
{
|
|
541
|
+
to: "slack",
|
|
542
|
+
channel: "slack",
|
|
543
|
+
template: "slack-alert",
|
|
544
|
+
data: {
|
|
545
|
+
alertType: "gati_sale_creation_skipped",
|
|
546
|
+
message: `Sale Creation Skipped for Order ID: ${order.id} - Jewel code and branch_no mismatch in inward_master`,
|
|
547
|
+
error: "One or more items with jewel_code do not match in inward_master with the branch_no",
|
|
548
|
+
severity: "medium",
|
|
549
|
+
metadata: {
|
|
550
|
+
order_id: order.id,
|
|
551
|
+
order_display_id: order.display_id,
|
|
552
|
+
cart_type: order?.metadata?.cart_type || "WEBSITE",
|
|
553
|
+
},
|
|
554
|
+
timestamp: new Date(),
|
|
555
|
+
},
|
|
556
|
+
},
|
|
557
|
+
]);
|
|
558
|
+
}
|
|
559
|
+
catch (slackError) {
|
|
560
|
+
console.error("Failed to send Slack notification:", slackError);
|
|
561
|
+
}
|
|
562
|
+
return new workflows_sdk_1.StepResponse({
|
|
563
|
+
order: erpResponse?.data || null,
|
|
564
|
+
sale: null,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
const salePayload = (0, order_helper_1.buildSaleData)(order, customer, partyToUse, promocode_data, payment_option.filter(Boolean), branch_data);
|
|
568
|
+
console.log("salePayload", JSON.stringify(salePayload, null, 2));
|
|
569
|
+
saleResponse = await erpModuleService.createSale(salePayload, order?.metadata?.cart_type === "POS_CART" ? "POS" : "WEBSITE");
|
|
570
|
+
console.log("saleResponse", JSON.stringify(saleResponse, null, 2));
|
|
571
|
+
if (saleResponse?.status === false) {
|
|
572
|
+
try {
|
|
573
|
+
const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
574
|
+
await notificationService.createNotifications([
|
|
575
|
+
{
|
|
576
|
+
to: "slack",
|
|
577
|
+
channel: "slack",
|
|
578
|
+
template: "slack-alert",
|
|
579
|
+
data: {
|
|
580
|
+
alertType: "gati_create_sale_failure",
|
|
581
|
+
message: `ERP Sale Creation Failed for Order ID: ${order.id}`,
|
|
582
|
+
error: saleResponse.message || "Unknown error occurred",
|
|
583
|
+
severity: "high",
|
|
584
|
+
metadata: {
|
|
585
|
+
order_id: order.id,
|
|
586
|
+
order_display_id: order.display_id,
|
|
587
|
+
error_message: saleResponse.message,
|
|
588
|
+
cart_type: order?.metadata?.cart_type || "WEBSITE",
|
|
589
|
+
},
|
|
590
|
+
timestamp: new Date(),
|
|
591
|
+
},
|
|
592
|
+
},
|
|
593
|
+
]);
|
|
594
|
+
}
|
|
595
|
+
catch (slackError) {
|
|
596
|
+
console.error("Failed to send Slack notification:", slackError);
|
|
597
|
+
}
|
|
598
|
+
try {
|
|
599
|
+
const orderService = container.resolve(utils_1.Modules.ORDER);
|
|
600
|
+
const inwardMasterService = container.resolve("extended_variant");
|
|
601
|
+
const cartService = container.resolve(utils_1.Modules.CART);
|
|
602
|
+
// Get items with variant_barcode (ready_to_sell items with jewel code)
|
|
603
|
+
const itemsWithJewelCode = (order.items || []).filter((item) => item.variant_barcode);
|
|
604
|
+
for (const item of itemsWithJewelCode) {
|
|
605
|
+
const jewelCode = item?.variant_barcode;
|
|
606
|
+
// Reset inward_master reservation fields
|
|
607
|
+
if (jewelCode) {
|
|
608
|
+
try {
|
|
609
|
+
const { data: inwardRecords } = await query.graph({
|
|
610
|
+
entity: "inward_master",
|
|
611
|
+
fields: ["id", "jewel_code"],
|
|
612
|
+
filters: { jewel_code: jewelCode },
|
|
613
|
+
});
|
|
614
|
+
if (inwardRecords?.length) {
|
|
615
|
+
await inwardMasterService.updateInwardMasters(inwardRecords.map((r) => ({
|
|
616
|
+
id: r.id,
|
|
617
|
+
is_inward_marked: false,
|
|
618
|
+
inward_order_id: null,
|
|
619
|
+
inward_marked_at: null,
|
|
620
|
+
})));
|
|
621
|
+
console.log(`[SYNC ORDER TO ERP] Released inward reservation for jewel_code: ${jewelCode}`);
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
catch (inwardErr) {
|
|
625
|
+
console.error(`[SYNC ORDER TO ERP] Failed to reset inward for jewel_code ${jewelCode}:`, inwardErr);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
// Remove variant_barcode and metadata.jewel_id from order item
|
|
629
|
+
const updatedMetadata = { ...(item.metadata || {}) };
|
|
630
|
+
delete updatedMetadata.jewel_id;
|
|
631
|
+
await orderService.updateOrderLineItems([
|
|
632
|
+
{
|
|
633
|
+
selector: { id: item.id },
|
|
634
|
+
data: {
|
|
635
|
+
variant_barcode: undefined,
|
|
636
|
+
metadata: {
|
|
637
|
+
...updatedMetadata,
|
|
638
|
+
converted_to_mto: true,
|
|
639
|
+
mto_conversion_reason: "sale_creation_failed",
|
|
640
|
+
},
|
|
641
|
+
},
|
|
642
|
+
},
|
|
643
|
+
]);
|
|
644
|
+
}
|
|
645
|
+
// Update cart items if exists
|
|
646
|
+
const cartId = order.metadata?.cart_id;
|
|
647
|
+
if (cartId && typeof cartId === "string") {
|
|
648
|
+
try {
|
|
649
|
+
const cart = await cartService.retrieveCart(cartId, {
|
|
650
|
+
relations: ["items"],
|
|
651
|
+
});
|
|
652
|
+
for (const item of itemsWithJewelCode) {
|
|
653
|
+
const cartItem = cart?.items?.find((ci) => ci.variant_id === item.variant_id);
|
|
654
|
+
if (cartItem) {
|
|
655
|
+
const updatedCartMetadata = { ...(cartItem.metadata || {}) };
|
|
656
|
+
delete updatedCartMetadata.jewel_id;
|
|
657
|
+
await cartService.updateLineItems([
|
|
658
|
+
{
|
|
659
|
+
id: cartItem.id,
|
|
660
|
+
variant_barcode: undefined,
|
|
661
|
+
metadata: {
|
|
662
|
+
...updatedCartMetadata,
|
|
663
|
+
converted_to_mto: true,
|
|
664
|
+
},
|
|
665
|
+
},
|
|
666
|
+
]);
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
// Update cart order type
|
|
670
|
+
await cartService.updateCarts([
|
|
671
|
+
{
|
|
672
|
+
id: cartId,
|
|
673
|
+
metadata: {
|
|
674
|
+
...(cart?.metadata || {}),
|
|
675
|
+
cart_order_type: "make_to_order",
|
|
676
|
+
},
|
|
677
|
+
},
|
|
678
|
+
]);
|
|
679
|
+
}
|
|
680
|
+
catch (cartErr) {
|
|
681
|
+
console.error("[SYNC ORDER TO ERP] Cart update error:", cartErr);
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
// Convert order to make_to_order
|
|
685
|
+
await orderService.updateOrders([
|
|
686
|
+
{
|
|
687
|
+
id: order.id,
|
|
688
|
+
metadata: {
|
|
689
|
+
...(order.metadata || {}),
|
|
690
|
+
cart_order_type: "make_to_order",
|
|
691
|
+
},
|
|
692
|
+
},
|
|
693
|
+
]);
|
|
694
|
+
// Update extended_order order_type
|
|
695
|
+
const { data: extOrderData } = await query.graph({
|
|
696
|
+
entity: "extended_order",
|
|
697
|
+
fields: ["id"],
|
|
698
|
+
filters: { order_id: order.id },
|
|
699
|
+
});
|
|
700
|
+
if (extOrderData?.[0]?.id) {
|
|
701
|
+
const extOrderService = container.resolve("extended_order");
|
|
702
|
+
await extOrderService.updateExtendedOrders({
|
|
703
|
+
id: extOrderData[0].id,
|
|
704
|
+
order_type: "make_to_order",
|
|
705
|
+
});
|
|
706
|
+
}
|
|
707
|
+
console.log("[SYNC ORDER TO ERP] Order converted to make_to_order after sale failure");
|
|
708
|
+
}
|
|
709
|
+
catch (conversionErr) {
|
|
710
|
+
console.error("[SYNC ORDER TO ERP] Failed to convert order to make_to_order after sale failure:", conversionErr);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
// Update extended_order with ERP sync results
|
|
715
|
+
try {
|
|
716
|
+
const { data: extOrderData } = await query.graph({
|
|
717
|
+
entity: "extended_order",
|
|
718
|
+
fields: ["id"],
|
|
719
|
+
filters: { order_id: order.id },
|
|
720
|
+
});
|
|
721
|
+
console.log(`[SYNC ORDER TO ERP] extended_order lookup for order ${order.id}:`, extOrderData?.[0]?.id || "NOT FOUND");
|
|
722
|
+
console.log(`[SYNC ORDER TO ERP] erpResponse status=${erpResponse?.status}, OrderId=${erpResponse?.data?.OrderId}`);
|
|
723
|
+
console.log(`[SYNC ORDER TO ERP] saleResponse status=${saleResponse?.status}, JewelTransId=${saleResponse?.data?.JewelTransId}`);
|
|
724
|
+
if (extOrderData?.[0]?.id) {
|
|
725
|
+
const extOrderService = container.resolve("extended_order");
|
|
726
|
+
const updatePayload = { id: extOrderData[0].id };
|
|
727
|
+
const erpOrderId = erpResponse?.data?.OrderId;
|
|
728
|
+
if (erpOrderId && erpResponse?.status !== false) {
|
|
729
|
+
updatePayload.external_id = String(erpOrderId);
|
|
730
|
+
updatePayload.sync_erp = true;
|
|
731
|
+
updatePayload.sync_erp_error = null;
|
|
732
|
+
}
|
|
733
|
+
else if (erpResponse?.status === false) {
|
|
734
|
+
updatePayload.sync_erp = false;
|
|
735
|
+
updatePayload.sync_erp_error =
|
|
736
|
+
erpResponse?.message || String(erpResponse);
|
|
737
|
+
}
|
|
738
|
+
if (saleResponse?.status === true && saleResponse?.data?.JewelTransId) {
|
|
739
|
+
const { JewelTransId, JewelTransPrefix, JewelTransNo } = saleResponse.data;
|
|
740
|
+
updatePayload.sale_external_id = String(JewelTransId);
|
|
741
|
+
updatePayload.sale_invoice_no =
|
|
742
|
+
[JewelTransPrefix, JewelTransNo].filter(Boolean).join("-") || String(JewelTransId);
|
|
743
|
+
}
|
|
744
|
+
else if (saleResponse?.status === false) {
|
|
745
|
+
updatePayload.sync_erp_error = updatePayload.sync_erp_error
|
|
746
|
+
? updatePayload.sync_erp_error
|
|
747
|
+
: saleResponse?.message || String(saleResponse);
|
|
748
|
+
}
|
|
749
|
+
// Set customer, discount, cart_type, payment_mode from order metadata
|
|
750
|
+
const customerMeta = order.metadata?.customer;
|
|
751
|
+
updatePayload.customer_name =
|
|
752
|
+
customerMeta?.name ||
|
|
753
|
+
`${customer?.first_name || ""} ${customer?.last_name || ""}`.trim() ||
|
|
754
|
+
null;
|
|
755
|
+
updatePayload.customer_email =
|
|
756
|
+
customerMeta?.email || customer?.email || null;
|
|
757
|
+
updatePayload.customer_phone =
|
|
758
|
+
customerMeta?.phone || customer?.phone || null;
|
|
759
|
+
updatePayload.payment_mode =
|
|
760
|
+
(payment_collections?.length ?? 0) > 1 ? "split" : "single";
|
|
761
|
+
// Only call update if there's something beyond just the id
|
|
762
|
+
if (Object.keys(updatePayload).length > 1) {
|
|
763
|
+
console.log(`[SYNC ORDER TO ERP] Updating extended_order ${extOrderData[0].id} with:`, JSON.stringify(updatePayload));
|
|
764
|
+
await extOrderService.updateExtendedOrders(updatePayload);
|
|
765
|
+
console.log(`[SYNC ORDER TO ERP] extended_order updated successfully`);
|
|
766
|
+
if (saleResponse?.status === true && saleResponse?.data?.JewelTransId) {
|
|
767
|
+
try {
|
|
768
|
+
const eventBus = container.resolve(utils_1.Modules.EVENT_BUS);
|
|
769
|
+
await eventBus.emit({ name: "erp-sale-synced", data: { order_id: order.id } });
|
|
770
|
+
console.log(`[SYNC ORDER TO ERP] Emitted erp-sale-synced for order ${order.id}`);
|
|
771
|
+
}
|
|
772
|
+
catch (eventErr) {
|
|
773
|
+
console.error("[SYNC ORDER TO ERP] Failed to emit erp-sale-synced:", eventErr);
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
else {
|
|
778
|
+
console.log(`[SYNC ORDER TO ERP] No fields to update in extended_order (erpResponse.data.OrderId missing or ERP failed)`);
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
catch (extOrderError) {
|
|
783
|
+
console.error("[SYNC ORDER TO ERP] Failed to update extended_order:", extOrderError);
|
|
784
|
+
}
|
|
785
|
+
return new workflows_sdk_1.StepResponse({
|
|
786
|
+
order: erpResponse?.data || null,
|
|
787
|
+
sale: saleResponse?.status === true && saleResponse?.data?.JewelTransId
|
|
788
|
+
? {
|
|
789
|
+
jewel_trans_id: saleResponse?.data.JewelTransId,
|
|
790
|
+
data: saleResponse?.data,
|
|
791
|
+
}
|
|
792
|
+
: null,
|
|
793
|
+
});
|
|
58
794
|
});
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1vcmRlci10by1lcnAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9zeW5jLW9yZGVyLXRvLWVycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBc0U7QUFDdEUscUVBQTZFO0FBRzdFLHdEQUF1RDtBQUkxQyxRQUFBLGtCQUFrQixHQUFHLElBQUEsMEJBQVUsRUFDMUMsbUJBQW1CLEVBQ25CLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUNqQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsVUFBVTtRQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUM7UUFDcEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUU7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDeEMsTUFBTSxFQUFFLGNBQWM7UUFDdEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7U0FDakQ7S0FDRixD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
|
|
795
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1vcmRlci10by1lcnAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVycy9zdGVwcy9zeW5jLW9yZGVyLXRvLWVycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0U7QUFDL0UscUVBQTZFO0FBRTdFLHdEQUFzRTtBQUV0RSxtREFBNkM7QUFDN0MsOERBQW1FO0FBSXRELFFBQUEsa0JBQWtCLEdBQUcsSUFBQSwwQkFBVSxFQUMxQyxtQkFBbUIsRUFDbkIsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzVDLHVGQUF1RjtJQUN2RixJQUNFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxLQUFLLEtBQUs7UUFDakMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEtBQUssSUFBSSxFQUNsQyxDQUFDO1FBQ0Qsa0JBQU0sQ0FBQyxJQUFJLENBQ1QsOEJBQThCLEtBQUssQ0FBQyxFQUFFLGtDQUFrQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRyxDQUMxSSxDQUFDO1FBQ0YsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FDakIsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxFQUFFLFVBQVU7UUFDbEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLHFCQUFxQixDQUFDO1FBQ3BDLE9BQU8sRUFBRSxFQUFFLEVBQUUs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
|