@devx-commerce/plugin-gati 0.0.34-beta.3 → 0.0.34-beta.30
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/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 +30 -1
- package/.medusa/server/src/api/erp/webhook/route.js +10 -137
- package/.medusa/server/src/api/erp/webhook/utils.js +7 -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 +427 -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/gold-rate/validators.js +2 -2
- package/.medusa/server/src/jobs/process-erp-events.js +205 -0
- package/.medusa/server/src/jobs/process-variant-option-sync.js +43 -28
- package/.medusa/server/src/jobs/sync-addless-detail.js +60 -0
- package/.medusa/server/src/jobs/sync-book-list-and-applicable-policy.js +89 -0
- package/.medusa/server/src/jobs/sync-item-master.js +20 -0
- package/.medusa/server/src/jobs/sync-labour-chart-master.js +20 -0
- package/.medusa/server/src/jobs/sync-order-erp.js +3 -3
- package/.medusa/server/src/jobs/sync-payment-book-master.js +63 -0
- package/.medusa/server/src/jobs/sync-rate-chart-master.js +20 -0
- package/.medusa/server/src/jobs/sync-report-master.js +40 -0
- package/.medusa/server/src/jobs/sync-sale-return-policy-master.js +29 -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/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/models/book-list.js +12 -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 +542 -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/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-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/models/extended-variant.js +2 -2
- 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/Migration20260101104355.js +51 -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/order-master/index.js +13 -0
- package/.medusa/server/src/modules/order-master/migrations/Migration20251204071941.js +27 -0
- package/.medusa/server/src/modules/order-master/models/order-master.js +97 -0
- package/.medusa/server/src/modules/order-master/service.js +12 -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/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/models/sale-return-master.js +16 -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/order-item-update.js +11 -0
- package/.medusa/server/src/subscribers/party-master.js +36 -35
- package/.medusa/server/src/subscribers/shipping-info-master.js +3 -3
- package/.medusa/server/src/utils/build-redis-key.js +3 -1
- 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 +55 -0
- package/.medusa/server/src/workflows/book-list/steps/fetch-book-list.js +64 -0
- 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/helpers/product-helper.js +33 -17
- package/.medusa/server/src/workflows/helpers/variant-helper.js +165 -162
- package/.medusa/server/src/workflows/hooks/product-updated.js +6 -11
- package/.medusa/server/src/workflows/index.js +3 -1
- package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +6 -3
- package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +6 -2
- 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/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 +239 -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 +283 -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 +77 -0
- package/.medusa/server/src/workflows/orders/steps/index.js +14 -1
- package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +185 -0
- package/.medusa/server/src/workflows/orders/steps/sync-buyback-to-erp-step.js +98 -0
- package/.medusa/server/src/workflows/orders/steps/sync-cancel-to-erp-step.js +119 -0
- package/.medusa/server/src/workflows/orders/steps/sync-exchange-to-erp-step.js +100 -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 +425 -16
- package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +147 -0
- package/.medusa/server/src/workflows/orders/utils/order-helper.js +137 -30
- package/.medusa/server/src/workflows/orders/utils/order-request-helper.js +222 -0
- package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
- package/.medusa/server/src/workflows/orders/workflows/index.js +3 -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 +10 -0
- package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +53 -4
- package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +44 -33
- package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +96 -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 +16 -10
- 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/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 +24 -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/update-sale-master.js +95 -0
- package/.medusa/server/src/workflows/sale-return-master/index.js +24 -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.js +36 -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/update-extended-product-from-product/index.js +6 -8
- package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +9 -3
- package/package.json +14 -32
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = processErpEvents;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const bulk_jobs_task_trigger_1 = require("../workflows/bulk-jobs-task-trigger");
|
|
7
|
+
const update_erp_event_1 = require("../workflows/erp-event/workflows/update-erp-event");
|
|
8
|
+
const config_1 = require("../api/erp/webhook/config");
|
|
9
|
+
const framework_1 = require("@medusajs/framework");
|
|
10
|
+
// ECS task configuration for different data types
|
|
11
|
+
const ECS_TASK_CONFIG = {
|
|
12
|
+
StyleMst: {
|
|
13
|
+
taskType: "erp-webhook-batch-processing",
|
|
14
|
+
batchSize: 200,
|
|
15
|
+
enabled: true,
|
|
16
|
+
},
|
|
17
|
+
PartyStyleMst: {
|
|
18
|
+
taskType: "erp-webhook-batch-processing",
|
|
19
|
+
batchSize: 200,
|
|
20
|
+
enabled: true,
|
|
21
|
+
},
|
|
22
|
+
Inward: {
|
|
23
|
+
taskType: "erp-webhook-batch-processing",
|
|
24
|
+
batchSize: 200,
|
|
25
|
+
enabled: true,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Triggers ECS task for StyleMst, PartyStyleMst, and Inward
|
|
30
|
+
*/
|
|
31
|
+
async function triggerEcsTask(container, datafor, operation, data, erpEventId) {
|
|
32
|
+
const taskConfig = ECS_TASK_CONFIG[datafor];
|
|
33
|
+
framework_1.logger.info(`🚀 Triggering ECS task for ${datafor} with ${data.length} items`);
|
|
34
|
+
try {
|
|
35
|
+
const { result } = await (0, bulk_jobs_task_trigger_1.bulkJobsTaskTriggerWorkflow)(container).run({
|
|
36
|
+
input: {
|
|
37
|
+
taskType: taskConfig.taskType,
|
|
38
|
+
parameters: {
|
|
39
|
+
batchSize: taskConfig.batchSize,
|
|
40
|
+
erpEventId,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
framework_1.logger.info(`✅ ECS task triggered successfully for ${datafor}: ${JSON.stringify(result)}`);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
framework_1.logger.error(`❌ Failed to trigger ECS task for ${datafor}:`, error);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Processes the webhook request by executing the appropriate workflow
|
|
53
|
+
*/
|
|
54
|
+
async function processWebhookRequest(container, datafor, operation, data, eventId) {
|
|
55
|
+
const workflowConfig = config_1.MASTER_WORKFLOW_CONFIG[datafor];
|
|
56
|
+
if (!workflowConfig) {
|
|
57
|
+
throw new Error(`Unsupported datafor type: ${datafor}`);
|
|
58
|
+
}
|
|
59
|
+
const workflowHandler = workflowConfig[operation];
|
|
60
|
+
if (!workflowHandler) {
|
|
61
|
+
throw new Error(`Unsupported operation: ${operation} for ${datafor}`);
|
|
62
|
+
}
|
|
63
|
+
const input = { datafor, operation, data, eventId };
|
|
64
|
+
await workflowHandler(container, input);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Processes pending ERP events one by one in the order they were received
|
|
68
|
+
*/
|
|
69
|
+
async function processErpEvents(container) {
|
|
70
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
71
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
72
|
+
try {
|
|
73
|
+
// First, get all in-progress events to know which datafor types are blocked
|
|
74
|
+
const allInProgressEvents = [];
|
|
75
|
+
let skip = 0;
|
|
76
|
+
const take = 100;
|
|
77
|
+
let hasMore = true;
|
|
78
|
+
while (hasMore) {
|
|
79
|
+
const { data: inProgressEvents } = await query.graph({
|
|
80
|
+
entity: "erp_event",
|
|
81
|
+
fields: ["id", "datafor"],
|
|
82
|
+
filters: {
|
|
83
|
+
status: "in-progress",
|
|
84
|
+
},
|
|
85
|
+
pagination: {
|
|
86
|
+
skip,
|
|
87
|
+
take,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
if (inProgressEvents.length === 0) {
|
|
91
|
+
hasMore = false;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
allInProgressEvents.push(...inProgressEvents);
|
|
95
|
+
skip += take;
|
|
96
|
+
// Safety check - in-progress events should be limited
|
|
97
|
+
if (skip > 1000) {
|
|
98
|
+
logger.warn("⚠️ Safety limit reached for in-progress events query");
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Get the set of datafor types that are currently in-progress
|
|
103
|
+
const blockedDataforTypes = new Set(allInProgressEvents.map((e) => e.datafor));
|
|
104
|
+
if (blockedDataforTypes.size > 0) {
|
|
105
|
+
logger.debug(`In-progress event types: ${Array.from(blockedDataforTypes).join(", ")}`);
|
|
106
|
+
}
|
|
107
|
+
// Get pending events ordered by created_at (FIFO)
|
|
108
|
+
const { data: pendingEvents } = await query.graph({
|
|
109
|
+
entity: "erp_event",
|
|
110
|
+
fields: ["id", "datafor", "operation", "data", "status", "created_at"],
|
|
111
|
+
filters: {
|
|
112
|
+
status: "pending",
|
|
113
|
+
},
|
|
114
|
+
pagination: {
|
|
115
|
+
skip: 0,
|
|
116
|
+
take: 100, // Get more to find one that's not blocked
|
|
117
|
+
order: { created_at: "asc" }, // Process oldest first
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
if (pendingEvents.length === 0) {
|
|
121
|
+
logger.debug("No pending ERP events to process");
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Find the first pending event whose datafor type is not blocked
|
|
125
|
+
const event = pendingEvents.find((e) => !blockedDataforTypes.has(e.datafor));
|
|
126
|
+
if (!event) {
|
|
127
|
+
logger.debug(`All pending events are blocked by in-progress events of same type`);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const { id, datafor, operation, data } = event;
|
|
131
|
+
logger.info(`Processing ERP event ${id}: ${operation} for ${datafor} with ${data.length} items`);
|
|
132
|
+
// Update status to in-progress
|
|
133
|
+
await (0, update_erp_event_1.updateErpEventWorkflow)(container).run({
|
|
134
|
+
input: {
|
|
135
|
+
id,
|
|
136
|
+
status: "in-progress",
|
|
137
|
+
sync_completed_at: null,
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
try {
|
|
141
|
+
// Check if this is a data type that should use ECS processing
|
|
142
|
+
const shouldUseEcsProcessing = [
|
|
143
|
+
"StyleMst",
|
|
144
|
+
"PartyStyleMst",
|
|
145
|
+
"Inward",
|
|
146
|
+
].includes(datafor);
|
|
147
|
+
if (shouldUseEcsProcessing && data.length > 100) {
|
|
148
|
+
// Trigger ECS task for large batches
|
|
149
|
+
logger.info(`📋 Using ECS processing for ${datafor}`);
|
|
150
|
+
await triggerEcsTask(container, datafor, operation, data, id);
|
|
151
|
+
// Note: ECS task will update status to completed when done
|
|
152
|
+
// We don't update it here as the ECS task handles completion
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
// Use regular workflow processing
|
|
156
|
+
logger.info(`⚡ Using regular workflow processing for ${datafor}`);
|
|
157
|
+
await processWebhookRequest(container, datafor, operation, data, id);
|
|
158
|
+
// Update ERP event status to completed
|
|
159
|
+
await (0, update_erp_event_1.updateErpEventWorkflow)(container).run({
|
|
160
|
+
input: {
|
|
161
|
+
id,
|
|
162
|
+
status: "completed",
|
|
163
|
+
sync_completed_at: new Date(),
|
|
164
|
+
},
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
logger.info(`✅ Successfully processed ERP event ${id}`);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
171
|
+
// Check if the error indicates the event is already completed
|
|
172
|
+
if (errorMessage.includes("ERP event is already completed")) {
|
|
173
|
+
logger.info(`✅ ERP event ${id} is already completed (detected from error)`);
|
|
174
|
+
await (0, update_erp_event_1.updateErpEventWorkflow)(container).run({
|
|
175
|
+
input: {
|
|
176
|
+
id,
|
|
177
|
+
status: "completed",
|
|
178
|
+
sync_completed_at: new Date(),
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
logger.error(`❌ Failed to process ERP event ${id}:`, error);
|
|
184
|
+
// Update status to failed
|
|
185
|
+
await (0, update_erp_event_1.updateErpEventWorkflow)(container).run({
|
|
186
|
+
input: {
|
|
187
|
+
id,
|
|
188
|
+
status: "failed",
|
|
189
|
+
sync_completed_at: null,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
// Re-throw to allow retry on next run if needed
|
|
193
|
+
throw error;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
logger.error("Error in processErpEvents cron job:", error);
|
|
198
|
+
// Don't throw - allow the cron job to continue on next run
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
exports.config = {
|
|
202
|
+
name: "process-erp-events",
|
|
203
|
+
schedule: "* * * * *", // Every minute
|
|
204
|
+
};
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1lcnAtZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvcHJvY2Vzcy1lcnAtZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWlHQSxtQ0FnTEM7QUFoUkQscURBQXNFO0FBQ3RFLGdGQUFrRjtBQUNsRix3RkFBMkY7QUFDM0Ysc0RBSW1DO0FBQ25DLG1EQUE2QztBQUU3QyxrREFBa0Q7QUFDbEQsTUFBTSxlQUFlLEdBQUc7SUFDdEIsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLDhCQUE4QjtRQUN4QyxTQUFTLEVBQUUsR0FBRztRQUNkLE9BQU8sRUFBRSxJQUFJO0tBQ2Q7SUFDRCxhQUFhLEVBQUU7UUFDYixRQUFRLEVBQUUsOEJBQThCO1FBQ3hDLFNBQVMsRUFBRSxHQUFHO1FBQ2QsT0FBTyxFQUFFLElBQUk7S0FDZDtJQUNELE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSw4QkFBOEI7UUFDeEMsU0FBUyxFQUFFLEdBQUc7UUFDZCxPQUFPLEVBQUUsSUFBSTtLQUNkO0NBQ0YsQ0FBQztBQUVGOztHQUVHO0FBQ0gsS0FBSyxVQUFVLGNBQWMsQ0FDM0IsU0FBMEIsRUFDMUIsT0FBbUIsRUFDbkIsU0FBb0IsRUFDcEIsSUFBYyxFQUNkLFVBQWtCO0lBRWxCLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxPQUF1QyxDQUFDLENBQUM7SUFFNUUsa0JBQU0sQ0FBQyxJQUFJLENBQ1QsOEJBQThCLE9BQU8sU0FBUyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQ2xFLENBQUM7SUFFRixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLG9EQUEyQixFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNsRSxLQUFLLEVBQUU7Z0JBQ0wsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixVQUFVLEVBQUU7b0JBQ1YsU0FBUyxFQUFFLFVB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
|
|
@@ -24,9 +24,11 @@ async function processVariantOptionSync(container) {
|
|
|
24
24
|
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
25
25
|
const syncQueueService = container.resolve(variant_option_sync_queue_1.VARIANT_OPTION_SYNC_QUEUE_MODULE);
|
|
26
26
|
logger.info("------Starting variant option sync job------");
|
|
27
|
+
// Maximum records to process per run to balance efficiency and memory
|
|
28
|
+
const MAX_RECORDS_PER_RUN = 250;
|
|
27
29
|
let pendingRecords = [];
|
|
28
30
|
try {
|
|
29
|
-
//
|
|
31
|
+
// Process all pending records in one run to avoid redundant recalculations
|
|
30
32
|
const { data: records } = await query.graph({
|
|
31
33
|
entity: "variant_option_sync_queue",
|
|
32
34
|
fields: [
|
|
@@ -41,7 +43,7 @@ async function processVariantOptionSync(container) {
|
|
|
41
43
|
status: "pending",
|
|
42
44
|
},
|
|
43
45
|
pagination: {
|
|
44
|
-
take:
|
|
46
|
+
take: MAX_RECORDS_PER_RUN,
|
|
45
47
|
},
|
|
46
48
|
});
|
|
47
49
|
pendingRecords = records || [];
|
|
@@ -49,7 +51,7 @@ async function processVariantOptionSync(container) {
|
|
|
49
51
|
logger.info("------No pending variant option sync records found------");
|
|
50
52
|
return;
|
|
51
53
|
}
|
|
52
|
-
logger.info(`------Found ${pendingRecords.length} pending records to process------`);
|
|
54
|
+
logger.info(`------Found ${pendingRecords.length} pending records to process (max ${MAX_RECORDS_PER_RUN} per run)------`);
|
|
53
55
|
// Build master maps once for all records
|
|
54
56
|
const { data: rawMasterArr } = await query.graph({
|
|
55
57
|
entity: "raw_master",
|
|
@@ -94,28 +96,23 @@ async function processVariantOptionSync(container) {
|
|
|
94
96
|
id: r.id,
|
|
95
97
|
status: "processing",
|
|
96
98
|
})));
|
|
97
|
-
logger.info(`------Processing ${pendingRecords.length} records in
|
|
99
|
+
logger.info(`------Processing ${pendingRecords.length} pending records in ------`);
|
|
98
100
|
// Collect all affected products across all records
|
|
99
101
|
const affectedProductsSet = new Set();
|
|
100
|
-
const
|
|
102
|
+
const recordAffectedVariantCounts = new Map();
|
|
101
103
|
for (const record of pendingRecords) {
|
|
102
104
|
logger.info(`------Finding affected variants for record ${record.id}: ${record.master_type} - ${record.master_code}------`);
|
|
103
105
|
// Find affected variants
|
|
104
106
|
const affectedVariants = await (0, variant_helper_1.findVariantsAffectedByMasterUpdate)(query, record.master_type, record.master_code);
|
|
105
107
|
if (affectedVariants.length === 0) {
|
|
106
108
|
logger.info(`------No affected variants found for ${record.master_type} - ${record.master_code}------ (record id: ${record.id})`);
|
|
107
|
-
|
|
108
|
-
recordId: record.id,
|
|
109
|
-
affectedVariants: [],
|
|
110
|
-
});
|
|
109
|
+
recordAffectedVariantCounts.set(record.id, 0);
|
|
111
110
|
continue;
|
|
112
111
|
}
|
|
113
|
-
// Collect affected product IDs
|
|
112
|
+
// Collect affected product IDs (this is what we actually need)
|
|
114
113
|
affectedVariants.forEach((v) => affectedProductsSet.add(v.productId));
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
affectedVariants,
|
|
118
|
-
});
|
|
114
|
+
// Store only the count, not the full array to save memory
|
|
115
|
+
recordAffectedVariantCounts.set(record.id, affectedVariants.length);
|
|
119
116
|
logger.info(`------Found ${affectedVariants.length} affected variants for record ${record.id}------`);
|
|
120
117
|
}
|
|
121
118
|
const productIds = Array.from(affectedProductsSet);
|
|
@@ -132,7 +129,7 @@ async function processVariantOptionSync(container) {
|
|
|
132
129
|
}
|
|
133
130
|
logger.info(`------Found ${productIds.length} unique products affected across all records------`);
|
|
134
131
|
// STEP 2: Process products in batches
|
|
135
|
-
const PRODUCT_BATCH_SIZE =
|
|
132
|
+
const PRODUCT_BATCH_SIZE = 5;
|
|
136
133
|
const productBatches = [];
|
|
137
134
|
for (let i = 0; i < productIds.length; i += PRODUCT_BATCH_SIZE) {
|
|
138
135
|
productBatches.push(productIds.slice(i, i + PRODUCT_BATCH_SIZE));
|
|
@@ -238,6 +235,18 @@ async function processVariantOptionSync(container) {
|
|
|
238
235
|
}
|
|
239
236
|
// Process party_style_details for metals, metal colors, diamond qualities, shapes and solitaire carat
|
|
240
237
|
if (extendedVariant.party_style_details) {
|
|
238
|
+
// First, find diamond details for processing
|
|
239
|
+
const diamondDetails = extendedVariant.party_style_details.filter((detail) => detail.raw_type === "Diamond" &&
|
|
240
|
+
detail.tone_code &&
|
|
241
|
+
detail.qly_code);
|
|
242
|
+
const baseDiamondDetail = diamondDetails.find((detail) => detail.is_base);
|
|
243
|
+
const diamondDetailToUse = baseDiamondDetail || diamondDetails[0];
|
|
244
|
+
// For solitaire shapes/carat, find LGS diamond details
|
|
245
|
+
const lgsDiamondDetails = extendedVariant.party_style_details.filter((detail) => isSolitaire &&
|
|
246
|
+
detail.raw_type === "Diamond" &&
|
|
247
|
+
detail.raw_code === "LGS");
|
|
248
|
+
const baseLgsDiamondDetail = lgsDiamondDetails.find((detail) => detail.is_base);
|
|
249
|
+
const lgsDiamondDetailToUse = baseLgsDiamondDetail || lgsDiamondDetails[0];
|
|
241
250
|
for (const detail of extendedVariant.party_style_details) {
|
|
242
251
|
// Metal options
|
|
243
252
|
if (detail.raw_type === "Metal" && detail.is_base) {
|
|
@@ -302,10 +311,8 @@ async function processVariantOptionSync(container) {
|
|
|
302
311
|
}
|
|
303
312
|
}
|
|
304
313
|
// Diamond Quality
|
|
305
|
-
if (
|
|
306
|
-
detail
|
|
307
|
-
detail.qly_code &&
|
|
308
|
-
detail.is_base) {
|
|
314
|
+
if (diamondDetailToUse &&
|
|
315
|
+
detail === diamondDetailToUse) {
|
|
309
316
|
const toneTitle = (masterMaps.toneMasterMap.get(detail.tone_code) ||
|
|
310
317
|
detail.tone_code).trim();
|
|
311
318
|
const qualityTitle = (masterMaps.qualityMasterMap.get(detail.qly_code) ||
|
|
@@ -328,10 +335,8 @@ async function processVariantOptionSync(container) {
|
|
|
328
335
|
}
|
|
329
336
|
}
|
|
330
337
|
// Shape and Carat logic
|
|
331
|
-
if (
|
|
332
|
-
detail
|
|
333
|
-
detail.raw_code === "LGS" &&
|
|
334
|
-
detail.is_base) {
|
|
338
|
+
if (lgsDiamondDetailToUse &&
|
|
339
|
+
detail === lgsDiamondDetailToUse) {
|
|
335
340
|
// Use the shape from the LGS base diamond detail
|
|
336
341
|
const shapeTitle = (masterMaps.shapeMasterMap.get(detail.shape_code) ||
|
|
337
342
|
String(detail.shape_code || "")).trim();
|
|
@@ -371,12 +376,24 @@ async function processVariantOptionSync(container) {
|
|
|
371
376
|
}
|
|
372
377
|
}
|
|
373
378
|
}
|
|
379
|
+
// Get the product's required option titles
|
|
380
|
+
const productOptionTitles = product.options?.map((opt) => opt.title) || [];
|
|
374
381
|
// Sort variant options keys alphabetically for consistent ordering
|
|
375
382
|
const sortedVariantOptions = {};
|
|
376
383
|
const sortedKeys = Object.keys(variantOptions).sort((a, b) => a.localeCompare(b));
|
|
377
384
|
for (const key of sortedKeys) {
|
|
378
385
|
sortedVariantOptions[key] = variantOptions[key];
|
|
379
386
|
}
|
|
387
|
+
// Validate: Check if we have all required options for the product
|
|
388
|
+
// Skip variants with incomplete options to prevent batch failure
|
|
389
|
+
const hasAllOptions = productOptionTitles.every((title) => sortedVariantOptions[title] !== undefined);
|
|
390
|
+
if (!hasAllOptions) {
|
|
391
|
+
logger.warn(`------Variant ${variant.id} has incomplete options. ` +
|
|
392
|
+
`Product requires: [${productOptionTitles.join(", ")}], ` +
|
|
393
|
+
`Variant has: [${Object.keys(sortedVariantOptions).join(", ")}]. ` +
|
|
394
|
+
`Skipping to prevent batch failure.------`);
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
380
397
|
variantsToUpdate.push({
|
|
381
398
|
variant: {
|
|
382
399
|
id: variant.id,
|
|
@@ -483,8 +500,7 @@ async function processVariantOptionSync(container) {
|
|
|
483
500
|
// STEP 7: Mark all records as completed
|
|
484
501
|
const recordsToComplete = [];
|
|
485
502
|
for (const record of pendingRecords) {
|
|
486
|
-
const
|
|
487
|
-
const affectedCount = recordData?.affectedVariants.length || 0;
|
|
503
|
+
const affectedCount = recordAffectedVariantCounts.get(record.id) || 0;
|
|
488
504
|
recordsToComplete.push({
|
|
489
505
|
id: record.id,
|
|
490
506
|
status: "completed",
|
|
@@ -515,7 +531,6 @@ async function processVariantOptionSync(container) {
|
|
|
515
531
|
}
|
|
516
532
|
exports.config = {
|
|
517
533
|
name: "process-variant-option-sync",
|
|
518
|
-
schedule: "
|
|
519
|
-
// schedule: "0 3 * * *", // Every day at 3:00 AM
|
|
534
|
+
schedule: "0 2 * * *", // Every day at 2:00 AM
|
|
520
535
|
};
|
|
521
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy12YXJpYW50LW9wdGlvbi1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvcHJvY2Vzcy12YXJpYW50LW9wdGlvbi1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThCQSwyQ0FvcUJDO0FBanNCRCxxREFBc0U7QUFDdEUsNERBR3FDO0FBRXJDLG9GQUF3RjtBQUN4Rix3RUFHNkM7QUFDN0Msd0dBRzZEO0FBRzdEOzs7Ozs7Ozs7OztJQVdJO0FBQ1csS0FBSyxVQUFVLHdCQUF3QixDQUNwRCxTQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkUsTUFBTSxnQkFBZ0IsR0FBa0MsU0FBUyxDQUFDLE9BQU8sQ0FDdkUsNERBQWdDLENBQ2pDLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFFNUQsSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO0lBRS9CLElBQUksQ0FBQztRQUNILHFDQUFxQztRQUNyQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUMxQyxNQUFNLEVBQUUsMkJBQTJCO1lBQ25DLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsV0FBVzthQUNaO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxTQUFTO2FBQ2xCO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFLEVBQUUsK0JBQStCO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsY0FBYyxHQUFHLE9B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
|
|
536
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy12YXJpYW50LW9wdGlvbi1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvcHJvY2Vzcy12YXJpYW50LW9wdGlvbi1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThCQSwyQ0Fzc0JDO0FBbnVCRCxxREFBc0U7QUFDdEUsNERBR3FDO0FBRXJDLG9GQUF3RjtBQUN4Rix3RUFHNkM7QUFDN0Msd0dBRzZEO0FBRzdEOzs7Ozs7Ozs7OztJQVdJO0FBQ1csS0FBSyxVQUFVLHdCQUF3QixDQUNwRCxTQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkUsTUFBTSxnQkFBZ0IsR0FBa0MsU0FBUyxDQUFDLE9BQU8sQ0FDdkUsNERBQWdDLENBQ2pDLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFFNUQsc0VBQXNFO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBRWhDLElBQUksY0FBYyxHQUFVLEVBQUUsQ0FBQztJQUUvQixJQUFJLENBQUM7UUFDSCwyRUFBMkU7UUFDM0UsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsTUFBTSxFQUFFLDJCQUEyQjtZQUNuQyxNQUFNLEVBQUU7Z0JBQ04sSUFBSTtnQkFDSixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsV0FBVztnQkFDWCxXQUFXO2dCQUNYLFdBQVc7YUFDWjtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsU0FBUzthQUNsQjtZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsbUJBQW1CO2FB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
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = syncAddlessDetail;
|
|
5
|
+
const party_master_1 = require("../modules/party-master");
|
|
6
|
+
const book_list_1 = require("../workflows/book-list");
|
|
7
|
+
const book_list_2 = require("../modules/book-list");
|
|
8
|
+
const addless_detail_1 = require("../workflows/addless-detail");
|
|
9
|
+
const addless_detail_2 = require("../modules/addless-detail");
|
|
10
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
11
|
+
async function syncAddlessDetail(container) {
|
|
12
|
+
const partyMasterModuleService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
|
|
13
|
+
const bookListModuleService = container.resolve(book_list_2.BOOK_LIST_MODULE);
|
|
14
|
+
const addlessMasterModuleService = container.resolve(addless_detail_2.ADDLESS_MASTER_MODULE);
|
|
15
|
+
const branches = await partyMasterModuleService.listPartyMasters({
|
|
16
|
+
is_inline_branch: true,
|
|
17
|
+
});
|
|
18
|
+
const branchNos = branches.map((branch) => branch.party_no);
|
|
19
|
+
branchNos.push("");
|
|
20
|
+
// Sync book list (type ref) so we have branch+book combinations
|
|
21
|
+
await (0, utils_1.promiseAll)([
|
|
22
|
+
(0, book_list_1.bookListWorkflow)(container).run({
|
|
23
|
+
input: { type: "salesreturn", branchNos },
|
|
24
|
+
}),
|
|
25
|
+
(0, book_list_1.bookListWorkflow)(container).run({
|
|
26
|
+
input: { type: "order", branchNos },
|
|
27
|
+
}),
|
|
28
|
+
(0, book_list_1.bookListWorkflow)(container).run({
|
|
29
|
+
input: { type: "sale", branchNos },
|
|
30
|
+
}),
|
|
31
|
+
(0, book_list_1.bookListWorkflow)(container).run({
|
|
32
|
+
input: { type: "purchase", branchNos },
|
|
33
|
+
}),
|
|
34
|
+
]);
|
|
35
|
+
const allBooks = await bookListModuleService.listBookLists();
|
|
36
|
+
const bookPairs = allBooks.map((p) => ({
|
|
37
|
+
branchNo: p.branch_no,
|
|
38
|
+
bookNo: String(p.book_no),
|
|
39
|
+
}));
|
|
40
|
+
const uniquePairs = Array.from(new Map(bookPairs.map((p) => [`${p.branchNo}|${p.bookNo}`, p])).values());
|
|
41
|
+
const addlessData = await addlessMasterModuleService.listAddlessMasters();
|
|
42
|
+
const addlessIds = addlessData.map((item) => item.id);
|
|
43
|
+
if (addlessIds.length) {
|
|
44
|
+
await addlessMasterModuleService.deleteAddlessMasters(addlessIds);
|
|
45
|
+
}
|
|
46
|
+
if (uniquePairs.length > 0) {
|
|
47
|
+
const BATCH_SIZE = 50;
|
|
48
|
+
for (let i = 0; i < uniquePairs.length; i += BATCH_SIZE) {
|
|
49
|
+
const batch = uniquePairs.slice(i, i + BATCH_SIZE);
|
|
50
|
+
await (0, addless_detail_1.addlessDetailWorkflow)(container).run({
|
|
51
|
+
input: { books: batch },
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.config = {
|
|
57
|
+
name: "sync-addless-detail",
|
|
58
|
+
schedule: "0 0 * * *",
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1hZGRsZXNzLWRldGFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3N5bmMtYWRkbGVzcy1kZXRhaWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0Esb0NBeURDO0FBbEVELDBEQUE4RDtBQUM5RCxzREFBMEQ7QUFDMUQsb0RBQXdEO0FBRXhELGdFQUFvRTtBQUNwRSw4REFBa0U7QUFFbEUscURBQXVEO0FBRXhDLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxTQUEwQjtJQUN4RSxNQUFNLHdCQUF3QixHQUF1QixTQUFTLENBQUMsT0FBTyxDQUNwRSxrQ0FBbUIsQ0FDcEIsQ0FBQztJQUNGLE1BQU0scUJBQXFCLEdBQW9CLFNBQVMsQ0FBQyxPQUFPLENBQzlELDRCQUFnQixDQUNqQixDQUFDO0lBQ0YsTUFBTSwwQkFBMEIsR0FBeUIsU0FBUyxDQUFDLE9BQU8sQ0FDeEUsc0NBQXFCLENBQ3RCLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLHdCQUF3QixDQUFDLGdCQUFnQixDQUFDO1FBQy9ELGdCQUFnQixFQUFFLElBQUk7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbkIsZ0VBQWdFO0lBQ2hFLE1BQU0sSUFBQSxrQkFBVSxFQUFDO1FBQ2YsSUFBQSw0QkFBZ0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDOUIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUU7U0FDMUMsQ0FBQztRQUNGLElBQUEsNEJBQWdCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzlCLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO1NBQ3BDLENBQUM7UUFDRixJQUFBLDRCQUFnQixFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM5QixLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtTQUNuQyxDQUFDO1FBQ0YsSUFBQSw0QkFBZ0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDOUIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUU7U0FDdkMsQ0FBQztLQUNILENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0scUJBQXFCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFNBQVM7UUFDckIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0tBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0osTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDNUIsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FDekUsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sMEJBQTBCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMxRSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEQsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsTUFBTSwwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDeEQsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sSUFBQSxzQ0FBcUIsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7YUFDeEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFLHFCQUFxQjtJQUMzQixRQUFRLEVBQUUsV0FBVztDQUN0QixDQUFDIn0=
|