@devx-commerce/plugin-gati 0.0.34-beta.5 → 0.0.34-beta.51

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