@pisell/pisellos 0.0.568 → 0.0.570

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 (455) hide show
  1. package/dist/effects/index.d.ts +2 -2
  2. package/dist/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  3. package/dist/model/strategy/adapter/itemRule/type.d.ts +6 -6
  4. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  5. package/dist/model/strategy/adapter/promotion/type.d.ts +5 -5
  6. package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
  7. package/dist/model/strategy/type.d.ts +1 -1
  8. package/dist/modules/BaseModule.d.ts +2 -2
  9. package/dist/modules/BaseModule.js +4 -4
  10. package/dist/modules/BookingContext/index.d.ts +48 -0
  11. package/dist/modules/BookingContext/index.js +566 -0
  12. package/dist/modules/BookingContext/types.d.ts +102 -0
  13. package/dist/modules/BookingContext/types.js +51 -0
  14. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  15. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +302 -0
  16. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  17. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +149 -0
  18. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  19. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +249 -0
  20. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  21. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  22. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  23. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  24. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  25. package/dist/modules/BookingContext/utils/index.js +11 -0
  26. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  27. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  28. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  29. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  30. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  31. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  32. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  33. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  34. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  35. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  36. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  37. package/dist/modules/BookingContext/utils/resources.js +486 -0
  38. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  39. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  40. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  41. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  42. package/dist/modules/Cart/utils/cartProduct.js +26 -5
  43. package/dist/modules/Cart/utils/changePrice.js +27 -20
  44. package/dist/modules/Customer/index.d.ts +20 -0
  45. package/dist/modules/Customer/index.js +172 -83
  46. package/dist/modules/Customer/types.d.ts +3 -1
  47. package/dist/modules/Discount/index.d.ts +2 -1
  48. package/dist/modules/Discount/index.js +37 -9
  49. package/dist/modules/Discount/types.d.ts +2 -1
  50. package/dist/modules/Holder/types.d.ts +1 -1
  51. package/dist/modules/OpenData/index.d.ts +8 -0
  52. package/dist/modules/OpenData/index.js +36 -16
  53. package/dist/modules/OpenData/types.d.ts +1 -1
  54. package/dist/modules/Order/index.d.ts +448 -23
  55. package/dist/modules/Order/index.js +5417 -561
  56. package/dist/modules/Order/types.d.ts +693 -88
  57. package/dist/modules/Order/types.js +68 -1
  58. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  59. package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
  60. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  61. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  62. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  63. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  64. package/dist/modules/Order/utils.d.ts +167 -18
  65. package/dist/modules/Order/utils.js +960 -165
  66. package/dist/modules/Payment/index.d.ts +10 -9
  67. package/dist/modules/Payment/index.js +465 -703
  68. package/dist/modules/Payment/types.d.ts +47 -23
  69. package/dist/modules/Payment/utils.d.ts +1 -1
  70. package/dist/modules/Payment/utils.js +4 -3
  71. package/dist/modules/Payment/walletpass.js +44 -29
  72. package/dist/modules/Product/index.d.ts +1 -1
  73. package/dist/modules/Product/types.d.ts +29 -7
  74. package/dist/modules/ProductList/index.d.ts +17 -13
  75. package/dist/modules/ProductList/index.js +184 -74
  76. package/dist/modules/ProductList/types.d.ts +17 -0
  77. package/dist/modules/Quotation/index.d.ts +22 -2
  78. package/dist/modules/Quotation/index.js +108 -42
  79. package/dist/modules/Quotation/types.d.ts +19 -0
  80. package/dist/modules/ResourcePlanner/index.d.ts +24 -0
  81. package/dist/modules/ResourcePlanner/index.js +181 -0
  82. package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
  83. package/dist/modules/ResourcePlanner/planner.js +1069 -0
  84. package/dist/modules/ResourcePlanner/types.d.ts +227 -0
  85. package/dist/modules/ResourcePlanner/types.js +1 -0
  86. package/dist/modules/Rules/index.d.ts +8 -10
  87. package/dist/modules/Rules/index.js +222 -109
  88. package/dist/modules/Rules/types.d.ts +15 -4
  89. package/dist/modules/SalesSummary/index.d.ts +23 -26
  90. package/dist/modules/SalesSummary/index.js +152 -46
  91. package/dist/modules/SalesSummary/types.d.ts +9 -1
  92. package/dist/modules/SalesSummary/utils.d.ts +3 -22
  93. package/dist/modules/SalesSummary/utils.js +803 -163
  94. package/dist/modules/ScanOrderLogger/types.d.ts +2 -2
  95. package/dist/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  96. package/dist/modules/Schedule/getDateIsInSchedule.js +14 -7
  97. package/dist/modules/Schedule/index.d.ts +18 -5
  98. package/dist/modules/Schedule/index.js +78 -24
  99. package/dist/modules/Schedule/type.d.ts +7 -7
  100. package/dist/modules/Schedule/types.d.ts +11 -9
  101. package/dist/modules/Summary/index.js +4 -3
  102. package/dist/modules/SurchargeList/index.d.ts +18 -0
  103. package/dist/modules/SurchargeList/index.js +185 -0
  104. package/dist/modules/SurchargeList/types.d.ts +15 -0
  105. package/dist/modules/SurchargeList/types.js +1 -0
  106. package/dist/modules/index.d.ts +3 -0
  107. package/dist/modules/index.js +4 -1
  108. package/dist/plugins/app.d.ts +2 -0
  109. package/dist/plugins/request.d.ts +3 -2
  110. package/dist/server/index.d.ts +462 -8
  111. package/dist/server/index.js +6112 -656
  112. package/dist/server/modules/floor-plan/index.d.ts +39 -0
  113. package/dist/server/modules/floor-plan/index.js +595 -0
  114. package/dist/server/modules/floor-plan/types.d.ts +43 -0
  115. package/dist/server/modules/floor-plan/types.js +13 -0
  116. package/dist/server/modules/index.d.ts +7 -2
  117. package/dist/server/modules/index.js +6 -0
  118. package/dist/server/modules/menu/types.d.ts +1 -1
  119. package/dist/server/modules/order/index.d.ts +207 -14
  120. package/dist/server/modules/order/index.js +2326 -379
  121. package/dist/server/modules/order/types.d.ts +91 -20
  122. package/dist/server/modules/order/types.js +14 -1
  123. package/dist/server/modules/order/utils/filterBookings.d.ts +7 -1
  124. package/dist/server/modules/order/utils/filterBookings.js +118 -11
  125. package/dist/server/modules/order/utils/filterOrders.js +242 -14
  126. package/dist/server/modules/payment/index.d.ts +28 -0
  127. package/dist/server/modules/payment/index.js +305 -0
  128. package/dist/server/modules/payment/types.d.ts +9 -0
  129. package/dist/server/modules/payment/types.js +1 -0
  130. package/dist/server/modules/products/index.d.ts +105 -14
  131. package/dist/server/modules/products/index.js +1393 -516
  132. package/dist/server/modules/products/types.d.ts +35 -2
  133. package/dist/server/modules/products/types.js +4 -0
  134. package/dist/server/modules/quotation/index.d.ts +39 -0
  135. package/dist/server/modules/quotation/index.js +278 -66
  136. package/dist/server/modules/resource/index.d.ts +2 -3
  137. package/dist/server/modules/resource/index.js +108 -86
  138. package/dist/server/modules/resource/types.d.ts +1 -1
  139. package/dist/server/modules/schedule/index.d.ts +6 -4
  140. package/dist/server/modules/schedule/index.js +116 -85
  141. package/dist/server/modules/schedule/utils.d.ts +1 -1
  142. package/dist/server/test.json +713 -0
  143. package/dist/server/types.d.ts +6 -4
  144. package/dist/server/utils/product.js +2 -2
  145. package/dist/server/utils/small-ticket.d.ts +71 -0
  146. package/dist/server/utils/small-ticket.js +963 -0
  147. package/dist/solution/BaseSales/index.d.ts +378 -0
  148. package/dist/solution/BaseSales/index.js +4006 -0
  149. package/dist/solution/BaseSales/types.d.ts +394 -0
  150. package/dist/solution/BaseSales/types.js +40 -0
  151. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  152. package/dist/solution/BaseSales/utils/cartPromotion.js +1450 -0
  153. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  154. package/dist/solution/BaseSales/utils/parseSalesResponse.js +157 -0
  155. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  156. package/dist/solution/BaseSales/utils/quotationPrice.js +250 -0
  157. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  158. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +218 -0
  159. package/dist/solution/BaseSales/utils.d.ts +40 -0
  160. package/dist/solution/BaseSales/utils.js +263 -0
  161. package/dist/solution/BookingByStep/index.d.ts +2 -2
  162. package/dist/solution/BookingByStep/utils/resources.d.ts +1 -1
  163. package/dist/solution/BookingTicket/index.d.ts +382 -25
  164. package/dist/solution/BookingTicket/index.js +2506 -443
  165. package/dist/solution/BookingTicket/types.d.ts +191 -6
  166. package/dist/solution/BookingTicket/types.js +83 -10
  167. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  168. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  169. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  170. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  171. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  172. package/dist/solution/BookingTicket/utils/bookingStatus.js +136 -0
  173. package/dist/solution/BookingTicket/utils/cartView.d.ts +29 -0
  174. package/dist/solution/BookingTicket/utils/cartView.js +209 -0
  175. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  176. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  177. package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  178. package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
  179. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  180. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  181. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  182. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  183. package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  184. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +41 -1
  185. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  186. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  187. package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  188. package/dist/solution/BookingTicket/utils/scan/handleScan.js +11 -3
  189. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  190. package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
  191. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  192. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  193. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  194. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  195. package/dist/solution/Checkout/index.d.ts +1 -0
  196. package/dist/solution/Checkout/index.js +25 -34
  197. package/dist/solution/Checkout/utils/index.js +4 -4
  198. package/dist/solution/RegisterAndLogin/config.js +2 -10
  199. package/dist/solution/Sales/index.d.ts +50 -5
  200. package/dist/solution/Sales/index.js +484 -92
  201. package/dist/solution/Sales/types.d.ts +29 -5
  202. package/dist/solution/ScanOrder/index.d.ts +27 -21
  203. package/dist/solution/ScanOrder/index.js +499 -434
  204. package/dist/solution/ScanOrder/types.d.ts +38 -16
  205. package/dist/solution/ScanOrder/types.js +4 -5
  206. package/dist/solution/ScanOrder/utils.d.ts +4 -1
  207. package/dist/solution/ScanOrder/utils.js +109 -34
  208. package/dist/solution/ShopDiscount/index.js +4 -4
  209. package/dist/solution/ShopDiscount/types.d.ts +1 -1
  210. package/dist/solution/ShopDiscount/utils.d.ts +2 -2
  211. package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
  212. package/dist/solution/UnifiedBookingSales/index.js +1871 -0
  213. package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
  214. package/dist/solution/UnifiedBookingSales/types.js +11 -0
  215. package/dist/solution/VenueBooking/index.d.ts +29 -20
  216. package/dist/solution/VenueBooking/index.js +301 -213
  217. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  218. package/dist/solution/VenueBooking/types.d.ts +1 -1
  219. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  220. package/dist/solution/VenueBooking/utils/slotMerge.js +9 -3
  221. package/dist/solution/index.d.ts +2 -0
  222. package/dist/solution/index.js +3 -1
  223. package/dist/types/index.d.ts +12 -2
  224. package/dist/utils/task.d.ts +2 -2
  225. package/dist/utils/watch.d.ts +2 -2
  226. package/lib/effects/index.d.ts +2 -2
  227. package/lib/model/strategy/adapter/dataVariant/type.d.ts +3 -3
  228. package/lib/model/strategy/adapter/itemRule/type.d.ts +6 -6
  229. package/lib/model/strategy/adapter/promotion/evaluator.js +3 -2
  230. package/lib/model/strategy/adapter/promotion/type.d.ts +5 -5
  231. package/lib/model/strategy/adapter/walletPass/utils.js +6 -4
  232. package/lib/model/strategy/type.d.ts +1 -1
  233. package/lib/modules/BaseModule.d.ts +2 -2
  234. package/lib/modules/BaseModule.js +4 -4
  235. package/lib/modules/BookingContext/index.d.ts +48 -0
  236. package/lib/modules/BookingContext/index.js +390 -0
  237. package/lib/modules/BookingContext/types.d.ts +102 -0
  238. package/lib/modules/BookingContext/types.js +48 -0
  239. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  240. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +286 -0
  241. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  242. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +148 -0
  243. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  244. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +242 -0
  245. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  246. package/lib/modules/BookingContext/utils/flexible.js +63 -0
  247. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  248. package/lib/modules/BookingContext/utils/formatResourceList.js +35 -0
  249. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  250. package/lib/modules/BookingContext/utils/index.js +126 -0
  251. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  252. package/lib/modules/BookingContext/utils/noResource.js +78 -0
  253. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  254. package/lib/modules/BookingContext/utils/orderLineDisplay.js +29 -0
  255. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  256. package/lib/modules/BookingContext/utils/productExtend.js +330 -0
  257. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  258. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  259. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  260. package/lib/modules/BookingContext/utils/resourceSelection.js +24 -0
  261. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  262. package/lib/modules/BookingContext/utils/resources.js +419 -0
  263. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  264. package/lib/modules/BookingContext/utils/serviceTimes.js +161 -0
  265. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  266. package/lib/modules/BookingContext/utils/timeSlices.js +114 -0
  267. package/lib/modules/Cart/utils/cartProduct.js +27 -5
  268. package/lib/modules/Cart/utils/changePrice.js +20 -14
  269. package/lib/modules/Customer/index.d.ts +20 -0
  270. package/lib/modules/Customer/index.js +63 -10
  271. package/lib/modules/Customer/types.d.ts +3 -1
  272. package/lib/modules/Discount/index.d.ts +2 -1
  273. package/lib/modules/Discount/index.js +18 -2
  274. package/lib/modules/Discount/types.d.ts +2 -1
  275. package/lib/modules/Holder/types.d.ts +1 -1
  276. package/lib/modules/OpenData/index.d.ts +8 -0
  277. package/lib/modules/OpenData/index.js +21 -3
  278. package/lib/modules/OpenData/types.d.ts +1 -1
  279. package/lib/modules/Order/index.d.ts +448 -23
  280. package/lib/modules/Order/index.js +3641 -308
  281. package/lib/modules/Order/types.d.ts +693 -88
  282. package/lib/modules/Order/types.js +55 -1
  283. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  284. package/lib/modules/Order/utils/bundleDiscountHydration.js +106 -0
  285. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  286. package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
  287. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  288. package/lib/modules/Order/utils/orderCollectionIdentity.js +353 -0
  289. package/lib/modules/Order/utils.d.ts +167 -18
  290. package/lib/modules/Order/utils.js +974 -138
  291. package/lib/modules/Payment/index.d.ts +10 -9
  292. package/lib/modules/Payment/index.js +30 -124
  293. package/lib/modules/Payment/types.d.ts +47 -23
  294. package/lib/modules/Payment/utils.d.ts +1 -1
  295. package/lib/modules/Payment/utils.js +4 -3
  296. package/lib/modules/Payment/walletpass.js +16 -6
  297. package/lib/modules/Product/index.d.ts +1 -1
  298. package/lib/modules/Product/types.d.ts +29 -7
  299. package/lib/modules/ProductList/index.d.ts +17 -13
  300. package/lib/modules/ProductList/index.js +92 -51
  301. package/lib/modules/ProductList/types.d.ts +17 -0
  302. package/lib/modules/Quotation/index.d.ts +22 -2
  303. package/lib/modules/Quotation/index.js +76 -20
  304. package/lib/modules/Quotation/types.d.ts +19 -0
  305. package/lib/modules/ResourcePlanner/index.d.ts +24 -0
  306. package/lib/modules/ResourcePlanner/index.js +147 -0
  307. package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
  308. package/lib/modules/ResourcePlanner/planner.js +895 -0
  309. package/lib/modules/ResourcePlanner/types.d.ts +227 -0
  310. package/lib/modules/ResourcePlanner/types.js +5 -0
  311. package/lib/modules/Rules/index.d.ts +8 -10
  312. package/lib/modules/Rules/index.js +153 -61
  313. package/lib/modules/Rules/types.d.ts +15 -4
  314. package/lib/modules/SalesSummary/index.d.ts +23 -26
  315. package/lib/modules/SalesSummary/index.js +84 -16
  316. package/lib/modules/SalesSummary/types.d.ts +9 -1
  317. package/lib/modules/SalesSummary/utils.d.ts +3 -22
  318. package/lib/modules/SalesSummary/utils.js +616 -111
  319. package/lib/modules/ScanOrderLogger/types.d.ts +2 -2
  320. package/lib/modules/Schedule/getDateIsInSchedule.d.ts +1 -1
  321. package/lib/modules/Schedule/getDateIsInSchedule.js +14 -7
  322. package/lib/modules/Schedule/index.d.ts +18 -5
  323. package/lib/modules/Schedule/index.js +49 -14
  324. package/lib/modules/Schedule/type.d.ts +7 -7
  325. package/lib/modules/Schedule/types.d.ts +11 -9
  326. package/lib/modules/Summary/index.js +2 -2
  327. package/lib/modules/SurchargeList/index.d.ts +18 -0
  328. package/lib/modules/SurchargeList/index.js +95 -0
  329. package/lib/modules/SurchargeList/types.d.ts +15 -0
  330. package/lib/modules/SurchargeList/types.js +5 -0
  331. package/lib/modules/index.d.ts +3 -0
  332. package/lib/modules/index.js +33 -0
  333. package/lib/plugins/app.d.ts +2 -0
  334. package/lib/plugins/request.d.ts +3 -2
  335. package/lib/server/index.d.ts +462 -8
  336. package/lib/server/index.js +3901 -205
  337. package/lib/server/modules/floor-plan/index.d.ts +39 -0
  338. package/lib/server/modules/floor-plan/index.js +306 -0
  339. package/lib/server/modules/floor-plan/types.d.ts +43 -0
  340. package/lib/server/modules/floor-plan/types.js +19 -0
  341. package/lib/server/modules/index.d.ts +7 -2
  342. package/lib/server/modules/index.js +21 -0
  343. package/lib/server/modules/menu/types.d.ts +1 -1
  344. package/lib/server/modules/order/index.d.ts +207 -14
  345. package/lib/server/modules/order/index.js +1324 -141
  346. package/lib/server/modules/order/types.d.ts +91 -20
  347. package/lib/server/modules/order/types.js +11 -1
  348. package/lib/server/modules/order/utils/filterBookings.d.ts +7 -1
  349. package/lib/server/modules/order/utils/filterBookings.js +119 -11
  350. package/lib/server/modules/order/utils/filterOrders.js +238 -13
  351. package/lib/server/modules/payment/index.d.ts +28 -0
  352. package/lib/server/modules/payment/index.js +168 -0
  353. package/lib/server/modules/payment/types.d.ts +9 -0
  354. package/lib/server/modules/payment/types.js +5 -0
  355. package/lib/server/modules/products/index.d.ts +105 -14
  356. package/lib/server/modules/products/index.js +588 -97
  357. package/lib/server/modules/products/types.d.ts +35 -2
  358. package/lib/server/modules/products/types.js +3 -0
  359. package/lib/server/modules/quotation/index.d.ts +39 -0
  360. package/lib/server/modules/quotation/index.js +145 -1
  361. package/lib/server/modules/resource/index.d.ts +2 -3
  362. package/lib/server/modules/resource/index.js +71 -45
  363. package/lib/server/modules/resource/types.d.ts +1 -1
  364. package/lib/server/modules/schedule/index.d.ts +6 -4
  365. package/lib/server/modules/schedule/index.js +55 -44
  366. package/lib/server/modules/schedule/utils.d.ts +1 -1
  367. package/lib/server/test.json +713 -0
  368. package/lib/server/types.d.ts +6 -4
  369. package/lib/server/utils/product.js +2 -2
  370. package/lib/server/utils/small-ticket.d.ts +71 -0
  371. package/lib/server/utils/small-ticket.js +926 -0
  372. package/lib/solution/BaseSales/index.d.ts +378 -0
  373. package/lib/solution/BaseSales/index.js +2367 -0
  374. package/lib/solution/BaseSales/types.d.ts +394 -0
  375. package/lib/solution/BaseSales/types.js +47 -0
  376. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  377. package/lib/solution/BaseSales/utils/cartPromotion.js +1155 -0
  378. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  379. package/lib/solution/BaseSales/utils/parseSalesResponse.js +140 -0
  380. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  381. package/lib/solution/BaseSales/utils/quotationPrice.js +231 -0
  382. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  383. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +215 -0
  384. package/lib/solution/BaseSales/utils.d.ts +40 -0
  385. package/lib/solution/BaseSales/utils.js +259 -0
  386. package/lib/solution/BookingByStep/index.d.ts +2 -2
  387. package/lib/solution/BookingByStep/utils/resources.d.ts +1 -1
  388. package/lib/solution/BookingTicket/index.d.ts +382 -25
  389. package/lib/solution/BookingTicket/index.js +1350 -76
  390. package/lib/solution/BookingTicket/types.d.ts +191 -6
  391. package/lib/solution/BookingTicket/types.js +71 -10
  392. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  393. package/lib/solution/BookingTicket/utils/addProductDecision.js +353 -0
  394. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  395. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +94 -0
  396. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  397. package/lib/solution/BookingTicket/utils/bookingStatus.js +136 -0
  398. package/lib/solution/BookingTicket/utils/cartView.d.ts +29 -0
  399. package/lib/solution/BookingTicket/utils/cartView.js +200 -0
  400. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  401. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  402. package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  403. package/lib/solution/BookingTicket/utils/orderCustomer.js +35 -0
  404. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  405. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +387 -0
  406. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  407. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +220 -0
  408. package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  409. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +24 -3
  410. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  411. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +64 -0
  412. package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  413. package/lib/solution/BookingTicket/utils/scan/handleScan.js +4 -2
  414. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  415. package/lib/solution/BookingTicket/utils/scan/index.js +14 -2
  416. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  417. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +115 -0
  418. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  419. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +83 -0
  420. package/lib/solution/Checkout/index.d.ts +1 -0
  421. package/lib/solution/Checkout/index.js +18 -19
  422. package/lib/solution/Checkout/utils/index.js +4 -4
  423. package/lib/solution/RegisterAndLogin/config.js +2 -10
  424. package/lib/solution/Sales/index.d.ts +50 -5
  425. package/lib/solution/Sales/index.js +296 -39
  426. package/lib/solution/Sales/types.d.ts +29 -5
  427. package/lib/solution/ScanOrder/index.d.ts +27 -21
  428. package/lib/solution/ScanOrder/index.js +144 -103
  429. package/lib/solution/ScanOrder/types.d.ts +38 -16
  430. package/lib/solution/ScanOrder/types.js +4 -5
  431. package/lib/solution/ScanOrder/utils.d.ts +4 -1
  432. package/lib/solution/ScanOrder/utils.js +98 -26
  433. package/lib/solution/ShopDiscount/index.js +3 -3
  434. package/lib/solution/ShopDiscount/types.d.ts +1 -1
  435. package/lib/solution/ShopDiscount/utils.d.ts +2 -2
  436. package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
  437. package/lib/solution/UnifiedBookingSales/index.js +1050 -0
  438. package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
  439. package/lib/solution/UnifiedBookingSales/types.js +14 -0
  440. package/lib/solution/VenueBooking/index.d.ts +29 -20
  441. package/lib/solution/VenueBooking/index.js +169 -94
  442. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  443. package/lib/solution/VenueBooking/types.d.ts +1 -1
  444. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  445. package/lib/solution/VenueBooking/utils/slotMerge.js +9 -3
  446. package/lib/solution/index.d.ts +2 -0
  447. package/lib/solution/index.js +22 -0
  448. package/lib/types/index.d.ts +12 -2
  449. package/lib/utils/task.d.ts +2 -2
  450. package/lib/utils/watch.d.ts +2 -2
  451. package/package.json +18 -19
  452. package/dist/model/strategy/adapter/promotion/index.d.ts +0 -4
  453. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  454. package/lib/model/strategy/adapter/promotion/index.d.ts +0 -4
  455. package/lib/solution/Checkout/appointmentDemo.json +0 -1
@@ -0,0 +1,353 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildCacheItemFromCartDetail = buildCacheItemFromCartDetail;
7
+ exports.buildCacheItemFromDetail = buildCacheItemFromDetail;
8
+ exports.buildRequiresDetailPayload = buildRequiresDetailPayload;
9
+ exports.decideAddProduct = decideAddProduct;
10
+ exports.decideAfterDetail = decideAfterDetail;
11
+ exports.decideAutoClose = decideAutoClose;
12
+ exports.getIsEject = getIsEject;
13
+ exports.getIsOnlySession = getIsOnlySession;
14
+ exports.prepareBookingCacheItem = prepareBookingCacheItem;
15
+ exports.transformDetailToProductAndBooking = transformDetailToProductAndBooking;
16
+ var _dayjs = _interopRequireDefault(require("dayjs"));
17
+ var _BookingContext = require("../../../modules/BookingContext");
18
+ var _transformBaseProductToOrderProduct = require("../../BaseSales/utils/transformBaseProductToOrderProduct");
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ /**
21
+ * cart.addProduct 两阶段决策(与 ticketBooking `handleSelectProduct` 对齐):
22
+ *
23
+ * 1. `requiresDetail`:规格 / SKU / 套餐 / Session / 称重弹窗(门禁:`isOpenDetailModal` / `cartDetailValue` / `open_sold_weight`)
24
+ * 2. `requiresBookingEdit`:资源 / 时间编辑抽屉(门禁:`getIsAutoClose` on prepared cacheItem)
25
+ * 3. `add`:两关均通过,直接 transform + 加车
26
+ */
27
+
28
+ /** 资源 / 时间编辑抽屉所需的最小 payload。 */
29
+
30
+ /**
31
+ * 第一段:是否需要打开规格 / SKU 详情弹窗(与 addService `handleSelectProduct` 一致,不用 `getIsEject` 做门禁)。
32
+ */
33
+ function needsSpecDetailModal(item) {
34
+ if (item?.open_sold_weight) return true;
35
+ if (item?.isOpenDetailModal) return true;
36
+ if (!item?.cartDetailValue) return true;
37
+ return false;
38
+ }
39
+
40
+ /**
41
+ * 第二段:预约商品是否仍需打开资源 / 时间编辑(与 info2 `cacheItem.autoClose` 等价)。
42
+ */
43
+ function needsBookingEdit(cacheItem, ctx) {
44
+ if (isNormalBookingProduct(cacheItem)) return false;
45
+ const isAutoAllocationOn = ctx?.isAutoAllocationOn || (() => true);
46
+ return !(0, _BookingContext.getIsAutoClose)(cacheItem, isAutoAllocationOn);
47
+ }
48
+ function buildRequiresBookingEditPayload(cacheItem, ctx) {
49
+ return {
50
+ cacheItem,
51
+ customerId: ctx?.customerId,
52
+ date: typeof ctx?.date === 'string' ? ctx.date : null
53
+ };
54
+ }
55
+
56
+ /**
57
+ * 加车主决策:对齐 `handleSelectProduct` 两段分支。
58
+ */
59
+ function decideAddProduct(item, ctx) {
60
+ const derivedCtx = withDerivedBookingCtx(ctx);
61
+ if (needsSpecDetailModal(item)) {
62
+ return {
63
+ action: 'requiresDetail',
64
+ payload: buildRequiresDetailPayload(item, derivedCtx)
65
+ };
66
+ }
67
+ const cacheItem = prepareBookingCacheItem(buildCacheItemFromCartDetail(item, derivedCtx), derivedCtx);
68
+ if (needsBookingEdit(cacheItem, derivedCtx)) {
69
+ return {
70
+ action: 'requiresBookingEdit',
71
+ cacheItem,
72
+ payload: buildRequiresBookingEditPayload(cacheItem, derivedCtx)
73
+ };
74
+ }
75
+ return {
76
+ action: 'add',
77
+ cacheItem
78
+ };
79
+ }
80
+
81
+ /**
82
+ * 规格弹窗 callback 后的第二段决策(对齐 `handleBooking4Service` 内 `cacheItem.autoClose` 分支)。
83
+ */
84
+ function decideAfterDetail(cacheItem, ctx) {
85
+ const derivedCtx = withDerivedBookingCtx(ctx);
86
+ const extended = prepareBookingCacheItem(cacheItem, derivedCtx);
87
+ if (needsBookingEdit(extended, derivedCtx)) {
88
+ return {
89
+ action: 'requiresBookingEdit',
90
+ cacheItem: extended,
91
+ payload: buildRequiresBookingEditPayload(extended, derivedCtx)
92
+ };
93
+ }
94
+ return {
95
+ action: 'add',
96
+ cacheItem: extended
97
+ };
98
+ }
99
+
100
+ /**
101
+ * @deprecated 请用 `decideAddProduct`;保留兼容:autoClose=true 仅表示可直接加车(action=add)。
102
+ */
103
+
104
+ function isNormalBookingProduct(item) {
105
+ return !(0, _BookingContext.isBookingProduct)(item);
106
+ }
107
+ function hasPreparedBookingExtend(cacheItem) {
108
+ // 场次/时间已写入但资源仍未选中时,须继续走 getProductExtend(对齐 info2 必定调用 getProductExtend)。
109
+ if ((0, _BookingContext.productNeedsResourceExtend)(cacheItem) && !(0, _BookingContext.hasActualResourceSelection)(cacheItem)) {
110
+ return false;
111
+ }
112
+ const ext = cacheItem?._extend || {};
113
+ const hasResourceState = Boolean((0, _BookingContext.hasActualResourceSelection)(cacheItem) && ext.capacity && (ext.endDate || ext.end_date));
114
+ const hasSessionState = Boolean((0, _BookingContext.isSessionProduct)(cacheItem) && ext.other?.session && ext.start_time && (ext.end_time || ext.endDate));
115
+ const hasMultiDayState = Boolean(isNormalBookingProduct(cacheItem) === false && isMultiDayLike(cacheItem));
116
+ const hasExplicitTimeState = Boolean(ext.duration && (ext.start_date || ext.startDate) && ext.start_time && (ext.end_date && ext.end_time || ext.endDate));
117
+ return hasResourceState || hasSessionState || hasMultiDayState || hasExplicitTimeState;
118
+ }
119
+
120
+ /** 弹窗 / Host 使用的日历日,与 ticketBooking `state.date.format('YYYY-MM-DD')` 对齐。 */
121
+ function formatBookingDateForUI(date) {
122
+ if (date == null || date === '') return null;
123
+ const parsed = (0, _dayjs.default)(date);
124
+ return parsed.isValid() ? parsed.format('YYYY-MM-DD') : null;
125
+ }
126
+
127
+ /** 补齐 presetStartTime(decideAutoClose / transform 与 BookingTicket.buildAddProductCtx 共用)。 */
128
+ function withDerivedBookingCtx(ctx) {
129
+ if (!ctx) return {};
130
+ return {
131
+ ...ctx,
132
+ presetStartTime: ctx.presetStartTime ?? (0, _BookingContext.derivePresetStartTimeFromDate)(ctx.date)
133
+ };
134
+ }
135
+ function isMultiDayLike(cacheItem) {
136
+ const ext = cacheItem?._extend || {};
137
+ return Boolean(cacheItem?.duration?.type === 'days' && ext.duration && ext.start_date && ext.end_date);
138
+ }
139
+
140
+ /**
141
+ * 统一补齐预约商品的运行态字段。
142
+ *
143
+ * 新链路不再让决策和提交各自重建 cacheItem;这里作为唯一入口补齐
144
+ * `_extend.resource / capacity / startDate / endDate` 等后续 booking mapper 需要的字段。
145
+ */
146
+ function prepareBookingCacheItem(cacheItem, ctx) {
147
+ if (isNormalBookingProduct(cacheItem) || hasPreparedBookingExtend(cacheItem)) {
148
+ return cacheItem;
149
+ }
150
+ return (0, _BookingContext.getProductExtend)({
151
+ cacheItem,
152
+ ctx: withDerivedBookingCtx(ctx),
153
+ isDisabledTime: true
154
+ });
155
+ }
156
+ function decideAutoClose(item, ctx) {
157
+ const decision = decideAddProduct(item, ctx);
158
+ if (decision.action === 'add') {
159
+ return {
160
+ autoClose: true,
161
+ cacheItem: decision.cacheItem
162
+ };
163
+ }
164
+ if (decision.action === 'requiresBookingEdit') {
165
+ return {
166
+ autoClose: false,
167
+ cacheItem: decision.cacheItem
168
+ };
169
+ }
170
+ return {
171
+ autoClose: false
172
+ };
173
+ }
174
+
175
+ /**
176
+ * 替代 info2 `getIsEject`:商品是否需要弹窗(含 type='detail' / option_group / bundle_group / variant / session / sold_by_weight)。
177
+ */
178
+ function getIsEject(item, type = 'select') {
179
+ const isSession = (0, _BookingContext.isSessionProduct)(item);
180
+ const isSoldByWeight = Boolean(item?.open_sold_weight);
181
+ const need = type === 'detail' || (item?.bundle_group_count || 0) > 0 || (item?.option_group_count || 0) > 0 || (item?.is_variant || 0) > 0 || isSession || isSoldByWeight;
182
+ return need ? 1 : 0;
183
+ }
184
+
185
+ /** 仅 session 商品(且没有 variant/option/package)。 */
186
+ function getIsOnlySession(item) {
187
+ const isSession = (0, _BookingContext.isSessionProduct)(item);
188
+ return !((item?.bundle_group_count || 0) > 0 || (item?.option_group_count || 0) > 0 || (item?.is_variant || 0) > 0) && isSession;
189
+ }
190
+
191
+ /**
192
+ * 拼装 requiresDetail payload;showConfig 与 info2 弹窗内部判断一致。
193
+ */
194
+ function buildRequiresDetailPayload(item, ctx) {
195
+ const isOnlySession = getIsOnlySession(item);
196
+ const isEject = getIsEject(item, ctx?.type || 'select');
197
+ return {
198
+ item,
199
+ showConfig: {
200
+ option: (item?.option_group_count || 0) > 0,
201
+ session: (0, _BookingContext.isSessionProduct)(item),
202
+ variant: (item?.is_variant || 0) > 0,
203
+ package: (item?.bundle_group_count || 0) > 0,
204
+ number: Boolean(item?.open_sold_weight)
205
+ },
206
+ isOnlySession,
207
+ isEject: isEject ? 1 : 0,
208
+ customerId: ctx?.customerId,
209
+ date: formatBookingDateForUI(ctx?.date),
210
+ productData: item
211
+ };
212
+ }
213
+
214
+ /**
215
+ * 用 item.cartDetailValue 拼装一个 cacheItem 雏形(与 info2 `handleDirectAddService` 等价路径)。
216
+ * 这里只补 `_extend.start_date / quantity / other` 等运行态字段;后续走 getProductExtend 才会补齐资源 / 时间。
217
+ */
218
+ function buildCacheItemFromCartDetail(item, ctx) {
219
+ const cartDetailValue = item.cartDetailValue || {};
220
+ const other = JSON.parse(JSON.stringify(cartDetailValue || {}));
221
+ other.session = cartDetailValue.session;
222
+ /** 列表/接口可能只带 product_id 不带 id,勿用 item.id 覆盖掉已有 product_id */
223
+ const resolvedId = item.id ?? item.product_id;
224
+ let extend = (0, _BookingContext.applySessionTimesToExtend)(item, {
225
+ start_date: ctx?.date || undefined,
226
+ /** 列表连点 / 防抖合并时以 ctx.quantity 为准,避免 cartDetailValue 默认 1 盖掉合并数量 */
227
+ quantity: ctx?.quantity ?? cartDetailValue?.quantity ?? 1,
228
+ product_name: item.title,
229
+ other,
230
+ isNormalProduct: !(0, _BookingContext.isBookingProduct)(item),
231
+ price: item?._extend?.price ?? item?.price
232
+ }, {
233
+ date: ctx?.date
234
+ });
235
+ return {
236
+ ...item,
237
+ id: resolvedId,
238
+ product_id: resolvedId,
239
+ _key: cartDetailValue.key,
240
+ _extend: extend,
241
+ new: 1
242
+ };
243
+ }
244
+
245
+ /**
246
+ * 用 Info2 callback 的 (e, extension_type, detail) 拼装 cacheItem。
247
+ *
248
+ * 保留 detail._extend 中的 pricing / note(规格弹窗改价、备注等),
249
+ * 再叠加 session 时间、ctx.quantity 等运行态字段;other 以 callback `e` 为准。
250
+ */
251
+ function buildCacheItemFromDetail(item, detailResult, ctx) {
252
+ const _currentItem = detailResult.detail || item;
253
+ const _detail = _currentItem;
254
+ const detailExtend = _detail?._extend || {};
255
+ const other = JSON.parse(JSON.stringify(detailResult.e || {}));
256
+ other.session = detailResult.e?.session;
257
+ const resolvedId = _currentItem.id ?? _currentItem.product_id;
258
+ const mergedItem = {
259
+ ...item,
260
+ ..._detail,
261
+ extension_type: _detail.extension_type ?? item.extension_type
262
+ };
263
+ const runtimeExtend = (0, _BookingContext.applySessionTimesToExtend)(mergedItem, {
264
+ start_date: ctx?.date || detailExtend.start_date || undefined,
265
+ quantity: ctx?.quantity ?? detailResult.e?.quantity ?? detailExtend.quantity ?? 1,
266
+ price: detailExtend.price ?? _detail?.price ?? item?.price,
267
+ product_name: _currentItem.title ?? detailExtend.product_name,
268
+ other,
269
+ isNormalProduct: !(0, _BookingContext.isBookingProduct)(mergedItem)
270
+ }, {
271
+ date: ctx?.date
272
+ });
273
+ const extend = {
274
+ ...detailExtend,
275
+ ...runtimeExtend,
276
+ other
277
+ };
278
+ const note = detailExtend.note ?? _detail?.note;
279
+ return {
280
+ ..._detail,
281
+ id: resolvedId,
282
+ product_id: resolvedId,
283
+ extension_type: mergedItem.extension_type,
284
+ _key: detailResult.e?.key,
285
+ ...(note != null && note !== '' ? {
286
+ note: String(note)
287
+ } : {}),
288
+ _extend: extend,
289
+ new: 1
290
+ };
291
+ }
292
+
293
+ /**
294
+ * `transformDetailToProductAndBooking`:把 cacheItem 拆成 OS `addProductToOrder` 所需的 `(product, booking)`。
295
+ *
296
+ * - `product` 走 `transformBaseProductToOrderProduct`(沿用 BaseSales 现有 mapper)。
297
+ * - `booking` 走 `cacheItemToBookingInput`(严格按 TEMP_ORDER_FIELDS_SUMMARY.md 协议)。
298
+ * - 普通商品(无 duration / 无 schedules)不产 booking,与 info2 一致。
299
+ */
300
+ function transformDetailToProductAndBooking(cacheItem, ctx) {
301
+ const preparedCacheItem = prepareBookingCacheItem(cacheItem, withDerivedBookingCtx(ctx));
302
+ const payload = buildBasePayloadFromCacheItem(preparedCacheItem, ctx);
303
+ const productInput = (0, _transformBaseProductToOrderProduct.transformBaseProductToOrderProduct)({
304
+ payload,
305
+ sourceProduct: preparedCacheItem
306
+ });
307
+ if (!productInput) {
308
+ throw new Error('[BookingTicket] transformDetailToProductAndBooking: product transform failed (missing numeric item.id / item.product_id)');
309
+ }
310
+ const isNormalProduct = isNormalBookingProduct(preparedCacheItem);
311
+ let booking;
312
+ if (!isNormalProduct) {
313
+ booking = (0, _BookingContext.cacheItemToBookingInput)(preparedCacheItem, {
314
+ bookingConfig: ctx?.bookingConfig
315
+ });
316
+ }
317
+ return {
318
+ product: productInput,
319
+ booking,
320
+ cacheItem: preparedCacheItem
321
+ };
322
+ }
323
+
324
+ /**
325
+ * 把 cacheItem._extend.other 中的字段 + 顶层运行态拼成 `BaseProductDetailPayload`。
326
+ */
327
+ function buildBasePayloadFromCacheItem(cacheItem, ctx) {
328
+ const other = cacheItem?._extend?.other || {};
329
+ const quantity = ctx?.quantity != null && ctx.quantity > 0 ? ctx.quantity : cacheItem?._extend?.quantity ?? 1;
330
+ const resolvedPid = cacheItem?.product_id ?? cacheItem?.id;
331
+ const extend = cacheItem?._extend || {};
332
+ return {
333
+ id: cacheItem?.id ?? cacheItem?.product_id,
334
+ product_id: resolvedPid,
335
+ variant_id: other?.product_variant_id ?? other?.variant_id ?? 0,
336
+ quantity,
337
+ option: other?.option || [],
338
+ bundle: other?.bundle || extend?.skuValue?.bundle || extend?._skuValue?.bundle || [],
339
+ unique: other?.unique,
340
+ session: other?.session,
341
+ note: extend?.note,
342
+ price: extend?.price ?? cacheItem?.price,
343
+ selling_price: extend?.price ?? cacheItem?.price,
344
+ line_total: extend?.total,
345
+ total: extend?.total,
346
+ origin_total: extend?.origin_total,
347
+ price_override: extend?.priceOverride,
348
+ bundle_edit: extend?.bundle_edit,
349
+ discount_reason: extend?.discount_reason,
350
+ discount_list: cacheItem?.discount_list,
351
+ _extend: extend
352
+ };
353
+ }
@@ -0,0 +1,35 @@
1
+ import type { BaseSalesOrderProduct } from '../../BaseSales';
2
+ import type { ISalesBooking } from '../../BaseSales/utils/parseSalesResponse';
3
+ export interface BuildAddTimeCurrentItemParams {
4
+ booking: ISalesBooking;
5
+ product: BaseSalesOrderProduct | null;
6
+ productsByUid?: Record<string, {
7
+ origin?: Record<string, any>;
8
+ }>;
9
+ }
10
+ export interface ResolveBookingCanAddTimeParams extends BuildAddTimeCurrentItemParams {
11
+ addTimeProducts?: any[];
12
+ bookingConfig?: Record<string, any> | null;
13
+ shopOpeningHours?: string;
14
+ }
15
+ /**
16
+ * 从 booking 与其关联商品行构建旧 `isUsableProduct` 所需的当前商品快照。
17
+ *
18
+ * @example
19
+ * const currentItem = buildAddTimeCurrentItem({ booking, product, productsByUid });
20
+ */
21
+ export declare function buildAddTimeCurrentItem({ booking, product, productsByUid, }: BuildAddTimeCurrentItemParams): Record<string, any> | null;
22
+ /**
23
+ * 判断当前 booking 是否允许打开加时入口,保持与旧 ticketBooking 的商品适用规则一致。
24
+ *
25
+ * @example
26
+ * const canAddTime = resolveBookingCanAddTime({ booking, product, addTimeProducts, bookingConfig });
27
+ */
28
+ export declare function resolveBookingCanAddTime(params: ResolveBookingCanAddTimeParams): boolean;
29
+ /**
30
+ * 判断一个加时商品是否适用于当前预约商品。
31
+ *
32
+ * @example
33
+ * const usable = isUsableAddTimeProduct(addTime.add_time, currentItem, '23:59');
34
+ */
35
+ export declare function isUsableAddTimeProduct(addTime: any, currentItem: Record<string, any> | null | undefined, shopOpeningHours?: string): boolean;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildAddTimeCurrentItem = buildAddTimeCurrentItem;
7
+ exports.isUsableAddTimeProduct = isUsableAddTimeProduct;
8
+ exports.resolveBookingCanAddTime = resolveBookingCanAddTime;
9
+ var _dayjs = _interopRequireDefault(require("dayjs"));
10
+ var _lodashEs = require("lodash-es");
11
+ var _serviceTimes = require("../../../modules/BookingContext/utils/serviceTimes");
12
+ var _timeSlices = require("../../../modules/BookingContext/utils/timeSlices");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ /**
15
+ * 从 booking 与其关联商品行构建旧 `isUsableProduct` 所需的当前商品快照。
16
+ *
17
+ * @example
18
+ * const currentItem = buildAddTimeCurrentItem({ booking, product, productsByUid });
19
+ */
20
+ function buildAddTimeCurrentItem({
21
+ booking,
22
+ product,
23
+ productsByUid
24
+ }) {
25
+ if (!booking || !product) return null;
26
+ const uid = product.metadata?.unique_identification_number;
27
+ const origin = uid ? productsByUid?.[String(uid)]?.origin : undefined;
28
+ const sourceProduct = origin || booking.product || {};
29
+ const startAt = booking.start_date && booking.start_time ? `${booking.start_date} ${booking.start_time}` : booking.start_date;
30
+ const endAt = booking.end_date && booking.end_time ? `${booking.end_date} ${booking.end_time}` : booking.end_date;
31
+ return {
32
+ ...sourceProduct,
33
+ ...booking.product,
34
+ product_id: product.product_id ?? sourceProduct.product_id ?? sourceProduct.id,
35
+ id: sourceProduct.id ?? product.product_id,
36
+ collection: sourceProduct.collection || booking.product?.collection || [],
37
+ duration: sourceProduct.duration || booking.duration,
38
+ _extend: {
39
+ ...(sourceProduct._extend || {}),
40
+ startDate: startAt ? (0, _dayjs.default)(startAt) : undefined,
41
+ endDate: endAt ? (0, _dayjs.default)(endAt) : undefined,
42
+ start_date: booking.start_date,
43
+ end_date: booking.end_date,
44
+ start_time: booking.start_time,
45
+ end_time: booking.end_time,
46
+ sub_type: booking.sub_type
47
+ }
48
+ };
49
+ }
50
+
51
+ /**
52
+ * 判断当前 booking 是否允许打开加时入口,保持与旧 ticketBooking 的商品适用规则一致。
53
+ *
54
+ * @example
55
+ * const canAddTime = resolveBookingCanAddTime({ booking, product, addTimeProducts, bookingConfig });
56
+ */
57
+ function resolveBookingCanAddTime(params) {
58
+ const quickTime = params.bookingConfig?.config?.information_tab?.appointment_card?.quick_time;
59
+ if (quickTime !== undefined && quickTime !== 1) return false;
60
+ const currentItem = buildAddTimeCurrentItem(params);
61
+ if (!currentItem || (0, _serviceTimes.isMultiDayProduct)(currentItem)) return false;
62
+ return (params.addTimeProducts || []).some(item => isUsableAddTimeProduct(item?.add_time, currentItem, params.shopOpeningHours));
63
+ }
64
+
65
+ /**
66
+ * 判断一个加时商品是否适用于当前预约商品。
67
+ *
68
+ * @example
69
+ * const usable = isUsableAddTimeProduct(addTime.add_time, currentItem, '23:59');
70
+ */
71
+ function isUsableAddTimeProduct(addTime, currentItem, shopOpeningHours) {
72
+ if (!addTime || !currentItem) return false;
73
+ if (addTime.additional_time_options === 'unlimited') {
74
+ const startDate = (0, _dayjs.default)(currentItem._extend?.startDate);
75
+ const endDate = (0, _dayjs.default)(currentItem._extend?.endDate);
76
+ if (!startDate.isValid() || !endDate.isValid()) return false;
77
+ const maxEndDate = (0, _timeSlices.getEndDate)(startDate, 'flexible', '', shopOpeningHours);
78
+ if (endDate.isAfter(maxEndDate)) return false;
79
+ }
80
+ const relationProduct = addTime.relation_product || {};
81
+ const type = relationProduct.type;
82
+ const products = Array.isArray(relationProduct.products) ? relationProduct.products : [];
83
+ if (type === 'product_all') return true;
84
+ if (type === 'product_collection') {
85
+ return Boolean((0, _lodashEs.intersectionBy)(products.map(item => ({
86
+ ...item,
87
+ id: item.product_collection_id
88
+ })), currentItem.collection || [], 'id').length);
89
+ }
90
+ if (type === 'products') {
91
+ return products.some(item => item.product_id == currentItem.product_id);
92
+ }
93
+ return false;
94
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * BookingTicket - 预约状态相关纯函数。
3
+ *
4
+ * 该文件不持有任何运行时引用(无 request / store / effects),
5
+ * 只做字段解析与本地数组的原地写入/回滚,便于独立单测与未来其他
6
+ * booking 写操作(editBooking / cancelBooking 等)复用。
7
+ *
8
+ * 设计依据:参考 .cursor/rules/data-field-semantics.mdc,
9
+ * 字段含义严格对齐既有协议(OrderTempOrder / parseSalesResponse),
10
+ * 不发明等价关系。
11
+ */
12
+ /**
13
+ * 子预约状态机转移动作(POST /schedule/booking-transition/{schedule_event_id})。
14
+ *
15
+ * @example
16
+ * await bookingTicket.transitionChildBooking({
17
+ * schedule_event_id: 301,
18
+ * action: 'confirm',
19
+ * });
20
+ */
21
+ export declare type BookingTransitionAction = 'confirm' | 'reject' | 'arrive' | 'start' | 'complete' | 'cancel' | 'no_show' | 'reschedule';
22
+ /** 子预约状态转移入参 */
23
+ export interface TransitionChildBookingParams {
24
+ schedule_event_id: number | string;
25
+ action: BookingTransitionAction;
26
+ }
27
+ /**
28
+ * 从 tempOrder 解析用于调用 appointment-status 接口的 schedule id。
29
+ *
30
+ * 优先级:
31
+ * 1. `tempOrder.metadata.appointment_booking_parent_schedule_id`
32
+ * 2. `tempOrder.bookings` 中 `parent_id === 0` 的 `schedule_event_id`
33
+ *
34
+ * 都缺失时返回 null,由调用方决定如何抛错。
35
+ */
36
+ export declare function resolveScheduleId(tempOrder: {
37
+ bookings?: any[];
38
+ metadata?: Record<string, any> | null;
39
+ } | null | undefined): number | string | null;
40
+ /**
41
+ * 原地把所有 bookings 的 `appointment_status` 覆盖为新值,
42
+ * 返回原 status 数组用于回滚(顺序与 bookings 一一对应)。
43
+ *
44
+ * - 元素为 null/undefined 时跳过写入(但占位仍保留以保证回滚下标对齐)
45
+ * - 不会克隆 booking 对象,保持与 OrderModule.tempOrder 引用一致
46
+ */
47
+ export declare function applyBookingsStatus(bookings: any[] | null | undefined, status: string): Array<string | undefined>;
48
+ /**
49
+ * 把 applyBookingsStatus 的返回值原地写回,撤销乐观更新。
50
+ * 长度不一致时按较短一方对齐(防御式编程,正常路径不会发生)。
51
+ */
52
+ export declare function restoreBookingsStatus(bookings: any[] | null | undefined, previous: Array<string | undefined>): void;
53
+ /**
54
+ * 将状态机 action 解析为转移后的 `appointment_status`。
55
+ *
56
+ * `reschedule` 暂未在状态矩阵启用,返回 null 表示跳过乐观更新。
57
+ *
58
+ * @example
59
+ * resolveStatusAfterTransition('confirm'); // 'confirmed'
60
+ */
61
+ export declare function resolveStatusAfterTransition(action: BookingTransitionAction): string | null;
62
+ /**
63
+ * 在 bookings 中按 `schedule_event_id` 定位子预约并乐观写入 `appointment_status`。
64
+ *
65
+ * @returns 写入前的 status;未命中时返回 undefined(调用方跳过回滚)
66
+ *
67
+ * @example
68
+ * const prev = applyChildBookingStatus(tempOrder.bookings, 301, 'confirmed');
69
+ */
70
+ export declare function applyChildBookingStatus(bookings: any[] | null | undefined, scheduleEventId: number | string, status: string): string | undefined;
71
+ /**
72
+ * 撤销 applyChildBookingStatus 对单条子预约的乐观写入。
73
+ *
74
+ * @example
75
+ * restoreChildBookingStatus(tempOrder.bookings, 301, prev);
76
+ */
77
+ export declare function restoreChildBookingStatus(bookings: any[] | null | undefined, scheduleEventId: number | string, previous: string | undefined): void;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.applyBookingsStatus = applyBookingsStatus;
7
+ exports.applyChildBookingStatus = applyChildBookingStatus;
8
+ exports.resolveScheduleId = resolveScheduleId;
9
+ exports.resolveStatusAfterTransition = resolveStatusAfterTransition;
10
+ exports.restoreBookingsStatus = restoreBookingsStatus;
11
+ exports.restoreChildBookingStatus = restoreChildBookingStatus;
12
+ /**
13
+ * BookingTicket - 预约状态相关纯函数。
14
+ *
15
+ * 该文件不持有任何运行时引用(无 request / store / effects),
16
+ * 只做字段解析与本地数组的原地写入/回滚,便于独立单测与未来其他
17
+ * booking 写操作(editBooking / cancelBooking 等)复用。
18
+ *
19
+ * 设计依据:参考 .cursor/rules/data-field-semantics.mdc,
20
+ * 字段含义严格对齐既有协议(OrderTempOrder / parseSalesResponse),
21
+ * 不发明等价关系。
22
+ */
23
+
24
+ /**
25
+ * 子预约状态机转移动作(POST /schedule/booking-transition/{schedule_event_id})。
26
+ *
27
+ * @example
28
+ * await bookingTicket.transitionChildBooking({
29
+ * schedule_event_id: 301,
30
+ * action: 'confirm',
31
+ * });
32
+ */
33
+
34
+ /** 子预约状态转移入参 */
35
+
36
+ /**
37
+ * 从 tempOrder 解析用于调用 appointment-status 接口的 schedule id。
38
+ *
39
+ * 优先级:
40
+ * 1. `tempOrder.metadata.appointment_booking_parent_schedule_id`
41
+ * 2. `tempOrder.bookings` 中 `parent_id === 0` 的 `schedule_event_id`
42
+ *
43
+ * 都缺失时返回 null,由调用方决定如何抛错。
44
+ */
45
+ function resolveScheduleId(tempOrder) {
46
+ if (!tempOrder) return null;
47
+ const metaScheduleId = tempOrder.metadata?.appointment_booking_parent_schedule_id;
48
+ if (metaScheduleId !== undefined && metaScheduleId !== null) {
49
+ return metaScheduleId;
50
+ }
51
+ const bookings = Array.isArray(tempOrder.bookings) ? tempOrder.bookings : [];
52
+ const rootBooking = bookings.find(b => b?.parent_id === 0);
53
+ const fallback = rootBooking?.schedule_event_id;
54
+ return fallback !== undefined && fallback !== null ? fallback : null;
55
+ }
56
+
57
+ /**
58
+ * 原地把所有 bookings 的 `appointment_status` 覆盖为新值,
59
+ * 返回原 status 数组用于回滚(顺序与 bookings 一一对应)。
60
+ *
61
+ * - 元素为 null/undefined 时跳过写入(但占位仍保留以保证回滚下标对齐)
62
+ * - 不会克隆 booking 对象,保持与 OrderModule.tempOrder 引用一致
63
+ */
64
+ function applyBookingsStatus(bookings, status) {
65
+ if (!Array.isArray(bookings)) return [];
66
+ const previous = bookings.map(b => b?.appointment_status);
67
+ bookings.forEach(b => {
68
+ if (b) b.appointment_status = status;
69
+ });
70
+ return previous;
71
+ }
72
+
73
+ /**
74
+ * 把 applyBookingsStatus 的返回值原地写回,撤销乐观更新。
75
+ * 长度不一致时按较短一方对齐(防御式编程,正常路径不会发生)。
76
+ */
77
+ function restoreBookingsStatus(bookings, previous) {
78
+ if (!Array.isArray(bookings)) return;
79
+ const len = Math.min(bookings.length, previous.length);
80
+ for (let i = 0; i < len; i += 1) {
81
+ const b = bookings[i];
82
+ if (b) b.appointment_status = previous[i];
83
+ }
84
+ }
85
+
86
+ /**
87
+ * 将状态机 action 解析为转移后的 `appointment_status`。
88
+ *
89
+ * `reschedule` 暂未在状态矩阵启用,返回 null 表示跳过乐观更新。
90
+ *
91
+ * @example
92
+ * resolveStatusAfterTransition('confirm'); // 'confirmed'
93
+ */
94
+ function resolveStatusAfterTransition(action) {
95
+ const map = {
96
+ confirm: 'confirmed',
97
+ reject: 'rejected',
98
+ arrive: 'arrived',
99
+ start: 'started',
100
+ complete: 'completed',
101
+ cancel: 'cancelled',
102
+ no_show: 'no_show',
103
+ reschedule: null
104
+ };
105
+ return map[action] ?? null;
106
+ }
107
+
108
+ /**
109
+ * 在 bookings 中按 `schedule_event_id` 定位子预约并乐观写入 `appointment_status`。
110
+ *
111
+ * @returns 写入前的 status;未命中时返回 undefined(调用方跳过回滚)
112
+ *
113
+ * @example
114
+ * const prev = applyChildBookingStatus(tempOrder.bookings, 301, 'confirmed');
115
+ */
116
+ function applyChildBookingStatus(bookings, scheduleEventId, status) {
117
+ if (!Array.isArray(bookings)) return undefined;
118
+ const idx = bookings.findIndex(b => b && String(b.schedule_event_id) === String(scheduleEventId));
119
+ if (idx === -1) return undefined;
120
+ const previous = bookings[idx]?.appointment_status;
121
+ bookings[idx].appointment_status = status;
122
+ return previous;
123
+ }
124
+
125
+ /**
126
+ * 撤销 applyChildBookingStatus 对单条子预约的乐观写入。
127
+ *
128
+ * @example
129
+ * restoreChildBookingStatus(tempOrder.bookings, 301, prev);
130
+ */
131
+ function restoreChildBookingStatus(bookings, scheduleEventId, previous) {
132
+ if (!Array.isArray(bookings) || previous === undefined) return;
133
+ const idx = bookings.findIndex(b => b && String(b.schedule_event_id) === String(scheduleEventId));
134
+ if (idx === -1) return;
135
+ bookings[idx].appointment_status = previous;
136
+ }