@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,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const api_response_1 = require("../../../lib/api-response");
|
|
6
|
+
const erp_1 = require("../../../modules/erp");
|
|
7
|
+
const jewel_trans_master_1 = require("../../../modules/jewel-trans-master");
|
|
8
|
+
const order_master_1 = require("../../../modules/order-master");
|
|
9
|
+
const GET = async (req, res) => {
|
|
10
|
+
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
11
|
+
try {
|
|
12
|
+
logger.info("[POS-GENERATE-INVOICE] : Generating invoice file");
|
|
13
|
+
const { FileFor, FileType, order_id } = req.query;
|
|
14
|
+
// Validate required parameters
|
|
15
|
+
if (!FileFor || !FileType || !order_id) {
|
|
16
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Missing required parameters: FileFor, FileType, order_id", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
|
|
17
|
+
}
|
|
18
|
+
// Validate FileFor
|
|
19
|
+
const normalizedFileFor = FileFor.toLowerCase();
|
|
20
|
+
if (normalizedFileFor !== "sale" && normalizedFileFor !== "order") {
|
|
21
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("FileFor must be 'Sale' or 'Order'", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
|
|
22
|
+
}
|
|
23
|
+
// Validate FileType
|
|
24
|
+
const normalizedFileType = FileType.toLowerCase();
|
|
25
|
+
if (!["pdf", "xls", "xlsx"].includes(normalizedFileType)) {
|
|
26
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("FileType must be 'pdf', 'xls', or 'xlsx'", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
|
|
27
|
+
}
|
|
28
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
29
|
+
const link = req.scope.resolve("link");
|
|
30
|
+
const erpService = req.scope.resolve(erp_1.ERP_MODULE);
|
|
31
|
+
// Fetch order
|
|
32
|
+
const { data: orderData } = await query.graph({
|
|
33
|
+
entity: "order",
|
|
34
|
+
fields: [
|
|
35
|
+
"id",
|
|
36
|
+
"customer_id",
|
|
37
|
+
"metadata",
|
|
38
|
+
"customer.*",
|
|
39
|
+
"customer.extended_customer.*",
|
|
40
|
+
],
|
|
41
|
+
filters: { id: order_id },
|
|
42
|
+
});
|
|
43
|
+
const order = orderData?.[0];
|
|
44
|
+
if (!order) {
|
|
45
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Order not found", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
|
|
46
|
+
}
|
|
47
|
+
logger.info(`[POS-GENERATE-INVOICE] : Order found - OrderId: ${order_id}`);
|
|
48
|
+
// Get branch number from order_master
|
|
49
|
+
let branchNo = "";
|
|
50
|
+
let orderMasterRecord = null;
|
|
51
|
+
try {
|
|
52
|
+
logger.info(`[POS-GENERATE-INVOICE] : Fetching order_master for branch number`);
|
|
53
|
+
// Method 1: Try via link module
|
|
54
|
+
try {
|
|
55
|
+
const linkedData = await link.list({
|
|
56
|
+
[utils_1.Modules.ORDER]: { order_id: order_id },
|
|
57
|
+
[order_master_1.ORDER_MASTER_MODULE]: {},
|
|
58
|
+
});
|
|
59
|
+
logger.info(`[POS-GENERATE-INVOICE] : Order_master link data found: ${linkedData?.length || 0} links`);
|
|
60
|
+
if (linkedData && linkedData.length > 0) {
|
|
61
|
+
const orderMasterId = linkedData[0][order_master_1.ORDER_MASTER_MODULE]?.order_master_id;
|
|
62
|
+
if (orderMasterId) {
|
|
63
|
+
const { data: orderMasterData } = await query.graph({
|
|
64
|
+
entity: "order_master",
|
|
65
|
+
fields: ["id", "branch_no", "erp_order_id", "order_no"],
|
|
66
|
+
filters: { id: orderMasterId },
|
|
67
|
+
});
|
|
68
|
+
orderMasterRecord = orderMasterData?.[0];
|
|
69
|
+
logger.info(`[POS-GENERATE-INVOICE] : OrderMaster data from link: ${JSON.stringify(orderMasterRecord)}`);
|
|
70
|
+
if (orderMasterRecord?.branch_no) {
|
|
71
|
+
branchNo = orderMasterRecord.branch_no;
|
|
72
|
+
logger.info(`[POS-GENERATE-INVOICE] : Got branch_no from order_master: ${branchNo}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching order_master via link - ${error}`);
|
|
79
|
+
}
|
|
80
|
+
// Method 2: Fallback - query.graph directly by order_id
|
|
81
|
+
if (!branchNo) {
|
|
82
|
+
try {
|
|
83
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 2 - Trying query.graph for order_master`);
|
|
84
|
+
const { data: orderMasterData } = await query.graph({
|
|
85
|
+
entity: "order_master",
|
|
86
|
+
fields: ["id", "branch_no", "erp_order_id", "order_no"],
|
|
87
|
+
filters: { order_id: order_id },
|
|
88
|
+
});
|
|
89
|
+
orderMasterRecord = orderMasterData?.[0];
|
|
90
|
+
logger.info(`[POS-GENERATE-INVOICE] : OrderMaster data from query.graph: ${JSON.stringify(orderMasterRecord)}`);
|
|
91
|
+
if (orderMasterRecord?.branch_no) {
|
|
92
|
+
branchNo = orderMasterRecord.branch_no;
|
|
93
|
+
logger.info(`[POS-GENERATE-INVOICE] : Got branch_no from query.graph: ${branchNo}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching order_master via query.graph - ${error}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Method 3: Fallback - get from party_master
|
|
101
|
+
if (!branchNo) {
|
|
102
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 3 - Trying party_master for branch number`);
|
|
103
|
+
const customer = order.customer;
|
|
104
|
+
if (customer?.extended_customer?.external_id) {
|
|
105
|
+
const { data: partyData } = await query.graph({
|
|
106
|
+
entity: "party_master",
|
|
107
|
+
fields: ["branch_no", "party_no"],
|
|
108
|
+
filters: {
|
|
109
|
+
party_no: customer.extended_customer.external_id,
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
const partyMaster = partyData?.[0];
|
|
113
|
+
if (partyMaster?.branch_no) {
|
|
114
|
+
branchNo = partyMaster.branch_no;
|
|
115
|
+
logger.info(`[POS-GENERATE-INVOICE] : Got branch_no from party_master: ${branchNo}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching branch number - ${error}`);
|
|
122
|
+
}
|
|
123
|
+
if (!branchNo) {
|
|
124
|
+
logger.error(`[POS-GENERATE-INVOICE] : Branch number not found for order ${order_id}`);
|
|
125
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Branch number not found in order_master. Please ensure the order has been synced to ERP.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
|
|
126
|
+
}
|
|
127
|
+
// Get transaction ID based on FileFor
|
|
128
|
+
let transactionId = null;
|
|
129
|
+
if (normalizedFileFor === "sale") {
|
|
130
|
+
// For Sale: Get JewelTransId from jewel_trans_master
|
|
131
|
+
// Try multiple methods to find the transaction ID
|
|
132
|
+
logger.info(`[POS-GENERATE-INVOICE] : Searching for JewelTransId for order ${order_id}`);
|
|
133
|
+
// Method 1: Try via link module
|
|
134
|
+
try {
|
|
135
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 1 - Trying link module`);
|
|
136
|
+
const linkedData = await link.list({
|
|
137
|
+
[utils_1.Modules.ORDER]: { order_id: order_id },
|
|
138
|
+
[jewel_trans_master_1.JEWEL_TRANS_MASTER_MODULE]: {},
|
|
139
|
+
});
|
|
140
|
+
logger.info(`[POS-GENERATE-INVOICE] : Link data found: ${linkedData?.length || 0} links`);
|
|
141
|
+
if (linkedData && linkedData.length > 0) {
|
|
142
|
+
const jewelTransMasterId = linkedData[0][jewel_trans_master_1.JEWEL_TRANS_MASTER_MODULE]?.jewel_trans_master_id;
|
|
143
|
+
logger.info(`[POS-GENERATE-INVOICE] : JewelTransMasterId from link: ${jewelTransMasterId}`);
|
|
144
|
+
if (jewelTransMasterId) {
|
|
145
|
+
const { data: jewelTransData } = await query.graph({
|
|
146
|
+
entity: "jewel_trans_master",
|
|
147
|
+
fields: ["erp_jewel_trans_id"],
|
|
148
|
+
filters: { id: jewelTransMasterId },
|
|
149
|
+
});
|
|
150
|
+
const jewelTransMaster = jewelTransData?.[0];
|
|
151
|
+
logger.info(`[POS-GENERATE-INVOICE] : JewelTransMaster data: ${JSON.stringify(jewelTransMaster)}`);
|
|
152
|
+
if (jewelTransMaster?.erp_jewel_trans_id) {
|
|
153
|
+
transactionId = String(jewelTransMaster.erp_jewel_trans_id);
|
|
154
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found JewelTransId via link: ${transactionId}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching jewel_trans_master via link - ${error}`);
|
|
161
|
+
}
|
|
162
|
+
// Method 2: Try using service directly by party_no
|
|
163
|
+
if (!transactionId && order.customer?.extended_customer?.external_id) {
|
|
164
|
+
try {
|
|
165
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 2 - Trying service by party_no`);
|
|
166
|
+
const partyNo = order.customer.extended_customer.external_id;
|
|
167
|
+
logger.info(`[POS-GENERATE-INVOICE] : PartyNo: ${partyNo}`);
|
|
168
|
+
const jewelTransMasterService = req.scope.resolve(jewel_trans_master_1.JEWEL_TRANS_MASTER_MODULE);
|
|
169
|
+
const jewelTransMasters = await jewelTransMasterService.listJewelTransMasters({
|
|
170
|
+
party_no: partyNo,
|
|
171
|
+
});
|
|
172
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found ${jewelTransMasters?.length || 0} jewel_trans_masters for party_no`);
|
|
173
|
+
if (jewelTransMasters && jewelTransMasters.length > 0) {
|
|
174
|
+
// Sort by date descending and get the most recent one with erp_jewel_trans_id
|
|
175
|
+
const sorted = jewelTransMasters
|
|
176
|
+
.filter((item) => item.erp_jewel_trans_id)
|
|
177
|
+
.sort((a, b) => {
|
|
178
|
+
const dateA = new Date(a.jewel_trans_date || 0).getTime();
|
|
179
|
+
const dateB = new Date(b.jewel_trans_date || 0).getTime();
|
|
180
|
+
return dateB - dateA;
|
|
181
|
+
});
|
|
182
|
+
if (sorted.length > 0) {
|
|
183
|
+
transactionId = String(sorted[0].erp_jewel_trans_id);
|
|
184
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found JewelTransId via service fallback (most recent): ${transactionId}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching jewel_trans_master via service - ${error}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// Method 3: Try query.graph by party_no as fallback
|
|
193
|
+
if (!transactionId && order.customer?.extended_customer?.external_id) {
|
|
194
|
+
try {
|
|
195
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 3 - Trying query.graph by party_no`);
|
|
196
|
+
const partyNo = order.customer.extended_customer.external_id;
|
|
197
|
+
const { data: jewelTransData } = await query.graph({
|
|
198
|
+
entity: "jewel_trans_master",
|
|
199
|
+
fields: ["erp_jewel_trans_id", "jewel_trans_date"],
|
|
200
|
+
filters: {
|
|
201
|
+
party_no: partyNo,
|
|
202
|
+
},
|
|
203
|
+
pagination: {
|
|
204
|
+
skip: 0,
|
|
205
|
+
take: 10, // Get recent transactions
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
logger.info(`[POS-GENERATE-INVOICE] : Query.graph found ${jewelTransData?.length || 0} records`);
|
|
209
|
+
if (jewelTransData && jewelTransData.length > 0) {
|
|
210
|
+
// Sort by date descending and get the most recent one
|
|
211
|
+
const sorted = jewelTransData
|
|
212
|
+
.filter((item) => item.erp_jewel_trans_id)
|
|
213
|
+
.sort((a, b) => {
|
|
214
|
+
const dateA = new Date(a.jewel_trans_date || 0).getTime();
|
|
215
|
+
const dateB = new Date(b.jewel_trans_date || 0).getTime();
|
|
216
|
+
return dateB - dateA;
|
|
217
|
+
});
|
|
218
|
+
if (sorted.length > 0) {
|
|
219
|
+
transactionId = String(sorted[0].erp_jewel_trans_id);
|
|
220
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found JewelTransId via query.graph fallback (most recent): ${transactionId}`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching jewel_trans_master via query.graph fallback - ${error}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Method 4: Check order metadata for stored jewel_trans_id
|
|
229
|
+
if (!transactionId && order.metadata) {
|
|
230
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 4 - Checking order metadata`);
|
|
231
|
+
logger.info(`[POS-GENERATE-INVOICE] : Order metadata: ${JSON.stringify(order.metadata)}`);
|
|
232
|
+
const metadataJewelTransId = order.metadata.jewel_trans_id ||
|
|
233
|
+
order.metadata.JewelTransId ||
|
|
234
|
+
order.metadata.jewelTransId;
|
|
235
|
+
if (metadataJewelTransId) {
|
|
236
|
+
transactionId = String(metadataJewelTransId);
|
|
237
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found JewelTransId from order metadata: ${transactionId}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (!transactionId) {
|
|
241
|
+
logger.error(`[POS-GENERATE-INVOICE] : All methods failed. Order ID: ${order_id}, Customer External ID: ${order.customer?.extended_customer?.external_id || 'N/A'}`);
|
|
242
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("JewelTransId not found. The sale may not be synced to ERP yet. Please ensure the order has been synced to ERP and try again.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
// For Order: Get erp_order_id from order_master
|
|
247
|
+
logger.info(`[POS-GENERATE-INVOICE] : Searching for OrderId in order_master for order ${order_id}`);
|
|
248
|
+
// Method 1: Try via link module
|
|
249
|
+
try {
|
|
250
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 1 - Trying link module for order_master`);
|
|
251
|
+
const linkedData = await link.list({
|
|
252
|
+
[utils_1.Modules.ORDER]: { order_id: order_id },
|
|
253
|
+
[order_master_1.ORDER_MASTER_MODULE]: {},
|
|
254
|
+
});
|
|
255
|
+
logger.info(`[POS-GENERATE-INVOICE] : Order_master link data found: ${linkedData?.length || 0} links`);
|
|
256
|
+
if (linkedData && linkedData.length > 0) {
|
|
257
|
+
const orderMasterId = linkedData[0][order_master_1.ORDER_MASTER_MODULE]?.order_master_id;
|
|
258
|
+
logger.info(`[POS-GENERATE-INVOICE] : OrderMasterId from link: ${orderMasterId}`);
|
|
259
|
+
if (orderMasterId) {
|
|
260
|
+
const { data: orderMasterData } = await query.graph({
|
|
261
|
+
entity: "order_master",
|
|
262
|
+
fields: ["erp_order_id", "order_no"],
|
|
263
|
+
filters: { id: orderMasterId },
|
|
264
|
+
});
|
|
265
|
+
const orderMaster = orderMasterData?.[0];
|
|
266
|
+
logger.info(`[POS-GENERATE-INVOICE] : OrderMaster data: ${JSON.stringify(orderMaster)}`);
|
|
267
|
+
if (orderMaster?.erp_order_id) {
|
|
268
|
+
transactionId = String(orderMaster.erp_order_id);
|
|
269
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found OrderId via link: ${transactionId}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching order_master via link - ${error}`);
|
|
276
|
+
}
|
|
277
|
+
// Method 2: Try query.graph directly by medusa order_id
|
|
278
|
+
if (!transactionId) {
|
|
279
|
+
try {
|
|
280
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 2 - Trying query.graph with order_id`);
|
|
281
|
+
const { data: orderMasterData } = await query.graph({
|
|
282
|
+
entity: "order_master",
|
|
283
|
+
fields: ["erp_order_id", "order_no"],
|
|
284
|
+
filters: {
|
|
285
|
+
order_id: order_id,
|
|
286
|
+
},
|
|
287
|
+
});
|
|
288
|
+
logger.info(`[POS-GENERATE-INVOICE] : Query.graph found ${orderMasterData?.length || 0} order_master records`);
|
|
289
|
+
if (orderMasterData && orderMasterData.length > 0) {
|
|
290
|
+
const orderMaster = orderMasterData[0];
|
|
291
|
+
if (orderMaster?.erp_order_id) {
|
|
292
|
+
transactionId = String(orderMaster.erp_order_id);
|
|
293
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found OrderId via query.graph: ${transactionId}`);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching order_master via query.graph - ${error}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Method 3: Check order metadata for stored erp_order_id
|
|
302
|
+
if (!transactionId && order.metadata) {
|
|
303
|
+
try {
|
|
304
|
+
logger.info(`[POS-GENERATE-INVOICE] : Method 3 - Checking order metadata for erp_order_id`);
|
|
305
|
+
logger.info(`[POS-GENERATE-INVOICE] : Order metadata: ${JSON.stringify(order.metadata)}`);
|
|
306
|
+
const metadataOrderId = order.metadata.erp_order_id ||
|
|
307
|
+
order.metadata.OrderId ||
|
|
308
|
+
order.metadata.orderId;
|
|
309
|
+
if (metadataOrderId) {
|
|
310
|
+
transactionId = String(metadataOrderId);
|
|
311
|
+
logger.info(`[POS-GENERATE-INVOICE] : Found OrderId from order metadata: ${transactionId}`);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error checking order metadata - ${error}`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (!transactionId) {
|
|
319
|
+
logger.error(`[POS-GENERATE-INVOICE] : All methods failed for order_master. Order ID: ${order_id}`);
|
|
320
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("OrderId not found. The order may not be synced to ERP yet. Please ensure the order has been synced to ERP and try again.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Get ReportId from report_master table
|
|
324
|
+
const reportListFor = normalizedFileFor; // "sale" or "order"
|
|
325
|
+
let reportId = null;
|
|
326
|
+
let reportName = null;
|
|
327
|
+
try {
|
|
328
|
+
logger.info(`[POS-GENERATE-INVOICE] : Fetching report from report_master - BranchNo: ${branchNo}, ReportListFor: ${reportListFor}`);
|
|
329
|
+
const { data: reportMasterData } = await query.graph({
|
|
330
|
+
entity: "report_master",
|
|
331
|
+
fields: ["id", "report_id", "report_name", "branch_no", "report_list_for"],
|
|
332
|
+
filters: {
|
|
333
|
+
branch_no: branchNo,
|
|
334
|
+
report_list_for: reportListFor,
|
|
335
|
+
},
|
|
336
|
+
pagination: {
|
|
337
|
+
skip: 0,
|
|
338
|
+
take: 100, // Get all available reports for this branch
|
|
339
|
+
},
|
|
340
|
+
});
|
|
341
|
+
logger.info(`[POS-GENERATE-INVOICE] : Report_master query result - Found ${reportMasterData?.length || 0} reports: ${JSON.stringify(reportMasterData)}`);
|
|
342
|
+
if (reportMasterData && reportMasterData.length > 0) {
|
|
343
|
+
// Priority 1: Find report with "LetterHead" in the name (best for formatted invoices)
|
|
344
|
+
let selectedReport = reportMasterData.find((r) => r.report_name && r.report_name.toLowerCase().includes("letterhead"));
|
|
345
|
+
// Priority 2: Find report with "Invoice" in the name
|
|
346
|
+
if (!selectedReport) {
|
|
347
|
+
selectedReport = reportMasterData.find((r) => r.report_name && r.report_name.toLowerCase().includes("invoice"));
|
|
348
|
+
}
|
|
349
|
+
// Priority 3: Use the first report if no priority matches
|
|
350
|
+
if (!selectedReport) {
|
|
351
|
+
selectedReport = reportMasterData[0];
|
|
352
|
+
}
|
|
353
|
+
reportId = String(selectedReport.report_id);
|
|
354
|
+
reportName = selectedReport.report_name || "";
|
|
355
|
+
logger.info(`[POS-GENERATE-INVOICE] : Selected ReportId from ${reportMasterData.length} available reports - ReportId: ${reportId}, ReportName: ${reportName}`);
|
|
356
|
+
if (reportMasterData.length > 1) {
|
|
357
|
+
logger.info(`[POS-GENERATE-INVOICE] : Available reports: ${reportMasterData.map((r) => `${r.report_id}(${r.report_name})`).join(", ")}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
logger.warn(`[POS-GENERATE-INVOICE] : Error fetching report_master - ${error}`);
|
|
363
|
+
}
|
|
364
|
+
if (!reportId) {
|
|
365
|
+
logger.error(`[POS-GENERATE-INVOICE] : ReportId not found for BranchNo: ${branchNo}, ReportListFor: ${reportListFor}`);
|
|
366
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`ReportId not found for ${reportListFor} in branch ${branchNo}. Please ensure reports are synced to report_master table.`, api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
|
|
367
|
+
}
|
|
368
|
+
// Log the payload before calling GenerateFile API
|
|
369
|
+
const generateFilePayload = {
|
|
370
|
+
FileFor: FileFor,
|
|
371
|
+
FileType: FileType,
|
|
372
|
+
ReportId: reportId,
|
|
373
|
+
TransactionId: transactionId,
|
|
374
|
+
LetterHead: reportName || undefined, // Use report name as LetterHead
|
|
375
|
+
};
|
|
376
|
+
logger.info(`[POS-GENERATE-INVOICE] : Calling GenerateFile API with payload: ${JSON.stringify(generateFilePayload)}`);
|
|
377
|
+
logger.info(`[POS-GENERATE-INVOICE] : Additional info - BranchNo: ${branchNo}, ReportName: ${reportName}, OrderId: ${order_id}`);
|
|
378
|
+
logger.info(`[POS-GENERATE-INVOICE] : Request Headers - FileFor: ${FileFor}, FileType: ${FileType}, ReportId: ${reportId}, transactionid: ${transactionId}, LetterHead: ${reportName}`);
|
|
379
|
+
// Generate file
|
|
380
|
+
const result = await erpService.generateFile(generateFilePayload);
|
|
381
|
+
logger.info(`[POS-GENERATE-INVOICE] : GenerateFile API Response: ${JSON.stringify(result)}`);
|
|
382
|
+
logger.info(`[POS-GENERATE-INVOICE] : Response Status: ${result.status}, Message: ${result.message}`);
|
|
383
|
+
if (!result.status) {
|
|
384
|
+
logger.error(`[POS-GENERATE-INVOICE] : GenerateFile API failed - Status: ${result.status}, Message: ${result.message}, Payload: ${JSON.stringify(generateFilePayload)}`);
|
|
385
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(result.message || "Failed to generate invoice", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
|
|
386
|
+
}
|
|
387
|
+
logger.info(`[POS-GENERATE-INVOICE] : Invoice generated successfully`);
|
|
388
|
+
logger.info(`[POS-GENERATE-INVOICE] : FileLink: ${result.data?.FileLink}`);
|
|
389
|
+
logger.info(`[POS-GENERATE-INVOICE] : Summary - OrderId: ${order_id}, FileFor: ${FileFor}, FileType: ${FileType}, ReportId: ${reportId}, ReportName: ${reportName}, TransactionId: ${transactionId}, BranchNo: ${branchNo}, LetterHead: ${reportName}`);
|
|
390
|
+
// Disable print option for PDF files
|
|
391
|
+
const responseData = { ...result.data };
|
|
392
|
+
if (FileType.toLowerCase() === "pdf" && responseData.FileLink) {
|
|
393
|
+
// Method 1: Add PDF viewer parameters to disable printing
|
|
394
|
+
// #toolbar=0 - hides the toolbar (removes print button)
|
|
395
|
+
// #navpanes=0 - hides navigation panes
|
|
396
|
+
// &embedded=true - embedded mode (further limits functionality)
|
|
397
|
+
let pdfLink = responseData.FileLink;
|
|
398
|
+
// Add parameters based on viewer type
|
|
399
|
+
if (pdfLink.includes("?")) {
|
|
400
|
+
pdfLink = `${pdfLink}&toolbar=0&navpanes=0`;
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
pdfLink = `${pdfLink}#toolbar=0&navpanes=0`;
|
|
404
|
+
}
|
|
405
|
+
responseData.FileLink = pdfLink;
|
|
406
|
+
logger.info(`[POS-GENERATE-INVOICE] : PDF print option disabled - Updated FileLink: ${responseData.FileLink}`);
|
|
407
|
+
// Method 2: Add HTTP headers to prevent printing
|
|
408
|
+
res.setHeader("X-UA-Compatible", "IE=edge");
|
|
409
|
+
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
410
|
+
res.setHeader("Pragma", "no-cache");
|
|
411
|
+
res.setHeader("Expires", "0");
|
|
412
|
+
res.setHeader("X-Print-Disabled", "true");
|
|
413
|
+
// Method 3: Content Security Policy - prevent print functionality
|
|
414
|
+
res.setHeader("Content-Security-Policy", "print-src 'none'");
|
|
415
|
+
// Method 4: Add iframe sandbox attributes (if PDF is embedded in iframe)
|
|
416
|
+
responseData.sandboxAttributes = "allow-same-origin";
|
|
417
|
+
logger.info(`[POS-GENERATE-INVOICE] : All print prevention methods applied`);
|
|
418
|
+
}
|
|
419
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(responseData, result.message || "Invoice generated successfully"));
|
|
420
|
+
}
|
|
421
|
+
catch (error) {
|
|
422
|
+
logger.error(`[POS-GENERATE-INVOICE] : Error generating invoice - ${error}`);
|
|
423
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error?.message || "Failed to generate invoice", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
exports.GET = GET;
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nZW5lcmF0ZS1pbnZvaWNlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUMvRSw0REFNbUM7QUFFbkMsOENBQWtEO0FBQ2xELDRFQUFnRjtBQUVoRixnRUFBb0U7QUFFN0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQixFQUNsQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUkzQyxDQUFDO1FBRUYsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQ2pCLDBEQUEwRCxFQUMxRCx5QkFBVSxDQUFDLFdBQVcsRUFDdEIsd0JBQVMsQ0FBQyxnQkFBZ0IsQ0FDM0IsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVELG1CQUFtQjtRQUNuQixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJLGlCQUFpQixLQUFLLE1BQU0sSUFBSSxpQkFBaUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNsRSxPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQ2pCLG1DQUFtQyxFQUNuQyx5QkFBVSxDQUFDLFdBQVcsRUFDdEIsd0JBQVMs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
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const build_redis_key_1 = require("../../../../utils/build-redis-key");
|
|
6
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
7
|
+
const item_master_purity_1 = require("../item-master-purity");
|
|
8
|
+
const KARAT_NORMALIZE = {
|
|
9
|
+
"9": "9K", "9k": "9K",
|
|
10
|
+
"14": "14K", "14k": "14K",
|
|
11
|
+
"18": "18K", "18k": "18K",
|
|
12
|
+
"22": "22K", "22k": "22K",
|
|
13
|
+
"24": "24K", "24k": "24K",
|
|
14
|
+
"og9": "9K", "og9k": "9K",
|
|
15
|
+
"og14": "14K", "og14k": "14K",
|
|
16
|
+
"og18": "18K", "og18k": "18K",
|
|
17
|
+
"og22": "22K", "og22k": "22K",
|
|
18
|
+
"og24": "24K", "og24k": "24K",
|
|
19
|
+
};
|
|
20
|
+
/** Normalize karat input (e.g. og14, OG18K, 14k) to canonical form 9K|14K|18K|22K|24K for cache lookup. */
|
|
21
|
+
function normalizeKarat(karatRaw) {
|
|
22
|
+
const s = karatRaw.trim().toLowerCase().replace(/\s/g, "");
|
|
23
|
+
if (!s)
|
|
24
|
+
return "";
|
|
25
|
+
const direct = KARAT_NORMALIZE[s];
|
|
26
|
+
if (direct)
|
|
27
|
+
return direct;
|
|
28
|
+
const withoutOg = s.replace(/^og/, "");
|
|
29
|
+
const fromOg = KARAT_NORMALIZE[withoutOg] || (withoutOg && !withoutOg.endsWith("k") ? `${withoutOg}K` : withoutOg);
|
|
30
|
+
if (fromOg && KARAT_NORMALIZE[fromOg.toLowerCase()])
|
|
31
|
+
return KARAT_NORMALIZE[fromOg.toLowerCase()];
|
|
32
|
+
const numMatch = s.match(/^og?(\d+)(k?)$/);
|
|
33
|
+
if (numMatch) {
|
|
34
|
+
const n = numMatch[1];
|
|
35
|
+
const mapped = KARAT_NORMALIZE[n] || KARAT_NORMALIZE[`${n}k`];
|
|
36
|
+
if (mapped)
|
|
37
|
+
return mapped;
|
|
38
|
+
return `${n}K`;
|
|
39
|
+
}
|
|
40
|
+
return s.toUpperCase().endsWith("K") ? s.toUpperCase() : `${s}K`.toUpperCase();
|
|
41
|
+
}
|
|
42
|
+
/** Parse first number from string e.g. "38.5%" or "50" -> 38.5 or 50 */
|
|
43
|
+
function parsePurityPercent(value) {
|
|
44
|
+
if (!value || typeof value !== "string")
|
|
45
|
+
return null;
|
|
46
|
+
const match = value.trim().match(/(\d+(?:\.\d+)?)/);
|
|
47
|
+
return match ? Number(match[1]) : null;
|
|
48
|
+
}
|
|
49
|
+
const POST = async (req, res) => {
|
|
50
|
+
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
51
|
+
try {
|
|
52
|
+
const body = req.body;
|
|
53
|
+
const karatRaw = body?.karat ?? "";
|
|
54
|
+
const karat = String(karatRaw).trim().toLowerCase();
|
|
55
|
+
const purity = String(body?.purity ?? "").trim();
|
|
56
|
+
const netWeightGms = Number(body?.net_weight_gms);
|
|
57
|
+
const pieces = Number(body?.pieces);
|
|
58
|
+
if (!karat) {
|
|
59
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Body parameter karat is required", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
|
|
60
|
+
}
|
|
61
|
+
const normalizedKarat = normalizeKarat(karat);
|
|
62
|
+
const cacheService = req.scope.resolve(utils_1.Modules.CACHE);
|
|
63
|
+
const cacheKey = (0, build_redis_key_1.buildRedisKey)("pos:gold-rate", {});
|
|
64
|
+
const cached = await cacheService.get(cacheKey);
|
|
65
|
+
if (!cached?.oldGoldRateList?.length) {
|
|
66
|
+
logger.warn("[POS-GOLD-CALCULATE] : No cached gold rate");
|
|
67
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Gold rate not loaded. Please load gold rate first.", api_response_1.HttpStatus.SERVICE_UNAVAILABLE, api_response_1.ErrorCode.INTERNAL_ERROR));
|
|
68
|
+
}
|
|
69
|
+
const item = cached.oldGoldRateList.find((x) => x.rate.toUpperCase() === normalizedKarat);
|
|
70
|
+
if (!item) {
|
|
71
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`Karat "${karat}" not found. Supported: 9K, 14K, 18K, 22K, 24K (or og14, og18, etc.)`, api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
|
|
72
|
+
}
|
|
73
|
+
// Base purity: from item_master for this karat (e.g. og18 -> G18) when available, else from cache
|
|
74
|
+
const itemMasterPurity = await (0, item_master_purity_1.getPurityFromItemMaster)(req.scope, normalizedKarat);
|
|
75
|
+
const cachePurityPercent = parsePurityPercent(String(item.purity ?? "")) ?? 100;
|
|
76
|
+
const itemPurityPercent = itemMasterPurity ?? cachePurityPercent;
|
|
77
|
+
// Adjust cache rate to match item_master purity when we used it
|
|
78
|
+
const baseRate = itemMasterPurity != null && cachePurityPercent > 0
|
|
79
|
+
? (item.amount * itemMasterPurity) / cachePurityPercent
|
|
80
|
+
: item.amount;
|
|
81
|
+
// User-entered purity – when provided, adjust rate so amount updates
|
|
82
|
+
const userPurityPercent = parsePurityPercent(purity);
|
|
83
|
+
let ratePerGms;
|
|
84
|
+
if (userPurityPercent != null && !Number.isNaN(userPurityPercent) && itemPurityPercent > 0) {
|
|
85
|
+
ratePerGms = (baseRate * userPurityPercent) / itemPurityPercent;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
ratePerGms = baseRate;
|
|
89
|
+
}
|
|
90
|
+
const netWeight = Number.isNaN(netWeightGms) || netWeightGms < 0 ? 0 : netWeightGms;
|
|
91
|
+
const totalAmount = Math.round(ratePerGms * netWeight * 100) / 100;
|
|
92
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
93
|
+
rate_per_gms: ratePerGms,
|
|
94
|
+
total_amount: totalAmount,
|
|
95
|
+
}, "OK"));
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const msg = error instanceof Error ? error.message : "Unknown error";
|
|
99
|
+
logger.error(`[POS-GOLD-CALCULATE] : ${msg}`);
|
|
100
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error instanceof Error ? error.message : "Internal server error", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
exports.POST = POST;
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nb2xkL2NhbGN1bGF0ZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxREFBK0U7QUFDL0UsdUVBQWtFO0FBQ2xFLCtEQU1zQztBQUN0Qyw4REFBZ0U7QUFhaEUsTUFBTSxlQUFlLEdBQTJCO0lBQzlDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7SUFDckIsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUN6QixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ3pCLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7SUFDekIsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUN6QixLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO0lBQ3pCLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7SUFDN0IsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztJQUM3QixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO0lBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7Q0FDOUIsQ0FBQztBQUVGLDJHQUEyRztBQUMzRyxTQUFTLGNBQWMsQ0FBQyxRQUFnQjtJQUN0QyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUFJLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUMx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
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPurityFromItemMaster = getPurityFromItemMaster;
|
|
4
|
+
const item_master_1 = require("../../../modules/item-master");
|
|
5
|
+
const KARAT_TO_ITEM_CODE = {
|
|
6
|
+
"9K": "G9",
|
|
7
|
+
"14K": "G14",
|
|
8
|
+
"18K": "G18",
|
|
9
|
+
"22K": "G22",
|
|
10
|
+
"24K": "G24",
|
|
11
|
+
};
|
|
12
|
+
const OLD_GOLD_RAW_NAME = "Old Gold";
|
|
13
|
+
/**
|
|
14
|
+
* Get purity (qly_mfg_clarity) from item_master for the given normalized karat (9K, 14K, 18K, 22K, 24K).
|
|
15
|
+
* Returns null if no matching Old Gold item found.
|
|
16
|
+
*/
|
|
17
|
+
async function getPurityFromItemMaster(container, normalizedKarat) {
|
|
18
|
+
const itemCode = KARAT_TO_ITEM_CODE[normalizedKarat.toUpperCase()];
|
|
19
|
+
if (!itemCode)
|
|
20
|
+
return null;
|
|
21
|
+
try {
|
|
22
|
+
const itemMasterService = container.resolve(item_master_1.ITEM_MASTER_MODULE);
|
|
23
|
+
let list = await itemMasterService.listItemMasters({
|
|
24
|
+
raw_name: OLD_GOLD_RAW_NAME,
|
|
25
|
+
item_code: itemCode,
|
|
26
|
+
});
|
|
27
|
+
if (!list?.length) {
|
|
28
|
+
const all = await itemMasterService.listItemMasters({});
|
|
29
|
+
const match = (all ?? []).find((r) => (r.raw_name || "").trim().toLowerCase() === OLD_GOLD_RAW_NAME.toLowerCase() &&
|
|
30
|
+
(r.item_code || "").trim().toUpperCase() === itemCode.toUpperCase());
|
|
31
|
+
list = match ? [match] : [];
|
|
32
|
+
}
|
|
33
|
+
const row = list?.[0];
|
|
34
|
+
if (row?.qly_mfg_clarity != null && !Number.isNaN(Number(row.qly_mfg_clarity))) {
|
|
35
|
+
return Number(row.qly_mfg_clarity);
|
|
36
|
+
}
|
|
37
|
+
if (row?.qly_clarity != null && !Number.isNaN(Number(row.qly_clarity))) {
|
|
38
|
+
return Number(row.qly_clarity);
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1tYXN0ZXItcHVyaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9wb3MvZ29sZC9pdGVtLW1hc3Rlci1wdXJpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsMERBaUNDO0FBbERELDhEQUFrRTtBQUdsRSxNQUFNLGtCQUFrQixHQUEyQjtJQUNqRCxJQUFJLEVBQUUsSUFBSTtJQUNWLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLEtBQUs7SUFDWixLQUFLLEVBQUUsS0FBSztJQUNaLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDO0FBRXJDOzs7R0FHRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsU0FBMEIsRUFDMUIsZUFBdUI7SUFFdkIsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkUsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUzQixJQUFJLENBQUM7UUFDSCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWtCLENBQXNCLENBQUM7UUFDckYsSUFBSSxJQUFJLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7WUFDakQsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixTQUFTLEVBQUUsUUFBUTtTQUNwQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sR0FBRyxHQUFHLE1BQU0saUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDNUIsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUNULENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7Z0JBQzNFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQ3RFLENBQUM7WUFDRixJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksR0FBRyxFQUFFLGVBQWUsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9FLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxHQUFHLEVBQUUsV0FBVyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdkUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIn0=
|