@pisell/pisellos 0.0.567 → 0.0.569

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 (557) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  3. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/adapter/walletPass/utils.js +7 -7
  6. package/dist/model/strategy/strategy-example.js +5 -19
  7. package/dist/modules/BaseModule.d.ts +2 -2
  8. package/dist/modules/BaseModule.js +4 -4
  9. package/dist/modules/BookingContext/index.d.ts +48 -0
  10. package/dist/modules/BookingContext/index.js +566 -0
  11. package/dist/modules/BookingContext/types.d.ts +102 -0
  12. package/dist/modules/BookingContext/types.js +51 -0
  13. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  14. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +302 -0
  15. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  16. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +149 -0
  17. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  18. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +249 -0
  19. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  20. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  21. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  22. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  23. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  24. package/dist/modules/BookingContext/utils/index.js +11 -0
  25. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  26. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  27. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  28. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  29. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  30. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  31. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  32. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  33. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  34. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  35. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  36. package/dist/modules/BookingContext/utils/resources.js +486 -0
  37. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  38. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  39. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  40. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  41. package/dist/modules/Cart/index.js +0 -3
  42. package/dist/modules/Cart/utils/cartProduct.js +26 -6
  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 +2 -0
  47. package/dist/modules/Date/index.js +1 -5
  48. package/dist/modules/Discount/index.d.ts +2 -1
  49. package/dist/modules/Discount/index.js +37 -12
  50. package/dist/modules/Discount/types.d.ts +1 -0
  51. package/dist/modules/OpenData/index.d.ts +8 -0
  52. package/dist/modules/OpenData/index.js +35 -17
  53. package/dist/modules/Order/index.d.ts +449 -24
  54. package/dist/modules/Order/index.js +5437 -608
  55. package/dist/modules/Order/types.d.ts +693 -88
  56. package/dist/modules/Order/types.js +68 -1
  57. package/dist/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  58. package/dist/modules/Order/utils/bundleDiscountHydration.js +144 -0
  59. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  60. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  61. package/dist/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  62. package/dist/modules/Order/utils/orderCollectionIdentity.js +405 -0
  63. package/dist/modules/Order/utils.d.ts +167 -18
  64. package/dist/modules/Order/utils.js +960 -165
  65. package/dist/modules/Payment/index.d.ts +10 -9
  66. package/dist/modules/Payment/index.js +508 -874
  67. package/dist/modules/Payment/types.d.ts +40 -16
  68. package/dist/modules/Payment/utils.d.ts +1 -1
  69. package/dist/modules/Payment/utils.js +4 -3
  70. package/dist/modules/Payment/walletpass.js +48 -34
  71. package/dist/modules/Product/types.d.ts +29 -7
  72. package/dist/modules/ProductList/index.d.ts +17 -13
  73. package/dist/modules/ProductList/index.js +184 -74
  74. package/dist/modules/ProductList/types.d.ts +17 -0
  75. package/dist/modules/Quotation/index.d.ts +22 -2
  76. package/dist/modules/Quotation/index.js +108 -42
  77. package/dist/modules/Quotation/types.d.ts +19 -0
  78. package/dist/modules/ResourcePlanner/index.d.ts +24 -0
  79. package/dist/modules/ResourcePlanner/index.js +181 -0
  80. package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
  81. package/dist/modules/ResourcePlanner/planner.js +1069 -0
  82. package/dist/modules/ResourcePlanner/types.d.ts +227 -0
  83. package/dist/modules/ResourcePlanner/types.js +1 -0
  84. package/dist/modules/Rules/index.d.ts +8 -10
  85. package/dist/modules/Rules/index.js +219 -114
  86. package/dist/modules/Rules/types.d.ts +14 -3
  87. package/dist/modules/SalesSummary/index.d.ts +23 -26
  88. package/dist/modules/SalesSummary/index.js +152 -46
  89. package/dist/modules/SalesSummary/types.d.ts +9 -1
  90. package/dist/modules/SalesSummary/utils.d.ts +3 -22
  91. package/dist/modules/SalesSummary/utils.js +803 -163
  92. package/dist/modules/Schedule/getDateIsInSchedule.js +14 -7
  93. package/dist/modules/Schedule/index.d.ts +18 -5
  94. package/dist/modules/Schedule/index.js +78 -24
  95. package/dist/modules/Schedule/types.d.ts +2 -0
  96. package/dist/modules/Schedule/utils.js +0 -1
  97. package/dist/modules/Step/index.js +0 -1
  98. package/dist/modules/Summary/index.js +4 -3
  99. package/dist/modules/SurchargeList/index.d.ts +18 -0
  100. package/dist/modules/SurchargeList/index.js +185 -0
  101. package/dist/modules/SurchargeList/types.d.ts +15 -0
  102. package/dist/modules/SurchargeList/types.js +1 -0
  103. package/dist/modules/index.d.ts +3 -0
  104. package/dist/modules/index.js +4 -1
  105. package/dist/plugins/app.d.ts +2 -0
  106. package/dist/plugins/request.d.ts +1 -0
  107. package/dist/plugins/request.js +1 -4
  108. package/dist/plugins/window.js +2 -6
  109. package/dist/server/index.d.ts +462 -8
  110. package/dist/server/index.js +6137 -714
  111. package/dist/server/modules/floor-plan/index.d.ts +39 -0
  112. package/dist/server/modules/floor-plan/index.js +595 -0
  113. package/dist/server/modules/floor-plan/types.d.ts +43 -0
  114. package/dist/server/modules/floor-plan/types.js +13 -0
  115. package/dist/server/modules/index.d.ts +7 -2
  116. package/dist/server/modules/index.js +6 -0
  117. package/dist/server/modules/menu/index.js +32 -41
  118. package/dist/server/modules/order/index.d.ts +207 -14
  119. package/dist/server/modules/order/index.js +2326 -379
  120. package/dist/server/modules/order/types.d.ts +76 -5
  121. package/dist/server/modules/order/types.js +14 -1
  122. package/dist/server/modules/order/utils/filterBookings.d.ts +7 -1
  123. package/dist/server/modules/order/utils/filterBookings.js +118 -11
  124. package/dist/server/modules/order/utils/filterOrders.js +242 -14
  125. package/dist/server/modules/payment/index.d.ts +28 -0
  126. package/dist/server/modules/payment/index.js +305 -0
  127. package/dist/server/modules/payment/types.d.ts +9 -0
  128. package/dist/server/modules/payment/types.js +1 -0
  129. package/dist/server/modules/products/index.d.ts +105 -14
  130. package/dist/server/modules/products/index.js +1397 -540
  131. package/dist/server/modules/products/types.d.ts +34 -1
  132. package/dist/server/modules/products/types.js +4 -0
  133. package/dist/server/modules/quotation/index.d.ts +39 -0
  134. package/dist/server/modules/quotation/index.js +289 -86
  135. package/dist/server/modules/resource/index.d.ts +2 -3
  136. package/dist/server/modules/resource/index.js +105 -84
  137. package/dist/server/modules/schedule/index.d.ts +6 -4
  138. package/dist/server/modules/schedule/index.js +137 -114
  139. package/dist/server/test.json +713 -0
  140. package/dist/server/types.d.ts +2 -0
  141. package/dist/server/utils/product.js +2 -3
  142. package/dist/server/utils/small-ticket.d.ts +71 -0
  143. package/dist/server/utils/small-ticket.js +963 -0
  144. package/dist/solution/BaseSales/index.d.ts +378 -0
  145. package/dist/solution/BaseSales/index.js +4006 -0
  146. package/dist/solution/BaseSales/types.d.ts +394 -0
  147. package/dist/solution/BaseSales/types.js +40 -0
  148. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  149. package/dist/solution/BaseSales/utils/cartPromotion.js +1450 -0
  150. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  151. package/dist/solution/BaseSales/utils/parseSalesResponse.js +157 -0
  152. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  153. package/dist/solution/BaseSales/utils/quotationPrice.js +250 -0
  154. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  155. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +218 -0
  156. package/dist/solution/BaseSales/utils.d.ts +40 -0
  157. package/dist/solution/BaseSales/utils.js +263 -0
  158. package/dist/solution/BookingByStep/index.js +7 -59
  159. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  160. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  161. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  162. package/dist/solution/BookingTicket/index.d.ts +393 -24
  163. package/dist/solution/BookingTicket/index.js +2506 -445
  164. package/dist/solution/BookingTicket/types.d.ts +191 -6
  165. package/dist/solution/BookingTicket/types.js +83 -10
  166. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  167. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  168. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  169. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  170. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  171. package/dist/solution/BookingTicket/utils/bookingStatus.js +136 -0
  172. package/dist/solution/BookingTicket/utils/cartView.d.ts +29 -0
  173. package/dist/solution/BookingTicket/utils/cartView.js +209 -0
  174. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  175. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  176. package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  177. package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
  178. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  179. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  180. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  181. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  182. package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  183. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +41 -1
  184. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  185. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  186. package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  187. package/dist/solution/BookingTicket/utils/scan/handleScan.js +36 -34
  188. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  189. package/dist/solution/BookingTicket/utils/scan/index.js +26 -18
  190. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  191. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  192. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  193. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  194. package/dist/solution/BuyTickets/index.js +9 -12
  195. package/dist/solution/Checkout/index.d.ts +1 -0
  196. package/dist/solution/Checkout/index.js +199 -277
  197. package/dist/solution/Checkout/utils/index.js +8 -20
  198. package/dist/solution/RegisterAndLogin/config.js +2 -10
  199. package/dist/solution/RegisterAndLogin/index.js +30 -76
  200. package/dist/solution/Sales/index.d.ts +50 -5
  201. package/dist/solution/Sales/index.js +484 -92
  202. package/dist/solution/Sales/types.d.ts +26 -2
  203. package/dist/solution/ScanOrder/index.d.ts +27 -21
  204. package/dist/solution/ScanOrder/index.js +509 -454
  205. package/dist/solution/ScanOrder/types.d.ts +33 -11
  206. package/dist/solution/ScanOrder/types.js +4 -5
  207. package/dist/solution/ScanOrder/utils.d.ts +4 -1
  208. package/dist/solution/ScanOrder/utils.js +109 -34
  209. package/dist/solution/ShopDiscount/index.js +6 -11
  210. package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
  211. package/dist/solution/UnifiedBookingSales/index.js +1871 -0
  212. package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
  213. package/dist/solution/UnifiedBookingSales/types.js +11 -0
  214. package/dist/solution/VenueBooking/index.d.ts +34 -20
  215. package/dist/solution/VenueBooking/index.js +630 -505
  216. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  217. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  218. package/dist/solution/VenueBooking/utils/slotMerge.js +9 -3
  219. package/dist/solution/index.d.ts +2 -0
  220. package/dist/solution/index.js +3 -1
  221. package/dist/types/index.d.ts +11 -1
  222. package/dist/utils/task.js +15 -18
  223. package/dist/utils/watch.js +0 -1
  224. package/lib/apis/picoding.js +2 -0
  225. package/lib/core/index.js +130 -131
  226. package/lib/effects/index.js +46 -57
  227. package/lib/index.js +92 -53
  228. package/lib/model/index.js +14 -21
  229. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  230. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  231. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  232. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  233. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  234. package/lib/model/strategy/adapter/index.js +100 -64
  235. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  236. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  237. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  238. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  239. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  240. package/lib/model/strategy/adapter/promotion/adapter.js +84 -63
  241. package/lib/model/strategy/adapter/promotion/evaluator.js +383 -232
  242. package/lib/model/strategy/adapter/promotion/examples.js +139 -159
  243. package/lib/model/strategy/adapter/promotion/index.js +1 -49
  244. package/lib/model/strategy/adapter/promotion/type.js +199 -35
  245. package/lib/model/strategy/adapter/type.js +4 -16
  246. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
  247. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  248. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  249. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  250. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  251. package/lib/model/strategy/adapter/walletPass/utils.js +654 -402
  252. package/lib/model/strategy/engine.js +270 -168
  253. package/lib/model/strategy/index.js +49 -34
  254. package/lib/model/strategy/strategy-example.js +243 -239
  255. package/lib/model/strategy/type.js +100 -40
  256. package/lib/modules/Account/index.js +39 -53
  257. package/lib/modules/Account/types.js +20 -33
  258. package/lib/modules/AccountList/index.js +116 -154
  259. package/lib/modules/AccountList/types.js +30 -31
  260. package/lib/modules/AccountList/utils.js +18 -30
  261. package/lib/modules/BaseModule.d.ts +2 -2
  262. package/lib/modules/BaseModule.js +26 -49
  263. package/lib/modules/BookingContext/index.d.ts +48 -0
  264. package/lib/modules/BookingContext/index.js +390 -0
  265. package/lib/modules/BookingContext/types.d.ts +102 -0
  266. package/lib/modules/BookingContext/types.js +48 -0
  267. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  268. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +286 -0
  269. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  270. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +148 -0
  271. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  272. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +242 -0
  273. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  274. package/lib/modules/BookingContext/utils/flexible.js +63 -0
  275. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  276. package/lib/modules/BookingContext/utils/formatResourceList.js +35 -0
  277. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  278. package/lib/modules/BookingContext/utils/index.js +126 -0
  279. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  280. package/lib/modules/BookingContext/utils/noResource.js +78 -0
  281. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  282. package/lib/modules/BookingContext/utils/orderLineDisplay.js +29 -0
  283. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  284. package/lib/modules/BookingContext/utils/productExtend.js +330 -0
  285. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  286. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  287. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  288. package/lib/modules/BookingContext/utils/resourceSelection.js +24 -0
  289. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  290. package/lib/modules/BookingContext/utils/resources.js +419 -0
  291. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  292. package/lib/modules/BookingContext/utils/serviceTimes.js +161 -0
  293. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  294. package/lib/modules/BookingContext/utils/timeSlices.js +114 -0
  295. package/lib/modules/Cart/index.js +170 -124
  296. package/lib/modules/Cart/types.js +46 -51
  297. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  298. package/lib/modules/Cart/utils/cartDate.js +56 -61
  299. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  300. package/lib/modules/Cart/utils/cartNote.js +27 -32
  301. package/lib/modules/Cart/utils/cartProduct.js +331 -244
  302. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  303. package/lib/modules/Cart/utils/cartResource.js +72 -78
  304. package/lib/modules/Cart/utils/changePrice.js +37 -67
  305. package/lib/modules/Cart/utils/index.js +106 -48
  306. package/lib/modules/Customer/constants.js +13 -34
  307. package/lib/modules/Customer/index.d.ts +20 -0
  308. package/lib/modules/Customer/index.js +270 -154
  309. package/lib/modules/Customer/types.d.ts +2 -0
  310. package/lib/modules/Customer/types.js +38 -35
  311. package/lib/modules/Date/index.js +116 -115
  312. package/lib/modules/Date/types.js +16 -28
  313. package/lib/modules/Date/utils.js +174 -123
  314. package/lib/modules/Discount/index.d.ts +2 -1
  315. package/lib/modules/Discount/index.js +133 -113
  316. package/lib/modules/Discount/types.d.ts +1 -0
  317. package/lib/modules/Discount/types.js +9 -31
  318. package/lib/modules/Guests/index.js +30 -56
  319. package/lib/modules/Guests/types.js +23 -33
  320. package/lib/modules/Holder/index.js +209 -189
  321. package/lib/modules/Holder/types.js +4 -16
  322. package/lib/modules/Holder/utils.js +20 -49
  323. package/lib/modules/OpenData/index.d.ts +8 -0
  324. package/lib/modules/OpenData/index.js +81 -74
  325. package/lib/modules/OpenData/types.js +4 -16
  326. package/lib/modules/OpenData/utils.js +44 -78
  327. package/lib/modules/Order/index.d.ts +449 -24
  328. package/lib/modules/Order/index.js +3834 -489
  329. package/lib/modules/Order/types.d.ts +693 -88
  330. package/lib/modules/Order/types.js +78 -33
  331. package/lib/modules/Order/utils/bundleDiscountHydration.d.ts +5 -0
  332. package/lib/modules/Order/utils/bundleDiscountHydration.js +106 -0
  333. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  334. package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
  335. package/lib/modules/Order/utils/orderCollectionIdentity.d.ts +53 -0
  336. package/lib/modules/Order/utils/orderCollectionIdentity.js +353 -0
  337. package/lib/modules/Order/utils.d.ts +167 -18
  338. package/lib/modules/Order/utils.js +1247 -345
  339. package/lib/modules/Payment/cash.js +20 -33
  340. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  341. package/lib/modules/Payment/eftpos.js +16 -30
  342. package/lib/modules/Payment/index.d.ts +10 -9
  343. package/lib/modules/Payment/index.js +542 -502
  344. package/lib/modules/Payment/mx51.js +1 -0
  345. package/lib/modules/Payment/types.d.ts +40 -16
  346. package/lib/modules/Payment/types.js +216 -107
  347. package/lib/modules/Payment/utils.d.ts +1 -1
  348. package/lib/modules/Payment/utils.js +53 -49
  349. package/lib/modules/Payment/walletpass.js +231 -203
  350. package/lib/modules/Product/index.js +51 -46
  351. package/lib/modules/Product/types.d.ts +29 -7
  352. package/lib/modules/Product/types.js +4 -16
  353. package/lib/modules/Product/utils.js +32 -33
  354. package/lib/modules/ProductList/index.d.ts +17 -13
  355. package/lib/modules/ProductList/index.js +160 -118
  356. package/lib/modules/ProductList/types.d.ts +17 -0
  357. package/lib/modules/ProductList/types.js +9 -31
  358. package/lib/modules/Quotation/index.d.ts +22 -2
  359. package/lib/modules/Quotation/index.js +123 -89
  360. package/lib/modules/Quotation/types.d.ts +19 -0
  361. package/lib/modules/Quotation/types.js +4 -16
  362. package/lib/modules/Resource/index.js +27 -59
  363. package/lib/modules/Resource/types.js +22 -32
  364. package/lib/modules/Resource/utils.js +30 -38
  365. package/lib/modules/ResourcePlanner/index.d.ts +24 -0
  366. package/lib/modules/ResourcePlanner/index.js +147 -0
  367. package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
  368. package/lib/modules/ResourcePlanner/planner.js +895 -0
  369. package/lib/modules/ResourcePlanner/types.d.ts +227 -0
  370. package/lib/modules/ResourcePlanner/types.js +5 -0
  371. package/lib/modules/Rules/index.d.ts +8 -10
  372. package/lib/modules/Rules/index.js +1286 -894
  373. package/lib/modules/Rules/types.d.ts +14 -3
  374. package/lib/modules/Rules/types.js +17 -40
  375. package/lib/modules/SalesSummary/index.d.ts +23 -26
  376. package/lib/modules/SalesSummary/index.js +130 -71
  377. package/lib/modules/SalesSummary/types.d.ts +9 -1
  378. package/lib/modules/SalesSummary/types.js +4 -16
  379. package/lib/modules/SalesSummary/utils.d.ts +3 -22
  380. package/lib/modules/SalesSummary/utils.js +738 -250
  381. package/lib/modules/ScanOrderLogger/index.js +59 -79
  382. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  383. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  384. package/lib/modules/ScanOrderLogger/types.js +4 -16
  385. package/lib/modules/Schedule/getDateIsInSchedule.js +345 -171
  386. package/lib/modules/Schedule/index.d.ts +18 -5
  387. package/lib/modules/Schedule/index.js +139 -114
  388. package/lib/modules/Schedule/type.js +4 -16
  389. package/lib/modules/Schedule/types.d.ts +2 -0
  390. package/lib/modules/Schedule/types.js +4 -16
  391. package/lib/modules/Schedule/utils.js +433 -291
  392. package/lib/modules/Step/index.js +40 -52
  393. package/lib/modules/Step/tyeps.js +4 -16
  394. package/lib/modules/Summary/index.js +66 -70
  395. package/lib/modules/Summary/types.js +4 -16
  396. package/lib/modules/Summary/utils.js +782 -429
  397. package/lib/modules/SurchargeList/index.d.ts +18 -0
  398. package/lib/modules/SurchargeList/index.js +95 -0
  399. package/lib/modules/SurchargeList/types.d.ts +15 -0
  400. package/lib/modules/SurchargeList/types.js +5 -0
  401. package/lib/modules/index.d.ts +3 -0
  402. package/lib/modules/index.js +245 -57
  403. package/lib/plugins/app.d.ts +2 -0
  404. package/lib/plugins/app.js +4 -16
  405. package/lib/plugins/index.js +36 -25
  406. package/lib/plugins/request.d.ts +1 -0
  407. package/lib/plugins/request.js +137 -126
  408. package/lib/plugins/shopStore.js +4 -16
  409. package/lib/plugins/user.js +4 -16
  410. package/lib/plugins/window.js +171 -179
  411. package/lib/server/index.d.ts +462 -8
  412. package/lib/server/index.js +4668 -713
  413. package/lib/server/modules/floor-plan/index.d.ts +39 -0
  414. package/lib/server/modules/floor-plan/index.js +306 -0
  415. package/lib/server/modules/floor-plan/types.d.ts +43 -0
  416. package/lib/server/modules/floor-plan/types.js +19 -0
  417. package/lib/server/modules/index.d.ts +7 -2
  418. package/lib/server/modules/index.js +106 -59
  419. package/lib/server/modules/menu/index.js +146 -122
  420. package/lib/server/modules/menu/types.js +18 -31
  421. package/lib/server/modules/order/index.d.ts +207 -14
  422. package/lib/server/modules/order/index.js +1463 -316
  423. package/lib/server/modules/order/types.d.ts +76 -5
  424. package/lib/server/modules/order/types.js +117 -32
  425. package/lib/server/modules/order/utils/filterBookings.d.ts +7 -1
  426. package/lib/server/modules/order/utils/filterBookings.js +288 -146
  427. package/lib/server/modules/order/utils/filterOrders.js +318 -64
  428. package/lib/server/modules/payment/index.d.ts +28 -0
  429. package/lib/server/modules/payment/index.js +168 -0
  430. package/lib/server/modules/payment/types.d.ts +9 -0
  431. package/lib/server/modules/payment/types.js +5 -0
  432. package/lib/server/modules/products/index.d.ts +105 -14
  433. package/lib/server/modules/products/index.js +969 -383
  434. package/lib/server/modules/products/types.d.ts +34 -1
  435. package/lib/server/modules/products/types.js +44 -34
  436. package/lib/server/modules/quotation/index.d.ts +39 -0
  437. package/lib/server/modules/quotation/index.js +220 -77
  438. package/lib/server/modules/quotation/types.js +21 -31
  439. package/lib/server/modules/resource/index.d.ts +2 -3
  440. package/lib/server/modules/resource/index.js +269 -214
  441. package/lib/server/modules/resource/types.js +42 -33
  442. package/lib/server/modules/schedule/index.d.ts +6 -4
  443. package/lib/server/modules/schedule/index.js +158 -132
  444. package/lib/server/modules/schedule/types.js +14 -21
  445. package/lib/server/modules/schedule/utils.js +334 -163
  446. package/lib/server/test.json +713 -0
  447. package/lib/server/types.d.ts +2 -0
  448. package/lib/server/types.js +4 -16
  449. package/lib/server/utils/index.js +25 -23
  450. package/lib/server/utils/product.js +197 -140
  451. package/lib/server/utils/schedule.js +34 -41
  452. package/lib/server/utils/small-ticket.d.ts +71 -0
  453. package/lib/server/utils/small-ticket.js +926 -0
  454. package/lib/server/utils/time.js +40 -49
  455. package/lib/solution/BaseSales/index.d.ts +378 -0
  456. package/lib/solution/BaseSales/index.js +2367 -0
  457. package/lib/solution/BaseSales/types.d.ts +394 -0
  458. package/lib/solution/BaseSales/types.js +47 -0
  459. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  460. package/lib/solution/BaseSales/utils/cartPromotion.js +1155 -0
  461. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +144 -0
  462. package/lib/solution/BaseSales/utils/parseSalesResponse.js +140 -0
  463. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +18 -0
  464. package/lib/solution/BaseSales/utils/quotationPrice.js +231 -0
  465. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +63 -0
  466. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +215 -0
  467. package/lib/solution/BaseSales/utils.d.ts +40 -0
  468. package/lib/solution/BaseSales/utils.js +259 -0
  469. package/lib/solution/BookingByStep/index.js +1530 -1343
  470. package/lib/solution/BookingByStep/types.js +40 -99
  471. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  472. package/lib/solution/BookingByStep/utils/products.js +42 -52
  473. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  474. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  475. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  476. package/lib/solution/BookingTicket/index.d.ts +393 -24
  477. package/lib/solution/BookingTicket/index.js +1459 -160
  478. package/lib/solution/BookingTicket/types.d.ts +191 -6
  479. package/lib/solution/BookingTicket/types.js +101 -66
  480. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  481. package/lib/solution/BookingTicket/utils/addProductDecision.js +353 -0
  482. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  483. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +94 -0
  484. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +77 -0
  485. package/lib/solution/BookingTicket/utils/bookingStatus.js +136 -0
  486. package/lib/solution/BookingTicket/utils/cartView.d.ts +29 -0
  487. package/lib/solution/BookingTicket/utils/cartView.js +200 -0
  488. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  489. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  490. package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
  491. package/lib/solution/BookingTicket/utils/orderCustomer.js +35 -0
  492. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  493. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +387 -0
  494. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  495. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +220 -0
  496. package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
  497. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +85 -80
  498. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  499. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +64 -0
  500. package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
  501. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -80
  502. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  503. package/lib/solution/BookingTicket/utils/scan/index.js +103 -95
  504. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  505. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  506. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +115 -0
  507. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  508. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +83 -0
  509. package/lib/solution/BuyTickets/index.js +67 -70
  510. package/lib/solution/BuyTickets/types.js +22 -38
  511. package/lib/solution/Checkout/index.d.ts +1 -0
  512. package/lib/solution/Checkout/index.js +1461 -1169
  513. package/lib/solution/Checkout/types.js +91 -61
  514. package/lib/solution/Checkout/utils/index.js +228 -159
  515. package/lib/solution/PlaceOrder/index.js +55 -0
  516. package/lib/solution/RegisterAndLogin/config.js +495 -470
  517. package/lib/solution/RegisterAndLogin/index.js +633 -630
  518. package/lib/solution/RegisterAndLogin/types.js +189 -76
  519. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  520. package/lib/solution/Sales/index.d.ts +50 -5
  521. package/lib/solution/Sales/index.js +495 -220
  522. package/lib/solution/Sales/types.d.ts +26 -2
  523. package/lib/solution/Sales/types.js +27 -33
  524. package/lib/solution/ScanOrder/index.d.ts +27 -21
  525. package/lib/solution/ScanOrder/index.js +908 -904
  526. package/lib/solution/ScanOrder/types.d.ts +33 -11
  527. package/lib/solution/ScanOrder/types.js +33 -34
  528. package/lib/solution/ScanOrder/utils.d.ts +4 -1
  529. package/lib/solution/ScanOrder/utils.js +457 -344
  530. package/lib/solution/ShopDiscount/index.js +230 -236
  531. package/lib/solution/ShopDiscount/types.js +15 -37
  532. package/lib/solution/ShopDiscount/utils.js +309 -172
  533. package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
  534. package/lib/solution/UnifiedBookingSales/index.js +1050 -0
  535. package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
  536. package/lib/solution/UnifiedBookingSales/types.js +14 -0
  537. package/lib/solution/VenueBooking/index.d.ts +34 -20
  538. package/lib/solution/VenueBooking/index.js +982 -950
  539. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  540. package/lib/solution/VenueBooking/types.js +20 -40
  541. package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
  542. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  543. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +6 -0
  544. package/lib/solution/VenueBooking/utils/slotMerge.js +96 -108
  545. package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
  546. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
  547. package/lib/solution/VenueBooking/utils.js +130 -67
  548. package/lib/solution/index.d.ts +2 -0
  549. package/lib/solution/index.js +124 -37
  550. package/lib/store/createStore.js +32 -29
  551. package/lib/types/index.d.ts +11 -1
  552. package/lib/types/index.js +4 -16
  553. package/lib/utils/task.js +36 -36
  554. package/lib/utils/watch.js +81 -47
  555. package/package.json +2 -1
  556. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  557. package/lib/solution/Checkout/appointmentDemo.json +0 -1
@@ -1,78 +1,118 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/order/utils/filterBookings.ts
20
- var filterBookings_exports = {};
21
- __export(filterBookings_exports, {
22
- filterBookings: () => filterBookings,
23
- filterBookingsFromOrders: () => filterBookingsFromOrders,
24
- flattenOrdersToBookings: () => flattenOrdersToBookings,
25
- sortBookings: () => sortBookings
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
26
5
  });
27
- module.exports = __toCommonJS(filterBookings_exports);
6
+ exports.filterBookings = filterBookings;
7
+ exports.filterBookingsFromOrders = filterBookingsFromOrders;
8
+ exports.flattenOrdersToBookings = flattenOrdersToBookings;
9
+ exports.productsForBooking = productsForBooking;
10
+ exports.sortBookings = sortBookings;
11
+ var _dayjs = _interopRequireDefault(require("dayjs"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ /** 预约状态:协议 appointment_status 优先,兼容历史 status */
28
14
  function getBookingAppointmentStatus(booking) {
29
- return String(booking.appointment_status ?? booking.status ?? "");
15
+ return String(booking.appointment_status ?? booking.status ?? '');
30
16
  }
17
+
18
+ // ─────────────────────────────────────────────────────────────────
19
+ // 时间戳 / 范围解析
20
+ // ─────────────────────────────────────────────────────────────────
21
+
31
22
  function toTimestamp(value) {
32
- if (value === void 0 || value === null || value === "")
33
- return 0;
34
- if (typeof value === "number")
35
- return value;
36
- return new Date(value).getTime();
23
+ if (value === undefined || value === null || value === '') return 0;
24
+ if (typeof value === 'number') return value;
25
+ // 使用 dayjs 按本地时区解析,避免 new Date("YYYY-MM-DD") 被当作 UTC 0 点
26
+ const d = (0, _dayjs.default)(value);
27
+ return d.isValid() ? d.valueOf() : 0;
28
+ }
29
+
30
+ /** 日期范围端点解析:纯日期串自动对齐到当天起止边界(本地时区) */
31
+ const DATE_ONLY_RE = /^\d{4}-\d{2}-\d{2}$/;
32
+ function toRangeBoundary(value, isEnd) {
33
+ if (value === undefined || value === null || value === '') return 0;
34
+ if (typeof value === 'number') return value;
35
+ const str = String(value).trim();
36
+ const d = (0, _dayjs.default)(str);
37
+ if (!d.isValid()) return 0;
38
+ if (DATE_ONLY_RE.test(str)) {
39
+ return (isEnd ? d.endOf('day') : d.startOf('day')).valueOf();
40
+ }
41
+ return d.valueOf();
37
42
  }
43
+
44
+ /**
45
+ * 将 start_date / start_time(或 end_*)拼成可被 Date 稳定解析的字符串。
46
+ * 时间字段协议为 H:i(如 15:00)时补全为 H:i:00,避免部分环境对「无秒」非 ISO 串(空格分隔)解析不一致。
47
+ */
38
48
  function bookingDateTimeString(datePart, timePart) {
39
- const d = (datePart ?? "").trim();
40
- let t = (timePart ?? "").trim();
49
+ const d = (datePart ?? '').trim();
50
+ let t = (timePart ?? '').trim();
41
51
  if (t && /^\d{1,2}:\d{2}$/.test(t)) {
42
52
  t = `${t}:00`;
43
53
  }
44
54
  return `${d} ${t}`.trim();
45
55
  }
56
+
57
+ /**
58
+ * 解析预约自身的起止时间区间,供 `sales_time_between` 做区间重叠匹配。
59
+ *
60
+ * @example
61
+ * const span = resolveBookingTimeRange({ start_date: '2026-06-09', start_time: '10:00', end_date: '2026-06-15', end_time: '10:00' })
62
+ */
63
+ function resolveBookingTimeRange(booking) {
64
+ const start = toTimestamp(bookingDateTimeString(booking.start_date, booking.start_time));
65
+ if (!start) return null;
66
+ const end = toTimestamp(bookingDateTimeString(booking.end_date || booking.start_date, booking.end_time || booking.start_time)) || start;
67
+ return end >= start ? [start, end] : [end, start];
68
+ }
69
+
70
+ /**
71
+ * 判断两个闭区间是否有交集。
72
+ *
73
+ * @example
74
+ * isRangeOverlapping([1, 10], [5, 6]) // true
75
+ */
76
+ function isRangeOverlapping(left, right) {
77
+ return left[0] <= right[1] && left[1] >= right[0];
78
+ }
46
79
  function parseDateRange(range) {
47
- if (!Array.isArray(range) || range.length < 2)
48
- return null;
49
- const start = toTimestamp(range[0]);
50
- const end = toTimestamp(range[1]);
51
- if (!start && !end)
52
- return null;
80
+ if (!Array.isArray(range) || range.length < 2) return null;
81
+ const start = toRangeBoundary(range[0], false);
82
+ const end = toRangeBoundary(range[1], true);
83
+ if (!start && !end) return null;
53
84
  return [start, end];
54
85
  }
55
86
  function parseNumberRange(range) {
56
- if (!Array.isArray(range) || range.length < 2)
57
- return null;
87
+ if (!Array.isArray(range) || range.length < 2) return null;
58
88
  const min = Number(range[0]);
59
89
  const max = Number(range[1]);
60
- if (isNaN(min) || isNaN(max))
61
- return null;
90
+ if (isNaN(min) || isNaN(max)) return null;
62
91
  return [min, max];
63
92
  }
93
+
94
+ // ─────────────────────────────────────────────────────────────────
95
+ // 预编译过滤上下文:将 filters 一次性解析为高效的 Set / Range,
96
+ // 供 matchOrder、matchBooking 复用,避免重复计算
97
+ // ─────────────────────────────────────────────────────────────────
98
+
99
+ /** 预约列表搜索兼容前端通用 `keyword` 与后端协议 `keywords` 两种字段 */
100
+ function resolveBookingKeyword(f) {
101
+ const keyword = f.keyword ?? f.keywords;
102
+ return typeof keyword === 'string' ? keyword.trim() : '';
103
+ }
64
104
  function prepareFilters(f) {
65
- var _a, _b, _c, _d, _e, _f;
66
- const hasCustomerId = f.customer_id !== void 0 && f.customer_id !== null;
105
+ const hasCustomerId = f.customer_id !== undefined && f.customer_id !== null;
106
+ const keyword = resolveBookingKeyword(f);
67
107
  return {
68
- orderPaymentStatusSet: ((_a = f.order_payment_status) == null ? void 0 : _a.length) ? new Set(f.order_payment_status) : null,
69
- orderStatusSet: ((_b = f.order_status) == null ? void 0 : _b.length) ? new Set(f.order_status) : null,
70
- orderSalesChannelSet: ((_c = f.order_sales_channel) == null ? void 0 : _c.length) ? new Set(f.order_sales_channel) : null,
71
- paymentMethodSet: ((_d = f.payment_method) == null ? void 0 : _d.length) ? new Set(f.payment_method) : null,
72
- appointmentStatusSet: ((_e = f.appointment_status) == null ? void 0 : _e.length) ? new Set(f.appointment_status) : null,
73
- formRecordIdSet: ((_f = f.form_record_ids) == null ? void 0 : _f.length) ? new Set(f.form_record_ids) : null,
108
+ orderPaymentStatusSet: f.order_payment_status?.length ? new Set(f.order_payment_status) : null,
109
+ orderStatusSet: f.order_status?.length ? new Set(f.order_status) : null,
110
+ orderSalesChannelSet: f.order_sales_channel?.length ? new Set(f.order_sales_channel) : null,
111
+ paymentMethodSet: f.payment_method?.length ? new Set(f.payment_method) : null,
112
+ appointmentStatusSet: f.appointment_status?.length ? new Set(f.appointment_status) : null,
113
+ formRecordIdSet: f.form_record_ids?.length ? new Set(f.form_record_ids) : null,
74
114
  hasCustomerId,
75
- customerIdStr: hasCustomerId ? String(f.customer_id) : "",
115
+ customerIdStr: hasCustomerId ? String(f.customer_id) : '',
76
116
  hasBusinessCode: !!f.business_code,
77
117
  businessCode: f.business_code,
78
118
  bookingTimeRange: parseDateRange(f.sales_time_between),
@@ -80,33 +120,30 @@ function prepareFilters(f) {
80
120
  updatedAtRange: parseDateRange(f.updated_at_between),
81
121
  numberRange: parseNumberRange(f.number_between),
82
122
  totalAmountRange: Array.isArray(f.total_amount_between) && f.total_amount_between.length === 2 ? f.total_amount_between : null,
83
- keywordLower: f.keyword ? f.keyword.toLowerCase() : "",
123
+ keywordLower: keyword ? keyword.toLowerCase() : '',
84
124
  afterExecutionTimeMs: (() => {
85
125
  const raw = f.after_execution_time;
86
- if (raw === void 0 || raw === null || raw === "")
87
- return null;
126
+ if (raw === undefined || raw === null || raw === '') return null;
88
127
  const ms = toTimestamp(raw);
89
128
  return Number.isFinite(ms) ? ms : null;
90
129
  })(),
91
130
  enableChildBookingFilter: f.child_booking === 1
92
131
  };
93
132
  }
133
+
134
+ // ─────────────────────────────────────────────────────────────────
135
+ // 订单级匹配:不通过则整个 order 下所有 bookings 跳过
136
+ // ─────────────────────────────────────────────────────────────────
137
+
94
138
  function matchOrder(order, ctx) {
95
- var _a;
96
- if (ctx.hasBusinessCode && order.business_code !== ctx.businessCode)
97
- return false;
98
- if (ctx.hasCustomerId && String(order.customer_id) !== ctx.customerIdStr)
99
- return false;
100
- if (ctx.orderPaymentStatusSet && !ctx.orderPaymentStatusSet.has(order.payment_status))
101
- return false;
102
- if (ctx.orderStatusSet && !ctx.orderStatusSet.has(order.status))
103
- return false;
104
- if (ctx.orderSalesChannelSet && !ctx.orderSalesChannelSet.has(order.order_sales_channel))
105
- return false;
139
+ if (ctx.hasBusinessCode && order.business_code !== ctx.businessCode) return false;
140
+ if (ctx.hasCustomerId && String(order.customer_id) !== ctx.customerIdStr) return false;
141
+ if (ctx.orderPaymentStatusSet && !ctx.orderPaymentStatusSet.has(order.payment_status)) return false;
142
+ if (ctx.orderStatusSet && !ctx.orderStatusSet.has(order.status)) return false;
143
+ if (ctx.orderSalesChannelSet && !ctx.orderSalesChannelSet.has(order.order_sales_channel)) return false;
106
144
  if (ctx.paymentMethodSet) {
107
145
  const pm = order.payments;
108
- if (!Array.isArray(pm) || pm.length === 0)
109
- return false;
146
+ if (!Array.isArray(pm) || pm.length === 0) return false;
110
147
  let matched = false;
111
148
  for (let k = 0; k < pm.length; k++) {
112
149
  if (ctx.paymentMethodSet.has(pm[k].code)) {
@@ -114,101 +151,177 @@ function matchOrder(order, ctx) {
114
151
  break;
115
152
  }
116
153
  }
117
- if (!matched)
118
- return false;
154
+ if (!matched) return false;
119
155
  }
120
156
  if (ctx.createdAtRange) {
121
157
  const ts = toTimestamp(order.created_at);
122
- if (ts < ctx.createdAtRange[0] || ts > ctx.createdAtRange[1])
123
- return false;
158
+ if (ts < ctx.createdAtRange[0] || ts > ctx.createdAtRange[1]) return false;
124
159
  }
125
160
  if (ctx.updatedAtRange) {
126
161
  const ts = toTimestamp(order.updated_at);
127
- if (ts < ctx.updatedAtRange[0] || ts > ctx.updatedAtRange[1])
128
- return false;
162
+ if (ts < ctx.updatedAtRange[0] || ts > ctx.updatedAtRange[1]) return false;
129
163
  }
130
164
  if (ctx.totalAmountRange) {
131
- const raw = ((_a = order.summary) == null ? void 0 : _a.total_amount) ?? order.total_amount;
165
+ const raw = order.summary?.total_amount ?? order.total_amount;
132
166
  const amt = Number(raw);
133
- if (isNaN(amt))
134
- return false;
135
- if (ctx.totalAmountRange[0] != null && amt < ctx.totalAmountRange[0])
136
- return false;
137
- if (ctx.totalAmountRange[1] != null && amt > ctx.totalAmountRange[1])
138
- return false;
167
+ if (isNaN(amt)) return false;
168
+ if (ctx.totalAmountRange[0] != null && amt < ctx.totalAmountRange[0]) return false;
169
+ if (ctx.totalAmountRange[1] != null && amt > ctx.totalAmountRange[1]) return false;
139
170
  }
140
171
  return true;
141
172
  }
173
+
174
+ // ─────────────────────────────────────────────────────────────────
175
+ // Booking 级匹配:在订单通过之后逐条检查每个 booking
176
+ // orderInfo 用于 keyword 搜索时的 JSON 序列化
177
+ // ─────────────────────────────────────────────────────────────────
178
+
142
179
  function matchBooking(booking, orderInfo, ctx) {
143
- if (ctx.enableChildBookingFilter) {
180
+ if (ctx.enableChildBookingFilter && booking.booking_id) {
144
181
  const parentId = Number(booking.parent_id ?? 0);
145
- const itemType = String(booking.item_type ?? "");
146
- const isMatched = parentId !== 0 && itemType !== "recurring_booking" || parentId === 0 && itemType === "recurring_booking";
147
- if (!isMatched)
148
- return false;
182
+ const itemType = String(booking.item_type ?? '');
183
+ const isMatched = parentId !== 0 && itemType !== 'recurring_booking' || parentId === 0 && itemType === 'recurring_booking';
184
+ if (!isMatched) return false;
149
185
  }
150
- if (ctx.appointmentStatusSet && !ctx.appointmentStatusSet.has(getBookingAppointmentStatus(booking)))
151
- return false;
186
+ if (ctx.appointmentStatusSet && !ctx.appointmentStatusSet.has(getBookingAppointmentStatus(booking))) return false;
152
187
  if (ctx.bookingTimeRange) {
153
- const ts = toTimestamp(booking.start_date);
154
- if (ts < ctx.bookingTimeRange[0] || ts > ctx.bookingTimeRange[1])
155
- return false;
188
+ const bookingRange = resolveBookingTimeRange(booking);
189
+ if (!bookingRange || !isRangeOverlapping(bookingRange, ctx.bookingTimeRange)) return false;
156
190
  }
157
191
  if (ctx.afterExecutionTimeMs != null) {
158
192
  const bookingStartMs = toTimestamp(bookingDateTimeString(booking.start_date, booking.start_time));
159
- if (!Number.isFinite(bookingStartMs) || bookingStartMs < ctx.afterExecutionTimeMs)
160
- return false;
193
+ if (!Number.isFinite(bookingStartMs) || bookingStartMs < ctx.afterExecutionTimeMs) return false;
161
194
  }
162
195
  if (ctx.numberRange) {
163
196
  const num = Number(booking.number);
164
- if (isNaN(num) || num < ctx.numberRange[0] || num > ctx.numberRange[1])
165
- return false;
197
+ if (isNaN(num) || num < ctx.numberRange[0] || num > ctx.numberRange[1]) return false;
166
198
  }
167
199
  if (ctx.formRecordIdSet) {
168
200
  let formMatched = false;
169
201
  const resources = booking.resources;
170
202
  if (Array.isArray(resources)) {
171
203
  for (let r = 0; r < resources.length; r++) {
172
- if (resources[r].relation_type === "form" && ctx.formRecordIdSet.has(resources[r].relation_id)) {
204
+ if (resources[r].relation_type === 'form' && ctx.formRecordIdSet.has(resources[r].relation_id)) {
173
205
  formMatched = true;
174
206
  break;
175
207
  }
176
208
  }
177
209
  }
178
- if (!formMatched && booking.relation_type === "form" && booking.relation_id && booking.relation_id > 0) {
210
+ if (!formMatched && booking.relation_type === 'form' && booking.relation_id && booking.relation_id > 0) {
179
211
  formMatched = ctx.formRecordIdSet.has(booking.relation_id);
180
212
  }
181
- if (!formMatched)
182
- return false;
213
+ if (!formMatched) return false;
183
214
  }
184
215
  if (ctx.keywordLower) {
185
- const target = orderInfo ? { ...booking, order: orderInfo } : booking;
216
+ const target = orderInfo ? {
217
+ ...booking,
218
+ order: orderInfo
219
+ } : booking;
186
220
  const str = JSON.stringify(target).toLowerCase();
187
- if (!str.includes(ctx.keywordLower))
188
- return false;
221
+ if (!str.includes(ctx.keywordLower)) return false;
189
222
  }
190
223
  return true;
191
224
  }
225
+
226
+ // ─────────────────────────────────────────────────────────────────
227
+ // 当前预约归属商品:先按 schedule_event_id 命中,再按 relation_items.resource_id 追加(去重保序)
228
+ // ─────────────────────────────────────────────────────────────────
229
+
230
+ /**
231
+ * 从整单 `order.products` 中归集属于指定 `booking` 的明细行。
232
+ * - 第一遍:`product.schedule_event_id === booking.schedule_event_id`(保持 products 原顺序)
233
+ * - 第二遍:按 `relation_items` 顺序追加 `resource_id` 与 `order_detail_id` 匹配且尚未收录的行
234
+ */
235
+ function productsForBooking(order, booking) {
236
+ const products = order.products;
237
+ if (!Array.isArray(products) || products.length === 0) return [];
238
+ const bookingEventId = booking.schedule_event_id;
239
+ const byDetailId = new Map();
240
+ for (let i = 0, len = products.length; i < len; i++) {
241
+ const p = products[i];
242
+ const oid = p.order_detail_id;
243
+ if (oid === undefined || oid === null) continue;
244
+ const detailId = Number(oid);
245
+ if (Number.isNaN(detailId)) continue;
246
+ byDetailId.set(detailId, p);
247
+ }
248
+ const seen = new Set();
249
+ const out = [];
250
+ for (let i = 0, len = products.length; i < len; i++) {
251
+ const p = products[i];
252
+ const oid = p.order_detail_id;
253
+ if (oid === undefined || oid === null) continue;
254
+ const detailId = Number(oid);
255
+ if (Number.isNaN(detailId)) continue;
256
+ if (bookingEventId !== undefined && bookingEventId !== null && p.schedule_event_id !== undefined && p.schedule_event_id !== null && Number(p.schedule_event_id) === Number(bookingEventId)) {
257
+ if (!seen.has(detailId)) {
258
+ seen.add(detailId);
259
+ out.push(p);
260
+ }
261
+ }
262
+ }
263
+ const relationItems = booking.relation_items;
264
+ if (Array.isArray(relationItems) && relationItems.length > 0) {
265
+ for (let r = 0, rLen = relationItems.length; r < rLen; r++) {
266
+ const rid = relationItems[r]?.resource_id;
267
+ if (rid === undefined || rid === null) continue;
268
+ const detailId = Number(rid);
269
+ if (Number.isNaN(detailId) || seen.has(detailId)) continue;
270
+ const line = byDetailId.get(detailId);
271
+ if (line) {
272
+ seen.add(detailId);
273
+ out.push(line);
274
+ }
275
+ }
276
+ }
277
+ return out;
278
+ }
279
+
280
+ // ─────────────────────────────────────────────────────────────────
281
+ // 转换:OrderData[] → BookingData[](独立导出,供其他场景使用)
282
+ // ─────────────────────────────────────────────────────────────────
283
+
192
284
  function flattenOrdersToBookings(orders) {
193
- if (!orders || !Array.isArray(orders))
194
- return [];
285
+ if (!orders || !Array.isArray(orders)) return [];
195
286
  const result = [];
196
287
  for (let i = 0, len = orders.length; i < len; i++) {
197
288
  const order = orders[i];
198
289
  const bookings = order.bookings;
199
- if (!Array.isArray(bookings) || bookings.length === 0)
200
- continue;
201
- const { bookings: _omit, ...orderInfo } = order;
290
+ if (!Array.isArray(bookings) || bookings.length === 0) continue;
291
+ const {
292
+ bookings: _omit,
293
+ ...orderInfo
294
+ } = order;
202
295
  for (let j = 0, bLen = bookings.length; j < bLen; j++) {
203
- result.push({ ...bookings[j], order: orderInfo });
296
+ const booking = bookings[j];
297
+ result.push({
298
+ ...booking,
299
+ order: orderInfo,
300
+ products: order.products
301
+ });
204
302
  }
205
303
  }
206
304
  return result;
207
305
  }
306
+
307
+ // ─────────────────────────────────────────────────────────────────
308
+ // 核心:单遍扫描 — 展开 + 过滤 + 分页
309
+ //
310
+ // 性能策略:
311
+ // 1. 订单级条件在外层循环 matchOrder 预判,不匹配则整组 bookings 跳过
312
+ // 2. orderInfo 延迟到有命中 booking 时才创建,同一 order 只创建一次
313
+ // 3. 只对最终命中的 booking 做 object spread
314
+ // ─────────────────────────────────────────────────────────────────
315
+
208
316
  function filterBookingsFromOrders(orders, filters) {
209
317
  const f = filters || {};
210
318
  if (!orders || !Array.isArray(orders)) {
211
- return { list: [], count: 0, size: 0, skip: 0 };
319
+ return {
320
+ list: [],
321
+ count: 0,
322
+ size: 0,
323
+ skip: 0
324
+ };
212
325
  }
213
326
  const size = f.num || 20;
214
327
  const page = f.skip || 1;
@@ -219,25 +332,40 @@ function filterBookingsFromOrders(orders, filters) {
219
332
  for (let i = 0, oLen = orders.length; i < oLen; i++) {
220
333
  const order = orders[i];
221
334
  const bookings = order.bookings;
222
- if (!Array.isArray(bookings) || bookings.length === 0)
223
- continue;
224
- if (!matchOrder(order, ctx))
225
- continue;
335
+ if (!Array.isArray(bookings) || bookings.length === 0) continue;
336
+
337
+ // 订单级预过滤
338
+ if (!matchOrder(order, ctx)) continue;
339
+
340
+ // 订单通过,遍历其 bookings;orderInfo 延迟创建
226
341
  let orderInfo = null;
227
342
  for (let j = 0, bLen = bookings.length; j < bLen; j++) {
228
343
  const booking = bookings[j];
344
+
345
+ // keyword 匹配需要 orderInfo,提前创建
229
346
  if (ctx.keywordLower && !orderInfo) {
230
- const { bookings: _omit, ...rest } = order;
347
+ const {
348
+ bookings: _omit,
349
+ ...rest
350
+ } = order;
231
351
  orderInfo = rest;
232
352
  }
233
- if (!matchBooking(booking, orderInfo, ctx))
234
- continue;
353
+ if (!matchBooking(booking, orderInfo, ctx)) continue;
354
+
355
+ // 命中:收集到分页窗口内
235
356
  if (totalCount >= startIndex && paginatedList.length < size) {
236
357
  if (!orderInfo) {
237
- const { bookings: _omit, ...rest } = order;
358
+ const {
359
+ bookings: _omit,
360
+ ...rest
361
+ } = order;
238
362
  orderInfo = rest;
239
363
  }
240
- paginatedList.push({ ...booking, order: orderInfo });
364
+ paginatedList.push({
365
+ ...booking,
366
+ order: orderInfo,
367
+ products: order.products
368
+ });
241
369
  }
242
370
  totalCount++;
243
371
  }
@@ -249,28 +377,32 @@ function filterBookingsFromOrders(orders, filters) {
249
377
  skip: page
250
378
  };
251
379
  }
380
+
381
+ // ─────────────────────────────────────────────────────────────────
382
+ // 排序预约列表
383
+ // order_by 格式:"field:direction",如 "start_at:desc"
384
+ // 不带方向后缀则不排序
385
+ // ─────────────────────────────────────────────────────────────────
386
+
252
387
  function sortBookings(result, filters) {
253
388
  const f = filters || {};
254
389
  const orderBy = f.order_by;
255
- if (!orderBy)
256
- return result;
257
- const separatorIdx = orderBy.lastIndexOf(":");
258
- if (separatorIdx === -1)
259
- return result;
390
+ if (!orderBy) return result;
391
+ const separatorIdx = orderBy.lastIndexOf(':');
392
+ if (separatorIdx === -1) return result;
260
393
  const field = orderBy.slice(0, separatorIdx);
261
394
  const direction = orderBy.slice(separatorIdx + 1);
262
- if (direction !== "asc" && direction !== "desc")
263
- return result;
264
- const multiplier = direction === "asc" ? 1 : -1;
265
- const getTimestamp = (booking) => {
395
+ if (direction !== 'asc' && direction !== 'desc') return result;
396
+ const multiplier = direction === 'asc' ? 1 : -1;
397
+ const getTimestamp = booking => {
266
398
  switch (field) {
267
- case "start_at":
399
+ case 'start_at':
268
400
  return toTimestamp(bookingDateTimeString(booking.start_date, booking.start_time));
269
- case "end_at":
401
+ case 'end_at':
270
402
  return toTimestamp(bookingDateTimeString(booking.end_date, booking.end_time));
271
- case "created_at":
403
+ case 'created_at':
272
404
  return toTimestamp(booking.order.created_at);
273
- case "updated_at":
405
+ case 'updated_at':
274
406
  return toTimestamp(booking.order.updated_at);
275
407
  default:
276
408
  return 0;
@@ -279,12 +411,26 @@ function sortBookings(result, filters) {
279
411
  const sorted = result.list.slice().sort((a, b) => {
280
412
  return (getTimestamp(a) - getTimestamp(b)) * multiplier;
281
413
  });
282
- return { ...result, list: sorted };
414
+ return {
415
+ ...result,
416
+ list: sorted
417
+ };
283
418
  }
419
+
420
+ // ─────────────────────────────────────────────────────────────────
421
+ // 兼容独立调用:对已展开的 BookingData[] 做筛选
422
+ // 复用 matchOrder + matchBooking,仅负责迭代与分页
423
+ // ─────────────────────────────────────────────────────────────────
424
+
284
425
  function filterBookings(bookings, filters) {
285
426
  const f = filters || {};
286
427
  if (!bookings || !Array.isArray(bookings)) {
287
- return { list: [], count: 0, size: 0, skip: 0 };
428
+ return {
429
+ list: [],
430
+ count: 0,
431
+ size: 0,
432
+ skip: 0
433
+ };
288
434
  }
289
435
  const size = f.num || 20;
290
436
  const page = f.skip || 1;
@@ -295,12 +441,15 @@ function filterBookings(bookings, filters) {
295
441
  for (let i = 0, len = bookings.length; i < len; i++) {
296
442
  const booking = bookings[i];
297
443
  const order = booking.order;
298
- if (!matchOrder(order, ctx))
299
- continue;
300
- if (!matchBooking(booking, order, ctx))
301
- continue;
444
+
445
+ // 订单级 + booking 级统一匹配
446
+ if (!matchOrder(order, ctx)) continue;
447
+ if (!matchBooking(booking, order, ctx)) continue;
302
448
  if (totalCount >= startIndex && paginatedList.length < size) {
303
- paginatedList.push(booking);
449
+ paginatedList.push({
450
+ ...booking,
451
+ products: booking.order.products
452
+ });
304
453
  }
305
454
  totalCount++;
306
455
  }
@@ -310,11 +459,4 @@ function filterBookings(bookings, filters) {
310
459
  size,
311
460
  skip: page
312
461
  };
313
- }
314
- // Annotate the CommonJS export names for ESM import in node:
315
- 0 && (module.exports = {
316
- filterBookings,
317
- filterBookingsFromOrders,
318
- flattenOrdersToBookings,
319
- sortBookings
320
- });
462
+ }