@pisell/pisellos 0.0.569 → 0.10.2

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