@pisell/pisellos 2.3.73 → 2.3.75

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 (296) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +111 -71
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +2 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +36 -64
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Quotation/index.d.ts +6 -0
  15. package/dist/modules/Quotation/index.js +75 -19
  16. package/dist/modules/Rules/index.js +1 -4
  17. package/dist/modules/Schedule/index.js +0 -1
  18. package/dist/modules/Schedule/utils.js +0 -1
  19. package/dist/modules/Step/index.js +0 -1
  20. package/dist/plugins/request.d.ts +1 -0
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.d.ts +8 -2
  24. package/dist/server/index.js +303 -269
  25. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  26. package/dist/server/modules/floor-plan/index.js +240 -98
  27. package/dist/server/modules/menu/index.js +75 -59
  28. package/dist/server/modules/order/index.d.ts +17 -7
  29. package/dist/server/modules/order/index.js +421 -211
  30. package/dist/server/modules/products/index.d.ts +8 -2
  31. package/dist/server/modules/products/index.js +191 -117
  32. package/dist/server/modules/quotation/index.js +29 -38
  33. package/dist/server/modules/resource/index.js +24 -17
  34. package/dist/server/modules/schedule/index.js +27 -35
  35. package/dist/server/utils/product.js +0 -1
  36. package/dist/solution/BaseSales/index.js +38 -41
  37. package/dist/solution/BookingByStep/index.d.ts +1 -1
  38. package/dist/solution/BookingByStep/index.js +7 -59
  39. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  40. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  41. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  42. package/dist/solution/BookingTicket/index.js +0 -2
  43. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  44. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  45. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  46. package/dist/solution/BuyTickets/index.js +9 -12
  47. package/dist/solution/Checkout/index.js +177 -252
  48. package/dist/solution/Checkout/utils/index.js +4 -16
  49. package/dist/solution/RegisterAndLogin/index.js +30 -76
  50. package/dist/solution/ScanOrder/index.js +50 -60
  51. package/dist/solution/ShopDiscount/index.js +2 -7
  52. package/dist/solution/VenueBooking/index.js +45 -55
  53. package/dist/utils/task.js +15 -18
  54. package/dist/utils/watch.js +0 -1
  55. package/lib/apis/picoding.js +2 -0
  56. package/lib/core/index.d.ts +7 -0
  57. package/lib/core/index.js +149 -131
  58. package/lib/effects/index.js +46 -57
  59. package/lib/index.js +82 -49
  60. package/lib/model/index.js +14 -21
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  63. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  64. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  65. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  66. package/lib/model/strategy/adapter/index.js +100 -64
  67. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  68. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  69. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  70. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  71. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  72. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  73. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  74. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  75. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  76. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  77. package/lib/model/strategy/adapter/type.js +4 -16
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  79. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  80. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  81. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  82. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  83. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  84. package/lib/model/strategy/engine.js +270 -168
  85. package/lib/model/strategy/index.js +49 -34
  86. package/lib/model/strategy/strategy-example.js +243 -239
  87. package/lib/model/strategy/type.js +100 -40
  88. package/lib/modules/Account/index.js +39 -53
  89. package/lib/modules/Account/types.js +20 -33
  90. package/lib/modules/AccountList/index.js +116 -154
  91. package/lib/modules/AccountList/types.js +30 -31
  92. package/lib/modules/AccountList/utils.js +18 -30
  93. package/lib/modules/BaseModule.js +23 -42
  94. package/lib/modules/BookingContext/index.js +158 -136
  95. package/lib/modules/BookingContext/types.js +46 -32
  96. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  97. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  99. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  100. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  101. package/lib/modules/BookingContext/utils/index.js +124 -41
  102. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  103. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  104. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  105. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  106. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  107. package/lib/modules/BookingContext/utils/resources.js +209 -167
  108. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  109. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  110. package/lib/modules/Cart/index.js +170 -124
  111. package/lib/modules/Cart/types.js +46 -51
  112. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  113. package/lib/modules/Cart/utils/cartDate.js +56 -61
  114. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  115. package/lib/modules/Cart/utils/cartNote.js +27 -32
  116. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  117. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  118. package/lib/modules/Cart/utils/cartResource.js +70 -78
  119. package/lib/modules/Cart/utils/changePrice.js +22 -50
  120. package/lib/modules/Cart/utils/index.js +106 -48
  121. package/lib/modules/Customer/constants.js +13 -34
  122. package/lib/modules/Customer/index.js +235 -172
  123. package/lib/modules/Customer/types.js +38 -35
  124. package/lib/modules/Date/index.js +116 -115
  125. package/lib/modules/Date/types.js +16 -28
  126. package/lib/modules/Date/utils.js +174 -123
  127. package/lib/modules/Discount/index.js +122 -127
  128. package/lib/modules/Discount/types.js +9 -31
  129. package/lib/modules/Guests/index.js +30 -56
  130. package/lib/modules/Guests/types.js +23 -33
  131. package/lib/modules/Holder/index.js +209 -189
  132. package/lib/modules/Holder/types.js +4 -16
  133. package/lib/modules/Holder/utils.js +20 -49
  134. package/lib/modules/OpenData/index.js +70 -76
  135. package/lib/modules/OpenData/types.js +4 -16
  136. package/lib/modules/OpenData/utils.js +44 -78
  137. package/lib/modules/Order/index.d.ts +1 -1
  138. package/lib/modules/Order/index.js +1713 -2118
  139. package/lib/modules/Order/payment-utils.js +77 -120
  140. package/lib/modules/Order/types.js +88 -35
  141. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  142. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  143. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  144. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  145. package/lib/modules/Order/utils.js +814 -647
  146. package/lib/modules/Payment/cash.js +20 -33
  147. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  148. package/lib/modules/Payment/eftpos.js +16 -30
  149. package/lib/modules/Payment/index.js +532 -399
  150. package/lib/modules/Payment/mx51.js +1 -0
  151. package/lib/modules/Payment/types.js +230 -108
  152. package/lib/modules/Payment/utils.js +52 -51
  153. package/lib/modules/Payment/walletpass.js +485 -660
  154. package/lib/modules/Product/index.js +51 -46
  155. package/lib/modules/Product/types.js +4 -16
  156. package/lib/modules/Product/utils.js +32 -33
  157. package/lib/modules/ProductList/index.js +113 -123
  158. package/lib/modules/ProductList/types.js +9 -31
  159. package/lib/modules/Quotation/index.d.ts +6 -0
  160. package/lib/modules/Quotation/index.js +110 -103
  161. package/lib/modules/Quotation/types.js +4 -16
  162. package/lib/modules/Resource/index.js +27 -59
  163. package/lib/modules/Resource/types.js +22 -32
  164. package/lib/modules/Resource/utils.js +30 -38
  165. package/lib/modules/ResourcePlanner/index.js +25 -23
  166. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  167. package/lib/modules/ResourcePlanner/planner.js +589 -770
  168. package/lib/modules/ResourcePlanner/types.js +10 -29
  169. package/lib/modules/Rules/index.js +1218 -959
  170. package/lib/modules/Rules/types.js +17 -40
  171. package/lib/modules/SalesSummary/index.js +85 -90
  172. package/lib/modules/SalesSummary/types.js +4 -16
  173. package/lib/modules/SalesSummary/utils.js +355 -430
  174. package/lib/modules/ScanOrderLogger/index.js +59 -79
  175. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  176. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  177. package/lib/modules/ScanOrderLogger/types.js +4 -16
  178. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  179. package/lib/modules/Schedule/index.js +100 -114
  180. package/lib/modules/Schedule/type.js +4 -16
  181. package/lib/modules/Schedule/types.js +4 -16
  182. package/lib/modules/Schedule/utils.js +433 -291
  183. package/lib/modules/Step/index.js +40 -52
  184. package/lib/modules/Step/tyeps.js +4 -16
  185. package/lib/modules/Summary/index.js +66 -71
  186. package/lib/modules/Summary/types.js +4 -16
  187. package/lib/modules/Summary/utils.js +773 -418
  188. package/lib/modules/SurchargeList/index.js +46 -60
  189. package/lib/modules/SurchargeList/types.js +4 -16
  190. package/lib/modules/index.js +245 -63
  191. package/lib/plugins/app.js +4 -16
  192. package/lib/plugins/index.js +36 -25
  193. package/lib/plugins/request.d.ts +1 -0
  194. package/lib/plugins/request.js +137 -126
  195. package/lib/plugins/shopStore.js +4 -16
  196. package/lib/plugins/user.js +4 -16
  197. package/lib/plugins/window.js +171 -179
  198. package/lib/server/index.d.ts +8 -2
  199. package/lib/server/index.js +3083 -2663
  200. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  201. package/lib/server/modules/floor-plan/index.js +159 -127
  202. package/lib/server/modules/floor-plan/types.js +15 -30
  203. package/lib/server/modules/index.js +106 -68
  204. package/lib/server/modules/menu/index.js +170 -124
  205. package/lib/server/modules/menu/types.js +18 -31
  206. package/lib/server/modules/order/index.d.ts +17 -7
  207. package/lib/server/modules/order/index.js +916 -977
  208. package/lib/server/modules/order/types.js +122 -33
  209. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  210. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  211. package/lib/server/modules/payment/index.js +59 -83
  212. package/lib/server/modules/payment/types.js +4 -16
  213. package/lib/server/modules/products/index.d.ts +8 -2
  214. package/lib/server/modules/products/index.js +656 -471
  215. package/lib/server/modules/products/types.js +44 -34
  216. package/lib/server/modules/quotation/index.js +137 -172
  217. package/lib/server/modules/quotation/types.js +21 -31
  218. package/lib/server/modules/resource/index.js +225 -186
  219. package/lib/server/modules/resource/types.js +42 -33
  220. package/lib/server/modules/schedule/index.js +135 -123
  221. package/lib/server/modules/schedule/types.js +14 -21
  222. package/lib/server/modules/schedule/utils.js +334 -163
  223. package/lib/server/types.js +4 -16
  224. package/lib/server/utils/index.js +25 -23
  225. package/lib/server/utils/product.js +196 -139
  226. package/lib/server/utils/schedule.js +34 -41
  227. package/lib/server/utils/small-ticket.js +479 -456
  228. package/lib/server/utils/time.js +40 -49
  229. package/lib/solution/BaseSales/index.js +1186 -1410
  230. package/lib/solution/BaseSales/types.js +42 -38
  231. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  233. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  235. package/lib/solution/BaseSales/utils.js +158 -143
  236. package/lib/solution/BookingByStep/index.d.ts +1 -1
  237. package/lib/solution/BookingByStep/index.js +1527 -1340
  238. package/lib/solution/BookingByStep/types.js +40 -99
  239. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  240. package/lib/solution/BookingByStep/utils/products.js +42 -52
  241. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  242. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  243. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  244. package/lib/solution/BookingTicket/index.js +607 -522
  245. package/lib/solution/BookingTicket/types.js +99 -77
  246. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  247. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  248. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  249. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  250. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  251. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  252. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  253. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  254. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  255. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  256. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  257. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  258. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  259. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  260. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  261. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  262. package/lib/solution/BuyTickets/index.js +67 -70
  263. package/lib/solution/BuyTickets/types.js +22 -38
  264. package/lib/solution/Checkout/index.js +1451 -1158
  265. package/lib/solution/Checkout/types.js +91 -61
  266. package/lib/solution/Checkout/utils/index.js +228 -156
  267. package/lib/solution/PlaceOrder/index.js +55 -0
  268. package/lib/solution/RegisterAndLogin/config.js +493 -460
  269. package/lib/solution/RegisterAndLogin/index.js +633 -630
  270. package/lib/solution/RegisterAndLogin/types.js +189 -76
  271. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  272. package/lib/solution/Sales/index.js +328 -324
  273. package/lib/solution/Sales/types.js +27 -33
  274. package/lib/solution/ScanOrder/index.js +832 -864
  275. package/lib/solution/ScanOrder/types.js +33 -34
  276. package/lib/solution/ScanOrder/utils.js +409 -374
  277. package/lib/solution/ShopDiscount/index.js +226 -232
  278. package/lib/solution/ShopDiscount/types.js +15 -37
  279. package/lib/solution/ShopDiscount/utils.js +300 -172
  280. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  281. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  282. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  283. package/lib/solution/VenueBooking/index.js +811 -879
  284. package/lib/solution/VenueBooking/types.js +19 -39
  285. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  286. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  287. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  288. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  289. package/lib/solution/VenueBooking/utils.js +130 -67
  290. package/lib/solution/index.js +124 -41
  291. package/lib/store/createStore.js +32 -29
  292. package/lib/types/index.js +4 -16
  293. package/lib/utils/payment-number.js +26 -46
  294. package/lib/utils/task.js +36 -36
  295. package/lib/utils/watch.js +81 -47
  296. package/package.json +2 -1
@@ -1,67 +1,44 @@
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);
1
+ "use strict";
28
2
 
29
- // src/solution/VenueBooking/utils/timeSlot.ts
30
- var timeSlot_exports = {};
31
- __export(timeSlot_exports, {
32
- buildTimeSlotGrid: () => buildTimeSlotGrid,
33
- collectEventsForDate: () => collectEventsForDate,
34
- computeSlotStatus: () => computeSlotStatus,
35
- generateTimeLabels: () => generateTimeLabels,
36
- isBusinessHoursCrossDay: () => isBusinessHoursCrossDay,
37
- isSlotOccupied: () => isSlotOccupied
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
38
5
  });
39
- module.exports = __toCommonJS(timeSlot_exports);
40
- var import_dayjs = __toESM(require("dayjs"));
41
- var import_decimal = __toESM(require("decimal.js"));
6
+ exports.buildTimeSlotGrid = buildTimeSlotGrid;
7
+ exports.collectEventsForDate = collectEventsForDate;
8
+ exports.computeSlotStatus = computeSlotStatus;
9
+ exports.generateTimeLabels = generateTimeLabels;
10
+ exports.isBusinessHoursCrossDay = isBusinessHoursCrossDay;
11
+ exports.isSlotOccupied = isSlotOccupied;
12
+ var _dayjs = _interopRequireDefault(require("dayjs"));
13
+ var _decimal = _interopRequireDefault(require("decimal.js"));
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
42
15
  function isBusinessHoursCrossDay(config) {
43
- const [startH, startM] = config.businessStartTime.split(":").map(Number);
44
- const [endH, endM] = config.businessEndTime.split(":").map(Number);
16
+ const [startH, startM] = config.businessStartTime.split(':').map(Number);
17
+ const [endH, endM] = config.businessEndTime.split(':').map(Number);
45
18
  return endH < startH || endH === startH && endM <= startM;
46
19
  }
47
20
  function generateTimeLabels(config) {
48
- const { slotDurationMinutes, businessStartTime, businessEndTime } = config;
21
+ const {
22
+ slotDurationMinutes,
23
+ businessStartTime,
24
+ businessEndTime
25
+ } = config;
49
26
  const labels = [];
50
- const baseDate = "2000-01-01";
51
- let cursor = (0, import_dayjs.default)(`${baseDate} ${businessStartTime}`);
27
+ const baseDate = '2000-01-01';
28
+ let cursor = (0, _dayjs.default)(`${baseDate} ${businessStartTime}`);
52
29
  const crossDay = isBusinessHoursCrossDay(config);
53
- const endBase = crossDay ? "2000-01-02" : baseDate;
54
- const end = (0, import_dayjs.default)(`${endBase} ${businessEndTime}`);
30
+ const endBase = crossDay ? '2000-01-02' : baseDate;
31
+ const end = (0, _dayjs.default)(`${endBase} ${businessEndTime}`);
55
32
  while (cursor.isBefore(end)) {
56
- labels.push(cursor.format("HH:mm"));
57
- cursor = cursor.add(slotDurationMinutes, "minute");
33
+ labels.push(cursor.format('HH:mm'));
34
+ cursor = cursor.add(slotDurationMinutes, 'minute');
58
35
  }
59
36
  return labels;
60
37
  }
61
38
  function isSlotOccupied(slotStart, slotEnd, occupiedTimes) {
62
39
  for (const occupied of occupiedTimes) {
63
- const occStart = (0, import_dayjs.default)(occupied.start_at);
64
- const occEnd = (0, import_dayjs.default)(occupied.end_at);
40
+ const occStart = (0, _dayjs.default)(occupied.start_at);
41
+ const occEnd = (0, _dayjs.default)(occupied.end_at);
65
42
  if (slotStart.isBefore(occEnd) && slotEnd.isAfter(occStart)) {
66
43
  return true;
67
44
  }
@@ -70,20 +47,19 @@ function isSlotOccupied(slotStart, slotEnd, occupiedTimes) {
70
47
  }
71
48
  function isSlotWithinResourceTimes(slotStart, slotEnd, resourceTimes) {
72
49
  for (const t of resourceTimes) {
73
- const tStart = (0, import_dayjs.default)(t.start_at);
74
- const tEnd = (0, import_dayjs.default)(t.end_at);
75
- if (slotStart.isBefore(tEnd) && slotEnd.isAfter(tStart))
76
- return true;
50
+ const tStart = (0, _dayjs.default)(t.start_at);
51
+ const tEnd = (0, _dayjs.default)(t.end_at);
52
+ if (slotStart.isBefore(tEnd) && slotEnd.isAfter(tStart)) return true;
77
53
  }
78
54
  return false;
79
55
  }
80
56
  function getResourceTimesForDate(resource, date, config) {
81
57
  const crossDay = isBusinessHoursCrossDay(config);
82
- const dayStart = (0, import_dayjs.default)(`${date} ${config.businessStartTime}`);
83
- const dayEnd = crossDay ? (0, import_dayjs.default)(`${date} ${config.businessEndTime}`).add(1, "day") : (0, import_dayjs.default)(`${date} ${config.businessEndTime}`);
84
- return resource.times.filter((t) => {
85
- const tStart = (0, import_dayjs.default)(t.start_at);
86
- const tEnd = (0, import_dayjs.default)(t.end_at);
58
+ const dayStart = (0, _dayjs.default)(`${date} ${config.businessStartTime}`);
59
+ const dayEnd = crossDay ? (0, _dayjs.default)(`${date} ${config.businessEndTime}`).add(1, 'day') : (0, _dayjs.default)(`${date} ${config.businessEndTime}`);
60
+ return resource.times.filter(t => {
61
+ const tStart = (0, _dayjs.default)(t.start_at);
62
+ const tEnd = (0, _dayjs.default)(t.end_at);
87
63
  return tStart.isBefore(dayEnd) && tEnd.isAfter(dayStart);
88
64
  });
89
65
  }
@@ -104,25 +80,50 @@ function collectEventsForDate(resource, date, config) {
104
80
  return events;
105
81
  }
106
82
  function computeSlotStatus(params) {
107
- const { slotStart, slotEnd, events, resourceType, capacity } = params;
108
- const overlapping = events.filter((evt) => {
109
- const evtStart = (0, import_dayjs.default)(evt.start_at);
110
- const evtEnd = (0, import_dayjs.default)(evt.end_at);
83
+ const {
84
+ slotStart,
85
+ slotEnd,
86
+ events,
87
+ resourceType,
88
+ capacity
89
+ } = params;
90
+ const overlapping = events.filter(evt => {
91
+ const evtStart = (0, _dayjs.default)(evt.start_at);
92
+ const evtEnd = (0, _dayjs.default)(evt.end_at);
111
93
  return slotStart.isBefore(evtEnd) && slotEnd.isAfter(evtStart);
112
94
  });
113
- if (resourceType === "single") {
114
- if (overlapping.length > 0)
115
- return { status: "occupied", remainingCapacity: 0 };
116
- return { status: "available", remainingCapacity: 1 };
95
+ if (resourceType === 'single') {
96
+ if (overlapping.length > 0) return {
97
+ status: 'occupied',
98
+ remainingCapacity: 0
99
+ };
100
+ return {
101
+ status: 'available',
102
+ remainingCapacity: 1
103
+ };
117
104
  }
118
105
  const usedCapacity = overlapping.reduce((sum, evt) => sum + evt.pax, 0);
119
106
  const remaining = Math.max(0, capacity - usedCapacity);
120
- if (remaining <= 0)
121
- return { status: "occupied", remainingCapacity: 0 };
122
- if (remaining < capacity)
123
- return { status: "partially_occupied", remainingCapacity: remaining };
124
- return { status: "available", remainingCapacity: remaining };
107
+ if (remaining <= 0) return {
108
+ status: 'occupied',
109
+ remainingCapacity: 0
110
+ };
111
+ if (remaining < capacity) return {
112
+ status: 'partially_occupied',
113
+ remainingCapacity: remaining
114
+ };
115
+ return {
116
+ status: 'available',
117
+ remainingCapacity: remaining
118
+ };
125
119
  }
120
+
121
+ /**
122
+ * 合并多个子商品的同一个时段为一个"外层 slot"。
123
+ * - status 取优先级最高的(available > partially_occupied > occupied > unavailable / past)
124
+ * - price 取非空子 slot 中最小的那个
125
+ * - 其它字段使用第一个参考子 slot(外层 slot 不带 productId)
126
+ */
126
127
  function mergeSubSlots(subSlots) {
127
128
  const priority = {
128
129
  available: 5,
@@ -133,16 +134,13 @@ function mergeSubSlots(subSlots) {
133
134
  };
134
135
  let best = subSlots[0];
135
136
  for (const slot of subSlots) {
136
- if ((priority[slot.status] ?? 0) > (priority[best.status] ?? 0))
137
- best = slot;
137
+ if ((priority[slot.status] ?? 0) > (priority[best.status] ?? 0)) best = slot;
138
138
  }
139
139
  let minPrice = null;
140
140
  for (const slot of subSlots) {
141
- if (slot.price == null)
142
- continue;
143
- const decimal = new import_decimal.default(slot.price || "0");
144
- if (!minPrice || decimal.lt(minPrice))
145
- minPrice = decimal;
141
+ if (slot.price == null) continue;
142
+ const decimal = new _decimal.default(slot.price || '0');
143
+ if (!minPrice || decimal.lt(minPrice)) minPrice = decimal;
146
144
  }
147
145
  return {
148
146
  startTime: best.startTime,
@@ -175,17 +173,17 @@ function buildProductSlots(params) {
175
173
  } = params;
176
174
  const slots = [];
177
175
  for (const label of timeLabels) {
178
- const [h] = label.split(":").map(Number);
176
+ const [h] = label.split(':').map(Number);
179
177
  const isNextDay = crossDay && h < config_businessStartHour;
180
- const slotDate = isNextDay ? (0, import_dayjs.default)(date).add(1, "day").format("YYYY-MM-DD") : date;
181
- const slotStart = (0, import_dayjs.default)(`${slotDate} ${label}`);
182
- const slotEnd = slotStart.add(config.slotDurationMinutes, "minute");
178
+ const slotDate = isNextDay ? (0, _dayjs.default)(date).add(1, 'day').format('YYYY-MM-DD') : date;
179
+ const slotStart = (0, _dayjs.default)(`${slotDate} ${label}`);
180
+ const slotEnd = slotStart.add(config.slotDurationMinutes, 'minute');
183
181
  let status;
184
182
  let remainingCapacity = null;
185
183
  if (slotStart.isBefore(now)) {
186
- status = "past";
184
+ status = 'past';
187
185
  } else if (!isSlotWithinResourceTimes(slotStart, slotEnd, timesForDate)) {
188
- status = "unavailable";
186
+ status = 'unavailable';
189
187
  } else {
190
188
  const result = computeSlotStatus({
191
189
  slotStart,
@@ -196,17 +194,17 @@ function buildProductSlots(params) {
196
194
  });
197
195
  status = result.status;
198
196
  remainingCapacity = result.remainingCapacity;
199
- if (status !== "occupied" && childRawResources && childRawResources.length) {
197
+ if (status !== 'occupied' && childRawResources && childRawResources.length) {
200
198
  for (let i = 0; i < childRawResources.length; i++) {
201
199
  const child = childRawResources[i];
202
- const childTimes = (childTimesCache == null ? void 0 : childTimesCache[i]) ?? getResourceTimesForDate(child, date, config);
203
- const childEvents = (childEventsCache == null ? void 0 : childEventsCache[i]) ?? collectEventsForDate(child, date, config);
200
+ const childTimes = childTimesCache?.[i] ?? getResourceTimesForDate(child, date, config);
201
+ const childEvents = childEventsCache?.[i] ?? collectEventsForDate(child, date, config);
204
202
  if (!isSlotWithinResourceTimes(slotStart, slotEnd, childTimes)) {
205
- status = "unavailable";
203
+ status = 'unavailable';
206
204
  remainingCapacity = null;
207
205
  break;
208
206
  }
209
- const childType = child.type || "single";
207
+ const childType = child.type || 'single';
210
208
  const childResult = computeSlotStatus({
211
209
  slotStart,
212
210
  slotEnd,
@@ -214,31 +212,28 @@ function buildProductSlots(params) {
214
212
  resourceType: childType,
215
213
  capacity: child.capacity ?? 1
216
214
  });
217
- if (childResult.status === "occupied") {
218
- status = "occupied";
215
+ if (childResult.status === 'occupied') {
216
+ status = 'occupied';
219
217
  remainingCapacity = 0;
220
218
  break;
221
219
  }
222
- if (childResult.status === "partially_occupied" && status === "available") {
223
- status = "partially_occupied";
224
- remainingCapacity = Math.min(
225
- remainingCapacity ?? childResult.remainingCapacity,
226
- childResult.remainingCapacity
227
- );
220
+ if (childResult.status === 'partially_occupied' && status === 'available') {
221
+ status = 'partially_occupied';
222
+ remainingCapacity = Math.min(remainingCapacity ?? childResult.remainingCapacity, childResult.remainingCapacity);
228
223
  }
229
224
  }
230
225
  }
231
226
  }
232
- const isBookable = status === "available" || status === "partially_occupied";
233
- const slotStartStr = slotStart.format("YYYY-MM-DD HH:mm");
227
+ const isBookable = status === 'available' || status === 'partially_occupied';
228
+ const slotStartStr = slotStart.format('YYYY-MM-DD HH:mm');
234
229
  slots.push({
235
230
  startTime: slotStartStr,
236
- endTime: slotEnd.format("YYYY-MM-DD HH:mm"),
231
+ endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
237
232
  status,
238
- price: isBookable ? (quotationPriceMap == null ? void 0 : quotationPriceMap.get(`${mapping.productId}:${slotStartStr}`)) ?? mapping.price : null,
233
+ price: isBookable ? quotationPriceMap?.get(`${mapping.productId}:${slotStartStr}`) ?? mapping.price : null,
239
234
  resourceId: resource.resourceId,
240
235
  resourceFormId: resource.formId,
241
- capacity: status === "past" || status === "unavailable" ? null : resCapacity,
236
+ capacity: status === 'past' || status === 'unavailable' ? null : resCapacity,
242
237
  remainingCapacity,
243
238
  productId: mapping.productId
244
239
  });
@@ -246,28 +241,32 @@ function buildProductSlots(params) {
246
241
  return slots;
247
242
  }
248
243
  function buildTimeSlotGrid(params) {
249
- const { date, config, rawResources, resourceProductMap, quotationPriceMap } = params;
244
+ const {
245
+ date,
246
+ config,
247
+ rawResources,
248
+ resourceProductMap,
249
+ quotationPriceMap
250
+ } = params;
250
251
  const timeLabels = generateTimeLabels(config);
251
- const now = (0, import_dayjs.default)();
252
+ const now = (0, _dayjs.default)();
252
253
  const crossDay = isBusinessHoursCrossDay(config);
253
- const config_businessStartHour = Number(config.businessStartTime.split(":")[0]);
254
- const rawResourceById = /* @__PURE__ */ new Map();
255
- for (const item of rawResources)
256
- rawResourceById.set(item.resourceId, item);
254
+ const config_businessStartHour = Number(config.businessStartTime.split(':')[0]);
255
+ const rawResourceById = new Map();
256
+ for (const item of rawResources) rawResourceById.set(item.resourceId, item);
257
257
  const resources = [];
258
258
  for (const resource of rawResources) {
259
259
  const mappings = resourceProductMap.get(resource.resourceId);
260
- if (!mappings || !mappings.length)
261
- continue;
260
+ if (!mappings || !mappings.length) continue;
262
261
  const timesForDate = getResourceTimesForDate(resource, date, config);
263
262
  const events = collectEventsForDate(resource, date, config);
264
263
  const resCapacity = resource.capacity ?? 1;
265
264
  const combined = resource.combined_resource;
266
265
  const isCombined = !!(combined && combined.status === 1 && Array.isArray(combined.resource_ids) && combined.resource_ids.length);
267
- const childRawResources = isCombined ? combined.resource_ids.map((id) => rawResourceById.get(id)).filter((r) => !!r) : void 0;
268
- const childTimesCache = childRawResources == null ? void 0 : childRawResources.map((child) => getResourceTimesForDate(child, date, config));
269
- const childEventsCache = childRawResources == null ? void 0 : childRawResources.map((child) => collectEventsForDate(child, date, config));
270
- const subRows = mappings.map((mapping) => {
266
+ const childRawResources = isCombined ? combined.resource_ids.map(id => rawResourceById.get(id)).filter(r => !!r) : undefined;
267
+ const childTimesCache = childRawResources?.map(child => getResourceTimesForDate(child, date, config));
268
+ const childEventsCache = childRawResources?.map(child => collectEventsForDate(child, date, config));
269
+ const subRows = mappings.map(mapping => {
271
270
  const productSlots = buildProductSlots({
272
271
  date,
273
272
  config,
@@ -297,11 +296,14 @@ function buildTimeSlotGrid(params) {
297
296
  let outerSlots;
298
297
  if (hasMultipleProducts) {
299
298
  outerSlots = timeLabels.map((_label, slotIndex) => {
300
- const group = subRows.map((row2) => row2.slots[slotIndex]);
299
+ const group = subRows.map(row => row.slots[slotIndex]);
301
300
  return mergeSubSlots(group);
302
301
  });
303
302
  } else {
304
- outerSlots = subRows[0].slots.map((slot) => ({ ...slot, productId: void 0 }));
303
+ outerSlots = subRows[0].slots.map(slot => ({
304
+ ...slot,
305
+ productId: undefined
306
+ }));
305
307
  }
306
308
  const row = {
307
309
  resourceId: resource.resourceId,
@@ -316,24 +318,22 @@ function buildTimeSlotGrid(params) {
316
318
  row.hasMultipleProducts = true;
317
319
  }
318
320
  if (isCombined && combined) {
319
- row.combinedResource = { resourceIds: [...combined.resource_ids] };
321
+ row.combinedResource = {
322
+ resourceIds: [...combined.resource_ids]
323
+ };
320
324
  }
321
325
  resources.push(row);
322
326
  }
323
- const productOrder = /* @__PURE__ */ new Map();
327
+
328
+ // 按 productId 分组排序,确保同一商品的场地连续排列
329
+ const productOrder = new Map();
324
330
  for (const row of resources) {
325
- if (!productOrder.has(row.productId))
326
- productOrder.set(row.productId, productOrder.size);
331
+ if (!productOrder.has(row.productId)) productOrder.set(row.productId, productOrder.size);
327
332
  }
328
333
  resources.sort((a, b) => (productOrder.get(a.productId) ?? 0) - (productOrder.get(b.productId) ?? 0));
329
- return { date, timeLabels, resources };
330
- }
331
- // Annotate the CommonJS export names for ESM import in node:
332
- 0 && (module.exports = {
333
- buildTimeSlotGrid,
334
- collectEventsForDate,
335
- computeSlotStatus,
336
- generateTimeLabels,
337
- isBusinessHoursCrossDay,
338
- isSlotOccupied
339
- });
334
+ return {
335
+ date,
336
+ timeLabels,
337
+ resources
338
+ };
339
+ }
@@ -1,69 +1,132 @@
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/solution/VenueBooking/utils.ts
20
- var utils_exports = {};
21
- __export(utils_exports, {
22
- aggregateItemRuleLimit: () => import_utils.aggregateItemRuleLimit,
23
- attachItemRuleLimitsToTopLevelProducts: () => import_utils.attachItemRuleLimitsToTopLevelProducts,
24
- buildItemRuleBusinessData: () => import_utils.buildItemRuleBusinessData,
25
- buildProductKey: () => import_utils.buildProductKey,
26
- buildQuantityLimitIndex: () => import_utils.buildQuantityLimitIndex,
27
- createEmptySummary: () => import_utils.createEmptySummary,
28
- extractStrategyModelIdsFromTableConfig: () => import_utils.extractStrategyModelIdsFromTableConfig,
29
- getProductIdentityIndex: () => import_utils.getProductIdentityIndex,
30
- getSafeProductNum: () => import_utils.getSafeProductNum,
31
- getTopLevelProductId: () => import_utils.getTopLevelProductId,
32
- getTopLevelVariantId: () => import_utils.getTopLevelVariantId,
33
- isIdentityMatch: () => import_utils.isIdentityMatch,
34
- normalizeEnabledItemRuleIds: () => import_utils.normalizeEnabledItemRuleIds,
35
- normalizeItemRuleStrategies: () => import_utils.normalizeItemRuleStrategies,
36
- normalizeOrderProduct: () => import_utils.normalizeOrderProduct,
37
- resolveSkuMatchedQuantityLimits: () => import_utils.resolveSkuMatchedQuantityLimits,
38
- toBoolean: () => import_utils.toBoolean,
39
- toNonNegativeInt: () => import_utils.toNonNegativeInt,
40
- toNonNegativeNumber: () => import_utils.toNonNegativeNumber,
41
- toPositiveString: () => import_utils.toPositiveString,
42
- toPriceString: () => import_utils.toPriceString
43
- });
44
- module.exports = __toCommonJS(utils_exports);
45
- var import_utils = require("../ScanOrder/utils");
46
- // Annotate the CommonJS export names for ESM import in node:
47
- 0 && (module.exports = {
48
- aggregateItemRuleLimit,
49
- attachItemRuleLimitsToTopLevelProducts,
50
- buildItemRuleBusinessData,
51
- buildProductKey,
52
- buildQuantityLimitIndex,
53
- createEmptySummary,
54
- extractStrategyModelIdsFromTableConfig,
55
- getProductIdentityIndex,
56
- getSafeProductNum,
57
- getTopLevelProductId,
58
- getTopLevelVariantId,
59
- isIdentityMatch,
60
- normalizeEnabledItemRuleIds,
61
- normalizeItemRuleStrategies,
62
- normalizeOrderProduct,
63
- resolveSkuMatchedQuantityLimits,
64
- toBoolean,
65
- toNonNegativeInt,
66
- toNonNegativeNumber,
67
- toPositiveString,
68
- toPriceString
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
69
5
  });
6
+ Object.defineProperty(exports, "aggregateItemRuleLimit", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _utils.aggregateItemRuleLimit;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "attachItemRuleLimitsToTopLevelProducts", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _utils.attachItemRuleLimitsToTopLevelProducts;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "buildItemRuleBusinessData", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _utils.buildItemRuleBusinessData;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "buildProductKey", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _utils.buildProductKey;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "buildQuantityLimitIndex", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _utils.buildQuantityLimitIndex;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "createEmptySummary", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _utils.createEmptySummary;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "extractStrategyModelIdsFromTableConfig", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _utils.extractStrategyModelIdsFromTableConfig;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "getProductIdentityIndex", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _utils.getProductIdentityIndex;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "getSafeProductNum", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _utils.getSafeProductNum;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "getTopLevelProductId", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _utils.getTopLevelProductId;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "getTopLevelVariantId", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _utils.getTopLevelVariantId;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "isIdentityMatch", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _utils.isIdentityMatch;
76
+ }
77
+ });
78
+ Object.defineProperty(exports, "normalizeEnabledItemRuleIds", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _utils.normalizeEnabledItemRuleIds;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "normalizeItemRuleStrategies", {
85
+ enumerable: true,
86
+ get: function () {
87
+ return _utils.normalizeItemRuleStrategies;
88
+ }
89
+ });
90
+ Object.defineProperty(exports, "normalizeOrderProduct", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _utils.normalizeOrderProduct;
94
+ }
95
+ });
96
+ Object.defineProperty(exports, "resolveSkuMatchedQuantityLimits", {
97
+ enumerable: true,
98
+ get: function () {
99
+ return _utils.resolveSkuMatchedQuantityLimits;
100
+ }
101
+ });
102
+ Object.defineProperty(exports, "toBoolean", {
103
+ enumerable: true,
104
+ get: function () {
105
+ return _utils.toBoolean;
106
+ }
107
+ });
108
+ Object.defineProperty(exports, "toNonNegativeInt", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _utils.toNonNegativeInt;
112
+ }
113
+ });
114
+ Object.defineProperty(exports, "toNonNegativeNumber", {
115
+ enumerable: true,
116
+ get: function () {
117
+ return _utils.toNonNegativeNumber;
118
+ }
119
+ });
120
+ Object.defineProperty(exports, "toPositiveString", {
121
+ enumerable: true,
122
+ get: function () {
123
+ return _utils.toPositiveString;
124
+ }
125
+ });
126
+ Object.defineProperty(exports, "toPriceString", {
127
+ enumerable: true,
128
+ get: function () {
129
+ return _utils.toPriceString;
130
+ }
131
+ });
132
+ var _utils = require("../ScanOrder/utils");