@devx-commerce/plugin-gati 0.0.34-beta.8 → 0.0.34-beta.80

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