@devx-commerce/plugin-gati 0.0.34-beta.4 → 0.0.34-beta.40

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