@devx-commerce/plugin-gati 0.0.34-beta.3 → 0.0.34-beta.31

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