@devx-commerce/plugin-gati 0.0.34-beta.7 → 0.0.34-beta.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/.medusa/server/src/admin/index.js +3 -1
  2. package/.medusa/server/src/admin/index.mjs +3 -1
  3. package/.medusa/server/src/api/admin/masters/utils.js +29 -1
  4. package/.medusa/server/src/api/admin/masters/validators.js +2 -2
  5. package/.medusa/server/src/api/admin/variant-options/recalculate/route.js +446 -0
  6. package/.medusa/server/src/api/admin/variant-options/sync/route.js +21 -5
  7. package/.medusa/server/src/api/erp/webhook/config.js +71 -5
  8. package/.medusa/server/src/api/erp/webhook/route.js +10 -137
  9. package/.medusa/server/src/api/erp/webhook/utils.js +8 -1
  10. package/.medusa/server/src/api/pos/customer-ledger/middleware.js +13 -0
  11. package/.medusa/server/src/api/pos/customer-ledger/route.js +50 -0
  12. package/.medusa/server/src/api/pos/generate-invoice/route.js +164 -0
  13. package/.medusa/server/src/api/pos/gold/calculate/route.js +104 -0
  14. package/.medusa/server/src/api/pos/gold/item-master-purity.js +46 -0
  15. package/.medusa/server/src/api/pos/gold/middleware.js +18 -0
  16. package/.medusa/server/src/api/pos/gold/route.js +83 -0
  17. package/.medusa/server/src/api/pos/gold-rate/route.js +37 -24
  18. package/.medusa/server/src/api/pos/middleware.js +13 -1
  19. package/.medusa/server/src/api/pos/old-gold-item/middleware.js +10 -0
  20. package/.medusa/server/src/api/pos/old-gold-item/route.js +52 -0
  21. package/.medusa/server/src/api/pos/platinumdata/middleware.js +13 -0
  22. package/.medusa/server/src/api/pos/platinumdata/route.js +41 -0
  23. package/.medusa/server/src/api/pos/silverdata/middleware.js +13 -0
  24. package/.medusa/server/src/api/pos/silverdata/route.js +41 -0
  25. package/.medusa/server/src/api/pos/wallet-balance/middleware.js +13 -0
  26. package/.medusa/server/src/api/pos/wallet-balance/route.js +68 -0
  27. package/.medusa/server/src/api/store/custom-price/validators.js +2 -2
  28. package/.medusa/server/src/api/store/customer-ledger/middleware.js +13 -0
  29. package/.medusa/server/src/api/store/customer-ledger/route.js +49 -0
  30. package/.medusa/server/src/api/store/gold-rate/validators.js +2 -2
  31. package/.medusa/server/src/api/store/middleware.js +5 -1
  32. package/.medusa/server/src/api/store/wallet-balance/middleware.js +13 -0
  33. package/.medusa/server/src/api/store/wallet-balance/route.js +67 -0
  34. package/.medusa/server/src/jobs/process-erp-events.js +128 -0
  35. package/.medusa/server/src/jobs/process-variant-option-sync.js +46 -29
  36. package/.medusa/server/src/jobs/sync-addless-detail.js +65 -0
  37. package/.medusa/server/src/jobs/sync-book-list-and-applicable-policy.js +94 -0
  38. package/.medusa/server/src/jobs/sync-customer-advance-payment-erp.js +105 -0
  39. package/.medusa/server/src/jobs/sync-customer-erp.js +119 -0
  40. package/.medusa/server/src/jobs/sync-item-master.js +26 -0
  41. package/.medusa/server/src/jobs/sync-labour-chart-master.js +26 -0
  42. package/.medusa/server/src/jobs/sync-order-erp.js +46 -20
  43. package/.medusa/server/src/jobs/sync-order-request-erp.js +61 -0
  44. package/.medusa/server/src/jobs/sync-payment-book-master.js +68 -0
  45. package/.medusa/server/src/jobs/sync-rate-chart-master.js +26 -0
  46. package/.medusa/server/src/jobs/sync-report-master.js +51 -0
  47. package/.medusa/server/src/jobs/sync-sale-return-policy-master.js +35 -0
  48. package/.medusa/server/src/jobs/sync-urd-purchase-erp.js +82 -0
  49. package/.medusa/server/src/lib/api-response.js +2 -1
  50. package/.medusa/server/src/links/jewel-trans-master.js +13 -0
  51. package/.medusa/server/src/links/order-master.js +13 -0
  52. package/.medusa/server/src/links/sale-master.js +13 -0
  53. package/.medusa/server/src/modules/addless-detail/index.js +13 -0
  54. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260212101102.js +15 -0
  55. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260213000000.js +47 -0
  56. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260226053037.js +15 -0
  57. package/.medusa/server/src/modules/addless-detail/models/addless-master.js +17 -0
  58. package/.medusa/server/src/modules/addless-detail/service.js +10 -0
  59. package/.medusa/server/src/modules/applicable-sale-return-policy/index.js +13 -0
  60. package/.medusa/server/src/modules/applicable-sale-return-policy/migrations/Migration20260123083526.js +15 -0
  61. package/.medusa/server/src/modules/applicable-sale-return-policy/models/applicable-sale-return-policy.js +23 -0
  62. package/.medusa/server/src/modules/applicable-sale-return-policy/service.js +10 -0
  63. package/.medusa/server/src/modules/book-list/index.js +13 -0
  64. package/.medusa/server/src/modules/book-list/migrations/Migration20260123083525.js +15 -0
  65. package/.medusa/server/src/modules/book-list/migrations/Migration20260401051011.js +14 -0
  66. package/.medusa/server/src/modules/book-list/models/book-list.js +13 -0
  67. package/.medusa/server/src/modules/book-list/service.js +10 -0
  68. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250729035221.js +2 -2
  69. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +2 -2
  70. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +2 -2
  71. package/.medusa/server/src/modules/category-master/migrations/Migration20250513122212.js +2 -2
  72. package/.medusa/server/src/modules/category-master/migrations/Migration20250519180539.js +2 -2
  73. package/.medusa/server/src/modules/category-master/migrations/Migration20250531004724.js +2 -2
  74. package/.medusa/server/src/modules/category-master/migrations/Migration20250729040659.js +2 -2
  75. package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +2 -2
  76. package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +2 -2
  77. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20250531022203.js +2 -2
  78. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +2 -2
  79. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +2 -2
  80. package/.medusa/server/src/modules/collection-master/migrations/Migration20250513122211.js +2 -2
  81. package/.medusa/server/src/modules/collection-master/migrations/Migration20250531025048.js +2 -2
  82. package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +2 -2
  83. package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +2 -2
  84. package/.medusa/server/src/modules/customer-receive-voucher/index.js +13 -0
  85. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20250115000000.js +51 -0
  86. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20260106050934.js +18 -0
  87. package/.medusa/server/src/modules/customer-receive-voucher/models/customer-receive-voucher.js +35 -0
  88. package/.medusa/server/src/modules/customer-receive-voucher/service.js +10 -0
  89. package/.medusa/server/src/modules/discount-master/migrations/Migration20250707232514.js +2 -2
  90. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051709.js +2 -2
  91. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051737.js +2 -2
  92. package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +2 -2
  93. package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +2 -2
  94. package/.medusa/server/src/modules/erp/migrations/Migration20250513121436.js +2 -2
  95. package/.medusa/server/src/modules/erp/service.js +601 -8
  96. package/.medusa/server/src/modules/erp-event/migrations/Migration20250908040911.js +2 -2
  97. package/.medusa/server/src/modules/erp-event/migrations/Migration20250922095956.js +2 -2
  98. package/.medusa/server/src/modules/erp-event/migrations/Migration20260529052734.js +14 -0
  99. package/.medusa/server/src/modules/erp-event/models/erp-event.js +6 -1
  100. package/.medusa/server/src/modules/extended-product/migrations/Migration20250620030100.js +2 -2
  101. package/.medusa/server/src/modules/extended-product/migrations/Migration20250716041546.js +2 -2
  102. package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +2 -2
  103. package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +2 -2
  104. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +2 -2
  105. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +2 -2
  106. package/.medusa/server/src/modules/extended-product/migrations/Migration20260323103543.js +14 -0
  107. package/.medusa/server/src/modules/extended-product/models/extended-product.js +2 -1
  108. package/.medusa/server/src/modules/extended-product/service.js +37 -1
  109. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030335.js +2 -2
  110. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030522.js +2 -2
  111. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629220100.js +2 -2
  112. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629223425.js +2 -2
  113. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250704064831.js +2 -2
  114. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250716121609.js +2 -2
  115. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250725104852.js +2 -2
  116. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250726232339.js +2 -2
  117. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250916065103.js +2 -2
  118. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +2 -2
  119. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +2 -2
  120. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +2 -2
  121. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +2 -2
  122. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +2 -2
  123. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
  124. package/.medusa/server/src/modules/extended-variant/migrations/Migration20260616000001.js +14 -0
  125. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +4 -2
  126. package/.medusa/server/src/modules/extended-variant/service.js +37 -1
  127. package/.medusa/server/src/modules/item-master/index.js +13 -0
  128. package/.medusa/server/src/modules/item-master/migrations/Migration20260212101055.js +15 -0
  129. package/.medusa/server/src/modules/item-master/models/item-master.js +20 -0
  130. package/.medusa/server/src/modules/item-master/service.js +10 -0
  131. package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +2 -2
  132. package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
  133. package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260226053036.js +57 -0
  134. package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
  135. package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
  136. package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
  137. package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
  138. package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
  139. package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
  140. package/.medusa/server/src/modules/material-purchase-master/index.js +13 -0
  141. package/.medusa/server/src/modules/material-purchase-master/migrations/Migration20260310090700.js +18 -0
  142. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-detail-line.js +24 -0
  143. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-master.js +21 -0
  144. package/.medusa/server/src/modules/material-purchase-master/service.js +12 -0
  145. package/.medusa/server/src/modules/order-master/index.js +13 -0
  146. package/.medusa/server/src/modules/order-master/migrations/Migration20260226053036.js +29 -0
  147. package/.medusa/server/src/modules/order-master/migrations/Migration20260303000001.js +30 -0
  148. package/.medusa/server/src/modules/order-master/migrations/Migration20260319094758.js +26 -0
  149. package/.medusa/server/src/modules/order-master/migrations/Migration20260320000001.js +19 -0
  150. package/.medusa/server/src/modules/order-master/models/order-master.js +112 -0
  151. package/.medusa/server/src/modules/order-master/service.js +13 -0
  152. package/.medusa/server/src/modules/order-proceed-master/index.js +13 -0
  153. package/.medusa/server/src/modules/order-proceed-master/migrations/Migration20260327100226.js +31 -0
  154. package/.medusa/server/src/modules/order-proceed-master/models/order-proceed-master.js +38 -0
  155. package/.medusa/server/src/modules/order-proceed-master/service.js +11 -0
  156. package/.medusa/server/src/modules/party-master/migrations/Migration20250604104235.js +2 -2
  157. package/.medusa/server/src/modules/party-master/migrations/Migration20250604115453.js +2 -2
  158. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120348.js +2 -2
  159. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120701.js +2 -2
  160. package/.medusa/server/src/modules/party-master/migrations/Migration20250608220924.js +2 -2
  161. package/.medusa/server/src/modules/party-master/migrations/Migration20250612225738.js +2 -2
  162. package/.medusa/server/src/modules/party-master/migrations/Migration20250612231031.js +2 -2
  163. package/.medusa/server/src/modules/party-master/migrations/Migration20250708123734.js +2 -2
  164. package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +2 -2
  165. package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +2 -2
  166. package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
  167. package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
  168. package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
  169. package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
  170. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250819123821.js +2 -2
  171. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250918095713.js +2 -2
  172. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +2 -2
  173. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +2 -2
  174. package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +2 -2
  175. package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +2 -2
  176. package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
  177. package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
  178. package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
  179. package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
  180. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190057.js +2 -2
  181. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190322.js +2 -2
  182. package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +2 -2
  183. package/.medusa/server/src/modules/receive-voucher-master/index.js +13 -0
  184. package/.medusa/server/src/modules/receive-voucher-master/migrations/Migration20260328053649.js +16 -0
  185. package/.medusa/server/src/modules/receive-voucher-master/models/receive-voucher-master.js +27 -0
  186. package/.medusa/server/src/modules/receive-voucher-master/service.js +10 -0
  187. package/.medusa/server/src/modules/report-master/index.js +13 -0
  188. package/.medusa/server/src/modules/report-master/migrations/Migration20260121060955.js +15 -0
  189. package/.medusa/server/src/modules/report-master/migrations/Migration20260121112624.js +15 -0
  190. package/.medusa/server/src/modules/report-master/models/report-master.js +12 -0
  191. package/.medusa/server/src/modules/report-master/service.js +10 -0
  192. package/.medusa/server/src/modules/sale-master/index.js +13 -0
  193. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205092935.js +15 -0
  194. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205100000.js +16 -0
  195. package/.medusa/server/src/modules/sale-master/models/sale-master.js +27 -0
  196. package/.medusa/server/src/modules/sale-master/service.js +10 -0
  197. package/.medusa/server/src/modules/sale-return-master/index.js +13 -0
  198. package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260205093034.js +15 -0
  199. package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260327084135.js +14 -0
  200. package/.medusa/server/src/modules/sale-return-master/models/sale-return-master.js +18 -0
  201. package/.medusa/server/src/modules/sale-return-master/service.js +10 -0
  202. package/.medusa/server/src/modules/sale-return-policy-master/index.js +13 -0
  203. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260105061449.js +21 -0
  204. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129084920.js +14 -0
  205. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129085620.js +20 -0
  206. package/.medusa/server/src/modules/sale-return-policy-master/models/sale-return-policy-master.js +37 -0
  207. package/.medusa/server/src/modules/sale-return-policy-master/service.js +12 -0
  208. package/.medusa/server/src/modules/shape-master/migrations/Migration20250509174455.js +2 -2
  209. package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +2 -2
  210. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713113247.js +2 -2
  211. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713121440.js +2 -2
  212. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +2 -2
  213. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +2 -2
  214. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +2 -2
  215. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250513115356.js +2 -2
  216. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250519180538.js +2 -2
  217. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250531010409.js +2 -2
  218. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025135.js +2 -2
  219. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025307.js +2 -2
  220. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730032130.js +2 -2
  221. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +2 -2
  222. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +2 -2
  223. package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +2 -2
  224. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +2 -2
  225. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +2 -2
  226. package/.medusa/server/src/subscribers/cutomer-updated.js +3 -1
  227. package/.medusa/server/src/subscribers/erp-batch-processor.js +147 -0
  228. package/.medusa/server/src/subscribers/order-item-update.js +11 -0
  229. package/.medusa/server/src/subscribers/party-master.js +39 -35
  230. package/.medusa/server/src/subscribers/product-sync.js +1 -1
  231. package/.medusa/server/src/subscribers/product-variant-deleted.js +27 -0
  232. package/.medusa/server/src/subscribers/shipping-info-master.js +10 -4
  233. package/.medusa/server/src/utils/build-redis-key.js +3 -1
  234. package/.medusa/server/src/utils/state-helper.js +3 -2
  235. package/.medusa/server/src/workflows/addless-detail/index.js +11 -0
  236. package/.medusa/server/src/workflows/addless-detail/steps/create-or-update-addless-detail.js +36 -0
  237. package/.medusa/server/src/workflows/addless-detail/steps/fetch-addless-detail.js +73 -0
  238. package/.medusa/server/src/workflows/applicable-sale-return-policy/index.js +11 -0
  239. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/create-or-update-applicable-sale-return-policy.js +74 -0
  240. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/fetch-applicable-sale-return-policy.js +64 -0
  241. package/.medusa/server/src/workflows/book-list/index.js +11 -0
  242. package/.medusa/server/src/workflows/book-list/steps/create-or-update-book-list.js +59 -0
  243. package/.medusa/server/src/workflows/book-list/steps/fetch-book-list.js +64 -0
  244. package/.medusa/server/src/workflows/create-extended-product-from-product/index.js +9 -8
  245. package/.medusa/server/src/workflows/create-extended-variant-from-variant/index.js +9 -18
  246. package/.medusa/server/src/workflows/customer-advance-payment/index.js +18 -0
  247. package/.medusa/server/src/workflows/customer-advance-payment/steps/create-receive-voucher.js +71 -0
  248. package/.medusa/server/src/workflows/customer-advance-payment/steps/index.js +18 -0
  249. package/.medusa/server/src/workflows/customer-advance-payment/workflows/create-receive-voucher-workflow.js +11 -0
  250. package/.medusa/server/src/workflows/customer-advance-payment/workflows/index.js +18 -0
  251. package/.medusa/server/src/workflows/daily-rate/index.js +29 -0
  252. package/.medusa/server/src/workflows/daily-rate/perf.js +89 -0
  253. package/.medusa/server/src/workflows/daily-rate/steps/fetch-gold-rate-step.js +21 -0
  254. package/.medusa/server/src/workflows/daily-rate/steps/update-inward-metal-rates-step.js +154 -0
  255. package/.medusa/server/src/workflows/daily-rate/steps/update-party-style-metal-rates-step.js +224 -0
  256. package/.medusa/server/src/workflows/daily-rate/steps/update-style-master-metal-rates-step.js +180 -0
  257. package/.medusa/server/src/workflows/erp-batch-processing/index.js +19 -0
  258. package/.medusa/server/src/workflows/erp-batch-processing/steps/finalize-batch-processing.js +55 -0
  259. package/.medusa/server/src/workflows/erp-batch-processing/steps/index.js +20 -0
  260. package/.medusa/server/src/workflows/erp-batch-processing/steps/initialize-batch-processing.js +40 -0
  261. package/.medusa/server/src/workflows/erp-batch-processing/steps/start-batch-processing.js +22 -0
  262. package/.medusa/server/src/workflows/erp-batch-processing/workflows/erp-batch-processing.js +25 -0
  263. package/.medusa/server/src/workflows/erp-batch-processing/workflows/index.js +18 -0
  264. package/.medusa/server/src/workflows/erp-event/steps/update-erp-event.js +24 -7
  265. package/.medusa/server/src/workflows/erp-event/workflows/update-erp-event.js +1 -1
  266. package/.medusa/server/src/workflows/helpers/product-helper.js +212 -21
  267. package/.medusa/server/src/workflows/helpers/variant-helper.js +165 -162
  268. package/.medusa/server/src/workflows/hooks/product-updated.js +23 -15
  269. package/.medusa/server/src/workflows/hooks/variant-updated.js +24 -22
  270. package/.medusa/server/src/workflows/index.js +4 -1
  271. package/.medusa/server/src/workflows/inward-master/helper/index.js +23 -8
  272. package/.medusa/server/src/workflows/inward-master/steps/create-order-fulfillment-for-inward.js +73 -0
  273. package/.medusa/server/src/workflows/inward-master/steps/index.js +3 -1
  274. package/.medusa/server/src/workflows/inward-master/steps/notify-inward-skipped.js +37 -0
  275. package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +51 -43
  276. package/.medusa/server/src/workflows/inward-master/workflows/delete-inward.js +6 -9
  277. package/.medusa/server/src/workflows/inward-master/workflows/update-instock.js +2 -1
  278. package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +32 -7
  279. package/.medusa/server/src/workflows/item-master/index.js +11 -0
  280. package/.medusa/server/src/workflows/item-master/steps/create-or-update-item-master.js +50 -0
  281. package/.medusa/server/src/workflows/item-master/steps/fetch-item-master.js +29 -0
  282. package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
  283. package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
  284. package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
  285. package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
  286. package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
  287. package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
  288. package/.medusa/server/src/workflows/material-purchase-master/index.js +24 -0
  289. package/.medusa/server/src/workflows/material-purchase-master/steps/create-material-purchase-master.js +119 -0
  290. package/.medusa/server/src/workflows/material-purchase-master/steps/delete-material-purchase-master.js +102 -0
  291. package/.medusa/server/src/workflows/material-purchase-master/steps/fetch-material-purchase-master.js +60 -0
  292. package/.medusa/server/src/workflows/material-purchase-master/steps/update-material-purchase-master.js +149 -0
  293. package/.medusa/server/src/workflows/order-master/index.js +3 -0
  294. package/.medusa/server/src/workflows/order-master/order-master-webhook.js +24 -0
  295. package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +275 -0
  296. package/.medusa/server/src/workflows/order-master/steps/delete-order-master-by-erp-ids.js +61 -0
  297. package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +924 -0
  298. package/.medusa/server/src/workflows/order-proceed-master/index.js +6 -0
  299. package/.medusa/server/src/workflows/order-proceed-master/order-proceed-master-webhook.js +26 -0
  300. package/.medusa/server/src/workflows/order-proceed-master/steps/create-or-update-order-proceed-master.js +186 -0
  301. package/.medusa/server/src/workflows/order-proceed-master/steps/delete-order-proceed-master-by-erp-ids.js +28 -0
  302. package/.medusa/server/src/workflows/orders/steps/find-nearest-pincodes-step.js +336 -0
  303. package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +77 -0
  304. package/.medusa/server/src/workflows/orders/steps/index.js +15 -1
  305. package/.medusa/server/src/workflows/orders/steps/revert-to-wallet-step.js +165 -0
  306. package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +185 -0
  307. package/.medusa/server/src/workflows/orders/steps/sync-buyback-to-erp-step.js +99 -0
  308. package/.medusa/server/src/workflows/orders/steps/sync-cancel-to-erp-step.js +120 -0
  309. package/.medusa/server/src/workflows/orders/steps/sync-exchange-to-erp-step.js +101 -0
  310. package/.medusa/server/src/workflows/orders/steps/sync-old-gold-to-erp-step.js +161 -0
  311. package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +743 -20
  312. package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +277 -0
  313. package/.medusa/server/src/workflows/orders/steps/update-old-gold-sync-status-step.js +64 -0
  314. package/.medusa/server/src/workflows/orders/utils/order-helper.js +183 -38
  315. package/.medusa/server/src/workflows/orders/utils/order-request-helper.js +235 -0
  316. package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
  317. package/.medusa/server/src/workflows/orders/workflows/index.js +4 -1
  318. package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
  319. package/.medusa/server/src/workflows/orders/workflows/sync-old-gold-to-erp.js +24 -0
  320. package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +54 -5
  321. package/.medusa/server/src/workflows/orders/workflows/sync-sale-return-to-erp.js +11 -0
  322. package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +53 -33
  323. package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +115 -0
  324. package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
  325. package/.medusa/server/src/workflows/party-master/steps/index.js +2 -1
  326. package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +2 -2
  327. package/.medusa/server/src/workflows/party-master/workflows/create-user-erp.js +11 -0
  328. package/.medusa/server/src/workflows/party-master/workflows/index.js +2 -1
  329. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +16 -249
  330. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +103 -22
  331. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +49 -18
  332. package/.medusa/server/src/workflows/party-style-master/workflows/delete-party-style-master.js +4 -15
  333. package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
  334. package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +37 -0
  335. package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
  336. package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
  337. package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +25 -0
  338. package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
  339. package/.medusa/server/src/workflows/receive-voucher-master/index.js +24 -0
  340. package/.medusa/server/src/workflows/receive-voucher-master/steps/create-receive-voucher-master.js +125 -0
  341. package/.medusa/server/src/workflows/receive-voucher-master/steps/delete-receive-voucher-master.js +45 -0
  342. package/.medusa/server/src/workflows/receive-voucher-master/steps/fetch-receive-voucher-master.js +22 -0
  343. package/.medusa/server/src/workflows/receive-voucher-master/steps/update-receive-voucher-master.js +44 -0
  344. package/.medusa/server/src/workflows/report-master/index.js +11 -0
  345. package/.medusa/server/src/workflows/report-master/steps/create-or-update-report-master.js +53 -0
  346. package/.medusa/server/src/workflows/report-master/steps/fetch-report.js +71 -0
  347. package/.medusa/server/src/workflows/sale-master/index.js +24 -0
  348. package/.medusa/server/src/workflows/sale-master/steps/create-sale-master.js +72 -0
  349. package/.medusa/server/src/workflows/sale-master/steps/delete-sale-master.js +59 -0
  350. package/.medusa/server/src/workflows/sale-master/steps/update-sale-master.js +95 -0
  351. package/.medusa/server/src/workflows/sale-return-master/index.js +6 -0
  352. package/.medusa/server/src/workflows/sale-return-master/sale-return-master-webhook.js +28 -0
  353. package/.medusa/server/src/workflows/sale-return-master/steps/create-or-update-sale-return-master.js +109 -0
  354. package/.medusa/server/src/workflows/sale-return-master/steps/create-sale-return-master.js +45 -0
  355. package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master-by-erp-ids.js +36 -0
  356. package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master.js +36 -0
  357. package/.medusa/server/src/workflows/sale-return-master/steps/process-sale-return-from-webhook.js +234 -0
  358. package/.medusa/server/src/workflows/sale-return-master/steps/update-sale-return-master.js +53 -0
  359. package/.medusa/server/src/workflows/sale-return-policy-master/index.js +11 -0
  360. package/.medusa/server/src/workflows/sale-return-policy-master/steps/create-or-update-sale-return-policy-master.js +91 -0
  361. package/.medusa/server/src/workflows/sale-return-policy-master/steps/fetch-sale-return-policy.js +31 -0
  362. package/.medusa/server/src/workflows/shipping-info-master/workflows/create-or-update-shipping-info.js +59 -0
  363. package/.medusa/server/src/workflows/shipping-info-master/workflows/index.js +2 -1
  364. package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master.js +116 -10
  365. package/.medusa/server/src/workflows/style-master/workflows/delete-style-master.js +9 -1
  366. package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +6 -16
  367. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +5 -17
  368. package/package.json +18 -33
@@ -0,0 +1,924 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processOrderMasterFromWebhookStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const order_master_1 = require("../../../modules/order-master");
7
+ const party_master_1 = require("../../../modules/party-master");
8
+ const extended_variant_1 = require("../../../modules/extended-variant");
9
+ const shipping_info_master_1 = require("../../../modules/shipping-info-master");
10
+ const framework_1 = require("@medusajs/framework");
11
+ /**
12
+ * Map ERP BookName to Medusa payment provider_id.
13
+ * Matches the reverse of the payment mapping in sync-order-to-erp.ts.
14
+ */
15
+ function getProviderFromBookName(bookName) {
16
+ const name = (bookName ?? "").toLowerCase();
17
+ if (name.includes("upi") || name.includes("card") || name.includes("worldline") || name.includes("pos") || name.includes("swipe")) {
18
+ return "pp_worldline-pos_worldline_pos";
19
+ }
20
+ if (name.includes("delivery") || name.includes("cod") || name.includes("payu") || name.includes("gokwik")) {
21
+ return "pp_gokwik_gokwik";
22
+ }
23
+ if (name.includes("razorpay")) {
24
+ return "pp_razorpay_razorpay";
25
+ }
26
+ if (name.includes("cheque")) {
27
+ return "pp_cheque_cheque";
28
+ }
29
+ if (name.includes("bank") || name.includes("transfer") || name.includes("neft") || name.includes("rtgs") || name.includes("imps")) {
30
+ return "pp_bank_transfer_bank_transfer";
31
+ }
32
+ if (name.includes("wallet")) {
33
+ return "pp_wallet_wallet";
34
+ }
35
+ if (name.includes("cash")) {
36
+ return "pp_cash_cash";
37
+ }
38
+ return "pp_system_default";
39
+ }
40
+ /**
41
+ * Normalize fetch result: getMasterData can return single object or array per id.
42
+ */
43
+ function normalizeOrderDataList(result) {
44
+ if (result == null)
45
+ return [];
46
+ if (Array.isArray(result)) {
47
+ return result.flatMap((item) => Array.isArray(item) ? item : item && typeof item === "object" && "OrderId" in item ? [item] : []);
48
+ }
49
+ return result && typeof result === "object" && "OrderId" in result ? [result] : [];
50
+ }
51
+ // ─── Shared: Create Medusa payment collections from ERP PaymentOption data ───
52
+ async function createPaymentCollectionsFromErp(container, link, medusaOrderId, data) {
53
+ const erpPayments = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
54
+ if (!erpPayments.length) {
55
+ framework_1.logger.info(`[Webhook] No ERP payments (Amount>0) for order ${medusaOrderId} — skipping payment collection`);
56
+ return;
57
+ }
58
+ try {
59
+ const paymentModule = container.resolve(utils_1.Modules.PAYMENT);
60
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
61
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
62
+ // Check for existing payment collections linked to this order
63
+ const { data: existingOrders } = await query.graph({
64
+ entity: "order",
65
+ fields: [
66
+ "payment_collections.id",
67
+ "payment_collections.status",
68
+ "payment_collections.payments.id",
69
+ "payment_collections.payments.amount",
70
+ "payment_collections.payments.captured_at",
71
+ ],
72
+ filters: { id: medusaOrderId },
73
+ });
74
+ const existingCollections = existingOrders?.[0]?.payment_collections ?? [];
75
+ if (existingCollections.length > 0) {
76
+ // Payment collections already exist — ensure transactions are registered
77
+ for (const col of existingCollections) {
78
+ for (const payment of (col.payments ?? [])) {
79
+ if (payment.captured_at) {
80
+ try {
81
+ await orderModule.addTransactions([{
82
+ order_id: medusaOrderId,
83
+ amount: payment.amount,
84
+ currency_code: "inr",
85
+ reference: "payment",
86
+ reference_id: payment.id,
87
+ }]);
88
+ framework_1.logger.info(`[Webhook] addTransactions for existing payment ${payment.id} on order ${medusaOrderId}`);
89
+ }
90
+ catch (txErr) {
91
+ framework_1.logger.warn(`[Webhook] addTransactions (existing payment) skipped for ${medusaOrderId}: ${txErr?.message}`);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ return;
97
+ }
98
+ const totalAmount = erpPayments.reduce((sum, p) => sum + Math.round(p.Amount), 0);
99
+ const paymentCollection = await paymentModule.createPaymentCollections({
100
+ currency_code: "inr",
101
+ amount: totalAmount,
102
+ });
103
+ // Link payment collection → Medusa order
104
+ await link.create({
105
+ [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
106
+ [utils_1.Modules.PAYMENT]: { payment_collection_id: paymentCollection.id },
107
+ });
108
+ // One session per ERP payment → authorize → capture
109
+ for (const p of erpPayments) {
110
+ const amount = Math.round(p.Amount);
111
+ const providerId = getProviderFromBookName(p.BookName);
112
+ const session = await paymentModule.createPaymentSession(paymentCollection.id, {
113
+ provider_id: providerId,
114
+ currency_code: "inr",
115
+ amount: amount,
116
+ data: {
117
+ book_name: p.BookName ?? "",
118
+ trans_prefix: p.TransPrefix ?? "",
119
+ trans_no: p.TransNo ?? "",
120
+ voucher_entry_id: String(p.VoucherEntryId ?? ""),
121
+ },
122
+ });
123
+ // authorizePaymentSession returns PaymentDTO (the payment itself, not the session)
124
+ const payment = await paymentModule.authorizePaymentSession(session.id, {});
125
+ if (payment?.id) {
126
+ await paymentModule.capturePayment({
127
+ payment_id: payment.id,
128
+ amount: amount,
129
+ });
130
+ // Register transaction with order module so paid_total / pending_difference are correct
131
+ try {
132
+ await orderModule.addTransactions([{
133
+ order_id: medusaOrderId,
134
+ amount: amount,
135
+ currency_code: "inr",
136
+ reference: "payment",
137
+ reference_id: payment.id,
138
+ }]);
139
+ }
140
+ catch (txErr) {
141
+ framework_1.logger.warn(`[Webhook] addTransactions failed for order ${medusaOrderId}: ${txErr?.message}`);
142
+ }
143
+ }
144
+ }
145
+ framework_1.logger.info(`[Webhook] Created payment collection ${paymentCollection.id} with ${erpPayments.length} payments (total: ${totalAmount}) for order ${medusaOrderId}`);
146
+ }
147
+ catch (payErr) {
148
+ framework_1.logger.warn(`[Webhook] Payment collection creation failed for order ${medusaOrderId}: ${payErr?.message}`);
149
+ }
150
+ }
151
+ // ─── Shared: Create or update extended_order record ──────────────────────────
152
+ async function createOrUpdateExtendedOrder(container, link, medusaOrderId, erpOrderIdStr, data, customerInfo = {}) {
153
+ try {
154
+ const extOrderService = container.resolve("extended_order");
155
+ const erpPayments = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
156
+ const paymentMode = erpPayments.length > 1 ? "split" : erpPayments.length === 1 ? "single" : null;
157
+ const existing = await extOrderService.listExtendedOrders({ order_id: medusaOrderId });
158
+ const erpInvoiceNo = [data.OrderPrefix, data.OrderNo].filter(Boolean).join("/") || erpOrderIdStr;
159
+ if (existing?.length > 0) {
160
+ const updatePayload = {
161
+ id: existing[0].id,
162
+ external_id: erpOrderIdStr,
163
+ sync_erp: true,
164
+ sync_erp_error: null,
165
+ };
166
+ if (paymentMode)
167
+ updatePayload.payment_mode = paymentMode;
168
+ if (customerInfo.customerId)
169
+ updatePayload.customer_id = customerInfo.customerId;
170
+ if (customerInfo.email)
171
+ updatePayload.customer_email = customerInfo.email;
172
+ if (customerInfo.phone)
173
+ updatePayload.customer_phone = customerInfo.phone;
174
+ if (data.Customer)
175
+ updatePayload.customer_name = data.Customer;
176
+ // Set order_type and invoice_no if not already set
177
+ if (!existing[0].order_type)
178
+ updatePayload.order_type = "make_to_order";
179
+ if (!existing[0].invoice_no)
180
+ updatePayload.invoice_no = erpInvoiceNo;
181
+ await extOrderService.updateExtendedOrders(updatePayload);
182
+ framework_1.logger.info(`[Webhook] Updated extended_order ${existing[0].id} for order ${medusaOrderId}`);
183
+ }
184
+ else {
185
+ const extOrder = await extOrderService.createExtendedOrders({
186
+ order_id: medusaOrderId,
187
+ display_id: erpInvoiceNo,
188
+ invoice_no: erpInvoiceNo,
189
+ is_manual: false,
190
+ source: "pos",
191
+ order_type: "make_to_order",
192
+ customer_id: customerInfo.customerId || "",
193
+ customer_name: data.Customer || null,
194
+ customer_email: customerInfo.email || null,
195
+ customer_phone: customerInfo.phone || null,
196
+ payment_mode: paymentMode,
197
+ payment_type: "full",
198
+ external_id: erpOrderIdStr,
199
+ sync_erp: true,
200
+ sync_erp_error: null,
201
+ });
202
+ // Link extended_order → Medusa order via link module
203
+ try {
204
+ await link.create({
205
+ [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
206
+ extended_order: { extended_order_id: extOrder.id },
207
+ });
208
+ }
209
+ catch (linkErr) {
210
+ framework_1.logger.warn(`[Webhook] extended_order link failed for order ${medusaOrderId}: ${linkErr?.message}`);
211
+ }
212
+ framework_1.logger.info(`[Webhook] Created extended_order ${extOrder.id} for order ${medusaOrderId}`);
213
+ }
214
+ }
215
+ catch (err) {
216
+ framework_1.logger.warn(`[Webhook] extended_order create/update failed for order ${medusaOrderId}: ${err?.message}`);
217
+ }
218
+ }
219
+ // ─── Sub-scenario B: Link existing Medusa order ─────────────────────────────
220
+ async function handleExistingMedusaOrder(medusaOrderId, master, data, erpOrderIdStr, link, query, container) {
221
+ const partyMasterService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
222
+ // ─── Resolve customer info ───────────────────────────────────────────────
223
+ const partyList = await partyMasterService.listPartyMasters({
224
+ party_no: data.CustomerId,
225
+ });
226
+ const party = partyList?.[0] ?? null;
227
+ const medusaCustomerId = party?.mapping_id ?? null;
228
+ let orderEmail = party?.firm_email || "";
229
+ if (!orderEmail && medusaCustomerId) {
230
+ try {
231
+ const { data: customers } = await query.graph({
232
+ entity: "customer",
233
+ fields: ["email"],
234
+ filters: { id: medusaCustomerId },
235
+ });
236
+ orderEmail = customers?.[0]?.email || "";
237
+ }
238
+ catch (_) { /* ignore */ }
239
+ }
240
+ // Merge ERP fields into order metadata (Medusa does a shallow merge — existing keys are preserved)
241
+ try {
242
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
243
+ const addlessItemsExisting = (data.AddlessDetail ?? []);
244
+ const disAmountExisting = addlessItemsExisting.find((a) => a.Prompt === "DIS")?.AddLessAmount ?? 0;
245
+ const promoAmountExisting = addlessItemsExisting.find((a) => a.Prompt === "PROMOCODE")?.AddLessAmount ?? 0;
246
+ const roundingAmountExisting = addlessItemsExisting.find((a) => /rounding/i.test(a.Prompt ?? ""))?.AddLessAmount ?? 0;
247
+ await orderModule.updateOrders({
248
+ id: medusaOrderId,
249
+ metadata: {
250
+ external_id: erpOrderIdStr,
251
+ sync_erp: true,
252
+ OrderId: data.OrderId ?? null,
253
+ OrderPrefix: data.OrderPrefix ?? null,
254
+ OrderNo: data.OrderNo ?? null,
255
+ OrderDate: data.OrderDate ?? null,
256
+ Detail: (data.OrderDetail ?? []).map((item) => ({
257
+ SrNo: item.SrNo,
258
+ JewelId: item.JewelId,
259
+ StyleId: item.StyleId,
260
+ OrderItemId: item.OrderItemId,
261
+ PartyStyleId: item.PartyStyleId,
262
+ })),
263
+ ...(disAmountExisting !== 0 ? { store_discount: { code: "STORE_DISCOUNT", amount: disAmountExisting } } : {}),
264
+ ...(roundingAmountExisting !== 0 ? { rounded_discount: { code: "ROUNDED_DISCOUNT", amount: roundingAmountExisting } } : {}),
265
+ ...(promoAmountExisting > 0 ? { discount: { code: data.Promocode || "PROMOCODE", amount: promoAmountExisting } } : {}),
266
+ },
267
+ });
268
+ framework_1.logger.info(`[Webhook] Updated metadata.external_id=${erpOrderIdStr} on order ${medusaOrderId}`);
269
+ }
270
+ catch (updateErr) {
271
+ framework_1.logger.warn(`[Webhook] metadata update failed for order ${medusaOrderId}: ${updateErr?.message}`);
272
+ }
273
+ // Link order_master → Medusa order
274
+ try {
275
+ await link.create({
276
+ [order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
277
+ [utils_1.Modules.ORDER]: { order_id: medusaOrderId },
278
+ });
279
+ framework_1.logger.info(`[Webhook] Linked order_master ${master.id} → order ${medusaOrderId}`);
280
+ }
281
+ catch (linkError) {
282
+ const msg = linkError?.message || "";
283
+ if (msg.includes("Cannot create multiple links") ||
284
+ msg.includes("already exists") ||
285
+ msg.includes("argument of AND must be type boolean") ||
286
+ linkError?.code === "23505" ||
287
+ linkError?.name === "UniqueConstraintViolationError") {
288
+ framework_1.logger.info(`[Webhook] Link already exists (or entity verify failed) for order_master ${master.id} → order ${medusaOrderId}`);
289
+ }
290
+ else {
291
+ throw linkError;
292
+ }
293
+ }
294
+ // ─── Create extended_order and payment collections ───────────────────────
295
+ await createOrUpdateExtendedOrder(container, link, medusaOrderId, erpOrderIdStr, data, {
296
+ customerId: medusaCustomerId,
297
+ email: orderEmail,
298
+ phone: party?.owner_mobile || "",
299
+ });
300
+ await createPaymentCollectionsFromErp(container, link, medusaOrderId, data);
301
+ // Set order status to "completed" if ERP reports captured payments
302
+ const erpPaymentsExist = (data.PaymentOption ?? []).some((p) => p.Amount > 0);
303
+ if (erpPaymentsExist) {
304
+ try {
305
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
306
+ await orderModule.updateOrders({ id: medusaOrderId, status: "completed" });
307
+ framework_1.logger.info(`[Webhook] Set order ${medusaOrderId} status → completed`);
308
+ }
309
+ catch (e) {
310
+ framework_1.logger.warn(`[Webhook] Failed to set order status completed for ${medusaOrderId}: ${e?.message}`);
311
+ }
312
+ }
313
+ }
314
+ // ─── Sub-scenario A: Create new Medusa order from ERP data ──────────────────
315
+ async function handleNewMedusaOrderFromErp(master, data, erpOrderIdStr, link, container) {
316
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
317
+ const orderModule = container.resolve(utils_1.Modules.ORDER);
318
+ const regionModule = container.resolve(utils_1.Modules.REGION);
319
+ const partyMasterService = container.resolve(party_master_1.PARTY_MASTER_MODULE);
320
+ const extendedVariantService = container.resolve(extended_variant_1.EXTENDED_VARIANT_MODULE);
321
+ const shippingInfoService = container.resolve(shipping_info_master_1.SHIPPING_INFO_MASTER_MODULE);
322
+ // ─── Resolve customer ───────────────────────────────────────────────────
323
+ const partyList = await partyMasterService.listPartyMasters({
324
+ party_no: data.CustomerId,
325
+ });
326
+ const party = partyList?.[0] ?? null;
327
+ const medusaCustomerId = party?.mapping_id ?? null;
328
+ if (!medusaCustomerId) {
329
+ framework_1.logger.warn(`[Webhook] No Medusa customer mapping for party_no=${data.CustomerId}, will create as guest`);
330
+ }
331
+ // Resolve order email: firm_email → Medusa customer email → ""
332
+ let orderEmail = party?.firm_email || "";
333
+ if (!orderEmail && medusaCustomerId) {
334
+ try {
335
+ const { data: customers } = await query.graph({
336
+ entity: "customer",
337
+ fields: ["email"],
338
+ filters: { id: medusaCustomerId },
339
+ });
340
+ orderEmail = customers?.[0]?.email || "";
341
+ }
342
+ catch (_) { /* ignore */ }
343
+ }
344
+ // ─── Resolve region ─────────────────────────────────────────────────────
345
+ const regions = await regionModule.listRegions({ currency_code: "inr" });
346
+ const region = regions?.[0] ?? null;
347
+ if (!region) {
348
+ framework_1.logger.error(`[Webhook] No INR region found — cannot create Medusa order for ERP order ${erpOrderIdStr}. ` +
349
+ `order_master ${master.id} was created/updated but has no linked Medusa order. ` +
350
+ `Create an INR region and re-trigger the webhook to complete the link.`);
351
+ return;
352
+ }
353
+ // ─── Parse taxes and discounts from AddlessDetail ────────────────────────
354
+ const addlessItems = (data.AddlessDetail ?? []);
355
+ const igstEntry = addlessItems.find((a) => /igst/i.test(a.Prompt ?? ""));
356
+ const sgstEntry = addlessItems.find((a) => /sgst/i.test(a.Prompt ?? ""));
357
+ const cgstEntry = addlessItems.find((a) => /cgst/i.test(a.Prompt ?? ""));
358
+ let gstRate = 0;
359
+ if (igstEntry && (igstEntry.AddlessPer ?? 0) > 0) {
360
+ gstRate = igstEntry.AddlessPer;
361
+ }
362
+ else {
363
+ gstRate = (sgstEntry?.AddlessPer ?? 0) + (cgstEntry?.AddlessPer ?? 0);
364
+ }
365
+ const disAmount = addlessItems.find((a) => a.Prompt === "DIS")?.AddLessAmount ?? 0;
366
+ const promoAmount = addlessItems.find((a) => a.Prompt === "PROMOCODE")?.AddLessAmount ?? 0;
367
+ const roundingAmount = addlessItems.find((a) => /rounding/i.test(a.Prompt ?? ""))?.AddLessAmount ?? 0;
368
+ const promoCode = data.Promocode || "PROMOCODE";
369
+ // Look up GST tax_rate_id via Tax Module (best-effort)
370
+ let gstTaxRateId = null;
371
+ if (gstRate > 0) {
372
+ try {
373
+ const taxModule = container.resolve(utils_1.Modules.TAX);
374
+ const taxRegions = await taxModule.listTaxRegions({ country_code: "in" });
375
+ if (taxRegions.length > 0) {
376
+ const taxRates = await taxModule.listTaxRates({
377
+ tax_region_id: taxRegions.map((r) => r.id),
378
+ });
379
+ const match = taxRates.find((r) => Math.abs((r.rate ?? 0) - gstRate) < 0.5);
380
+ gstTaxRateId = match?.id ?? null;
381
+ }
382
+ }
383
+ catch (_) { /* ignore */ }
384
+ }
385
+ // ─── Resolve variants per OrderDetail ────────────────────────────────────
386
+ const resolvedItems = await Promise.all((data.OrderDetail ?? []).map(async (item) => {
387
+ let variants = [];
388
+ // Priority 1: party_style_id (most precise — unique per variant)
389
+ if (item.PartyStyleId && item.PartyStyleId > 0) {
390
+ variants = await extendedVariantService.listExtendedVariants({
391
+ party_style_id: item.PartyStyleId,
392
+ });
393
+ }
394
+ // Priority 2: style_code + metal
395
+ if (!variants.length && item.StyleCode && item.Metal) {
396
+ variants = await extendedVariantService.listExtendedVariants({
397
+ style_code: item.StyleCode,
398
+ metal: item.Metal,
399
+ });
400
+ }
401
+ // Priority 3: style_code only
402
+ if (!variants.length && item.StyleCode) {
403
+ variants = await extendedVariantService.listExtendedVariants({
404
+ style_code: item.StyleCode,
405
+ });
406
+ }
407
+ const variantMappingId = variants?.[0]?.mapping_id ?? null;
408
+ if (!variantMappingId) {
409
+ framework_1.logger.warn(`[Webhook] No variant found for StyleCode=${item.StyleCode} PartyStyleId=${item.PartyStyleId}`);
410
+ }
411
+ // Fetch product info for line item denormalization
412
+ let variantInfo = null;
413
+ if (variantMappingId) {
414
+ try {
415
+ const { data: variantData } = await query.graph({
416
+ entity: "product_variant",
417
+ fields: ["id", "title", "sku", "product.id", "product.title", "product.handle", "product.thumbnail", "product.subtitle"],
418
+ filters: { id: variantMappingId },
419
+ });
420
+ variantInfo = variantData?.[0] ?? null;
421
+ }
422
+ catch (_) { /* ignore */ }
423
+ }
424
+ return {
425
+ item,
426
+ variantMappingId,
427
+ variantInfo,
428
+ unitPrice: Math.round(item.MRP ?? 0),
429
+ };
430
+ }));
431
+ // ─── Build line items (only resolvable variants) ─────────────────────────
432
+ const resolvedFiltered = resolvedItems.filter((i) => i.variantMappingId);
433
+ const totalSubtotal = resolvedFiltered.reduce((sum, i) => sum + i.unitPrice * (i.item.OrderItemPcs ?? 1), 0);
434
+ const lineItems = resolvedFiltered.map((i) => {
435
+ const itemSubtotal = i.unitPrice * (i.item.OrderItemPcs ?? 1);
436
+ const proportion = totalSubtotal > 0 ? itemSubtotal / totalSubtotal : 1;
437
+ const taxLines = [];
438
+ if (gstRate > 0) {
439
+ taxLines.push({
440
+ description: "GST",
441
+ ...(gstTaxRateId ? { tax_rate_id: gstTaxRateId } : {}),
442
+ code: "GST",
443
+ provider_id: "system",
444
+ rate: gstRate,
445
+ });
446
+ }
447
+ const adjustments = [];
448
+ if (disAmount > 0) {
449
+ adjustments.push({
450
+ code: "STORE_DISCOUNT",
451
+ amount: Math.round(disAmount * proportion * 100) / 100,
452
+ });
453
+ }
454
+ if (promoAmount > 0) {
455
+ adjustments.push({
456
+ code: promoCode,
457
+ amount: Math.round(promoAmount * proportion * 100) / 100,
458
+ });
459
+ }
460
+ if (roundingAmount !== 0) {
461
+ adjustments.push({
462
+ code: "ROUNDED_DISCOUNT",
463
+ amount: Math.round(roundingAmount * proportion * 100) / 100,
464
+ });
465
+ }
466
+ return {
467
+ variant_id: i.variantMappingId,
468
+ product_id: i.variantInfo?.product?.id ?? null,
469
+ product_title: i.variantInfo?.product?.title ?? null,
470
+ product_handle: i.variantInfo?.product?.handle ?? null,
471
+ product_subtitle: i.variantInfo?.product?.subtitle ?? null,
472
+ thumbnail: i.variantInfo?.product?.thumbnail ?? null,
473
+ variant_title: i.variantInfo?.title ?? null,
474
+ variant_sku: i.variantInfo?.sku ?? null,
475
+ quantity: i.item.OrderItemPcs ?? 1,
476
+ unit_price: i.unitPrice,
477
+ title: i.variantInfo?.product?.title ?? [i.item.StyleCode, i.item.ItemSizeName, i.item.Metal, i.item.Tone].filter(Boolean).join(" - "),
478
+ subtitle: i.variantInfo?.title ?? null,
479
+ ...(taxLines.length > 0 ? { tax_lines: taxLines } : {}),
480
+ ...(adjustments.length > 0 ? { adjustments } : {}),
481
+ metadata: {
482
+ erp_order_item_id: String(i.item.OrderItemId ?? ""),
483
+ erp_style_id: String(i.item.StyleId ?? ""),
484
+ erp_make_type: i.item.MakeType ?? null,
485
+ erp_stock_type: i.item.StockType ?? null,
486
+ erp_expected_delivery: i.item.Expecteddeliverydate ?? null,
487
+ item_po_no: i.item.ItemPoNo || null,
488
+ },
489
+ };
490
+ });
491
+ if (!lineItems.length) {
492
+ framework_1.logger.warn(`[Webhook] No resolvable variants for ERP order ${erpOrderIdStr} — Medusa order not created. ` +
493
+ `order_master ${master.id} was created/updated but has no linked Medusa order. ` +
494
+ `Resolve variant mappings and re-trigger the webhook to complete the link.`);
495
+ return;
496
+ }
497
+ // ─── Resolve shipping address ─────────────────────────────────────────────
498
+ let shippingAddress = undefined;
499
+ let billingAddress = undefined;
500
+ // Try ShippingId from ERP order first
501
+ if (data.ShippingId) {
502
+ try {
503
+ const shippingList = await shippingInfoService.listShippingInfoMasters({
504
+ shipping_id: data.ShippingId,
505
+ });
506
+ const si = shippingList?.[0];
507
+ if (si) {
508
+ shippingAddress = {
509
+ first_name: si.shipping_name || data.Customer || "",
510
+ last_name: "",
511
+ address_1: si.address1 || "",
512
+ address_2: si.address2 || "",
513
+ city: si.city || "",
514
+ country_code: "in",
515
+ province: si.state || "",
516
+ postal_code: si.pin_code || "",
517
+ phone: si.mobile_no || party?.owner_mobile || "",
518
+ company: "",
519
+ metadata: { party_shipping_id: String(si.shipping_id ?? "") },
520
+ };
521
+ }
522
+ }
523
+ catch (_) { /* ignore */ }
524
+ }
525
+ // Fallback: build address from party_master firm address
526
+ if (!shippingAddress && party) {
527
+ const addrLine = [party.firm_add1, party.firm_add2, party.firm_add3].filter(Boolean).join(", ");
528
+ if (addrLine) {
529
+ shippingAddress = {
530
+ first_name: party.firm_name || data.Customer || "",
531
+ last_name: "",
532
+ address_1: party.firm_add1 || "",
533
+ address_2: [party.firm_add2, party.firm_add3].filter(Boolean).join(", ") || "",
534
+ city: party.firm_city || "",
535
+ country_code: "in",
536
+ province: party.state || "",
537
+ postal_code: party.firm_pin_code || "",
538
+ phone: party.owner_mobile || "",
539
+ company: "",
540
+ };
541
+ }
542
+ }
543
+ billingAddress = shippingAddress;
544
+ // ─── Create Medusa order ─────────────────────────────────────────────────
545
+ const erpPaymentsForNewOrder = (data.PaymentOption ?? []).filter((p) => p.Amount > 0);
546
+ const newMedusaOrder = await orderModule.createOrders({
547
+ region_id: region.id,
548
+ currency_code: "inr",
549
+ status: erpPaymentsForNewOrder.length > 0 ? "completed" : "pending",
550
+ customer_id: medusaCustomerId ?? undefined,
551
+ email: orderEmail || undefined,
552
+ shipping_address: shippingAddress,
553
+ billing_address: billingAddress,
554
+ items: lineItems,
555
+ metadata: {
556
+ external_id: erpOrderIdStr, // ERP OrderId — prevents Flow 1 re-sync
557
+ sync_erp: true, // tells Flow 1 cron: already synced, skip
558
+ source: "erp", // origin marker
559
+ code: null,
560
+ OrderId: data.OrderId ?? null,
561
+ OrderPrefix: data.OrderPrefix ?? null,
562
+ OrderNo: data.OrderNo ?? null,
563
+ OrderDate: data.OrderDate ?? null,
564
+ customer: {
565
+ name: data.Customer ?? "",
566
+ email: "",
567
+ phone: "",
568
+ },
569
+ branch_no: data.BranchNo ?? null,
570
+ cart_type: "POS_CART",
571
+ sales_person_name: data.SalesPerson ?? null,
572
+ payment_mode: erpPaymentsForNewOrder.length > 1 ? "split" : "single",
573
+ payment_type: "full",
574
+ cart_order_type: "make_to_order",
575
+ store_discount: disAmount !== 0 ? { code: "STORE_DISCOUNT", amount: disAmount } : null,
576
+ rounded_discount: roundingAmount !== 0 ? { code: "ROUNDED_DISCOUNT", amount: roundingAmount } : null,
577
+ discount: promoAmount > 0
578
+ ? { code: data.Promocode || "PROMOCODE", amount: promoAmount }
579
+ : (data.Promocode ? { code: data.Promocode, amount: data.PromocodeAmount ?? 0 } : null),
580
+ Detail: (data.OrderDetail ?? []).map((item) => ({
581
+ SrNo: item.SrNo,
582
+ JewelId: item.JewelId,
583
+ StyleId: item.StyleId,
584
+ OrderItemId: item.OrderItemId,
585
+ PartyStyleId: item.PartyStyleId,
586
+ })),
587
+ },
588
+ });
589
+ framework_1.logger.info(`[Webhook] Created Medusa order ${newMedusaOrder.id} for ERP order ${erpOrderIdStr}`);
590
+ // ─── Link order_master → new Medusa order ────────────────────────────────
591
+ try {
592
+ await link.create({
593
+ [order_master_1.ORDER_MASTER_MODULE]: { order_master_id: master.id },
594
+ [utils_1.Modules.ORDER]: { order_id: newMedusaOrder.id },
595
+ });
596
+ framework_1.logger.info(`[Webhook] Linked order_master ${master.id} → new order ${newMedusaOrder.id}`);
597
+ }
598
+ catch (linkError) {
599
+ if (linkError?.message?.includes("Cannot create multiple links") ||
600
+ linkError?.message?.includes("already exists") ||
601
+ linkError?.code === "23505" ||
602
+ linkError?.name === "UniqueConstraintViolationError") {
603
+ framework_1.logger.info(`[Webhook] Link already exists for order_master ${master.id}`);
604
+ }
605
+ else {
606
+ throw linkError;
607
+ }
608
+ }
609
+ // ─── Create payment collections and extended_order ──────────────────────
610
+ await createPaymentCollectionsFromErp(container, link, newMedusaOrder.id, data);
611
+ await createOrUpdateExtendedOrder(container, link, newMedusaOrder.id, erpOrderIdStr, data, {
612
+ customerId: medusaCustomerId,
613
+ email: orderEmail,
614
+ phone: party?.owner_mobile || "",
615
+ });
616
+ }
617
+ // ─── Main Step ───────────────────────────────────────────────────────────────
618
+ exports.processOrderMasterFromWebhookStep = (0, workflows_sdk_1.createStep)("process-order-master-from-webhook-step", async (fetchResult, { container }) => {
619
+ const orderMasterService = container.resolve(order_master_1.ORDER_MASTER_MODULE);
620
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
621
+ const link = container.resolve("link");
622
+ const orderDataList = normalizeOrderDataList(fetchResult);
623
+ if (!orderDataList.length) {
624
+ framework_1.logger.info("No order data to process from webhook");
625
+ return new workflows_sdk_1.StepResponse([]);
626
+ }
627
+ const processed = [];
628
+ for (const data of orderDataList) {
629
+ const orderId = data?.OrderId ?? data?.erp_order_id;
630
+ if (orderId == null)
631
+ continue;
632
+ const existing = await orderMasterService.listOrderMasters({
633
+ erp_order_id: Number(orderId),
634
+ });
635
+ let master;
636
+ // ─── STEP 1: Upsert order_master ──────────────────────────────────────
637
+ if (existing?.length > 0) {
638
+ framework_1.logger.info(`[Webhook] Updating Order ${orderId}`);
639
+ master = existing[0];
640
+ await orderMasterService.updateOrderMasters({
641
+ id: master.id,
642
+ erp_order_id: data.OrderId,
643
+ branch_no: data.BranchNo ?? null,
644
+ branch_name: data.BranchName ?? null,
645
+ order_prefix: data.OrderPrefix ?? "",
646
+ order_no: data.OrderNo ?? "",
647
+ order_date: data.OrderDate,
648
+ customer_id: data.CustomerId ?? null,
649
+ customer_name: data.Customer ?? null,
650
+ po_no: data.PoNo ?? null,
651
+ po_date: data.PoDate ?? null,
652
+ sales_person: data.SalesPerson ?? null,
653
+ work_order_no: data.WorkOrderNo ?? null,
654
+ remarks: data.Remarks ?? null,
655
+ shipping_id: data.ShippingId ?? null,
656
+ promocode_series_id: data.PromocodeSeriesId ?? null,
657
+ promocode: data.Promocode ?? null,
658
+ promocode_percentage: data.PromocodePercentage ?? null,
659
+ promocode_amount: data.PromocodeAmount ?? null,
660
+ });
661
+ // ─── STEP 2: Upsert order_detail_master ───────────────────────────
662
+ if (data?.OrderDetail?.length) {
663
+ for (const d of data.OrderDetail) {
664
+ const existingDetail = await orderMasterService.listOrderDetailMasters({
665
+ erp_order_id: d.OrderId,
666
+ order_item_id: d.OrderItemId,
667
+ order_master: master.id,
668
+ });
669
+ const detailData = {
670
+ erp_order_id: d.OrderId,
671
+ order_item_id: d.OrderItemId,
672
+ order_master: master.id,
673
+ sr_no: d.SrNo,
674
+ style_id: d.StyleId,
675
+ style_code: d.StyleCode,
676
+ party_style_id: d.PartyStyleId,
677
+ party_style_code: d.PartyStyleCode ?? null,
678
+ jewel_id: d.JewelId ?? null,
679
+ jewel_code: d.JewelCode ?? null,
680
+ item_size_id: d.ItemSizeId,
681
+ item_size: d.ItemSize,
682
+ item_size_name: d.ItemSizeName,
683
+ order_qty: d.OrderQty,
684
+ order_item_pcs: d.OrderItemPcs,
685
+ metal_item_id: d.MetalItemId,
686
+ metal: d.Metal,
687
+ metal_name: d.MetalName,
688
+ metal_tone_no: d.MetalToneNo,
689
+ tone: d.Tone,
690
+ tone_name: d.ToneName,
691
+ item_po_no: d.ItemPoNo ?? null,
692
+ item_ref_no: d.ItemRefNo ?? null,
693
+ priority_id: d.PriorityId,
694
+ priority: d.Priority,
695
+ priority_name: d.PriorityName,
696
+ stock_type_no: d.StockTypeNo,
697
+ stock_type: d.StockType,
698
+ stock_type_code: d.StockTypeCode,
699
+ make_type_no: d.MakeTypeNo,
700
+ make_type: d.MakeType,
701
+ make_type_code: d.MakeTypeCode,
702
+ customer_production_instruction: d.CustomerProductionInstruction ?? null,
703
+ special_remarks: d.SpecialRemarks ?? null,
704
+ design_production_instruction: d.DesignProductionInstruction ?? null,
705
+ stamp_instruction: d.StampInstruction ?? null,
706
+ expected_delivery_date: d.Expecteddeliverydate ?? d.ExpectedDeliveryDate,
707
+ mrp: d.MRP,
708
+ };
709
+ if (existingDetail?.length > 0) {
710
+ await orderMasterService.updateOrderDetailMasters({
711
+ id: existingDetail[0].id,
712
+ ...detailData,
713
+ });
714
+ }
715
+ else {
716
+ await orderMasterService.createOrderDetailMasters(detailData);
717
+ }
718
+ }
719
+ }
720
+ // ─── STEP 3: Upsert order_payment_option_master ───────────────────
721
+ if (data?.PaymentOption?.length) {
722
+ for (const p of data.PaymentOption) {
723
+ let existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
724
+ erp_order_id: p.OrderId,
725
+ voucher_entry_id: p.VoucherEntryId,
726
+ trans_no: p.TransNo,
727
+ order_master: master.id,
728
+ });
729
+ if (existingPayment?.length === 0 && p.TransNo) {
730
+ existingPayment = await orderMasterService.listOrderPaymentOptionMasters({
731
+ erp_order_id: p.OrderId,
732
+ voucher_entry_id: p.VoucherEntryId,
733
+ order_master: master.id,
734
+ });
735
+ }
736
+ const paymentData = {
737
+ erp_order_id: p.OrderId,
738
+ book_name: p.BookName,
739
+ order_master: master.id,
740
+ voucher_entry_id: p.VoucherEntryId,
741
+ trans_prefix: p.TransPrefix,
742
+ trans_no: p.TransNo,
743
+ transaction_date: p.TransactionDate,
744
+ doc_no: p.DocNo ?? null,
745
+ remarks: p.Remarks ?? null,
746
+ amount: p.Amount,
747
+ };
748
+ if (existingPayment?.length > 0) {
749
+ await orderMasterService.updateOrderPaymentOptionMasters({
750
+ id: existingPayment[0].id,
751
+ ...paymentData,
752
+ });
753
+ }
754
+ else {
755
+ await orderMasterService.createOrderPaymentOptionMasters(paymentData);
756
+ }
757
+ }
758
+ }
759
+ // ─── STEP 4: Upsert order_addless_detail_master (update path) ────
760
+ if (data?.AddlessDetail?.length) {
761
+ for (const a of data.AddlessDetail) {
762
+ const existingAddless = await orderMasterService.listOrderAddlessDetailMasters({
763
+ erp_order_id: a.OrderId,
764
+ prompt: a.Prompt,
765
+ order_master: master.id,
766
+ });
767
+ const addlessData = {
768
+ erp_order_id: a.OrderId,
769
+ addless_id: a.Id ?? null,
770
+ prompt: a.Prompt,
771
+ addless_per: a.AddlessPer ?? null,
772
+ addless_amount: a.AddLessAmount,
773
+ order_master: master.id,
774
+ };
775
+ if (existingAddless?.length > 0) {
776
+ await orderMasterService.updateOrderAddlessDetailMasters({
777
+ id: existingAddless[0].id,
778
+ ...addlessData,
779
+ });
780
+ }
781
+ else {
782
+ await orderMasterService.createOrderAddlessDetailMasters(addlessData);
783
+ }
784
+ }
785
+ }
786
+ }
787
+ else {
788
+ // ─── Create new order_master ───────────────────────────────────────
789
+ framework_1.logger.info(`[Webhook] Creating new Order ${orderId}`);
790
+ master = await orderMasterService.createOrderMasters({
791
+ erp_order_id: data.OrderId,
792
+ branch_no: data.BranchNo ?? null,
793
+ branch_name: data.BranchName ?? null,
794
+ order_prefix: data.OrderPrefix ?? "",
795
+ order_no: data.OrderNo ?? "",
796
+ order_date: data.OrderDate,
797
+ customer_id: data.CustomerId ?? null,
798
+ customer_name: data.Customer ?? null,
799
+ po_no: data.PoNo ?? null,
800
+ po_date: data.PoDate ?? null,
801
+ sales_person: data.SalesPerson ?? null,
802
+ work_order_no: data.WorkOrderNo ?? null,
803
+ remarks: data.Remarks ?? null,
804
+ shipping_id: data.ShippingId ?? null,
805
+ promocode_series_id: data.PromocodeSeriesId ?? null,
806
+ promocode: data.Promocode ?? null,
807
+ promocode_percentage: data.PromocodePercentage ?? null,
808
+ promocode_amount: data.PromocodeAmount ?? null,
809
+ });
810
+ if (data?.OrderDetail?.length) {
811
+ await orderMasterService.createOrderDetailMasters(data.OrderDetail.map((d) => ({
812
+ erp_order_id: d.OrderId,
813
+ order_item_id: d.OrderItemId,
814
+ order_master: master.id,
815
+ sr_no: d.SrNo,
816
+ style_id: d.StyleId,
817
+ style_code: d.StyleCode,
818
+ party_style_id: d.PartyStyleId,
819
+ party_style_code: d.PartyStyleCode ?? null,
820
+ jewel_id: d.JewelId ?? null,
821
+ jewel_code: d.JewelCode ?? null,
822
+ item_size_id: d.ItemSizeId,
823
+ item_size: d.ItemSize,
824
+ item_size_name: d.ItemSizeName,
825
+ order_qty: d.OrderQty,
826
+ order_item_pcs: d.OrderItemPcs,
827
+ metal_item_id: d.MetalItemId,
828
+ metal: d.Metal,
829
+ metal_name: d.MetalName,
830
+ metal_tone_no: d.MetalToneNo,
831
+ tone: d.Tone,
832
+ tone_name: d.ToneName,
833
+ item_po_no: d.ItemPoNo ?? null,
834
+ item_ref_no: d.ItemRefNo ?? null,
835
+ priority_id: d.PriorityId,
836
+ priority: d.Priority,
837
+ priority_name: d.PriorityName,
838
+ stock_type_no: d.StockTypeNo,
839
+ stock_type: d.StockType,
840
+ stock_type_code: d.StockTypeCode,
841
+ make_type_no: d.MakeTypeNo,
842
+ make_type: d.MakeType,
843
+ make_type_code: d.MakeTypeCode,
844
+ customer_production_instruction: d.CustomerProductionInstruction ?? null,
845
+ special_remarks: d.SpecialRemarks ?? null,
846
+ design_production_instruction: d.DesignProductionInstruction ?? null,
847
+ stamp_instruction: d.StampInstruction ?? null,
848
+ expected_delivery_date: d.Expecteddeliverydate ?? d.ExpectedDeliveryDate,
849
+ mrp: d.MRP,
850
+ })));
851
+ }
852
+ if (data?.PaymentOption?.length) {
853
+ await orderMasterService.createOrderPaymentOptionMasters(data.PaymentOption.map((p) => ({
854
+ erp_order_id: p.OrderId,
855
+ book_name: p.BookName,
856
+ order_master: master.id,
857
+ voucher_entry_id: p.VoucherEntryId,
858
+ trans_prefix: p.TransPrefix,
859
+ trans_no: p.TransNo,
860
+ transaction_date: p.TransactionDate,
861
+ doc_no: p.DocNo ?? null,
862
+ remarks: p.Remarks ?? null,
863
+ amount: p.Amount,
864
+ })));
865
+ }
866
+ if (data?.AddlessDetail?.length) {
867
+ await orderMasterService.createOrderAddlessDetailMasters(data.AddlessDetail.map((a) => ({
868
+ erp_order_id: a.OrderId,
869
+ addless_id: a.Id ?? null,
870
+ prompt: a.Prompt,
871
+ addless_per: a.AddlessPer ?? null,
872
+ addless_amount: a.AddLessAmount,
873
+ order_master: master.id,
874
+ })));
875
+ }
876
+ }
877
+ // ─── STEP 5: Detect sub-scenario ────────────────────────────────────
878
+ const erpOrderIdStr = String(orderId);
879
+ // CHECK 1: PoNo is a Medusa order ID (Sub-scenario B)
880
+ const poNoIsMedusaOrderId = typeof data.PoNo === "string" && data.PoNo.startsWith("order_");
881
+ let medusaOrderId = null;
882
+ if (poNoIsMedusaOrderId) {
883
+ medusaOrderId = data.PoNo;
884
+ framework_1.logger.info(`[Webhook] Order ${erpOrderIdStr} is a returning Medusa order via PoNo: ${medusaOrderId}`);
885
+ }
886
+ // CHECK 2: Existing Medusa order by metadata.external_id (Sub-scenario B)
887
+ if (!medusaOrderId) {
888
+ try {
889
+ const { data: existingOrders } = await query.graph({
890
+ entity: "order",
891
+ fields: ["id"],
892
+ filters: {
893
+ // @ts-ignore - metadata filter for external_id
894
+ metadata: { external_id: erpOrderIdStr || "" },
895
+ },
896
+ });
897
+ if (existingOrders?.length > 0) {
898
+ medusaOrderId = existingOrders[0].id;
899
+ framework_1.logger.info(`[Webhook] Found Medusa order ${medusaOrderId} by metadata.external_id=${erpOrderIdStr}`);
900
+ }
901
+ }
902
+ catch (queryErr) {
903
+ framework_1.logger.warn(`[Webhook] metadata.external_id lookup failed: ${queryErr?.message}`);
904
+ }
905
+ }
906
+ // ─── STEP 6/7-9: Route to correct handler ───────────────────────────
907
+ try {
908
+ if (medusaOrderId) {
909
+ // Sub-scenario B: link existing Medusa order
910
+ await handleExistingMedusaOrder(medusaOrderId, master, data, erpOrderIdStr, link, query, container);
911
+ }
912
+ else {
913
+ // Sub-scenario A: create new Medusa order from ERP data
914
+ await handleNewMedusaOrderFromErp(master, data, erpOrderIdStr, link, container);
915
+ }
916
+ }
917
+ catch (handlerError) {
918
+ framework_1.logger.warn(`[Webhook] Order handler error for ERP order ${erpOrderIdStr}: ${handlerError?.message}`);
919
+ }
920
+ processed.push(master);
921
+ }
922
+ return new workflows_sdk_1.StepResponse(processed);
923
+ });
924
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9vcmRlci1tYXN0ZXIvc3RlcHMvcHJvY2Vzcy1vcmRlci1tYXN0ZXItZnJvbS13ZWJob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUM3RSxxREFBK0U7QUFFL0UsZ0VBQW9FO0FBQ3BFLGdFQUFvRTtBQUNwRSx3RUFBNEU7QUFDNUUsZ0ZBQW9GO0FBQ3BGLG1EQUE2QztBQUU3Qzs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLFFBQWdCO0lBQy9DLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEksT0FBTyxnQ0FBZ0MsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUcsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lB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