@pisell/pisellos 0.0.568 → 0.10.1

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 (588) hide show
  1. package/dist/core/index.js +10 -6
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.js +0 -3
  4. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  5. package/dist/model/strategy/adapter/walletPass/evaluator.js +7 -5
  6. package/dist/model/strategy/adapter/walletPass/example.js +26 -3
  7. package/dist/model/strategy/adapter/walletPass/index.js +5 -5
  8. package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -3
  9. package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -26
  10. package/dist/model/strategy/adapter/walletPass/utils.js +24 -96
  11. package/dist/model/strategy/strategy-example.js +19 -5
  12. package/dist/modules/BaseModule.d.ts +2 -2
  13. package/dist/modules/BaseModule.js +12 -14
  14. package/dist/modules/BookingContext/index.d.ts +48 -0
  15. package/dist/modules/BookingContext/index.js +566 -0
  16. package/dist/modules/BookingContext/types.d.ts +102 -0
  17. package/dist/modules/BookingContext/types.js +51 -0
  18. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  19. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +302 -0
  20. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  21. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +149 -0
  22. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  23. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +249 -0
  24. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  25. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  26. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  27. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  28. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  29. package/dist/modules/BookingContext/utils/index.js +11 -0
  30. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  31. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  32. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  33. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  34. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  35. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  36. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  37. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  38. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  39. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  40. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  41. package/dist/modules/BookingContext/utils/resources.js +486 -0
  42. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  43. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  44. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  45. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  46. package/dist/modules/Cart/index.js +3 -0
  47. package/dist/modules/Cart/utils/cartProduct.js +27 -5
  48. package/dist/modules/Cart/utils/cartResource.js +0 -2
  49. package/dist/modules/Cart/utils/changePrice.js +11 -11
  50. package/dist/modules/Customer/index.d.ts +20 -0
  51. package/dist/modules/Customer/index.js +172 -83
  52. package/dist/modules/Customer/types.d.ts +2 -0
  53. package/dist/modules/Date/index.js +5 -1
  54. package/dist/modules/Discount/index.d.ts +2 -2
  55. package/dist/modules/Discount/index.js +43 -30
  56. package/dist/modules/Discount/types.d.ts +1 -1
  57. package/dist/modules/OpenData/index.d.ts +8 -0
  58. package/dist/modules/OpenData/index.js +38 -16
  59. package/dist/modules/Order/index.d.ts +449 -24
  60. package/dist/modules/Order/index.js +5460 -574
  61. package/dist/modules/Order/types.d.ts +693 -88
  62. package/dist/modules/Order/types.js +68 -1
  63. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  64. package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
  65. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  66. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  67. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  68. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  69. package/dist/modules/Order/utils.d.ts +167 -18
  70. package/dist/modules/Order/utils.js +960 -165
  71. package/dist/modules/Payment/index.d.ts +10 -9
  72. package/dist/modules/Payment/index.js +573 -746
  73. package/dist/modules/Payment/types.d.ts +44 -24
  74. package/dist/modules/Payment/utils.d.ts +1 -1
  75. package/dist/modules/Payment/utils.js +4 -3
  76. package/dist/modules/Payment/walletpass.d.ts +0 -2
  77. package/dist/modules/Payment/walletpass.js +49 -33
  78. package/dist/modules/Product/types.d.ts +29 -7
  79. package/dist/modules/ProductList/index.d.ts +17 -13
  80. package/dist/modules/ProductList/index.js +182 -81
  81. package/dist/modules/ProductList/types.d.ts +16 -0
  82. package/dist/modules/Quotation/index.d.ts +22 -2
  83. package/dist/modules/Quotation/index.js +108 -42
  84. package/dist/modules/Quotation/types.d.ts +19 -0
  85. package/dist/modules/ResourcePlanner/index.d.ts +24 -0
  86. package/dist/modules/ResourcePlanner/index.js +181 -0
  87. package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
  88. package/dist/modules/ResourcePlanner/planner.js +1069 -0
  89. package/dist/modules/ResourcePlanner/types.d.ts +227 -0
  90. package/dist/modules/ResourcePlanner/types.js +1 -0
  91. package/dist/modules/Rules/index.d.ts +8 -10
  92. package/dist/modules/Rules/index.js +324 -513
  93. package/dist/modules/Rules/types.d.ts +14 -3
  94. package/dist/modules/SalesSummary/index.d.ts +23 -26
  95. package/dist/modules/SalesSummary/index.js +152 -46
  96. package/dist/modules/SalesSummary/types.d.ts +9 -1
  97. package/dist/modules/SalesSummary/utils.d.ts +3 -22
  98. package/dist/modules/SalesSummary/utils.js +804 -165
  99. package/dist/modules/Schedule/getDateIsInSchedule.js +14 -12
  100. package/dist/modules/Schedule/index.d.ts +18 -5
  101. package/dist/modules/Schedule/index.js +79 -24
  102. package/dist/modules/Schedule/types.d.ts +2 -0
  103. package/dist/modules/Schedule/utils.js +1 -0
  104. package/dist/modules/Step/index.js +1 -0
  105. package/dist/modules/Summary/index.js +4 -3
  106. package/dist/modules/Summary/utils.js +22 -43
  107. package/dist/modules/SurchargeList/index.d.ts +18 -0
  108. package/dist/modules/SurchargeList/index.js +185 -0
  109. package/dist/modules/SurchargeList/types.d.ts +15 -0
  110. package/dist/modules/SurchargeList/types.js +1 -0
  111. package/dist/modules/index.d.ts +3 -0
  112. package/dist/modules/index.js +4 -1
  113. package/dist/plugins/app.d.ts +2 -0
  114. package/dist/plugins/request.d.ts +1 -0
  115. package/dist/plugins/request.js +4 -1
  116. package/dist/plugins/window.js +6 -2
  117. package/dist/server/index.d.ts +462 -8
  118. package/dist/server/index.js +6168 -680
  119. package/dist/server/modules/floor-plan/index.d.ts +39 -0
  120. package/dist/server/modules/floor-plan/index.js +595 -0
  121. package/dist/server/modules/floor-plan/types.d.ts +43 -0
  122. package/dist/server/modules/floor-plan/types.js +13 -0
  123. package/dist/server/modules/index.d.ts +7 -2
  124. package/dist/server/modules/index.js +6 -0
  125. package/dist/server/modules/menu/index.js +41 -32
  126. package/dist/server/modules/order/index.d.ts +207 -14
  127. package/dist/server/modules/order/index.js +2328 -379
  128. package/dist/server/modules/order/types.d.ts +76 -5
  129. package/dist/server/modules/order/types.js +14 -1
  130. package/dist/server/modules/order/utils/filterBookings.d.ts +7 -1
  131. package/dist/server/modules/order/utils/filterBookings.js +118 -11
  132. package/dist/server/modules/order/utils/filterOrders.js +242 -14
  133. package/dist/server/modules/payment/index.d.ts +28 -0
  134. package/dist/server/modules/payment/index.js +305 -0
  135. package/dist/server/modules/payment/types.d.ts +9 -0
  136. package/dist/server/modules/payment/types.js +1 -0
  137. package/dist/server/modules/products/index.d.ts +105 -14
  138. package/dist/server/modules/products/index.js +1416 -521
  139. package/dist/server/modules/products/types.d.ts +34 -1
  140. package/dist/server/modules/products/types.js +4 -0
  141. package/dist/server/modules/quotation/index.d.ts +39 -0
  142. package/dist/server/modules/quotation/index.js +298 -77
  143. package/dist/server/modules/resource/index.d.ts +2 -3
  144. package/dist/server/modules/resource/index.js +109 -86
  145. package/dist/server/modules/schedule/index.d.ts +6 -4
  146. package/dist/server/modules/schedule/index.js +145 -106
  147. package/dist/server/test.json +713 -0
  148. package/dist/server/types.d.ts +2 -0
  149. package/dist/server/utils/product.js +3 -2
  150. package/dist/server/utils/small-ticket.d.ts +71 -0
  151. package/dist/server/utils/small-ticket.js +963 -0
  152. package/dist/solution/BaseSales/index.d.ts +378 -0
  153. package/dist/solution/BaseSales/index.js +4009 -0
  154. package/dist/solution/BaseSales/types.d.ts +394 -0
  155. package/dist/solution/BaseSales/types.js +40 -0
  156. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  157. package/dist/solution/BaseSales/utils/cartPromotion.js +1450 -0
  158. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  159. package/dist/solution/BaseSales/utils/parseSalesResponse.js +157 -0
  160. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  161. package/dist/solution/BaseSales/utils/quotationPrice.js +250 -0
  162. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  163. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +218 -0
  164. package/dist/solution/BaseSales/utils.d.ts +40 -0
  165. package/dist/solution/BaseSales/utils.js +263 -0
  166. package/dist/solution/BookingByStep/index.d.ts +1 -1
  167. package/dist/solution/BookingByStep/index.js +60 -11
  168. package/dist/solution/BookingByStep/utils/capacity.js +11 -1
  169. package/dist/solution/BookingByStep/utils/resources.js +3 -1
  170. package/dist/solution/BookingByStep/utils/timeslots.js +43 -2
  171. package/dist/solution/BookingTicket/index.d.ts +393 -24
  172. package/dist/solution/BookingTicket/index.js +2508 -443
  173. package/dist/solution/BookingTicket/types.d.ts +191 -6
  174. package/dist/solution/BookingTicket/types.js +83 -10
  175. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  176. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  177. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  178. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  179. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  180. package/dist/solution/BookingTicket/utils/bookingStatus.js +136 -0
  181. package/dist/solution/BookingTicket/utils/cartView.d.ts +29 -0
  182. package/dist/solution/BookingTicket/utils/cartView.js +209 -0
  183. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  184. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  185. package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  186. package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
  187. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  188. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  189. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  190. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  191. package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  192. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +42 -1
  193. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  194. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  195. package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  196. package/dist/solution/BookingTicket/utils/scan/handleScan.js +42 -28
  197. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  198. package/dist/solution/BookingTicket/utils/scan/index.js +30 -14
  199. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  200. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  201. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  202. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  203. package/dist/solution/BuyTickets/index.js +12 -9
  204. package/dist/solution/Checkout/index.d.ts +1 -0
  205. package/dist/solution/Checkout/index.js +275 -209
  206. package/dist/solution/Checkout/utils/index.js +20 -8
  207. package/dist/solution/RegisterAndLogin/config.js +2 -10
  208. package/dist/solution/RegisterAndLogin/index.js +76 -30
  209. package/dist/solution/Sales/index.d.ts +50 -5
  210. package/dist/solution/Sales/index.js +484 -92
  211. package/dist/solution/Sales/types.d.ts +26 -2
  212. package/dist/solution/ScanOrder/index.d.ts +27 -21
  213. package/dist/solution/ScanOrder/index.js +519 -444
  214. package/dist/solution/ScanOrder/types.d.ts +33 -11
  215. package/dist/solution/ScanOrder/types.js +4 -5
  216. package/dist/solution/ScanOrder/utils.d.ts +4 -1
  217. package/dist/solution/ScanOrder/utils.js +109 -34
  218. package/dist/solution/ShopDiscount/index.js +18 -19
  219. package/dist/solution/ShopDiscount/types.d.ts +4 -5
  220. package/dist/solution/ShopDiscount/utils.d.ts +0 -9
  221. package/dist/solution/ShopDiscount/utils.js +0 -9
  222. package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
  223. package/dist/solution/UnifiedBookingSales/index.js +1871 -0
  224. package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
  225. package/dist/solution/UnifiedBookingSales/types.js +11 -0
  226. package/dist/solution/VenueBooking/index.d.ts +32 -51
  227. package/dist/solution/VenueBooking/index.js +741 -808
  228. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  229. package/dist/solution/VenueBooking/types.d.ts +1 -3
  230. package/dist/solution/VenueBooking/types.js +0 -1
  231. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  232. package/dist/solution/VenueBooking/utils/dateSummary.js +25 -12
  233. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  234. package/dist/solution/VenueBooking/utils/slotMerge.js +9 -3
  235. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
  236. package/dist/solution/VenueBooking/utils/timeSlot.js +4 -9
  237. package/dist/solution/index.d.ts +2 -0
  238. package/dist/solution/index.js +3 -1
  239. package/dist/types/index.d.ts +12 -2
  240. package/dist/utils/task.js +18 -15
  241. package/dist/utils/watch.js +1 -0
  242. package/lib/apis/picoding.js +0 -2
  243. package/lib/core/index.js +132 -130
  244. package/lib/effects/index.js +57 -46
  245. package/lib/index.d.ts +0 -1
  246. package/lib/index.js +50 -92
  247. package/lib/model/index.js +21 -14
  248. package/lib/model/strategy/adapter/dataVariant/adapter.js +50 -38
  249. package/lib/model/strategy/adapter/dataVariant/evaluator.js +236 -162
  250. package/lib/model/strategy/adapter/dataVariant/examples.js +237 -229
  251. package/lib/model/strategy/adapter/dataVariant/index.js +34 -39
  252. package/lib/model/strategy/adapter/dataVariant/type.js +28 -57
  253. package/lib/model/strategy/adapter/index.js +64 -100
  254. package/lib/model/strategy/adapter/itemRule/adapter.js +144 -156
  255. package/lib/model/strategy/adapter/itemRule/evaluator.js +48 -36
  256. package/lib/model/strategy/adapter/itemRule/examples.js +225 -295
  257. package/lib/model/strategy/adapter/itemRule/index.js +57 -83
  258. package/lib/model/strategy/adapter/itemRule/type.js +36 -97
  259. package/lib/model/strategy/adapter/promotion/adapter.js +63 -84
  260. package/lib/model/strategy/adapter/promotion/evaluator.js +233 -382
  261. package/lib/model/strategy/adapter/promotion/examples.js +159 -139
  262. package/lib/model/strategy/adapter/promotion/index.js +0 -1
  263. package/lib/model/strategy/adapter/promotion/type.js +35 -199
  264. package/lib/model/strategy/adapter/type.js +16 -4
  265. package/lib/model/strategy/adapter/walletPass/evaluator.js +152 -180
  266. package/lib/model/strategy/adapter/walletPass/example.js +190 -217
  267. package/lib/model/strategy/adapter/walletPass/index.js +51 -75
  268. package/lib/model/strategy/adapter/walletPass/locales.js +58 -36
  269. package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -3
  270. package/lib/model/strategy/adapter/walletPass/type.js +16 -4
  271. package/lib/model/strategy/adapter/walletPass/utils.d.ts +0 -26
  272. package/lib/model/strategy/adapter/walletPass/utils.js +383 -676
  273. package/lib/model/strategy/engine.js +168 -270
  274. package/lib/model/strategy/index.js +34 -49
  275. package/lib/model/strategy/strategy-example.js +239 -243
  276. package/lib/model/strategy/type.js +40 -100
  277. package/lib/modules/Account/index.js +53 -39
  278. package/lib/modules/Account/types.js +33 -20
  279. package/lib/modules/AccountList/index.js +154 -116
  280. package/lib/modules/AccountList/types.js +31 -30
  281. package/lib/modules/AccountList/utils.js +30 -18
  282. package/lib/modules/BaseModule.d.ts +2 -2
  283. package/lib/modules/BaseModule.js +50 -29
  284. package/lib/modules/BookingContext/index.d.ts +48 -0
  285. package/lib/modules/BookingContext/index.js +368 -0
  286. package/lib/modules/BookingContext/types.d.ts +102 -0
  287. package/lib/modules/BookingContext/types.js +34 -0
  288. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  289. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +298 -0
  290. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  291. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +155 -0
  292. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  293. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +222 -0
  294. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  295. package/lib/modules/BookingContext/utils/flexible.js +80 -0
  296. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  297. package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
  298. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  299. package/lib/modules/BookingContext/utils/index.js +43 -0
  300. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  301. package/lib/modules/BookingContext/utils/noResource.js +90 -0
  302. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  303. package/lib/modules/BookingContext/utils/orderLineDisplay.js +56 -0
  304. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  305. package/lib/modules/BookingContext/utils/productExtend.js +283 -0
  306. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  307. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  308. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  309. package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
  310. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  311. package/lib/modules/BookingContext/utils/resources.js +377 -0
  312. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  313. package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
  314. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  315. package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
  316. package/lib/modules/Cart/index.js +124 -170
  317. package/lib/modules/Cart/types.js +51 -46
  318. package/lib/modules/Cart/utils/cartAccount.js +39 -40
  319. package/lib/modules/Cart/utils/cartDate.js +61 -56
  320. package/lib/modules/Cart/utils/cartDiscount.js +33 -28
  321. package/lib/modules/Cart/utils/cartNote.js +32 -27
  322. package/lib/modules/Cart/utils/cartProduct.js +261 -309
  323. package/lib/modules/Cart/utils/cartRelationForms.js +35 -29
  324. package/lib/modules/Cart/utils/cartResource.js +78 -72
  325. package/lib/modules/Cart/utils/changePrice.js +59 -31
  326. package/lib/modules/Cart/utils/index.js +48 -106
  327. package/lib/modules/Customer/constants.js +34 -13
  328. package/lib/modules/Customer/index.d.ts +20 -0
  329. package/lib/modules/Customer/index.js +207 -217
  330. package/lib/modules/Customer/types.d.ts +2 -0
  331. package/lib/modules/Customer/types.js +35 -38
  332. package/lib/modules/Date/index.js +115 -116
  333. package/lib/modules/Date/types.js +28 -16
  334. package/lib/modules/Date/utils.js +123 -174
  335. package/lib/modules/Discount/index.d.ts +2 -2
  336. package/lib/modules/Discount/index.js +133 -119
  337. package/lib/modules/Discount/types.d.ts +1 -1
  338. package/lib/modules/Discount/types.js +31 -9
  339. package/lib/modules/Guests/index.js +56 -30
  340. package/lib/modules/Guests/types.js +33 -23
  341. package/lib/modules/Holder/index.js +189 -209
  342. package/lib/modules/Holder/types.js +16 -4
  343. package/lib/modules/Holder/utils.js +49 -20
  344. package/lib/modules/OpenData/index.d.ts +8 -0
  345. package/lib/modules/OpenData/index.js +88 -63
  346. package/lib/modules/OpenData/types.js +16 -4
  347. package/lib/modules/OpenData/utils.js +78 -44
  348. package/lib/modules/Order/index.d.ts +449 -24
  349. package/lib/modules/Order/index.js +4184 -514
  350. package/lib/modules/Order/types.d.ts +693 -88
  351. package/lib/modules/Order/types.js +35 -24
  352. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  353. package/lib/modules/Order/utils/bundleDiscountHydration.js +139 -0
  354. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  355. package/lib/modules/Order/utils/manualProductDiscount.js +206 -0
  356. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  357. package/lib/modules/Order/utils/orderCollectionIdentity.js +415 -0
  358. package/lib/modules/Order/utils.d.ts +167 -18
  359. package/lib/modules/Order/utils.js +1085 -414
  360. package/lib/modules/Payment/cash.js +33 -20
  361. package/lib/modules/Payment/cashRecommendationAlgorithm.js +76 -145
  362. package/lib/modules/Payment/eftpos.js +30 -16
  363. package/lib/modules/Payment/index.d.ts +10 -9
  364. package/lib/modules/Payment/index.js +402 -636
  365. package/lib/modules/Payment/mx51.js +0 -1
  366. package/lib/modules/Payment/types.d.ts +44 -24
  367. package/lib/modules/Payment/types.js +107 -216
  368. package/lib/modules/Payment/utils.d.ts +1 -1
  369. package/lib/modules/Payment/utils.js +50 -52
  370. package/lib/modules/Payment/walletpass.d.ts +0 -2
  371. package/lib/modules/Payment/walletpass.js +216 -221
  372. package/lib/modules/Product/index.js +46 -51
  373. package/lib/modules/Product/types.d.ts +29 -7
  374. package/lib/modules/Product/types.js +16 -4
  375. package/lib/modules/Product/utils.js +33 -32
  376. package/lib/modules/ProductList/index.d.ts +17 -13
  377. package/lib/modules/ProductList/index.js +161 -120
  378. package/lib/modules/ProductList/types.d.ts +16 -0
  379. package/lib/modules/ProductList/types.js +31 -9
  380. package/lib/modules/Quotation/index.d.ts +22 -2
  381. package/lib/modules/Quotation/index.js +154 -64
  382. package/lib/modules/Quotation/types.d.ts +19 -0
  383. package/lib/modules/Quotation/types.js +16 -4
  384. package/lib/modules/Resource/index.js +59 -27
  385. package/lib/modules/Resource/types.js +32 -22
  386. package/lib/modules/Resource/utils.js +38 -30
  387. package/lib/modules/ResourcePlanner/index.d.ts +24 -0
  388. package/lib/modules/ResourcePlanner/index.js +148 -0
  389. package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
  390. package/lib/modules/ResourcePlanner/planner.js +933 -0
  391. package/lib/modules/ResourcePlanner/types.d.ts +227 -0
  392. package/lib/modules/ResourcePlanner/types.js +17 -0
  393. package/lib/modules/Rules/index.d.ts +8 -10
  394. package/lib/modules/Rules/index.js +960 -1440
  395. package/lib/modules/Rules/types.d.ts +14 -3
  396. package/lib/modules/Rules/types.js +40 -17
  397. package/lib/modules/SalesSummary/index.d.ts +23 -26
  398. package/lib/modules/SalesSummary/index.js +134 -61
  399. package/lib/modules/SalesSummary/types.d.ts +9 -1
  400. package/lib/modules/SalesSummary/types.js +16 -4
  401. package/lib/modules/SalesSummary/utils.d.ts +3 -22
  402. package/lib/modules/SalesSummary/utils.js +814 -233
  403. package/lib/modules/ScanOrderLogger/index.js +79 -59
  404. package/lib/modules/ScanOrderLogger/providers/feishu.js +78 -54
  405. package/lib/modules/ScanOrderLogger/providers/grafana.js +36 -13
  406. package/lib/modules/ScanOrderLogger/types.js +16 -4
  407. package/lib/modules/Schedule/getDateIsInSchedule.js +169 -338
  408. package/lib/modules/Schedule/index.d.ts +18 -5
  409. package/lib/modules/Schedule/index.js +153 -104
  410. package/lib/modules/Schedule/type.js +16 -4
  411. package/lib/modules/Schedule/types.d.ts +2 -0
  412. package/lib/modules/Schedule/types.js +16 -4
  413. package/lib/modules/Schedule/utils.js +291 -433
  414. package/lib/modules/Step/index.js +52 -40
  415. package/lib/modules/Step/tyeps.js +16 -4
  416. package/lib/modules/Summary/index.js +71 -66
  417. package/lib/modules/Summary/types.js +16 -4
  418. package/lib/modules/Summary/utils.js +418 -791
  419. package/lib/modules/SurchargeList/index.d.ts +18 -0
  420. package/lib/modules/SurchargeList/index.js +109 -0
  421. package/lib/modules/SurchargeList/types.d.ts +15 -0
  422. package/lib/modules/SurchargeList/types.js +17 -0
  423. package/lib/modules/index.d.ts +3 -0
  424. package/lib/modules/index.js +63 -212
  425. package/lib/plugins/app.d.ts +2 -0
  426. package/lib/plugins/app.js +16 -4
  427. package/lib/plugins/index.js +25 -36
  428. package/lib/plugins/request.d.ts +1 -0
  429. package/lib/plugins/request.js +126 -137
  430. package/lib/plugins/shopStore.js +16 -4
  431. package/lib/plugins/user.js +16 -4
  432. package/lib/plugins/window.js +179 -171
  433. package/lib/server/index.d.ts +462 -8
  434. package/lib/server/index.js +4520 -1162
  435. package/lib/server/modules/floor-plan/index.d.ts +39 -0
  436. package/lib/server/modules/floor-plan/index.js +327 -0
  437. package/lib/server/modules/floor-plan/types.d.ts +43 -0
  438. package/lib/server/modules/floor-plan/types.js +34 -0
  439. package/lib/server/modules/index.d.ts +7 -2
  440. package/lib/server/modules/index.js +67 -84
  441. package/lib/server/modules/menu/index.js +122 -146
  442. package/lib/server/modules/menu/types.js +31 -18
  443. package/lib/server/modules/order/index.d.ts +207 -14
  444. package/lib/server/modules/order/index.js +1543 -285
  445. package/lib/server/modules/order/types.d.ts +76 -5
  446. package/lib/server/modules/order/types.js +32 -107
  447. package/lib/server/modules/order/utils/filterBookings.d.ts +7 -1
  448. package/lib/server/modules/order/utils/filterBookings.js +259 -176
  449. package/lib/server/modules/order/utils/filterOrders.js +293 -94
  450. package/lib/server/modules/payment/index.d.ts +28 -0
  451. package/lib/server/modules/payment/index.js +192 -0
  452. package/lib/server/modules/payment/types.d.ts +9 -0
  453. package/lib/server/modules/payment/types.js +17 -0
  454. package/lib/server/modules/products/index.d.ts +105 -14
  455. package/lib/server/modules/products/index.js +850 -475
  456. package/lib/server/modules/products/types.d.ts +34 -1
  457. package/lib/server/modules/products/types.js +34 -41
  458. package/lib/server/modules/quotation/index.d.ts +39 -0
  459. package/lib/server/modules/quotation/index.js +254 -75
  460. package/lib/server/modules/quotation/types.js +31 -21
  461. package/lib/server/modules/resource/index.d.ts +2 -3
  462. package/lib/server/modules/resource/index.js +240 -243
  463. package/lib/server/modules/resource/types.js +33 -42
  464. package/lib/server/modules/schedule/index.d.ts +6 -4
  465. package/lib/server/modules/schedule/index.js +146 -147
  466. package/lib/server/modules/schedule/types.js +21 -14
  467. package/lib/server/modules/schedule/utils.js +163 -334
  468. package/lib/server/test.json +713 -0
  469. package/lib/server/types.d.ts +2 -0
  470. package/lib/server/types.js +16 -4
  471. package/lib/server/utils/index.js +23 -25
  472. package/lib/server/utils/product.js +140 -197
  473. package/lib/server/utils/schedule.js +41 -34
  474. package/lib/server/utils/small-ticket.d.ts +71 -0
  475. package/lib/server/utils/small-ticket.js +904 -0
  476. package/lib/server/utils/time.js +49 -40
  477. package/lib/solution/BaseSales/index.d.ts +378 -0
  478. package/lib/solution/BaseSales/index.js +2533 -0
  479. package/lib/solution/BaseSales/types.d.ts +394 -0
  480. package/lib/solution/BaseSales/types.js +43 -0
  481. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  482. package/lib/solution/BaseSales/utils/cartPromotion.js +1004 -0
  483. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  484. package/lib/solution/BaseSales/utils/parseSalesResponse.js +160 -0
  485. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  486. package/lib/solution/BaseSales/utils/quotationPrice.js +289 -0
  487. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  488. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +256 -0
  489. package/lib/solution/BaseSales/utils.d.ts +40 -0
  490. package/lib/solution/BaseSales/utils.js +244 -0
  491. package/lib/solution/BookingByStep/index.d.ts +1 -1
  492. package/lib/solution/BookingByStep/index.js +1340 -1530
  493. package/lib/solution/BookingByStep/types.js +99 -40
  494. package/lib/solution/BookingByStep/utils/capacity.js +160 -192
  495. package/lib/solution/BookingByStep/utils/products.js +52 -42
  496. package/lib/solution/BookingByStep/utils/resources.js +330 -527
  497. package/lib/solution/BookingByStep/utils/stock.js +44 -65
  498. package/lib/solution/BookingByStep/utils/timeslots.js +131 -129
  499. package/lib/solution/BookingTicket/index.d.ts +393 -24
  500. package/lib/solution/BookingTicket/index.js +1374 -184
  501. package/lib/solution/BookingTicket/types.d.ts +191 -6
  502. package/lib/solution/BookingTicket/types.js +79 -40
  503. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  504. package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
  505. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  506. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +125 -0
  507. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  508. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -0
  509. package/lib/solution/BookingTicket/utils/cartView.d.ts +29 -0
  510. package/lib/solution/BookingTicket/utils/cartView.js +184 -0
  511. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  512. package/lib/solution/BookingTicket/utils/exampleData.js +0 -0
  513. package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  514. package/lib/solution/BookingTicket/utils/orderCustomer.js +58 -0
  515. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  516. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +254 -0
  517. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  518. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +169 -0
  519. package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  520. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +97 -64
  521. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  522. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +51 -0
  523. package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  524. package/lib/solution/BookingTicket/utils/scan/handleScan.js +81 -82
  525. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  526. package/lib/solution/BookingTicket/utils/scan/index.js +109 -91
  527. package/lib/solution/BookingTicket/utils/scan/scanCache.js +43 -90
  528. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  529. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +127 -0
  530. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  531. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +85 -0
  532. package/lib/solution/BuyTickets/index.js +70 -67
  533. package/lib/solution/BuyTickets/types.js +38 -22
  534. package/lib/solution/Checkout/index.d.ts +1 -0
  535. package/lib/solution/Checkout/index.js +1169 -1463
  536. package/lib/solution/Checkout/types.js +61 -91
  537. package/lib/solution/Checkout/utils/index.js +156 -228
  538. package/lib/solution/PlaceOrder/index.js +0 -55
  539. package/lib/solution/RegisterAndLogin/config.js +462 -503
  540. package/lib/solution/RegisterAndLogin/index.js +630 -633
  541. package/lib/solution/RegisterAndLogin/types.js +76 -189
  542. package/lib/solution/RegisterAndLogin/utils.js +125 -183
  543. package/lib/solution/Sales/index.d.ts +50 -5
  544. package/lib/solution/Sales/index.js +498 -238
  545. package/lib/solution/Sales/types.d.ts +26 -2
  546. package/lib/solution/Sales/types.js +33 -27
  547. package/lib/solution/ScanOrder/index.d.ts +27 -21
  548. package/lib/solution/ScanOrder/index.js +936 -864
  549. package/lib/solution/ScanOrder/types.d.ts +33 -11
  550. package/lib/solution/ScanOrder/types.js +34 -34
  551. package/lib/solution/ScanOrder/utils.d.ts +4 -1
  552. package/lib/solution/ScanOrder/utils.js +422 -385
  553. package/lib/solution/ShopDiscount/index.js +233 -235
  554. package/lib/solution/ShopDiscount/types.d.ts +4 -5
  555. package/lib/solution/ShopDiscount/types.js +37 -15
  556. package/lib/solution/ShopDiscount/utils.d.ts +0 -9
  557. package/lib/solution/ShopDiscount/utils.js +172 -309
  558. package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
  559. package/lib/solution/UnifiedBookingSales/index.js +1076 -0
  560. package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
  561. package/lib/solution/UnifiedBookingSales/types.js +33 -0
  562. package/lib/solution/VenueBooking/index.d.ts +32 -51
  563. package/lib/solution/VenueBooking/index.js +1008 -984
  564. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  565. package/lib/solution/VenueBooking/types.d.ts +1 -3
  566. package/lib/solution/VenueBooking/types.js +39 -20
  567. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  568. package/lib/solution/VenueBooking/utils/dateSummary.js +62 -25
  569. package/lib/solution/VenueBooking/utils/resource.js +54 -31
  570. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  571. package/lib/solution/VenueBooking/utils/slotMerge.js +109 -90
  572. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
  573. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -138
  574. package/lib/solution/VenueBooking/utils.js +67 -130
  575. package/lib/solution/index.d.ts +2 -0
  576. package/lib/solution/index.js +41 -102
  577. package/lib/store/createStore.js +29 -32
  578. package/lib/types/index.d.ts +12 -2
  579. package/lib/types/index.js +16 -4
  580. package/lib/utils/task.js +36 -36
  581. package/lib/utils/watch.js +47 -81
  582. package/package.json +2 -4
  583. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  584. package/dist/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
  585. package/dist/solution/VenueBooking/utils/smartPricing.js +0 -233
  586. package/lib/solution/Checkout/appointmentDemo.json +0 -1
  587. package/lib/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
  588. package/lib/solution/VenueBooking/utils/smartPricing.js +0 -192
@@ -0,0 +1,1004 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/solution/BaseSales/utils/cartPromotion.ts
30
+ var cartPromotion_exports = {};
31
+ __export(cartPromotion_exports, {
32
+ appendPromotionTags: () => appendPromotionTags,
33
+ buildConsolidateKeyForPromotion: () => buildConsolidateKeyForPromotion,
34
+ calculateUnfulfilledPromotions: () => calculateUnfulfilledPromotions,
35
+ extractProductMatchIdentifiersFromStrategyConfig: () => extractProductMatchIdentifiersFromStrategyConfig,
36
+ getOrderProductBasePrice: () => getOrderProductBasePrice,
37
+ getOrderProductOriginalPriceForPromotion: () => getOrderProductOriginalPriceForPromotion,
38
+ getOrderProductUid: () => getOrderProductUid,
39
+ mergeIdenticalPromotionCartLines: () => mergeIdenticalPromotionCartLines,
40
+ processCartPromotion: () => processCartPromotion,
41
+ resolveStrategyEligibleProducts: () => resolveStrategyEligibleProducts,
42
+ resolveStrategyRequiredQuantity: () => resolveStrategyRequiredQuantity
43
+ });
44
+ module.exports = __toCommonJS(cartPromotion_exports);
45
+ var import_decimal = __toESM(require("decimal.js"));
46
+ var import_lodash_es = require("lodash-es");
47
+ var import_utils = require("../../../modules/Order/utils");
48
+ var import_utils2 = require("../../ScanOrder/utils");
49
+ function getOrderProductBasePrice(product) {
50
+ const metadata = (product == null ? void 0 : product.metadata) || {};
51
+ const optionSum = (0, import_utils.sumOptionUnitPrice)((0, import_utils.getProductSkuOptions)(product)).toNumber();
52
+ if (metadata.source_product_price !== void 0) {
53
+ const v2 = Number(metadata.source_product_price);
54
+ return Number.isFinite(v2) ? v2 : 0;
55
+ }
56
+ if (metadata.main_product_original_price !== void 0) {
57
+ const v2 = Number(metadata.main_product_original_price) - optionSum;
58
+ return Number.isFinite(v2) ? v2 : 0;
59
+ }
60
+ const v = Number((product == null ? void 0 : product.original_price) ?? (product == null ? void 0 : product.selling_price) ?? 0);
61
+ return Number.isFinite(v) ? v : 0;
62
+ }
63
+ function getOrderProductOriginalPriceForPromotion(product) {
64
+ var _a;
65
+ const metadata = (product == null ? void 0 : product.metadata) || {};
66
+ const optionSum = (0, import_utils.sumOptionUnitPrice)((0, import_utils.getProductSkuOptions)(product)).toNumber();
67
+ if (metadata.main_product_original_price !== void 0 && metadata.main_product_original_price !== null && metadata.main_product_original_price !== "") {
68
+ const v = Number(metadata.main_product_original_price) - optionSum;
69
+ if (Number.isFinite(v) && v >= 0)
70
+ return v;
71
+ }
72
+ const promoOriginal = (_a = metadata._promotion) == null ? void 0 : _a.originalPrice;
73
+ if (promoOriginal !== void 0 && promoOriginal !== null && promoOriginal !== "") {
74
+ const v = Number(promoOriginal);
75
+ if (Number.isFinite(v) && v >= 0)
76
+ return v;
77
+ }
78
+ return getOrderProductBasePrice(product);
79
+ }
80
+ function updatePromotionDiscountList(item, promotionDiscount) {
81
+ let discountList = Array.isArray(item.discount_list) ? [...item.discount_list] : [];
82
+ discountList = discountList.filter((d) => (d == null ? void 0 : d.type) !== "promotion");
83
+ if (promotionDiscount) {
84
+ discountList.push({
85
+ type: "promotion",
86
+ amount: promotionDiscount.amount,
87
+ discount: {
88
+ original_amount: promotionDiscount.original_amount,
89
+ fixed_amount: promotionDiscount.fixed_amount,
90
+ title: promotionDiscount.title,
91
+ resource_id: ""
92
+ }
93
+ });
94
+ }
95
+ if (discountList.length > 0) {
96
+ item.discount_list = discountList;
97
+ } else {
98
+ delete item.discount_list;
99
+ }
100
+ }
101
+ var X_ITEMS_FOR_Y_PRICE = "X_ITEMS_FOR_Y_PRICE";
102
+ function applyPromoUnitPriceToLine(item, input) {
103
+ const metadata = item.metadata || (item.metadata = {});
104
+ const optionSum = (0, import_utils.sumOptionUnitPrice)((0, import_utils.getProductSkuOptions)(item)).toNumber();
105
+ const promoUnitPrice = new import_decimal.default(Number(input.promoUnitPrice) || 0).toDecimalPlaces(2).toFixed(2);
106
+ const mainSelling = new import_decimal.default(Number(promoUnitPrice) || 0).plus(optionSum).toDecimalPlaces(2).toFixed(2);
107
+ const catalogSource = new import_decimal.default(input.originalBasePrice).toDecimalPlaces(2).toFixed(2);
108
+ metadata.source_product_price = catalogSource;
109
+ metadata.main_product_original_price = new import_decimal.default(Number(catalogSource) || 0).plus(optionSum).toDecimalPlaces(2).toFixed(2);
110
+ metadata.main_product_selling_price = mainSelling;
111
+ metadata.price_schema_version = 2;
112
+ item.selling_price = (0, import_utils.composeLinePrice)({
113
+ mainPrice: mainSelling,
114
+ bundle: item.product_bundle
115
+ });
116
+ item.original_price = (0, import_utils.composeLinePrice)({
117
+ mainPrice: metadata.main_product_original_price,
118
+ bundle: item.product_bundle,
119
+ useOriginalBundle: true
120
+ });
121
+ const discountAmount = new import_decimal.default(input.originalBasePrice).minus(Number(promoUnitPrice) || 0).toDecimalPlaces(2).toFixed(2);
122
+ if (Number(catalogSource) !== Number(promoUnitPrice)) {
123
+ updatePromotionDiscountList(item, {
124
+ title: input.strategyTitle || "",
125
+ amount: discountAmount,
126
+ original_amount: catalogSource,
127
+ fixed_amount: discountAmount
128
+ });
129
+ } else {
130
+ updatePromotionDiscountList(item, null);
131
+ }
132
+ }
133
+ function getPromotionActionType(promotion) {
134
+ var _a, _b;
135
+ if (promotion == null ? void 0 : promotion.actionType)
136
+ return String(promotion.actionType);
137
+ const actions = (_a = promotion == null ? void 0 : promotion.strategyMetadata) == null ? void 0 : _a.actions;
138
+ if (Array.isArray(actions) && ((_b = actions[0]) == null ? void 0 : _b.type))
139
+ return String(actions[0].type);
140
+ return void 0;
141
+ }
142
+ function resolveXItemsExpectedUnitPrice(promotion, sourceCartNum) {
143
+ if (getPromotionActionType(promotion) !== X_ITEMS_FOR_Y_PRICE)
144
+ return void 0;
145
+ const detail = promotion == null ? void 0 : promotion.actionDetail;
146
+ const x = Number(detail == null ? void 0 : detail.x);
147
+ const y = Number(detail == null ? void 0 : detail.price);
148
+ if (!Number.isFinite(x) || x <= 0 || !Number.isFinite(y))
149
+ return void 0;
150
+ if (sourceCartNum < x)
151
+ return void 0;
152
+ return Number(new import_decimal.default(y).div(x).toDecimalPlaces(2).toFixed(2));
153
+ }
154
+ function mergeIdenticalPromotionCartLines(products) {
155
+ var _a, _b, _c, _d;
156
+ if (!Array.isArray(products) || products.length <= 1) {
157
+ return [...products || []];
158
+ }
159
+ const merged = [];
160
+ const indexByKey = /* @__PURE__ */ new Map();
161
+ for (const line of products) {
162
+ if (getGiftInfo(line)) {
163
+ merged.push(line);
164
+ continue;
165
+ }
166
+ const promotion = (_a = line == null ? void 0 : line.metadata) == null ? void 0 : _a._promotion;
167
+ if (!(promotion == null ? void 0 : promotion.inPromotion) || !promotion.strategyId) {
168
+ merged.push(line);
169
+ continue;
170
+ }
171
+ const fingerprint = (0, import_utils2.buildProductLineFingerprint)(
172
+ (0, import_utils.getProductSkuOptions)(line),
173
+ line.product_bundle
174
+ );
175
+ const unitPrice = String(
176
+ ((_b = line.metadata) == null ? void 0 : _b.source_product_price) ?? line.selling_price ?? ""
177
+ );
178
+ const promoUnitPrice = String(
179
+ promotion.finalPrice ?? ((_c = line.metadata) == null ? void 0 : _c.main_product_selling_price) ?? ""
180
+ );
181
+ const noteSignature = getProductLineNoteSignature(line);
182
+ const lineMergeBoundary = getPromotionLineMergeBoundary(line);
183
+ const bookingUid = (line == null ? void 0 : line.booking_uid) ?? ((_d = line == null ? void 0 : line.metadata) == null ? void 0 : _d.booking_uid);
184
+ const orderDetailId = (line == null ? void 0 : line.order_detail_id) ?? (line == null ? void 0 : line.orderDetailId);
185
+ const mergeKey = [
186
+ line.product_id,
187
+ line.product_variant_id ?? 0,
188
+ fingerprint,
189
+ noteSignature,
190
+ lineMergeBoundary,
191
+ bookingUid ? String(bookingUid) : "",
192
+ orderDetailId !== void 0 && orderDetailId !== null && orderDetailId !== "" ? String(orderDetailId) : "",
193
+ promotion.strategyId,
194
+ unitPrice,
195
+ promoUnitPrice
196
+ ].join("#");
197
+ const hitIndex = indexByKey.get(mergeKey);
198
+ if (hitIndex === void 0) {
199
+ indexByKey.set(mergeKey, merged.length);
200
+ merged.push(line);
201
+ continue;
202
+ }
203
+ const target = merged[hitIndex];
204
+ target.num = (0, import_utils2.getSafeProductNum)(Number(target.num || 0) + Number(line.num || 0));
205
+ }
206
+ return merged;
207
+ }
208
+ function dedupePromotionProcessedLines(lines) {
209
+ var _a, _b, _c, _d, _e, _f, _g, _h;
210
+ if (!Array.isArray(lines) || lines.length <= 1)
211
+ return [...lines || []];
212
+ const passthrough = [];
213
+ const buckets = /* @__PURE__ */ new Map();
214
+ for (const line of lines) {
215
+ const promo = (_a = line == null ? void 0 : line.metadata) == null ? void 0 : _a._promotion;
216
+ const originalUid = String(line._originalProductUid || getOrderProductUid(line) || "");
217
+ if (!(promo == null ? void 0 : promo.inPromotion) || !originalUid) {
218
+ passthrough.push(line);
219
+ continue;
220
+ }
221
+ const group = buckets.get(originalUid) || [];
222
+ group.push(line);
223
+ buckets.set(originalUid, group);
224
+ }
225
+ const promotionDelta = (line) => {
226
+ var _a2;
227
+ const promo = (_a2 = line.metadata) == null ? void 0 : _a2._promotion;
228
+ const original = Number(promo == null ? void 0 : promo.originalPrice);
229
+ const final = Number(promo == null ? void 0 : promo.finalPrice);
230
+ if (!Number.isFinite(original) || !Number.isFinite(final))
231
+ return 0;
232
+ return Math.abs(original - final);
233
+ };
234
+ const deduped = [...passthrough];
235
+ for (const [originalUid, group] of buckets) {
236
+ if (group.length === 1) {
237
+ deduped.push(group[0]);
238
+ continue;
239
+ }
240
+ const sourceCartNum = Math.max(
241
+ ...group.map((line) => Number(line._sourceCartNum || line.num || 0))
242
+ );
243
+ const pricingLines = group.filter((line) => promotionDelta(line) > 0);
244
+ const xItemsLines = (pricingLines.length ? pricingLines : group).filter(
245
+ (line) => {
246
+ var _a2;
247
+ return getPromotionActionType((_a2 = line.metadata) == null ? void 0 : _a2._promotion) === X_ITEMS_FOR_Y_PRICE;
248
+ }
249
+ );
250
+ const pool = xItemsLines.length ? xItemsLines : pricingLines.length ? pricingLines : group;
251
+ let winner = pool[0];
252
+ const expectedUnit = resolveXItemsExpectedUnitPrice(
253
+ (_b = winner.metadata) == null ? void 0 : _b._promotion,
254
+ sourceCartNum
255
+ );
256
+ if (expectedUnit != null && pool.length > 1) {
257
+ winner = pool.reduce((best, line) => {
258
+ var _a2, _b2, _c2, _d2;
259
+ const bestDiff = Math.abs(Number((_b2 = (_a2 = best.metadata) == null ? void 0 : _a2._promotion) == null ? void 0 : _b2.finalPrice) - expectedUnit);
260
+ const lineDiff = Math.abs(Number((_d2 = (_c2 = line.metadata) == null ? void 0 : _c2._promotion) == null ? void 0 : _d2.finalPrice) - expectedUnit);
261
+ return lineDiff < bestDiff ? line : best;
262
+ }, pool[0]);
263
+ } else if (pool.length > 1 && !expectedUnit) {
264
+ winner = pool.reduce((best, line) => {
265
+ var _a2, _b2, _c2, _d2, _e2, _f2;
266
+ const bestFinal = Number((_b2 = (_a2 = best.metadata) == null ? void 0 : _a2._promotion) == null ? void 0 : _b2.finalPrice);
267
+ const lineFinal = Number((_d2 = (_c2 = line.metadata) == null ? void 0 : _c2._promotion) == null ? void 0 : _d2.finalPrice);
268
+ const original = Number((_f2 = (_e2 = line.metadata) == null ? void 0 : _e2._promotion) == null ? void 0 : _f2.originalPrice);
269
+ if (Number.isFinite(original) && lineFinal >= original && bestFinal >= original) {
270
+ return lineFinal < bestFinal ? line : best;
271
+ }
272
+ return promotionDelta(line) > promotionDelta(best) ? line : best;
273
+ }, pool[0]);
274
+ }
275
+ const winnerIsXItems = getPromotionActionType((_c = winner.metadata) == null ? void 0 : _c._promotion) === X_ITEMS_FOR_Y_PRICE;
276
+ if (winnerIsXItems) {
277
+ const xItemsGroupLines = group.filter(
278
+ (line) => {
279
+ var _a2;
280
+ return getPromotionActionType((_a2 = line.metadata) == null ? void 0 : _a2._promotion) === X_ITEMS_FOR_Y_PRICE;
281
+ }
282
+ );
283
+ const evaluatedPromoQty = xItemsGroupLines.reduce(
284
+ (sum, line) => sum + Number(line.num || 0),
285
+ 0
286
+ );
287
+ winner.num = (0, import_utils2.getSafeProductNum)(evaluatedPromoQty || winner.num || 1);
288
+ } else {
289
+ winner.num = (0, import_utils2.getSafeProductNum)(sourceCartNum || winner.num || 1);
290
+ }
291
+ const recomputeUnit = resolveXItemsExpectedUnitPrice(
292
+ (_d = winner.metadata) == null ? void 0 : _d._promotion,
293
+ sourceCartNum
294
+ );
295
+ if (recomputeUnit != null) {
296
+ const promo = winner.metadata._promotion;
297
+ applyPromoUnitPriceToLine(winner, {
298
+ promoUnitPrice: recomputeUnit,
299
+ originalBasePrice: Number(promo.originalPrice),
300
+ strategyTitle: (_e = promo.strategyMetadata) == null ? void 0 : _e.name
301
+ });
302
+ promo.finalPrice = recomputeUnit;
303
+ }
304
+ for (const line of group) {
305
+ const giftInfo = (_g = (_f = line.metadata) == null ? void 0 : _f._promotion) == null ? void 0 : _g.giftInfo;
306
+ if (giftInfo && ((_h = winner.metadata) == null ? void 0 : _h._promotion) && !winner.metadata._promotion.giftInfo) {
307
+ winner.metadata._promotion.giftInfo = giftInfo;
308
+ }
309
+ }
310
+ deduped.push(winner);
311
+ }
312
+ return deduped;
313
+ }
314
+ function getOrderProductUid(product) {
315
+ var _a;
316
+ return String(
317
+ ((_a = product == null ? void 0 : product.metadata) == null ? void 0 : _a.unique_identification_number) ?? (product == null ? void 0 : product.unique_identification_number) ?? ""
318
+ );
319
+ }
320
+ function getGiftInfo(product) {
321
+ var _a;
322
+ return ((_a = product == null ? void 0 : product.metadata) == null ? void 0 : _a._giftInfo) || (product == null ? void 0 : product._giftInfo) || null;
323
+ }
324
+ function getProductLineNoteSignature(product) {
325
+ const note = product == null ? void 0 : product.note;
326
+ if (typeof note !== "string")
327
+ return "";
328
+ const normalizedNote = note.trim();
329
+ if (!normalizedNote)
330
+ return "";
331
+ const uid = getOrderProductUid(product);
332
+ return uid ? `note:${uid}` : `note:${normalizedNote}`;
333
+ }
334
+ function getPromotionLineMergeBoundary(product) {
335
+ var _a;
336
+ if (((_a = product == null ? void 0 : product.metadata) == null ? void 0 : _a.is_edit_for_runtime) !== true)
337
+ return "";
338
+ return `edit:${getOrderProductUid(product)}`;
339
+ }
340
+ function isPersistedGeneratedVoucher(product) {
341
+ const orderDetailId = (product == null ? void 0 : product.order_detail_id) ?? (product == null ? void 0 : product.orderDetailId);
342
+ if (orderDetailId === void 0 || orderDetailId === null || orderDetailId === "") {
343
+ return false;
344
+ }
345
+ const metadata = (product == null ? void 0 : product.metadata) || {};
346
+ return (product == null ? void 0 : product.extension_type) === "product_voucher" || metadata.parent_order_detail_id !== void 0 || metadata.gift_card_type !== void 0;
347
+ }
348
+ function getProductBundleForEvaluator(product) {
349
+ const bundles = Array.isArray(product == null ? void 0 : product.product_bundle) ? product.product_bundle : [];
350
+ return bundles.map((b) => ({
351
+ product_id: (b == null ? void 0 : b.bundle_product_id) ?? (b == null ? void 0 : b._bundle_product_id) ?? (b == null ? void 0 : b.product_id),
352
+ product_variant_id: (b == null ? void 0 : b.bundle_variant_id) ?? (b == null ? void 0 : b.product_variant_id) ?? 0,
353
+ quantity: Number((b == null ? void 0 : b.num) ?? (b == null ? void 0 : b.quantity) ?? 1) || 1,
354
+ price: Number((b == null ? void 0 : b.bundle_selling_price) ?? (b == null ? void 0 : b.price) ?? 0) || 0,
355
+ original_price: Number((b == null ? void 0 : b.original_price) ?? (b == null ? void 0 : b.product_price) ?? (b == null ? void 0 : b.price) ?? 0) || 0,
356
+ id: (b == null ? void 0 : b.bundle_id) ?? (b == null ? void 0 : b.id) ?? 0,
357
+ _bundle_product_id: (b == null ? void 0 : b._bundle_product_id) ?? (b == null ? void 0 : b.bundle_product_id) ?? (b == null ? void 0 : b.product_id)
358
+ }));
359
+ }
360
+ function buildConsolidateKeyForPromotion(item) {
361
+ var _a;
362
+ const fingerprint = (0, import_utils2.buildProductLineFingerprint)(
363
+ (0, import_utils.getProductSkuOptions)(item),
364
+ item.product_bundle
365
+ );
366
+ const noteSignature = getProductLineNoteSignature(item);
367
+ const lineMergeBoundary = getPromotionLineMergeBoundary(item);
368
+ const bookingUid = (item == null ? void 0 : item.booking_uid) ?? ((_a = item == null ? void 0 : item.metadata) == null ? void 0 : _a.booking_uid);
369
+ const orderDetailId = (item == null ? void 0 : item.order_detail_id) ?? (item == null ? void 0 : item.orderDetailId);
370
+ if (orderDetailId !== void 0 && orderDetailId !== null && orderDetailId !== "") {
371
+ return [
372
+ item.product_id,
373
+ item.product_variant_id ?? 0,
374
+ fingerprint,
375
+ noteSignature,
376
+ lineMergeBoundary,
377
+ String(orderDetailId)
378
+ ].join("#");
379
+ }
380
+ if (bookingUid !== void 0 && bookingUid !== null && String(bookingUid) !== "") {
381
+ return [
382
+ item.product_id,
383
+ item.product_variant_id ?? 0,
384
+ fingerprint,
385
+ noteSignature,
386
+ lineMergeBoundary,
387
+ String(bookingUid)
388
+ ].join("#");
389
+ }
390
+ return [
391
+ item.product_id,
392
+ item.product_variant_id ?? 0,
393
+ fingerprint,
394
+ noteSignature,
395
+ lineMergeBoundary
396
+ ].join("#");
397
+ }
398
+ function consolidateMainProductsForPromotion(entries) {
399
+ var _a, _b;
400
+ if (!Array.isArray(entries) || entries.length <= 1) {
401
+ return [...entries || []];
402
+ }
403
+ const groups = /* @__PURE__ */ new Map();
404
+ for (const { item, originalListIndex } of entries) {
405
+ const key = buildConsolidateKeyForPromotion(item);
406
+ const wasInPromotion = ((_b = (_a = item == null ? void 0 : item.metadata) == null ? void 0 : _a._promotion) == null ? void 0 : _b.inPromotion) === true;
407
+ const existing = groups.get(key);
408
+ if (!existing) {
409
+ const mergedItem = (0, import_lodash_es.cloneDeep)(item);
410
+ const metadata = mergedItem.metadata || {};
411
+ delete metadata._promotion;
412
+ mergedItem.metadata = metadata;
413
+ if (Array.isArray(mergedItem.product_bundle)) {
414
+ for (const bundle of mergedItem.product_bundle) {
415
+ if (bundle && typeof bundle === "object")
416
+ delete bundle._promotion;
417
+ }
418
+ }
419
+ if (wasInPromotion) {
420
+ mergedItem._wasInPromotionBeforeConsolidate = true;
421
+ }
422
+ groups.set(key, { item: mergedItem, originalListIndex });
423
+ continue;
424
+ }
425
+ existing.item.num = (0, import_utils2.getSafeProductNum)(
426
+ Number(existing.item.num || 0) + Number(item.num || 0)
427
+ );
428
+ if (wasInPromotion) {
429
+ existing.item._wasInPromotionBeforeConsolidate = true;
430
+ }
431
+ }
432
+ return Array.from(groups.values());
433
+ }
434
+ function splitXItemsPromoLinesByGroup(lines, strategyActionMap) {
435
+ var _a;
436
+ const result = [];
437
+ for (const line of lines) {
438
+ const promo = (_a = line == null ? void 0 : line.metadata) == null ? void 0 : _a._promotion;
439
+ if (!(promo == null ? void 0 : promo.inPromotion) || !promo.strategyId) {
440
+ result.push(line);
441
+ continue;
442
+ }
443
+ if (getPromotionActionType(promo) !== X_ITEMS_FOR_Y_PRICE) {
444
+ result.push(line);
445
+ continue;
446
+ }
447
+ const actionMeta = strategyActionMap.get(promo.strategyId);
448
+ const detail = (actionMeta == null ? void 0 : actionMeta.actionDetail) ?? promo.actionDetail;
449
+ const x = Number(detail == null ? void 0 : detail.x);
450
+ const num = Number(line.num || 0);
451
+ const isCumulative = (detail == null ? void 0 : detail.cumulative) !== false;
452
+ if (!isCumulative || !Number.isFinite(x) || x <= 0 || num <= x || num % x !== 0) {
453
+ result.push(line);
454
+ continue;
455
+ }
456
+ const groupCount = num / x;
457
+ for (let i = 0; i < groupCount; i++) {
458
+ const splitLine = (0, import_lodash_es.cloneDeep)(line);
459
+ splitLine.num = (0, import_utils2.getSafeProductNum)(x);
460
+ splitLine.metadata = {
461
+ ...splitLine.metadata || {},
462
+ unique_identification_number: (0, import_utils.createUuidV4)()
463
+ };
464
+ result.push(splitLine);
465
+ }
466
+ }
467
+ return result;
468
+ }
469
+ function generateNumericId() {
470
+ return Math.floor(Math.random() * 1e9) + Date.now();
471
+ }
472
+ function convertToPromotionProduct(product, index) {
473
+ const metadata = (product == null ? void 0 : product.metadata) || {};
474
+ const numericId = generateNumericId();
475
+ const originalItem = product;
476
+ return {
477
+ id: numericId,
478
+ product_id: Number((product == null ? void 0 : product.product_id) ?? 0) || 0,
479
+ product_variant_id: Number((product == null ? void 0 : product.product_variant_id) ?? 0) || 0,
480
+ name: metadata.product_name || (product == null ? void 0 : product.title) || "",
481
+ price: getOrderProductOriginalPriceForPromotion(product),
482
+ quantity: Number((product == null ? void 0 : product.num) ?? 1) || 1,
483
+ bundle: getProductBundleForEvaluator(product),
484
+ _originalItem: originalItem,
485
+ _originalId: getOrderProductUid(product),
486
+ _originalIndex: index
487
+ };
488
+ }
489
+ function calculateGiftActions(gifts, existingGifts) {
490
+ var _a, _b, _c;
491
+ const toAdd = [];
492
+ const toReduce = [];
493
+ const toRemove = [];
494
+ const existingByStrategy = /* @__PURE__ */ new Map();
495
+ for (const gift of existingGifts) {
496
+ const strategyId = (_a = getGiftInfo(gift)) == null ? void 0 : _a.strategyId;
497
+ if (!strategyId)
498
+ continue;
499
+ const existing = existingByStrategy.get(strategyId);
500
+ const qty = Number((gift == null ? void 0 : gift.num) ?? 1) || 1;
501
+ if (existing) {
502
+ existing.items.push(gift);
503
+ existing.totalQuantity += qty;
504
+ } else {
505
+ existingByStrategy.set(strategyId, { items: [gift], totalQuantity: qty });
506
+ }
507
+ }
508
+ const processedStrategyIds = /* @__PURE__ */ new Set();
509
+ for (const giftInfo of gifts) {
510
+ const { strategyId, strategyName, giftCount, giftOptions, sourceProductIds } = giftInfo;
511
+ processedStrategyIds.add(strategyId);
512
+ const existing = existingByStrategy.get(strategyId);
513
+ const existingCount = (existing == null ? void 0 : existing.totalQuantity) ?? 0;
514
+ const diff = giftCount - existingCount;
515
+ if (diff > 0) {
516
+ const lastEvaluated = (_c = getGiftInfo((_b = existing == null ? void 0 : existing.items) == null ? void 0 : _b[0])) == null ? void 0 : _c.lastEvaluatedGiftCount;
517
+ const strategyChanged = lastEvaluated === void 0 || giftCount !== lastEvaluated;
518
+ if (strategyChanged) {
519
+ toAdd.push({
520
+ strategyId,
521
+ strategyName,
522
+ giftCount: diff,
523
+ giftOptions,
524
+ sourceProductIds
525
+ });
526
+ }
527
+ } else if (diff < 0) {
528
+ let remaining = Math.abs(diff);
529
+ const reduceItems = [];
530
+ const removeIds = [];
531
+ const reversed = [...(existing == null ? void 0 : existing.items) || []].reverse();
532
+ for (const giftItem of reversed) {
533
+ if (remaining <= 0)
534
+ break;
535
+ const uid = getOrderProductUid(giftItem);
536
+ const qty = Number((giftItem == null ? void 0 : giftItem.num) ?? 1) || 1;
537
+ if (qty <= remaining) {
538
+ removeIds.push(uid);
539
+ remaining -= qty;
540
+ } else {
541
+ reduceItems.push({ uid, currentQuantity: qty, newQuantity: qty - remaining });
542
+ remaining = 0;
543
+ }
544
+ }
545
+ if (reduceItems.length > 0)
546
+ toReduce.push({ strategyId, items: reduceItems });
547
+ toRemove.push(...removeIds);
548
+ }
549
+ }
550
+ for (const [strategyId, existing] of existingByStrategy) {
551
+ if (processedStrategyIds.has(strategyId))
552
+ continue;
553
+ for (const giftItem of existing.items) {
554
+ toRemove.push(getOrderProductUid(giftItem));
555
+ }
556
+ }
557
+ return { toAdd, toReduce, toRemove };
558
+ }
559
+ function extractProductMatchIdentifiersFromStrategyConfig(strategyConfig) {
560
+ var _a;
561
+ const rules = (_a = strategyConfig == null ? void 0 : strategyConfig.conditions) == null ? void 0 : _a.rules;
562
+ if (!Array.isArray(rules))
563
+ return [];
564
+ for (const rule of rules) {
565
+ if ((rule == null ? void 0 : rule.field) === "productIdAndVariantId" && ((rule == null ? void 0 : rule.operator) === "product_match" || (rule == null ? void 0 : rule.operator) === "object_in") && Array.isArray(rule == null ? void 0 : rule.value)) {
566
+ return rule.value.map((item) => ({
567
+ product_id: Number(item == null ? void 0 : item.product_id) || 0,
568
+ product_variant_id: Number(item == null ? void 0 : item.product_variant_id) || 0
569
+ })).filter((item) => item.product_id > 0);
570
+ }
571
+ }
572
+ return [];
573
+ }
574
+ function resolveStrategyRequiredQuantity(matched) {
575
+ const preset = Number(matched.requiredQuantity);
576
+ if (Number.isFinite(preset) && preset > 0)
577
+ return preset;
578
+ const detail = matched.actionDetail || {};
579
+ if (matched.actionType === "X_ITEMS_FOR_Y_PRICE") {
580
+ return Number(detail.x) || 2;
581
+ }
582
+ if (matched.actionType === "BUY_X_GET_Y_FREE") {
583
+ return Number(detail.buyQuantity) || 1;
584
+ }
585
+ return 1;
586
+ }
587
+ function resolveStrategyEligibleProducts(matched) {
588
+ if (Array.isArray(matched.eligibleProducts) && matched.eligibleProducts.length > 0) {
589
+ return matched.eligibleProducts;
590
+ }
591
+ return extractProductMatchIdentifiersFromStrategyConfig(matched.strategyConfig);
592
+ }
593
+ function calculateUnfulfilledPromotions(processedProducts, applicableStrategiesResult, mainProducts) {
594
+ var _a, _b;
595
+ const unfulfilledMap = /* @__PURE__ */ new Map();
596
+ for (let i = 0; i < processedProducts.length; i++) {
597
+ const product = processedProducts[i];
598
+ const promotion = (_a = product == null ? void 0 : product.metadata) == null ? void 0 : _a._promotion;
599
+ if (!promotion || promotion.inPromotion !== false)
600
+ continue;
601
+ const strategyId = promotion.strategyId;
602
+ if (!strategyId)
603
+ continue;
604
+ const lookupUid = String(
605
+ (product == null ? void 0 : product._originalProductUid) ?? ((_b = product == null ? void 0 : product.metadata) == null ? void 0 : _b.unique_identification_number) ?? ""
606
+ );
607
+ const originalIndex = mainProducts.findIndex(
608
+ (item) => getOrderProductUid(item) === lookupUid
609
+ );
610
+ if (originalIndex === -1)
611
+ continue;
612
+ const strategyData = applicableStrategiesResult[originalIndex];
613
+ if (!strategyData || !strategyData.hasApplicableStrategy)
614
+ continue;
615
+ const matched = strategyData.applicableStrategies.find(
616
+ (s) => s.strategyId === strategyId
617
+ );
618
+ if (!matched)
619
+ continue;
620
+ const quantity = Number((product == null ? void 0 : product.num) ?? 1) || 1;
621
+ if (unfulfilledMap.has(strategyId)) {
622
+ unfulfilledMap.get(strategyId).currentQuantity += quantity;
623
+ } else {
624
+ unfulfilledMap.set(strategyId, {
625
+ strategyId,
626
+ strategyName: matched.strategyName,
627
+ actionType: matched.actionType,
628
+ currentQuantity: quantity,
629
+ requiredQuantity: resolveStrategyRequiredQuantity(matched),
630
+ needQuantity: 0,
631
+ eligibleProducts: resolveStrategyEligibleProducts(matched),
632
+ strategyMetadata: matched.strategyMetadata,
633
+ display: matched.display
634
+ });
635
+ }
636
+ }
637
+ const result = [];
638
+ for (const data of unfulfilledMap.values()) {
639
+ const needQuantity = data.requiredQuantity - data.currentQuantity;
640
+ if (needQuantity > 0) {
641
+ result.push({ ...data, needQuantity });
642
+ }
643
+ }
644
+ return result;
645
+ }
646
+ function appendPromotionTags(products, evaluator) {
647
+ if (!Array.isArray(products) || products.length === 0 || !evaluator) {
648
+ return products || [];
649
+ }
650
+ const evaluatorInput = products.map((item, index) => ({
651
+ id: index,
652
+ product_id: Number((item == null ? void 0 : item.id) ?? (item == null ? void 0 : item.product_id) ?? 0) || 0,
653
+ product_variant_id: Number((item == null ? void 0 : item.product_variant_id) ?? 0) || 0,
654
+ name: (item == null ? void 0 : item.title) || (item == null ? void 0 : item.name) || "",
655
+ price: Number((item == null ? void 0 : item.price) ?? 0) || 0,
656
+ quantity: Number((item == null ? void 0 : item.quantity) ?? 1) || 1,
657
+ bundle: []
658
+ }));
659
+ const strategies = evaluator.getProductsApplicableStrategies(
660
+ { products: evaluatorInput },
661
+ false
662
+ );
663
+ return products.map((item, index) => {
664
+ const data = strategies[index];
665
+ const tags = [];
666
+ if (data == null ? void 0 : data.hasApplicableStrategy) {
667
+ for (const strategy of data.applicableStrategies) {
668
+ if (strategy.display) {
669
+ tags.push({
670
+ text: strategy.display.text,
671
+ type: strategy.display.type,
672
+ strategyId: strategy.strategyId
673
+ });
674
+ }
675
+ }
676
+ }
677
+ if (tags.length === 0) {
678
+ const { _promotionTags, ...rest } = item;
679
+ return rest;
680
+ }
681
+ return { ...item, _promotionTags: tags };
682
+ });
683
+ }
684
+ function processCartPromotion(list, evaluator, options) {
685
+ var _a, _b, _c, _d, _e, _f, _g, _h;
686
+ const empty = {
687
+ products: Array.isArray(list) ? [...list] : [],
688
+ totalDiscount: 0,
689
+ gifts: [],
690
+ giftActions: { toAdd: [], toReduce: [], toRemove: [] },
691
+ unfulfilledPromotions: []
692
+ };
693
+ if (!list || list.length === 0 || !evaluator)
694
+ return empty;
695
+ const mainProductsWithIndex = [];
696
+ const existingGiftsWithIndex = [];
697
+ const editProductsWithIndex = [];
698
+ for (let i = 0; i < list.length; i++) {
699
+ const item = list[i];
700
+ const giftInfo = getGiftInfo(item);
701
+ if (isPersistedGeneratedVoucher(item)) {
702
+ editProductsWithIndex.push({ item, originalListIndex: i });
703
+ } else if (giftInfo) {
704
+ existingGiftsWithIndex.push({ item, originalListIndex: i });
705
+ } else if ((item == null ? void 0 : item.booking_id) !== void 0 && (item == null ? void 0 : item.booking_id) !== null && item.booking_id !== 0 && item.booking_id !== "0") {
706
+ editProductsWithIndex.push({ item, originalListIndex: i });
707
+ } else {
708
+ mainProductsWithIndex.push({ item, originalListIndex: i });
709
+ }
710
+ }
711
+ const consolidatedMainProductsWithIndex = consolidateMainProductsForPromotion(
712
+ mainProductsWithIndex
713
+ );
714
+ const mainProducts = consolidatedMainProductsWithIndex.map((x) => x.item);
715
+ const existingGifts = existingGiftsWithIndex.map((x) => x.item);
716
+ if (mainProducts.length === 0) {
717
+ const editProducts = editProductsWithIndex.map((x) => x.item);
718
+ if (existingGifts.length > 0) {
719
+ const toRemove = [];
720
+ for (const gift of existingGifts) {
721
+ const uid = getOrderProductUid(gift);
722
+ if (uid)
723
+ toRemove.push(uid);
724
+ }
725
+ return {
726
+ products: editProducts,
727
+ totalDiscount: 0,
728
+ gifts: [],
729
+ giftActions: { toAdd: [], toReduce: [], toRemove },
730
+ unfulfilledPromotions: []
731
+ };
732
+ }
733
+ return {
734
+ ...empty,
735
+ products: editProducts.length > 0 ? editProducts : [...list]
736
+ };
737
+ }
738
+ const promotionProducts = [];
739
+ const originalItemMap = /* @__PURE__ */ new Map();
740
+ const productsForStrategies = consolidatedMainProductsWithIndex.map(({ item }, i) => {
741
+ var _a2;
742
+ return {
743
+ id: i,
744
+ product_id: Number((item == null ? void 0 : item.product_id) ?? 0) || 0,
745
+ product_variant_id: Number((item == null ? void 0 : item.product_variant_id) ?? 0) || 0,
746
+ name: ((_a2 = item == null ? void 0 : item.metadata) == null ? void 0 : _a2.product_name) || (item == null ? void 0 : item.title) || "",
747
+ price: getOrderProductBasePrice(item),
748
+ quantity: Number((item == null ? void 0 : item.num) ?? 1) || 1,
749
+ bundle: getProductBundleForEvaluator(item)
750
+ };
751
+ });
752
+ for (let i = 0; i < consolidatedMainProductsWithIndex.length; i++) {
753
+ const { item, originalListIndex } = consolidatedMainProductsWithIndex[i];
754
+ const promotionProduct = convertToPromotionProduct(item, originalListIndex);
755
+ promotionProducts.push(promotionProduct);
756
+ originalItemMap.set(promotionProduct.id, { item, index: originalListIndex });
757
+ }
758
+ const applicableStrategiesResult = evaluator.getProductsApplicableStrategies({
759
+ products: productsForStrategies,
760
+ channel: options == null ? void 0 : options.channel
761
+ });
762
+ const strategyActionMap = /* @__PURE__ */ new Map();
763
+ for (const row of applicableStrategiesResult || []) {
764
+ for (const strategy of (row == null ? void 0 : row.applicableStrategies) || []) {
765
+ if (!(strategy == null ? void 0 : strategy.strategyId))
766
+ continue;
767
+ strategyActionMap.set(strategy.strategyId, {
768
+ actionType: strategy.actionType,
769
+ actionDetail: strategy.actionDetail
770
+ });
771
+ }
772
+ }
773
+ const result = evaluator.evaluateCartWithPricing({
774
+ products: promotionProducts,
775
+ channel: options == null ? void 0 : options.channel
776
+ });
777
+ const strategySourceProductIds = /* @__PURE__ */ new Map();
778
+ for (const priced of result.products) {
779
+ if (priced.inPromotion && priced.strategyId) {
780
+ const sourceId = priced.originalId ?? priced.id;
781
+ const originalData = originalItemMap.get(sourceId);
782
+ if (originalData) {
783
+ const uid = getOrderProductUid(originalData.item);
784
+ if (!uid)
785
+ continue;
786
+ const arr = strategySourceProductIds.get(priced.strategyId) || [];
787
+ if (!arr.includes(uid))
788
+ arr.push(uid);
789
+ strategySourceProductIds.set(priced.strategyId, arr);
790
+ }
791
+ }
792
+ }
793
+ const extendedGifts = result.gifts.map((gift) => ({
794
+ ...gift,
795
+ sourceProductIds: strategySourceProductIds.get(gift.strategyId) || []
796
+ }));
797
+ const strategyGiftInfoMap = /* @__PURE__ */ new Map();
798
+ for (const gift of extendedGifts)
799
+ strategyGiftInfoMap.set(gift.strategyId, gift);
800
+ const strategyGiftInfoOwner = /* @__PURE__ */ new Map();
801
+ const processedProducts = [];
802
+ for (const priced of result.products) {
803
+ const rawSourceId = priced.originalId ?? priced.id;
804
+ const sourceId = Number(rawSourceId);
805
+ const originalData = Number.isFinite(sourceId) ? originalItemMap.get(sourceId) : void 0;
806
+ if (!originalData)
807
+ continue;
808
+ const { item: originalItem, index: originalIndex } = originalData;
809
+ const pricedProductId = Number(priced.product_id ?? 0);
810
+ const originalProductId = Number(originalItem.product_id ?? 0);
811
+ if (pricedProductId > 0 && originalProductId > 0 && pricedProductId !== originalProductId) {
812
+ continue;
813
+ }
814
+ const newItem = (0, import_lodash_es.cloneDeep)(originalItem);
815
+ const metadata = newItem.metadata || {};
816
+ const sourceCartNum = (0, import_utils2.getSafeProductNum)(originalItem.num);
817
+ newItem._sourceCartNum = sourceCartNum;
818
+ const wasInPromotion = ((_a = metadata._promotion) == null ? void 0 : _a.inPromotion) === true || originalItem._wasInPromotionBeforeConsolidate === true;
819
+ delete metadata._promotion;
820
+ if (Array.isArray(newItem.product_bundle)) {
821
+ for (const b of newItem.product_bundle) {
822
+ if (b && typeof b === "object")
823
+ delete b._promotion;
824
+ }
825
+ }
826
+ const originalBasePrice = getOrderProductOriginalPriceForPromotion(originalItem);
827
+ const shouldModifyPrice = priced.inPromotion || wasInPromotion;
828
+ const priceUnchangedPromo = priced.inPromotion && Number(priced.finalPrice) === Number(originalBasePrice);
829
+ if (shouldModifyPrice) {
830
+ if (priced.inPromotion && !priceUnchangedPromo) {
831
+ const promoUnitPrice = new import_decimal.default(priced.finalPrice).toDecimalPlaces(2).toFixed(2);
832
+ applyPromoUnitPriceToLine(newItem, {
833
+ promoUnitPrice,
834
+ originalBasePrice,
835
+ strategyTitle: (_b = priced.strategyMetadata) == null ? void 0 : _b.name
836
+ });
837
+ } else {
838
+ const optionSum = (0, import_utils.sumOptionUnitPrice)((0, import_utils.getProductSkuOptions)(newItem)).toNumber();
839
+ const sourceRestore = new import_decimal.default(originalBasePrice).toDecimalPlaces(2).toFixed(2);
840
+ const mainRestore = new import_decimal.default(Number(sourceRestore) || 0).plus(optionSum).toDecimalPlaces(2).toFixed(2);
841
+ metadata.source_product_price = sourceRestore;
842
+ metadata.main_product_selling_price = mainRestore;
843
+ metadata.price_schema_version = 2;
844
+ newItem.selling_price = (0, import_utils.composeLinePrice)({
845
+ mainPrice: mainRestore,
846
+ bundle: newItem.product_bundle
847
+ });
848
+ updatePromotionDiscountList(newItem, null);
849
+ }
850
+ }
851
+ newItem.num = priced.isSplit ? (0, import_utils2.getSafeProductNum)(priced.quantity) : sourceCartNum;
852
+ if (priced.isSplit) {
853
+ metadata.unique_identification_number = (0, import_utils.createUuidV4)();
854
+ }
855
+ if (priced.strategyId) {
856
+ const actionMeta = strategyActionMap.get(priced.strategyId);
857
+ const promotionInfo = {
858
+ strategyId: priced.strategyId,
859
+ strategyMetadata: priced.strategyMetadata,
860
+ inPromotion: priced.inPromotion,
861
+ originalPrice: originalBasePrice,
862
+ finalPrice: priced.finalPrice,
863
+ actionType: actionMeta == null ? void 0 : actionMeta.actionType,
864
+ actionDetail: actionMeta == null ? void 0 : actionMeta.actionDetail
865
+ };
866
+ const bundleIdx = priced.matchedBundleIndex;
867
+ if (bundleIdx !== void 0 && Array.isArray(newItem.product_bundle) && newItem.product_bundle[bundleIdx]) {
868
+ newItem.product_bundle[bundleIdx]._promotion = promotionInfo;
869
+ } else {
870
+ metadata._promotion = promotionInfo;
871
+ }
872
+ }
873
+ newItem.metadata = metadata;
874
+ if (priced.inPromotion && priced.strategyId) {
875
+ const gift = strategyGiftInfoMap.get(priced.strategyId);
876
+ if (gift && Array.isArray(gift.giftOptions) && gift.giftOptions.length > 0 && !strategyGiftInfoOwner.has(priced.strategyId)) {
877
+ const giftInfoData = {
878
+ strategyName: gift.strategyName,
879
+ giftCount: gift.giftCount,
880
+ giftOptions: gift.giftOptions
881
+ };
882
+ const bundleIdx = priced.matchedBundleIndex;
883
+ if (bundleIdx !== void 0 && Array.isArray(newItem.product_bundle) && ((_c = newItem.product_bundle[bundleIdx]) == null ? void 0 : _c._promotion)) {
884
+ newItem.product_bundle[bundleIdx]._promotion.giftInfo = giftInfoData;
885
+ } else if (metadata._promotion) {
886
+ metadata._promotion.giftInfo = giftInfoData;
887
+ }
888
+ strategyGiftInfoOwner.set(
889
+ priced.strategyId,
890
+ getOrderProductUid(newItem)
891
+ );
892
+ }
893
+ }
894
+ newItem._sortIndex = originalIndex;
895
+ newItem._sortSubIndex = priced.inPromotion ? 0 : 1;
896
+ newItem._originalProductUid = getOrderProductUid(originalItem);
897
+ processedProducts.push(newItem);
898
+ }
899
+ for (const { item, originalListIndex } of existingGiftsWithIndex) {
900
+ const next = item;
901
+ next._sortIndex = originalListIndex;
902
+ next._sortSubIndex = 0;
903
+ const strategyId = (_d = getGiftInfo(next)) == null ? void 0 : _d.strategyId;
904
+ if (strategyId) {
905
+ const latest = strategyGiftInfoMap.get(strategyId);
906
+ const owner = strategyGiftInfoOwner.get(strategyId);
907
+ if (latest && ((_e = next.metadata) == null ? void 0 : _e._giftInfo)) {
908
+ next.metadata._giftInfo.sourceProductIds = latest.sourceProductIds;
909
+ }
910
+ if (owner && ((_f = next.metadata) == null ? void 0 : _f._giftInfo)) {
911
+ next.metadata._giftInfo.sourceProductId = owner;
912
+ }
913
+ }
914
+ processedProducts.push(next);
915
+ }
916
+ for (const { item, originalListIndex } of editProductsWithIndex) {
917
+ const next = item;
918
+ next._sortIndex = originalListIndex;
919
+ next._sortSubIndex = 0;
920
+ processedProducts.push(next);
921
+ }
922
+ processedProducts.sort((a, b) => {
923
+ if (a._sortIndex !== b._sortIndex)
924
+ return a._sortIndex - b._sortIndex;
925
+ return a._sortSubIndex - b._sortSubIndex;
926
+ });
927
+ const dedupedPromotionLines = dedupePromotionProcessedLines(processedProducts);
928
+ processedProducts.splice(0, processedProducts.length, ...dedupedPromotionLines);
929
+ const mergedPromotionLines = mergeIdenticalPromotionCartLines(processedProducts);
930
+ processedProducts.splice(0, processedProducts.length, ...mergedPromotionLines);
931
+ const splitPromoLines = splitXItemsPromoLinesByGroup(processedProducts, strategyActionMap);
932
+ processedProducts.splice(0, processedProducts.length, ...splitPromoLines);
933
+ for (const product of processedProducts) {
934
+ const metadata = product.metadata || {};
935
+ if (metadata._promotion)
936
+ continue;
937
+ if (getGiftInfo(product))
938
+ continue;
939
+ const lookupUid = String(product._originalProductUid ?? getOrderProductUid(product));
940
+ const originalIndex = mainProducts.findIndex(
941
+ (item) => getOrderProductUid(item) === lookupUid
942
+ );
943
+ if (originalIndex === -1)
944
+ continue;
945
+ const strategyData = applicableStrategiesResult[originalIndex];
946
+ if (!strategyData || !strategyData.hasApplicableStrategy)
947
+ continue;
948
+ const first = strategyData.applicableStrategies[0];
949
+ if (!first)
950
+ continue;
951
+ const originalPrice = getOrderProductOriginalPriceForPromotion(mainProducts[originalIndex]);
952
+ metadata._promotion = {
953
+ strategyId: first.strategyId,
954
+ strategyMetadata: first.strategyMetadata,
955
+ inPromotion: false,
956
+ originalPrice,
957
+ finalPrice: originalPrice
958
+ };
959
+ product.metadata = metadata;
960
+ }
961
+ const giftActions = calculateGiftActions(extendedGifts, existingGifts);
962
+ for (const gift of existingGifts) {
963
+ const strategyId = (_g = getGiftInfo(gift)) == null ? void 0 : _g.strategyId;
964
+ if (!strategyId)
965
+ continue;
966
+ const latest = strategyGiftInfoMap.get(strategyId);
967
+ if (latest && ((_h = gift.metadata) == null ? void 0 : _h._giftInfo)) {
968
+ gift.metadata._giftInfo.lastEvaluatedGiftCount = latest.giftCount;
969
+ }
970
+ }
971
+ const unfulfilledPromotions = calculateUnfulfilledPromotions(
972
+ processedProducts,
973
+ applicableStrategiesResult,
974
+ mainProducts
975
+ );
976
+ for (const product of processedProducts) {
977
+ delete product._sortIndex;
978
+ delete product._sortSubIndex;
979
+ delete product._originalProductUid;
980
+ delete product._sourceCartNum;
981
+ delete product._wasInPromotionBeforeConsolidate;
982
+ }
983
+ return {
984
+ products: processedProducts,
985
+ totalDiscount: result.totalDiscount,
986
+ gifts: extendedGifts,
987
+ giftActions,
988
+ unfulfilledPromotions
989
+ };
990
+ }
991
+ // Annotate the CommonJS export names for ESM import in node:
992
+ 0 && (module.exports = {
993
+ appendPromotionTags,
994
+ buildConsolidateKeyForPromotion,
995
+ calculateUnfulfilledPromotions,
996
+ extractProductMatchIdentifiersFromStrategyConfig,
997
+ getOrderProductBasePrice,
998
+ getOrderProductOriginalPriceForPromotion,
999
+ getOrderProductUid,
1000
+ mergeIdenticalPromotionCartLines,
1001
+ processCartPromotion,
1002
+ resolveStrategyEligibleProducts,
1003
+ resolveStrategyRequiredQuantity
1004
+ });