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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/.medusa/server/src/admin/index.js +3 -1
  2. package/.medusa/server/src/admin/index.mjs +3 -1
  3. package/.medusa/server/src/api/admin/erp-event/query-config.js +8 -1
  4. package/.medusa/server/src/api/admin/generate-invoice/route.js +158 -0
  5. package/.medusa/server/src/api/admin/masters/utils.js +29 -1
  6. package/.medusa/server/src/api/admin/masters/validators.js +2 -2
  7. package/.medusa/server/src/api/admin/variant-options/recalculate/route.js +446 -0
  8. package/.medusa/server/src/api/admin/variant-options/sync/route.js +21 -5
  9. package/.medusa/server/src/api/erp/webhook/config.js +73 -5
  10. package/.medusa/server/src/api/erp/webhook/route.js +10 -137
  11. package/.medusa/server/src/api/erp/webhook/utils.js +8 -1
  12. package/.medusa/server/src/api/pos/customer-ledger/middleware.js +13 -0
  13. package/.medusa/server/src/api/pos/customer-ledger/route.js +50 -0
  14. package/.medusa/server/src/api/pos/generate-invoice/route.js +164 -0
  15. package/.medusa/server/src/api/pos/gold/calculate/route.js +104 -0
  16. package/.medusa/server/src/api/pos/gold/item-master-purity.js +46 -0
  17. package/.medusa/server/src/api/pos/gold/middleware.js +18 -0
  18. package/.medusa/server/src/api/pos/gold/route.js +83 -0
  19. package/.medusa/server/src/api/pos/gold-rate/route.js +37 -24
  20. package/.medusa/server/src/api/pos/middleware.js +13 -1
  21. package/.medusa/server/src/api/pos/old-gold-item/middleware.js +10 -0
  22. package/.medusa/server/src/api/pos/old-gold-item/route.js +52 -0
  23. package/.medusa/server/src/api/pos/platinumdata/middleware.js +13 -0
  24. package/.medusa/server/src/api/pos/platinumdata/route.js +41 -0
  25. package/.medusa/server/src/api/pos/silverdata/middleware.js +13 -0
  26. package/.medusa/server/src/api/pos/silverdata/route.js +41 -0
  27. package/.medusa/server/src/api/pos/wallet-balance/middleware.js +13 -0
  28. package/.medusa/server/src/api/pos/wallet-balance/route.js +68 -0
  29. package/.medusa/server/src/api/store/custom-price/validators.js +2 -2
  30. package/.medusa/server/src/api/store/customer-ledger/middleware.js +13 -0
  31. package/.medusa/server/src/api/store/customer-ledger/route.js +49 -0
  32. package/.medusa/server/src/api/store/gold-rate/validators.js +2 -2
  33. package/.medusa/server/src/api/store/middleware.js +5 -1
  34. package/.medusa/server/src/api/store/wallet-balance/middleware.js +13 -0
  35. package/.medusa/server/src/api/store/wallet-balance/route.js +67 -0
  36. package/.medusa/server/src/jobs/process-erp-events.js +128 -0
  37. package/.medusa/server/src/jobs/process-variant-option-sync.js +46 -29
  38. package/.medusa/server/src/jobs/sync-addless-detail.js +68 -0
  39. package/.medusa/server/src/jobs/sync-book-list-and-applicable-policy.js +97 -0
  40. package/.medusa/server/src/jobs/sync-customer-advance-payment-erp.js +105 -0
  41. package/.medusa/server/src/jobs/sync-customer-erp.js +128 -0
  42. package/.medusa/server/src/jobs/sync-item-master.js +29 -0
  43. package/.medusa/server/src/jobs/sync-labour-chart-master.js +29 -0
  44. package/.medusa/server/src/jobs/sync-order-erp.js +46 -20
  45. package/.medusa/server/src/jobs/sync-order-request-erp.js +64 -0
  46. package/.medusa/server/src/jobs/sync-payment-book-master.js +71 -0
  47. package/.medusa/server/src/jobs/sync-rate-chart-master.js +29 -0
  48. package/.medusa/server/src/jobs/sync-report-master.js +54 -0
  49. package/.medusa/server/src/jobs/sync-sale-return-policy-master.js +38 -0
  50. package/.medusa/server/src/jobs/sync-urd-purchase-erp.js +84 -0
  51. package/.medusa/server/src/lib/api-response.js +2 -1
  52. package/.medusa/server/src/links/jewel-trans-master.js +13 -0
  53. package/.medusa/server/src/links/order-master.js +13 -0
  54. package/.medusa/server/src/links/sale-master.js +13 -0
  55. package/.medusa/server/src/modules/addless-detail/index.js +13 -0
  56. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260212101102.js +15 -0
  57. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260213000000.js +47 -0
  58. package/.medusa/server/src/modules/addless-detail/migrations/Migration20260226053037.js +15 -0
  59. package/.medusa/server/src/modules/addless-detail/models/addless-master.js +17 -0
  60. package/.medusa/server/src/modules/addless-detail/service.js +10 -0
  61. package/.medusa/server/src/modules/applicable-sale-return-policy/index.js +13 -0
  62. package/.medusa/server/src/modules/applicable-sale-return-policy/migrations/Migration20260123083526.js +15 -0
  63. package/.medusa/server/src/modules/applicable-sale-return-policy/models/applicable-sale-return-policy.js +23 -0
  64. package/.medusa/server/src/modules/applicable-sale-return-policy/service.js +10 -0
  65. package/.medusa/server/src/modules/book-list/index.js +13 -0
  66. package/.medusa/server/src/modules/book-list/migrations/Migration20260123083525.js +15 -0
  67. package/.medusa/server/src/modules/book-list/migrations/Migration20260401051011.js +14 -0
  68. package/.medusa/server/src/modules/book-list/models/book-list.js +13 -0
  69. package/.medusa/server/src/modules/book-list/service.js +10 -0
  70. package/.medusa/server/src/modules/category-group-master/migrations/Migration20250729035221.js +2 -2
  71. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +2 -2
  72. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +2 -2
  73. package/.medusa/server/src/modules/category-master/migrations/Migration20250513122212.js +2 -2
  74. package/.medusa/server/src/modules/category-master/migrations/Migration20250519180539.js +2 -2
  75. package/.medusa/server/src/modules/category-master/migrations/Migration20250531004724.js +2 -2
  76. package/.medusa/server/src/modules/category-master/migrations/Migration20250729040659.js +2 -2
  77. package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +2 -2
  78. package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +2 -2
  79. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20250531022203.js +2 -2
  80. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +2 -2
  81. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +2 -2
  82. package/.medusa/server/src/modules/collection-master/migrations/Migration20250513122211.js +2 -2
  83. package/.medusa/server/src/modules/collection-master/migrations/Migration20250531025048.js +2 -2
  84. package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +2 -2
  85. package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +2 -2
  86. package/.medusa/server/src/modules/customer-receive-voucher/index.js +13 -0
  87. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20250115000000.js +51 -0
  88. package/.medusa/server/src/modules/customer-receive-voucher/migrations/Migration20260106050934.js +18 -0
  89. package/.medusa/server/src/modules/customer-receive-voucher/models/customer-receive-voucher.js +35 -0
  90. package/.medusa/server/src/modules/customer-receive-voucher/service.js +10 -0
  91. package/.medusa/server/src/modules/discount-master/migrations/Migration20250707232514.js +2 -2
  92. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051709.js +2 -2
  93. package/.medusa/server/src/modules/discount-master/migrations/Migration20250708051737.js +2 -2
  94. package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +2 -2
  95. package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +2 -2
  96. package/.medusa/server/src/modules/erp/migrations/Migration20250513121436.js +2 -2
  97. package/.medusa/server/src/modules/erp/service.js +611 -8
  98. package/.medusa/server/src/modules/erp-event/migrations/Migration20250908040911.js +2 -2
  99. package/.medusa/server/src/modules/erp-event/migrations/Migration20250922095956.js +2 -2
  100. package/.medusa/server/src/modules/erp-event/migrations/Migration20260529052734.js +14 -0
  101. package/.medusa/server/src/modules/erp-event/models/erp-event.js +6 -1
  102. package/.medusa/server/src/modules/extended-product/migrations/Migration20250620030100.js +2 -2
  103. package/.medusa/server/src/modules/extended-product/migrations/Migration20250716041546.js +2 -2
  104. package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +2 -2
  105. package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +2 -2
  106. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +2 -2
  107. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +2 -2
  108. package/.medusa/server/src/modules/extended-product/migrations/Migration20260323103543.js +14 -0
  109. package/.medusa/server/src/modules/extended-product/models/extended-product.js +2 -1
  110. package/.medusa/server/src/modules/extended-product/service.js +37 -1
  111. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030335.js +2 -2
  112. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250620030522.js +2 -2
  113. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629220100.js +2 -2
  114. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250629223425.js +2 -2
  115. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250704064831.js +2 -2
  116. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250716121609.js +2 -2
  117. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250725104852.js +2 -2
  118. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250726232339.js +2 -2
  119. package/.medusa/server/src/modules/extended-variant/migrations/Migration20250916065103.js +2 -2
  120. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +2 -2
  121. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +2 -2
  122. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +2 -2
  123. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +2 -2
  124. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +2 -2
  125. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251210112341.js +18 -0
  126. package/.medusa/server/src/modules/extended-variant/migrations/Migration20260616000001.js +14 -0
  127. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +4 -2
  128. package/.medusa/server/src/modules/extended-variant/service.js +37 -1
  129. package/.medusa/server/src/modules/item-master/index.js +13 -0
  130. package/.medusa/server/src/modules/item-master/migrations/Migration20260212101055.js +15 -0
  131. package/.medusa/server/src/modules/item-master/models/item-master.js +20 -0
  132. package/.medusa/server/src/modules/item-master/service.js +10 -0
  133. package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +2 -2
  134. package/.medusa/server/src/modules/jewel-trans-master/index.js +13 -0
  135. package/.medusa/server/src/modules/jewel-trans-master/migrations/Migration20260226053036.js +57 -0
  136. package/.medusa/server/src/modules/jewel-trans-master/models/jewel-trans-master.js +151 -0
  137. package/.medusa/server/src/modules/jewel-trans-master/service.js +16 -0
  138. package/.medusa/server/src/modules/labour-chart-master/index.js +13 -0
  139. package/.medusa/server/src/modules/labour-chart-master/migrations/Migration20260101081502.js +15 -0
  140. package/.medusa/server/src/modules/labour-chart-master/models/labour-chart-master.js +16 -0
  141. package/.medusa/server/src/modules/labour-chart-master/service.js +10 -0
  142. package/.medusa/server/src/modules/material-purchase-master/index.js +13 -0
  143. package/.medusa/server/src/modules/material-purchase-master/migrations/Migration20260310090700.js +18 -0
  144. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-detail-line.js +24 -0
  145. package/.medusa/server/src/modules/material-purchase-master/models/material-purchase-master.js +21 -0
  146. package/.medusa/server/src/modules/material-purchase-master/service.js +12 -0
  147. package/.medusa/server/src/modules/order-master/index.js +13 -0
  148. package/.medusa/server/src/modules/order-master/migrations/Migration20260226053036.js +29 -0
  149. package/.medusa/server/src/modules/order-master/migrations/Migration20260303000001.js +30 -0
  150. package/.medusa/server/src/modules/order-master/migrations/Migration20260319094758.js +26 -0
  151. package/.medusa/server/src/modules/order-master/migrations/Migration20260320000001.js +19 -0
  152. package/.medusa/server/src/modules/order-master/models/order-master.js +112 -0
  153. package/.medusa/server/src/modules/order-master/service.js +13 -0
  154. package/.medusa/server/src/modules/order-proceed-master/index.js +13 -0
  155. package/.medusa/server/src/modules/order-proceed-master/migrations/Migration20260327100226.js +31 -0
  156. package/.medusa/server/src/modules/order-proceed-master/models/order-proceed-master.js +38 -0
  157. package/.medusa/server/src/modules/order-proceed-master/service.js +11 -0
  158. package/.medusa/server/src/modules/party-master/migrations/Migration20250604104235.js +2 -2
  159. package/.medusa/server/src/modules/party-master/migrations/Migration20250604115453.js +2 -2
  160. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120348.js +2 -2
  161. package/.medusa/server/src/modules/party-master/migrations/Migration20250604120701.js +2 -2
  162. package/.medusa/server/src/modules/party-master/migrations/Migration20250608220924.js +2 -2
  163. package/.medusa/server/src/modules/party-master/migrations/Migration20250612225738.js +2 -2
  164. package/.medusa/server/src/modules/party-master/migrations/Migration20250612231031.js +2 -2
  165. package/.medusa/server/src/modules/party-master/migrations/Migration20250708123734.js +2 -2
  166. package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +2 -2
  167. package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +2 -2
  168. package/.medusa/server/src/modules/payment-book-master/index.js +13 -0
  169. package/.medusa/server/src/modules/payment-book-master/migrations/Migration20251203105358.js +15 -0
  170. package/.medusa/server/src/modules/payment-book-master/models/payment-book-master.js +12 -0
  171. package/.medusa/server/src/modules/payment-book-master/service.js +10 -0
  172. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250819123821.js +2 -2
  173. package/.medusa/server/src/modules/promocode-master/migrations/Migration20250918095713.js +2 -2
  174. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +2 -2
  175. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +2 -2
  176. package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +2 -2
  177. package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +2 -2
  178. package/.medusa/server/src/modules/rate-chart-master/index.js +13 -0
  179. package/.medusa/server/src/modules/rate-chart-master/migrations/Migration20260101081500.js +15 -0
  180. package/.medusa/server/src/modules/rate-chart-master/models/rate-chart-master.js +13 -0
  181. package/.medusa/server/src/modules/rate-chart-master/service.js +10 -0
  182. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190057.js +2 -2
  183. package/.medusa/server/src/modules/raw-master/migrations/Migration20250509190322.js +2 -2
  184. package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +2 -2
  185. package/.medusa/server/src/modules/receive-voucher-master/index.js +13 -0
  186. package/.medusa/server/src/modules/receive-voucher-master/migrations/Migration20260328053649.js +16 -0
  187. package/.medusa/server/src/modules/receive-voucher-master/models/receive-voucher-master.js +27 -0
  188. package/.medusa/server/src/modules/receive-voucher-master/service.js +10 -0
  189. package/.medusa/server/src/modules/report-master/index.js +13 -0
  190. package/.medusa/server/src/modules/report-master/migrations/Migration20260121060955.js +15 -0
  191. package/.medusa/server/src/modules/report-master/migrations/Migration20260121112624.js +15 -0
  192. package/.medusa/server/src/modules/report-master/models/report-master.js +12 -0
  193. package/.medusa/server/src/modules/report-master/service.js +10 -0
  194. package/.medusa/server/src/modules/sale-master/index.js +13 -0
  195. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205092935.js +15 -0
  196. package/.medusa/server/src/modules/sale-master/migrations/Migration20260205100000.js +16 -0
  197. package/.medusa/server/src/modules/sale-master/models/sale-master.js +27 -0
  198. package/.medusa/server/src/modules/sale-master/service.js +10 -0
  199. package/.medusa/server/src/modules/sale-return-master/index.js +13 -0
  200. package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260205093034.js +15 -0
  201. package/.medusa/server/src/modules/sale-return-master/migrations/Migration20260327084135.js +14 -0
  202. package/.medusa/server/src/modules/sale-return-master/models/sale-return-master.js +18 -0
  203. package/.medusa/server/src/modules/sale-return-master/service.js +10 -0
  204. package/.medusa/server/src/modules/sale-return-policy-master/index.js +13 -0
  205. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260105061449.js +21 -0
  206. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129084920.js +14 -0
  207. package/.medusa/server/src/modules/sale-return-policy-master/migrations/Migration20260129085620.js +20 -0
  208. package/.medusa/server/src/modules/sale-return-policy-master/models/sale-return-policy-master.js +37 -0
  209. package/.medusa/server/src/modules/sale-return-policy-master/service.js +12 -0
  210. package/.medusa/server/src/modules/shape-master/migrations/Migration20250509174455.js +2 -2
  211. package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +2 -2
  212. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713113247.js +2 -2
  213. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20250713121440.js +2 -2
  214. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +2 -2
  215. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +2 -2
  216. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +2 -2
  217. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250513115356.js +2 -2
  218. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250519180538.js +2 -2
  219. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250531010409.js +2 -2
  220. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025135.js +2 -2
  221. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730025307.js +2 -2
  222. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20250730032130.js +2 -2
  223. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +2 -2
  224. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +2 -2
  225. package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +2 -2
  226. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +2 -2
  227. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +2 -2
  228. package/.medusa/server/src/subscribers/cutomer-updated.js +3 -1
  229. package/.medusa/server/src/subscribers/erp-batch-processor.js +147 -0
  230. package/.medusa/server/src/subscribers/order-item-update.js +11 -0
  231. package/.medusa/server/src/subscribers/party-master.js +39 -35
  232. package/.medusa/server/src/subscribers/product-sync.js +1 -1
  233. package/.medusa/server/src/subscribers/product-variant-deleted.js +27 -0
  234. package/.medusa/server/src/subscribers/shipping-info-master.js +10 -4
  235. package/.medusa/server/src/utils/build-redis-key.js +3 -1
  236. package/.medusa/server/src/utils/erp-health.js +24 -0
  237. package/.medusa/server/src/utils/state-helper.js +3 -2
  238. package/.medusa/server/src/workflows/addless-detail/index.js +11 -0
  239. package/.medusa/server/src/workflows/addless-detail/steps/create-or-update-addless-detail.js +36 -0
  240. package/.medusa/server/src/workflows/addless-detail/steps/fetch-addless-detail.js +73 -0
  241. package/.medusa/server/src/workflows/applicable-sale-return-policy/index.js +11 -0
  242. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/create-or-update-applicable-sale-return-policy.js +74 -0
  243. package/.medusa/server/src/workflows/applicable-sale-return-policy/steps/fetch-applicable-sale-return-policy.js +64 -0
  244. package/.medusa/server/src/workflows/book-list/index.js +11 -0
  245. package/.medusa/server/src/workflows/book-list/steps/create-or-update-book-list.js +59 -0
  246. package/.medusa/server/src/workflows/book-list/steps/fetch-book-list.js +64 -0
  247. package/.medusa/server/src/workflows/create-extended-product-from-product/index.js +9 -8
  248. package/.medusa/server/src/workflows/create-extended-variant-from-variant/index.js +9 -18
  249. package/.medusa/server/src/workflows/customer-advance-payment/index.js +18 -0
  250. package/.medusa/server/src/workflows/customer-advance-payment/steps/create-receive-voucher.js +71 -0
  251. package/.medusa/server/src/workflows/customer-advance-payment/steps/index.js +18 -0
  252. package/.medusa/server/src/workflows/customer-advance-payment/workflows/create-receive-voucher-workflow.js +11 -0
  253. package/.medusa/server/src/workflows/customer-advance-payment/workflows/index.js +18 -0
  254. package/.medusa/server/src/workflows/daily-rate/index.js +37 -0
  255. package/.medusa/server/src/workflows/daily-rate/perf.js +89 -0
  256. package/.medusa/server/src/workflows/daily-rate/steps/fetch-gold-rate-step.js +29 -0
  257. package/.medusa/server/src/workflows/daily-rate/steps/update-inward-metal-rates-step.js +154 -0
  258. package/.medusa/server/src/workflows/daily-rate/steps/update-party-style-metal-rates-step.js +224 -0
  259. package/.medusa/server/src/workflows/daily-rate/steps/update-style-master-metal-rates-step.js +180 -0
  260. package/.medusa/server/src/workflows/daily-rate/steps/update-unfix-order-items-on-gold-rate.js +308 -0
  261. package/.medusa/server/src/workflows/erp-batch-processing/index.js +19 -0
  262. package/.medusa/server/src/workflows/erp-batch-processing/steps/finalize-batch-processing.js +55 -0
  263. package/.medusa/server/src/workflows/erp-batch-processing/steps/index.js +20 -0
  264. package/.medusa/server/src/workflows/erp-batch-processing/steps/initialize-batch-processing.js +40 -0
  265. package/.medusa/server/src/workflows/erp-batch-processing/steps/start-batch-processing.js +22 -0
  266. package/.medusa/server/src/workflows/erp-batch-processing/workflows/erp-batch-processing.js +25 -0
  267. package/.medusa/server/src/workflows/erp-batch-processing/workflows/index.js +18 -0
  268. package/.medusa/server/src/workflows/erp-event/steps/update-erp-event.js +24 -7
  269. package/.medusa/server/src/workflows/erp-event/workflows/update-erp-event.js +1 -1
  270. package/.medusa/server/src/workflows/helpers/product-helper.js +212 -21
  271. package/.medusa/server/src/workflows/helpers/variant-helper.js +165 -162
  272. package/.medusa/server/src/workflows/hooks/product-updated.js +23 -15
  273. package/.medusa/server/src/workflows/hooks/variant-updated.js +24 -22
  274. package/.medusa/server/src/workflows/index.js +4 -1
  275. package/.medusa/server/src/workflows/inward-master/helper/index.js +28 -13
  276. package/.medusa/server/src/workflows/inward-master/steps/create-inward-exploration-lines.js +1 -2
  277. package/.medusa/server/src/workflows/inward-master/steps/create-inward-extra-charges-lines.js +1 -2
  278. package/.medusa/server/src/workflows/inward-master/steps/create-order-fulfillment-for-inward.js +196 -0
  279. package/.medusa/server/src/workflows/inward-master/steps/fetch-inward-master.js +17 -25
  280. package/.medusa/server/src/workflows/inward-master/steps/index.js +3 -1
  281. package/.medusa/server/src/workflows/inward-master/steps/notify-inward-skipped.js +38 -0
  282. package/.medusa/server/src/workflows/inward-master/steps/update-order-item-from-inward.js +259 -0
  283. package/.medusa/server/src/workflows/inward-master/workflows/create-inward.js +89 -75
  284. package/.medusa/server/src/workflows/inward-master/workflows/delete-inward.js +6 -9
  285. package/.medusa/server/src/workflows/inward-master/workflows/update-instock.js +2 -1
  286. package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +49 -7
  287. package/.medusa/server/src/workflows/item-master/index.js +11 -0
  288. package/.medusa/server/src/workflows/item-master/steps/create-or-update-item-master.js +50 -0
  289. package/.medusa/server/src/workflows/item-master/steps/fetch-item-master.js +29 -0
  290. package/.medusa/server/src/workflows/jewel-trans-master/index.js +18 -0
  291. package/.medusa/server/src/workflows/jewel-trans-master/steps/create-or-update-jewel-trans-master.js +370 -0
  292. package/.medusa/server/src/workflows/jewel-trans-master/steps/index.js +18 -0
  293. package/.medusa/server/src/workflows/labour-chart-master/index.js +11 -0
  294. package/.medusa/server/src/workflows/labour-chart-master/steps/create-or-update-labour-chart-master.js +38 -0
  295. package/.medusa/server/src/workflows/labour-chart-master/steps/fetch-labour-chart.js +31 -0
  296. package/.medusa/server/src/workflows/material-purchase-master/index.js +24 -0
  297. package/.medusa/server/src/workflows/material-purchase-master/steps/create-material-purchase-master.js +119 -0
  298. package/.medusa/server/src/workflows/material-purchase-master/steps/delete-material-purchase-master.js +102 -0
  299. package/.medusa/server/src/workflows/material-purchase-master/steps/fetch-material-purchase-master.js +60 -0
  300. package/.medusa/server/src/workflows/material-purchase-master/steps/update-material-purchase-master.js +149 -0
  301. package/.medusa/server/src/workflows/order-master/index.js +3 -0
  302. package/.medusa/server/src/workflows/order-master/order-master-webhook.js +24 -0
  303. package/.medusa/server/src/workflows/order-master/steps/create-or-update-order-master.js +275 -0
  304. package/.medusa/server/src/workflows/order-master/steps/delete-order-master-by-erp-ids.js +61 -0
  305. package/.medusa/server/src/workflows/order-master/steps/process-order-master-from-webhook.js +1038 -0
  306. package/.medusa/server/src/workflows/order-proceed-master/index.js +6 -0
  307. package/.medusa/server/src/workflows/order-proceed-master/order-proceed-master-webhook.js +26 -0
  308. package/.medusa/server/src/workflows/order-proceed-master/steps/create-or-update-order-proceed-master.js +186 -0
  309. package/.medusa/server/src/workflows/order-proceed-master/steps/delete-order-proceed-master-by-erp-ids.js +28 -0
  310. package/.medusa/server/src/workflows/orders/steps/create-sale-for-order-step.js +218 -0
  311. package/.medusa/server/src/workflows/orders/steps/find-nearest-pincodes-step.js +336 -0
  312. package/.medusa/server/src/workflows/orders/steps/get-today-gold-rate-step.js +83 -0
  313. package/.medusa/server/src/workflows/orders/steps/index.js +16 -1
  314. package/.medusa/server/src/workflows/orders/steps/revert-to-wallet-step.js +165 -0
  315. package/.medusa/server/src/workflows/orders/steps/sync-advance-payment-to-erp-step.js +191 -0
  316. package/.medusa/server/src/workflows/orders/steps/sync-buyback-to-erp-step.js +99 -0
  317. package/.medusa/server/src/workflows/orders/steps/sync-cancel-to-erp-step.js +120 -0
  318. package/.medusa/server/src/workflows/orders/steps/sync-exchange-to-erp-step.js +101 -0
  319. package/.medusa/server/src/workflows/orders/steps/sync-old-gold-to-erp-step.js +161 -0
  320. package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +756 -20
  321. package/.medusa/server/src/workflows/orders/steps/sync-sale-return-to-erp-step.js +277 -0
  322. package/.medusa/server/src/workflows/orders/steps/update-old-gold-sync-status-step.js +64 -0
  323. package/.medusa/server/src/workflows/orders/utils/apply-order-item-price-change.js +79 -0
  324. package/.medusa/server/src/workflows/orders/utils/order-helper.js +182 -37
  325. package/.medusa/server/src/workflows/orders/utils/order-request-helper.js +235 -0
  326. package/.medusa/server/src/workflows/orders/workflows/create-sale-for-order.js +10 -0
  327. package/.medusa/server/src/workflows/orders/workflows/get-today-gold-rate.js +10 -0
  328. package/.medusa/server/src/workflows/orders/workflows/index.js +4 -1
  329. package/.medusa/server/src/workflows/orders/workflows/sync-advanve-payment-to-erp.js +21 -0
  330. package/.medusa/server/src/workflows/orders/workflows/sync-old-gold-to-erp.js +24 -0
  331. package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +54 -5
  332. package/.medusa/server/src/workflows/orders/workflows/sync-sale-return-to-erp.js +11 -0
  333. package/.medusa/server/src/workflows/party-master/steps/create-customer-erp.js +66 -33
  334. package/.medusa/server/src/workflows/party-master/steps/create-user-erp.js +115 -0
  335. package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
  336. package/.medusa/server/src/workflows/party-master/steps/index.js +2 -1
  337. package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +2 -2
  338. package/.medusa/server/src/workflows/party-master/workflows/create-user-erp.js +11 -0
  339. package/.medusa/server/src/workflows/party-master/workflows/index.js +2 -1
  340. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +16 -249
  341. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +103 -22
  342. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +49 -18
  343. package/.medusa/server/src/workflows/party-style-master/workflows/delete-party-style-master.js +4 -15
  344. package/.medusa/server/src/workflows/payment-book-master/index.js +11 -0
  345. package/.medusa/server/src/workflows/payment-book-master/steps/create-or-update-payment-book-master.js +37 -0
  346. package/.medusa/server/src/workflows/payment-book-master/steps/fetch-payment-book.js +64 -0
  347. package/.medusa/server/src/workflows/rate-chart-master/index.js +11 -0
  348. package/.medusa/server/src/workflows/rate-chart-master/steps/create-or-update-rate-chart-master.js +25 -0
  349. package/.medusa/server/src/workflows/rate-chart-master/steps/fetch-rate-chart.js +31 -0
  350. package/.medusa/server/src/workflows/receive-voucher-master/index.js +24 -0
  351. package/.medusa/server/src/workflows/receive-voucher-master/steps/create-receive-voucher-master.js +125 -0
  352. package/.medusa/server/src/workflows/receive-voucher-master/steps/delete-receive-voucher-master.js +45 -0
  353. package/.medusa/server/src/workflows/receive-voucher-master/steps/fetch-receive-voucher-master.js +22 -0
  354. package/.medusa/server/src/workflows/receive-voucher-master/steps/update-receive-voucher-master.js +44 -0
  355. package/.medusa/server/src/workflows/report-master/index.js +11 -0
  356. package/.medusa/server/src/workflows/report-master/steps/create-or-update-report-master.js +53 -0
  357. package/.medusa/server/src/workflows/report-master/steps/fetch-report.js +71 -0
  358. package/.medusa/server/src/workflows/sale-master/index.js +35 -0
  359. package/.medusa/server/src/workflows/sale-master/steps/create-sale-master.js +72 -0
  360. package/.medusa/server/src/workflows/sale-master/steps/delete-sale-master.js +59 -0
  361. package/.medusa/server/src/workflows/sale-master/steps/sync-extended-order-from-sale.js +40 -0
  362. package/.medusa/server/src/workflows/sale-master/steps/update-sale-master.js +95 -0
  363. package/.medusa/server/src/workflows/sale-return-master/index.js +6 -0
  364. package/.medusa/server/src/workflows/sale-return-master/sale-return-master-webhook.js +28 -0
  365. package/.medusa/server/src/workflows/sale-return-master/steps/create-or-update-sale-return-master.js +109 -0
  366. package/.medusa/server/src/workflows/sale-return-master/steps/create-sale-return-master.js +45 -0
  367. package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master-by-erp-ids.js +36 -0
  368. package/.medusa/server/src/workflows/sale-return-master/steps/delete-sale-return-master.js +36 -0
  369. package/.medusa/server/src/workflows/sale-return-master/steps/process-sale-return-from-webhook.js +234 -0
  370. package/.medusa/server/src/workflows/sale-return-master/steps/update-sale-return-master.js +53 -0
  371. package/.medusa/server/src/workflows/sale-return-policy-master/index.js +11 -0
  372. package/.medusa/server/src/workflows/sale-return-policy-master/steps/create-or-update-sale-return-policy-master.js +91 -0
  373. package/.medusa/server/src/workflows/sale-return-policy-master/steps/fetch-sale-return-policy.js +31 -0
  374. package/.medusa/server/src/workflows/shipping-info-master/workflows/create-or-update-shipping-info.js +59 -0
  375. package/.medusa/server/src/workflows/shipping-info-master/workflows/index.js +2 -1
  376. package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master.js +116 -10
  377. package/.medusa/server/src/workflows/style-master/workflows/delete-style-master.js +9 -1
  378. package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +6 -16
  379. package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +5 -17
  380. package/package.json +18 -33
@@ -0,0 +1,164 @@
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 GET = async (req, res) => {
8
+ const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
+ try {
10
+ logger.info("[POS-GENERATE-INVOICE] : Generating invoice file");
11
+ const { FileFor, FileType, order_id, old_gold_id } = req.query;
12
+ if (!FileFor || !FileType) {
13
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Missing required parameters: FileFor, FileType", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
14
+ }
15
+ const normalizedFileFor = FileFor.toLowerCase();
16
+ if (!["sale", "order", "materialpurchase"].includes(normalizedFileFor)) {
17
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("FileFor must be 'Sale', 'Order', or 'materialpurchase'", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
18
+ }
19
+ const normalizedFileType = FileType.toLowerCase();
20
+ if (!["pdf", "xls", "xlsx"].includes(normalizedFileType)) {
21
+ 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));
22
+ }
23
+ if (normalizedFileFor === "materialpurchase" && !old_gold_id) {
24
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Missing required parameter: old_gold_id (required when FileFor=materialpurchase)", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
25
+ }
26
+ if (normalizedFileFor !== "materialpurchase" && !order_id) {
27
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Missing required parameter: order_id", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
28
+ }
29
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
30
+ const erpService = req.scope.resolve(erp_1.ERP_MODULE);
31
+ let transactionId = null;
32
+ let branchNo = "";
33
+ if (normalizedFileFor === "materialpurchase") {
34
+ // Get transactionId and branchNo from old_gold entry
35
+ const oldGoldService = req.scope.resolve("old_gold");
36
+ const entries = await oldGoldService.listOldGoldEntries({ id: old_gold_id });
37
+ const entry = entries?.[0];
38
+ if (!entry) {
39
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Old gold entry not found", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
40
+ }
41
+ if (!entry.external_id) {
42
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Old gold entry not yet synced to ERP. Please ensure it has been synced and try again.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
43
+ }
44
+ transactionId = String(entry.external_id);
45
+ branchNo = entry.branch_id || "";
46
+ logger.info(`[POS-GENERATE-INVOICE] : URD Purchase - transactionId: ${transactionId}, branchNo: ${branchNo}`);
47
+ }
48
+ else {
49
+ // Fetch extended_order for sale/order transactionId
50
+ const { data: extOrderData } = await query.graph({
51
+ entity: "extended_order",
52
+ fields: ["id", "external_id", "sale_external_id"],
53
+ filters: { order_id: order_id },
54
+ });
55
+ const extOrder = extOrderData?.[0];
56
+ if (!extOrder) {
57
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Extended order not found. Please ensure the order has been synced to ERP.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
58
+ }
59
+ if (normalizedFileFor === "sale") {
60
+ if (!extOrder.sale_external_id) {
61
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Sale not yet synced to ERP (sale_external_id missing). Please ensure the order has been synced and try again.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
62
+ }
63
+ transactionId = String(extOrder.sale_external_id);
64
+ }
65
+ else {
66
+ if (!extOrder.external_id) {
67
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Order not yet synced to ERP (external_id missing). Please ensure the order has been synced and try again.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
68
+ }
69
+ transactionId = String(extOrder.external_id);
70
+ }
71
+ logger.info(`[POS-GENERATE-INVOICE] : ${FileFor} transactionId: ${transactionId}`);
72
+ // Get branchNo from order's linked master records
73
+ try {
74
+ // Try order_master (linked to order) for branch_no
75
+ const { data: orderWithMaster } = await query.graph({
76
+ entity: "order",
77
+ fields: ["order_master.branch_no", "sale_master.branch_no", "customer.*", "customer.extended_customer.*"],
78
+ filters: { id: order_id },
79
+ });
80
+ const orderRow = orderWithMaster?.[0];
81
+ branchNo = orderRow?.order_master?.branch_no
82
+ || orderRow?.sale_master?.branch_no
83
+ || "";
84
+ if (!branchNo) {
85
+ // Fallback: get from customer's party_master
86
+ const extId = orderRow?.customer?.extended_customer?.external_id;
87
+ if (extId) {
88
+ const { data: partyData } = await query.graph({
89
+ entity: "party_master",
90
+ fields: ["branch_no"],
91
+ filters: { party_no: extId },
92
+ });
93
+ if (partyData?.[0]?.branch_no) {
94
+ branchNo = partyData[0].branch_no;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ catch (err) {
100
+ logger.warn(`[POS-GENERATE-INVOICE] : Error fetching branch number - ${err}`);
101
+ }
102
+ }
103
+ if (!branchNo) {
104
+ logger.error(`[POS-GENERATE-INVOICE] : Branch number not found`);
105
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Branch number not found. Please ensure the record has been synced to ERP.", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
106
+ }
107
+ // Get ReportId from report_master
108
+ let reportId = null;
109
+ let reportName = null;
110
+ try {
111
+ const { data: reportMasterData } = await query.graph({
112
+ entity: "report_master",
113
+ fields: ["report_id", "report_name"],
114
+ filters: {
115
+ branch_no: branchNo,
116
+ report_list_for: normalizedFileFor,
117
+ },
118
+ pagination: { skip: 0, take: 100 },
119
+ });
120
+ logger.info(`[POS-GENERATE-INVOICE] : Found ${reportMasterData?.length || 0} reports for branch ${branchNo}, FileFor ${normalizedFileFor}`);
121
+ if (reportMasterData && reportMasterData.length > 0) {
122
+ let selected = reportMasterData.find((r) => r.report_name?.toLowerCase().includes("letterhead")) || reportMasterData.find((r) => r.report_name?.toLowerCase().includes("invoice")) || reportMasterData[0];
123
+ reportId = String(selected.report_id);
124
+ reportName = selected.report_name || "";
125
+ logger.info(`[POS-GENERATE-INVOICE] : Selected report: ${reportId} (${reportName})`);
126
+ }
127
+ }
128
+ catch (err) {
129
+ logger.warn(`[POS-GENERATE-INVOICE] : Error fetching report_master - ${err}`);
130
+ }
131
+ if (!reportId) {
132
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`ReportId not found for ${normalizedFileFor} in branch ${branchNo}. Please ensure reports are synced.`, api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND_ERROR));
133
+ }
134
+ const generateFilePayload = {
135
+ FileFor: FileFor,
136
+ FileType: FileType,
137
+ ReportId: reportId,
138
+ TransactionId: transactionId,
139
+ LetterHead: reportName || undefined,
140
+ };
141
+ logger.info(`[POS-GENERATE-INVOICE] : Calling GenerateFile API: ${JSON.stringify(generateFilePayload)}`);
142
+ const result = await erpService.generateFile(generateFilePayload);
143
+ logger.info(`[POS-GENERATE-INVOICE] : GenerateFile response: ${JSON.stringify(result)}`);
144
+ if (!result.status) {
145
+ 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));
146
+ }
147
+ const responseData = { ...result.data };
148
+ if (normalizedFileType === "pdf" && responseData.FileLink) {
149
+ const sep = responseData.FileLink.includes("?") ? "&" : "#";
150
+ responseData.FileLink = `${responseData.FileLink}${sep}toolbar=0&navpanes=0`;
151
+ res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
152
+ res.setHeader("Content-Security-Policy", "print-src 'none'");
153
+ responseData.sandboxAttributes = "allow-same-origin";
154
+ }
155
+ logger.info(`[POS-GENERATE-INVOICE] : Success - FileLink: ${responseData.FileLink}`);
156
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(responseData, result.message || "Invoice generated successfully"));
157
+ }
158
+ catch (error) {
159
+ logger.error(`[POS-GENERATE-INVOICE] : Error - ${error}`);
160
+ 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));
161
+ }
162
+ };
163
+ exports.GET = GET;
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nZW5lcmF0ZS1pbnZvaWNlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUN0RSw0REFNbUM7QUFFbkMsOENBQWtEO0FBRTNDLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUVoRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBS3hELENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLGtDQUFtQixFQUNqQixnREFBZ0QsRUFDaEQseUJBQVUsQ0FBQyxXQUFXLEVBQ3RCLHdCQUFTLENBQUMsZ0JBQWdCLENBQzNCLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUN2RSxPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQ2pCLHdEQUF3RCxFQUN4RCx5QkFBVSxDQUFDLFdBQVcsRUFDdEIsd0JBQVMsQ0FBQyxnQkFBZ0IsQ0FDM0IsQ0FDRixDQUFD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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", "og999": "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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nb2xkL2NhbGN1bGF0ZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxREFBK0U7QUFDL0UsdUVBQWtFO0FBQ2xFLCtEQU1zQztBQUN0Qyw4REFBZ0U7QUFhaEUsTUFBTSxlQUFlLEdBQTJCO0lBQzlDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7SUFDckIsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUN6QixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ3pCLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7SUFDekIsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUN6QixLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO0lBQ3pCLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7SUFDN0IsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztJQUM3QixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO0lBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxPQUFPLEVBQUUsS0FBSztDQUM3QyxDQUFDO0FBRUYsMkdBQTJHO0FBQzNHLFNBQVMsY0FBYyxDQUFDLFFBQWdCO0lBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksTUFBTTtRQUFF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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=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const framework_1 = require("@medusajs/framework");
4
+ exports.default = (0, framework_1.defineMiddlewares)({
5
+ routes: [
6
+ {
7
+ matcher: "/pos/gold",
8
+ method: "GET",
9
+ middlewares: [],
10
+ },
11
+ {
12
+ matcher: "/pos/gold/calculate",
13
+ method: "POST",
14
+ middlewares: [],
15
+ },
16
+ ],
17
+ });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvcG9zL2dvbGQvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1EQUF3RDtBQUV4RCxrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsT0FBTyxFQUFFLFdBQVc7WUFDcEIsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsRUFBRTtTQUNoQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLHFCQUFxQjtZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxFQUFFO1NBQ2hCO0tBQ0Y7Q0FDRixDQUFDLENBQUMifQ==
@@ -0,0 +1,83 @@
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 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
+ "og999": "24K", "og999k": "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 (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
+ const GET = async (req, res) => {
43
+ const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
44
+ try {
45
+ const karatRaw = (req.query?.karat || "").trim().toLowerCase();
46
+ if (!karatRaw) {
47
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Query parameter karat is required (e.g. 9k, 14k, 18k, 24k or og14, OG18K)", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
48
+ }
49
+ const normalizedKarat = normalizeKarat(karatRaw);
50
+ const cacheService = req.scope.resolve(utils_1.Modules.CACHE);
51
+ const cacheKey = (0, build_redis_key_1.buildRedisKey)("pos:gold-rate", {});
52
+ const cached = await cacheService.get(cacheKey);
53
+ if (!cached?.oldGoldRateList?.length) {
54
+ logger.warn("[POS-GOLD] : No cached gold rate; call GET /pos/gold-rate first");
55
+ 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));
56
+ }
57
+ const item = cached.oldGoldRateList.find((x) => x.rate.toUpperCase() === normalizedKarat.toUpperCase());
58
+ if (!item) {
59
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`Karat "${karatRaw}" not found. Supported: 9K, 14K, 18K, 22K, 24K (or og14, og18, etc.)`, api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
60
+ }
61
+ let purity = item.purity ?? "";
62
+ let ratePerGms = item.amount;
63
+ const itemMasterPurity = await (0, item_master_purity_1.getPurityFromItemMaster)(req.scope, normalizedKarat);
64
+ if (itemMasterPurity != null) {
65
+ purity = `${itemMasterPurity}%`;
66
+ const cachePurityNum = parseFloat(String(item.purity ?? "100").replace(/%/g, "")) || 100;
67
+ if (cachePurityNum > 0) {
68
+ ratePerGms = (item.amount * itemMasterPurity) / cachePurityNum;
69
+ }
70
+ }
71
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
72
+ purity,
73
+ rate_per_gms: ratePerGms,
74
+ }, "OK"));
75
+ }
76
+ catch (error) {
77
+ const msg = error instanceof Error ? error.message : "Unknown error";
78
+ logger.error(`[POS-GOLD] : ${msg}`);
79
+ 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));
80
+ }
81
+ };
82
+ exports.GET = GET;
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nb2xkL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLHFEQUErRTtBQUMvRSxvRUFBK0Q7QUFDL0QsNERBTW1DO0FBQ25DLDZEQUErRDtBQWEvRCxNQUFNLGVBQWUsR0FBMkI7SUFDOUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtJQUNyQixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ3pCLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUs7SUFDekIsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSztJQUN6QixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO0lBQ3pCLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUk7SUFDekIsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSztJQUM3QixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLO0lBQzdCLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUs7SUFDN0IsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSztDQUNoQyxDQUFDO0FBRUYsMkdBQTJHO0FBQzNHLFNBQVMsY0FBYyxDQUFDLFFBQWdCO0lBQ3RDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDbEIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFCLE1BQU0sU0FBUyxH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
@@ -6,59 +6,66 @@ const build_redis_key_1 = require("../../../utils/build-redis-key");
6
6
  const api_response_1 = require("../../../lib/api-response");
7
7
  const erp_1 = require("../../../modules/erp");
8
8
  const GET = async (req, res) => {
9
+ const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
9
10
  try {
10
- const grams = 1;
11
+ logger.info("[POS-GOLD-RATE] : Fetching gold rate data");
11
12
  const cacheService = req.scope.resolve(utils_1.Modules.CACHE);
12
13
  const erpService = req.scope.resolve(erp_1.ERP_MODULE);
13
- const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
14
14
  const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
15
- const cacheKey = (0, build_redis_key_1.buildRedisKey)("gold-rate-pos", { grams });
15
+ const cacheKey = (0, build_redis_key_1.buildRedisKey)("pos:gold-rate", {});
16
16
  const cachedResult = await cacheService.get(cacheKey);
17
17
  if (cachedResult) {
18
- logger.info(`[HISTORICAL-GOLD-RATE] : Returning cached result for grams: ${grams}`);
19
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(cachedResult, "Historical gold rate fetched successfully"));
18
+ logger.info("[POS-GOLD-RATE] : Returning cached result");
19
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(cachedResult, "Gold rate fetched successfully"));
20
20
  }
21
- const [quality14Result, quality18Result, quality22Result] = await Promise.all([
21
+ logger.info("[POS-GOLD-RATE] : Cache miss, fetching from ERP and quality master");
22
+ const [quality9Result, quality14Result, quality18Result, quality22Result] = await Promise.all([
22
23
  query.graph({
23
24
  entity: "quality_master",
24
25
  fields: ["id", "qly_code", "qly_mfg_clarity"],
25
- filters: {
26
- qly_code: "14",
27
- },
26
+ filters: { qly_code: "9" },
28
27
  }),
29
28
  query.graph({
30
29
  entity: "quality_master",
31
30
  fields: ["id", "qly_code", "qly_mfg_clarity"],
32
- filters: {
33
- qly_code: "18",
34
- },
31
+ filters: { qly_code: "14" },
35
32
  }),
36
33
  query.graph({
37
34
  entity: "quality_master",
38
35
  fields: ["id", "qly_code", "qly_mfg_clarity"],
39
- filters: {
40
- qly_code: "22",
41
- },
36
+ filters: { qly_code: "18" },
37
+ }),
38
+ query.graph({
39
+ entity: "quality_master",
40
+ fields: ["id", "qly_code", "qly_mfg_clarity"],
41
+ filters: { qly_code: "22" },
42
42
  }),
43
43
  ]);
44
+ const { data: qualityMasters9 } = quality9Result;
44
45
  const { data: qualityMasters14 } = quality14Result;
45
46
  const { data: qualityMasters18 } = quality18Result;
46
47
  const { data: qualityMasters22 } = quality22Result;
48
+ const qly9 = qualityMasters9?.[0];
47
49
  const qly14 = qualityMasters14?.[0];
48
50
  const qly18 = qualityMasters18?.[0];
49
51
  const qly22 = qualityMasters22?.[0];
52
+ // 9K: use quality_master if present, else 37.5% (9/24)
53
+ const qly9Clarity = qly9?.qly_mfg_clarity ?? 37.5;
50
54
  if (!qly22?.qly_mfg_clarity ||
51
55
  !qly18?.qly_mfg_clarity ||
52
56
  !qly14?.qly_mfg_clarity) {
57
+ logger.error("[POS-GOLD-RATE] : Quality masters for 14/18/22 karat not found or missing qly_mfg_clarity");
53
58
  return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Quality masters for 14/18/22 karat not found or missing qly_mfg_clarity", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
54
59
  }
55
60
  const goldRateData = (await erpService.getGoldRateData());
56
61
  if (!goldRateData?.CurrentGoldRate ||
57
62
  goldRateData.CurrentGoldRate.length === 0) {
58
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("No historical gold rate data available from ERP", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
63
+ logger.error("[POS-GOLD-RATE] : No gold rate data available from ERP");
64
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("No gold rate data available from ERP", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
59
65
  }
60
- const purity = ["14", "18", "22", "24"];
66
+ const purityKarats = ["9", "14", "18", "22", "24"];
61
67
  const qlyMap = {
68
+ "9": { qly_mfg_clarity: qly9Clarity },
62
69
  "14": qly14,
63
70
  "18": qly18,
64
71
  "22": qly22,
@@ -66,18 +73,21 @@ const GET = async (req, res) => {
66
73
  };
67
74
  const currentGoldData = goldRateData.CurrentGoldRate?.find((item) => item.RawName === "GOLD");
68
75
  const oldGoldData = goldRateData.CurrentGoldRate?.find((item) => item.RawName === "Old Gold");
69
- const goldRateList = purity.map((karat) => {
76
+ const goldRateList = purityKarats.map((karat) => {
70
77
  const qly = qlyMap[karat];
78
+ const clarity = qly?.qly_mfg_clarity ?? 0;
71
79
  return {
72
80
  rate: `${karat}K`,
73
- amount: ((currentGoldData?.SaleRate || 0) * qly.qly_mfg_clarity) / 100,
81
+ amount: ((currentGoldData?.SaleRate || 0) * clarity) / 100,
74
82
  };
75
83
  }).filter(Boolean);
76
- const oldGoldRateList = purity.map((karat) => {
84
+ const oldGoldRateList = purityKarats.map((karat) => {
77
85
  const qly = qlyMap[karat];
86
+ const clarity = qly?.qly_mfg_clarity ?? 0;
78
87
  return {
79
88
  rate: `${karat}K`,
80
- amount: ((oldGoldData?.SaleRate || 0) * qly.qly_mfg_clarity) / 100,
89
+ amount: ((oldGoldData?.SaleRate || 0) * clarity) / 100,
90
+ purity: `${clarity}%`,
81
91
  };
82
92
  }).filter(Boolean);
83
93
  const result = {
@@ -85,12 +95,15 @@ const GET = async (req, res) => {
85
95
  oldGoldRateList: oldGoldRateList,
86
96
  };
87
97
  await cacheService.set(cacheKey, result, build_redis_key_1.CACHE_VALIDATION_TIMES.GOLD_RATE);
88
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result, "Historical gold rate fetched successfully"));
98
+ logger.info(`[POS-GOLD-RATE] : Successfully computed and cached gold rates - Current: ${goldRateList.length} rates, Old: ${oldGoldRateList.length} rates`);
99
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result, "Gold rate fetched successfully"));
89
100
  }
90
101
  catch (error) {
91
- console.error("Error fetching historical gold rate:", error);
102
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
103
+ const errorStack = error instanceof Error ? error.stack : undefined;
104
+ logger.error(`[POS-GOLD-RATE] : Error fetching gold rate - ${errorMessage}${errorStack ? `\nStack: ${errorStack}` : ""}`);
92
105
  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));
93
106
  }
94
107
  };
95
108
  exports.GET = GET;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nb2xkLXJhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStFO0FBQy9FLG9FQUd3QztBQUN4Qyw0REFNbUM7QUFFbkMsOENBQWdEO0FBMEJ6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDZixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQVUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQWEsRUFBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTNELE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FDekMsUUFBUSxDQUNULENBQUM7UUFFRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsK0RBQStELEtBQUssRUFBRSxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQixZQUFZLEVBQ1osMkNBQTJDLENBQzVDLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLENBQUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxlQUFlLENBQUMsR0FDdkQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztnQkFDN0MsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2FBQ0YsQ0FBQztZQUNGLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztnQkFDN0MsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2FBQ0YsQ0FBQztZQUNGLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQztnQkFDN0MsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2FBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVMLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxlQUFlLENBQUM7UUFDbkQsTUFBTSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLGVBQWUsQ0FBQztRQUNuRCxNQUFNLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsZUFBZSxDQUFDO1FBRW5ELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBDLElBQ0UsQ0FBQyxLQUFLLEVBQUUsZUFBZTtZQUN2QixDQUFDLEtBQUssRUFBRSxlQUFlO1lBQ3ZCLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFDdkIsQ0FBQztZQUNELE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxrQ0FBbUIsRUFDakIseUVBQXlFLEVBQ3pFLHlCQUFVLENBQUMsU0FBUyxFQUNwQix3QkFBUyxDQUFDLFNBQVMsQ0FDcEIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQWlCLENBQUM7UUFFMUUsSUFDRSxDQUFDLFlBQVksRUFBRSxlQUFlO1lBQzlCLFlBQVksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDekMsQ0FBQztZQUNELE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxrQ0FBbUIsRUFDakIsaURBQWlELEVBQ2pELHlCQUFVLENBQUMscUJBQXFCLEVBQ2hDLHdCQUFTLENBQUMsY0FBYyxDQUN6QixDQUNGLENBQUM7UUFDSixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQTtRQUNuQyxNQUFNLE1BQU0sR0FBd0I7WUFDbEMsSUFBSSxFQUFFLEtBQUs7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLElBQUksRUFBRSxLQUFLO1lBQ1gsSUFBSSxFQUFFLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxFQUFFLDRCQUE0QjtTQUM3RCxDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUM7UUFDNUYsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFBLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDNUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixPQUFPO2dCQUNMLElBQUksRUFBRSxHQUFHLEtBQUssR0FBRztnQkFDakIsTUFBTSxFQUFFLENBQUMsQ0FBQyxlQUFlLEVBQUUsUUFBUSxJQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHO2FBQ3RFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFlLENBQUM7UUFFakMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixPQUFPO2dCQUNMLElBQUksRUFBRSxHQUFHLEtBQUssR0FBRztnQkFDakIsTUFBTSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBRSxHQUFFLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHO2FBQ25FLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFlLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQW9CO1lBQzdCLG1CQUFtQixFQUFFLFlBQVk7WUFDakMsZUFBZSxFQUFFLGVBQWU7U0FDbEMsQ0FBQTtRQUNBLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLHdDQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxvQ0FBcUIsRUFBQyxNQUFNLEVBQUUsMkNBQTJDLENBQUMsQ0FDM0UsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsa0NBQW1CLEVBQ2pCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixFQUNoRSx5QkFBVSxDQUFDLHFCQUFxQixFQUNoQyx3QkFBUyxDQUFDLGNBQWMsQ0FDekIsQ0FDRixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQXhJVyxRQUFBLEdBQUcsT0F3SWQifQ==
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nb2xkLXJhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStFO0FBQy9FLG9FQUd3QztBQUN4Qyw0REFNbUM7QUFFbkMsOENBQWdEO0FBMkJ6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRSxJQUFJLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFFekQsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sVUFBVSxHQUFlLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFVLENBQUMsQ0FBQztRQUM3RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFBLCtCQUFhLEVBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FDekMsUUFBUSxDQUNULENBQUM7UUFFRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUN6RCxPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsb0NBQXFCLEVBQ25CLFlBQVksRUFDWixnQ0FBZ0MsQ0FDakMsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUVE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