@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,53 +1,30 @@
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/BookingTicket/utils/addTimeAvailability.ts
30
- var addTimeAvailability_exports = {};
31
- __export(addTimeAvailability_exports, {
32
- buildAddTimeCurrentItem: () => buildAddTimeCurrentItem,
33
- isUsableAddTimeProduct: () => isUsableAddTimeProduct,
34
- resolveBookingCanAddTime: () => resolveBookingCanAddTime
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
35
5
  });
36
- module.exports = __toCommonJS(addTimeAvailability_exports);
37
- var import_dayjs = __toESM(require("dayjs"));
38
- var import_lodash_es = require("lodash-es");
39
- var import_serviceTimes = require("../../../modules/BookingContext/utils/serviceTimes");
40
- var import_timeSlices = require("../../../modules/BookingContext/utils/timeSlices");
6
+ exports.buildAddTimeCurrentItem = buildAddTimeCurrentItem;
7
+ exports.isUsableAddTimeProduct = isUsableAddTimeProduct;
8
+ exports.resolveBookingCanAddTime = resolveBookingCanAddTime;
9
+ var _dayjs = _interopRequireDefault(require("dayjs"));
10
+ var _lodashEs = require("lodash-es");
11
+ var _serviceTimes = require("../../../modules/BookingContext/utils/serviceTimes");
12
+ var _timeSlices = require("../../../modules/BookingContext/utils/timeSlices");
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ /**
15
+ * 从 booking 与其关联商品行构建旧 `isUsableProduct` 所需的当前商品快照。
16
+ *
17
+ * @example
18
+ * const currentItem = buildAddTimeCurrentItem({ booking, product, productsByUid });
19
+ */
41
20
  function buildAddTimeCurrentItem({
42
21
  booking,
43
22
  product,
44
23
  productsByUid
45
24
  }) {
46
- var _a, _b, _c;
47
- if (!booking || !product)
48
- return null;
49
- const uid = (_a = product.metadata) == null ? void 0 : _a.unique_identification_number;
50
- const origin = uid ? (_b = productsByUid == null ? void 0 : productsByUid[String(uid)]) == null ? void 0 : _b.origin : void 0;
25
+ if (!booking || !product) return null;
26
+ const uid = product.metadata?.unique_identification_number;
27
+ const origin = uid ? productsByUid?.[String(uid)]?.origin : undefined;
51
28
  const sourceProduct = origin || booking.product || {};
52
29
  const startAt = booking.start_date && booking.start_time ? `${booking.start_date} ${booking.start_time}` : booking.start_date;
53
30
  const endAt = booking.end_date && booking.end_time ? `${booking.end_date} ${booking.end_time}` : booking.end_date;
@@ -56,12 +33,12 @@ function buildAddTimeCurrentItem({
56
33
  ...booking.product,
57
34
  product_id: product.product_id ?? sourceProduct.product_id ?? sourceProduct.id,
58
35
  id: sourceProduct.id ?? product.product_id,
59
- collection: sourceProduct.collection || ((_c = booking.product) == null ? void 0 : _c.collection) || [],
36
+ collection: sourceProduct.collection || booking.product?.collection || [],
60
37
  duration: sourceProduct.duration || booking.duration,
61
38
  _extend: {
62
- ...sourceProduct._extend || {},
63
- startDate: startAt ? (0, import_dayjs.default)(startAt) : void 0,
64
- endDate: endAt ? (0, import_dayjs.default)(endAt) : void 0,
39
+ ...(sourceProduct._extend || {}),
40
+ startDate: startAt ? (0, _dayjs.default)(startAt) : undefined,
41
+ endDate: endAt ? (0, _dayjs.default)(endAt) : undefined,
65
42
  start_date: booking.start_date,
66
43
  end_date: booking.end_date,
67
44
  start_time: booking.start_time,
@@ -70,56 +47,48 @@ function buildAddTimeCurrentItem({
70
47
  }
71
48
  };
72
49
  }
50
+
51
+ /**
52
+ * 判断当前 booking 是否允许打开加时入口,保持与旧 ticketBooking 的商品适用规则一致。
53
+ *
54
+ * @example
55
+ * const canAddTime = resolveBookingCanAddTime({ booking, product, addTimeProducts, bookingConfig });
56
+ */
73
57
  function resolveBookingCanAddTime(params) {
74
- var _a, _b, _c, _d;
75
- const quickTime = (_d = (_c = (_b = (_a = params.bookingConfig) == null ? void 0 : _a.config) == null ? void 0 : _b.information_tab) == null ? void 0 : _c.appointment_card) == null ? void 0 : _d.quick_time;
76
- if (quickTime !== void 0 && quickTime !== 1)
77
- return false;
58
+ const quickTime = params.bookingConfig?.config?.information_tab?.appointment_card?.quick_time;
59
+ if (quickTime !== undefined && quickTime !== 1) return false;
78
60
  const currentItem = buildAddTimeCurrentItem(params);
79
- if (!currentItem || (0, import_serviceTimes.isMultiDayProduct)(currentItem))
80
- return false;
81
- return (params.addTimeProducts || []).some(
82
- (item) => isUsableAddTimeProduct(item == null ? void 0 : item.add_time, currentItem, params.shopOpeningHours)
83
- );
61
+ if (!currentItem || (0, _serviceTimes.isMultiDayProduct)(currentItem)) return false;
62
+ return (params.addTimeProducts || []).some(item => isUsableAddTimeProduct(item?.add_time, currentItem, params.shopOpeningHours));
84
63
  }
64
+
65
+ /**
66
+ * 判断一个加时商品是否适用于当前预约商品。
67
+ *
68
+ * @example
69
+ * const usable = isUsableAddTimeProduct(addTime.add_time, currentItem, '23:59');
70
+ */
85
71
  function isUsableAddTimeProduct(addTime, currentItem, shopOpeningHours) {
86
- var _a, _b;
87
- if (!addTime || !currentItem)
88
- return false;
89
- if (addTime.additional_time_options === "unlimited") {
90
- const startDate = (0, import_dayjs.default)((_a = currentItem._extend) == null ? void 0 : _a.startDate);
91
- const endDate = (0, import_dayjs.default)((_b = currentItem._extend) == null ? void 0 : _b.endDate);
92
- if (!startDate.isValid() || !endDate.isValid())
93
- return false;
94
- const maxEndDate = (0, import_timeSlices.getEndDate)(startDate, "flexible", "", shopOpeningHours);
95
- if (endDate.isAfter(maxEndDate))
96
- return false;
72
+ if (!addTime || !currentItem) return false;
73
+ if (addTime.additional_time_options === 'unlimited') {
74
+ const startDate = (0, _dayjs.default)(currentItem._extend?.startDate);
75
+ const endDate = (0, _dayjs.default)(currentItem._extend?.endDate);
76
+ if (!startDate.isValid() || !endDate.isValid()) return false;
77
+ const maxEndDate = (0, _timeSlices.getEndDate)(startDate, 'flexible', '', shopOpeningHours);
78
+ if (endDate.isAfter(maxEndDate)) return false;
97
79
  }
98
80
  const relationProduct = addTime.relation_product || {};
99
81
  const type = relationProduct.type;
100
82
  const products = Array.isArray(relationProduct.products) ? relationProduct.products : [];
101
- if (type === "product_all")
102
- return true;
103
- if (type === "product_collection") {
104
- return Boolean(
105
- (0, import_lodash_es.intersectionBy)(
106
- products.map((item) => ({
107
- ...item,
108
- id: item.product_collection_id
109
- })),
110
- currentItem.collection || [],
111
- "id"
112
- ).length
113
- );
83
+ if (type === 'product_all') return true;
84
+ if (type === 'product_collection') {
85
+ return Boolean((0, _lodashEs.intersectionBy)(products.map(item => ({
86
+ ...item,
87
+ id: item.product_collection_id
88
+ })), currentItem.collection || [], 'id').length);
114
89
  }
115
- if (type === "products") {
116
- return products.some((item) => item.product_id == currentItem.product_id);
90
+ if (type === 'products') {
91
+ return products.some(item => item.product_id == currentItem.product_id);
117
92
  }
118
93
  return false;
119
- }
120
- // Annotate the CommonJS export names for ESM import in node:
121
- 0 && (module.exports = {
122
- buildAddTimeCurrentItem,
123
- isUsableAddTimeProduct,
124
- resolveBookingCanAddTime
125
- });
94
+ }
@@ -1,107 +1,136 @@
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/BookingTicket/utils/bookingStatus.ts
20
- var bookingStatus_exports = {};
21
- __export(bookingStatus_exports, {
22
- applyBookingsStatus: () => applyBookingsStatus,
23
- applyChildBookingStatus: () => applyChildBookingStatus,
24
- resolveScheduleId: () => resolveScheduleId,
25
- resolveStatusAfterTransition: () => resolveStatusAfterTransition,
26
- restoreBookingsStatus: () => restoreBookingsStatus,
27
- restoreChildBookingStatus: () => restoreChildBookingStatus
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
28
5
  });
29
- module.exports = __toCommonJS(bookingStatus_exports);
6
+ exports.applyBookingsStatus = applyBookingsStatus;
7
+ exports.applyChildBookingStatus = applyChildBookingStatus;
8
+ exports.resolveScheduleId = resolveScheduleId;
9
+ exports.resolveStatusAfterTransition = resolveStatusAfterTransition;
10
+ exports.restoreBookingsStatus = restoreBookingsStatus;
11
+ exports.restoreChildBookingStatus = restoreChildBookingStatus;
12
+ /**
13
+ * BookingTicket - 预约状态相关纯函数。
14
+ *
15
+ * 该文件不持有任何运行时引用(无 request / store / effects),
16
+ * 只做字段解析与本地数组的原地写入/回滚,便于独立单测与未来其他
17
+ * booking 写操作(editBooking / cancelBooking 等)复用。
18
+ *
19
+ * 设计依据:参考 .cursor/rules/data-field-semantics.mdc,
20
+ * 字段含义严格对齐既有协议(OrderTempOrder / parseSalesResponse),
21
+ * 不发明等价关系。
22
+ */
23
+
24
+ /**
25
+ * 子预约状态机转移动作(POST /schedule/booking-transition/{schedule_event_id})。
26
+ *
27
+ * @example
28
+ * await bookingTicket.transitionChildBooking({
29
+ * schedule_event_id: 301,
30
+ * action: 'confirm',
31
+ * });
32
+ */
33
+
34
+ /** 子预约状态转移入参 */
35
+
36
+ /**
37
+ * 从 tempOrder 解析用于调用 appointment-status 接口的 schedule id。
38
+ *
39
+ * 优先级:
40
+ * 1. `tempOrder.metadata.appointment_booking_parent_schedule_id`
41
+ * 2. `tempOrder.bookings` 中 `parent_id === 0` 的 `schedule_event_id`
42
+ *
43
+ * 都缺失时返回 null,由调用方决定如何抛错。
44
+ */
30
45
  function resolveScheduleId(tempOrder) {
31
- var _a;
32
- if (!tempOrder)
33
- return null;
34
- const metaScheduleId = (_a = tempOrder.metadata) == null ? void 0 : _a.appointment_booking_parent_schedule_id;
35
- if (metaScheduleId !== void 0 && metaScheduleId !== null) {
46
+ if (!tempOrder) return null;
47
+ const metaScheduleId = tempOrder.metadata?.appointment_booking_parent_schedule_id;
48
+ if (metaScheduleId !== undefined && metaScheduleId !== null) {
36
49
  return metaScheduleId;
37
50
  }
38
51
  const bookings = Array.isArray(tempOrder.bookings) ? tempOrder.bookings : [];
39
- const rootBooking = bookings.find((b) => (b == null ? void 0 : b.parent_id) === 0);
40
- const fallback = rootBooking == null ? void 0 : rootBooking.schedule_event_id;
41
- return fallback !== void 0 && fallback !== null ? fallback : null;
52
+ const rootBooking = bookings.find(b => b?.parent_id === 0);
53
+ const fallback = rootBooking?.schedule_event_id;
54
+ return fallback !== undefined && fallback !== null ? fallback : null;
42
55
  }
56
+
57
+ /**
58
+ * 原地把所有 bookings 的 `appointment_status` 覆盖为新值,
59
+ * 返回原 status 数组用于回滚(顺序与 bookings 一一对应)。
60
+ *
61
+ * - 元素为 null/undefined 时跳过写入(但占位仍保留以保证回滚下标对齐)
62
+ * - 不会克隆 booking 对象,保持与 OrderModule.tempOrder 引用一致
63
+ */
43
64
  function applyBookingsStatus(bookings, status) {
44
- if (!Array.isArray(bookings))
45
- return [];
46
- const previous = bookings.map((b) => b == null ? void 0 : b.appointment_status);
47
- bookings.forEach((b) => {
48
- if (b)
49
- b.appointment_status = status;
65
+ if (!Array.isArray(bookings)) return [];
66
+ const previous = bookings.map(b => b?.appointment_status);
67
+ bookings.forEach(b => {
68
+ if (b) b.appointment_status = status;
50
69
  });
51
70
  return previous;
52
71
  }
72
+
73
+ /**
74
+ * 把 applyBookingsStatus 的返回值原地写回,撤销乐观更新。
75
+ * 长度不一致时按较短一方对齐(防御式编程,正常路径不会发生)。
76
+ */
53
77
  function restoreBookingsStatus(bookings, previous) {
54
- if (!Array.isArray(bookings))
55
- return;
78
+ if (!Array.isArray(bookings)) return;
56
79
  const len = Math.min(bookings.length, previous.length);
57
80
  for (let i = 0; i < len; i += 1) {
58
81
  const b = bookings[i];
59
- if (b)
60
- b.appointment_status = previous[i];
82
+ if (b) b.appointment_status = previous[i];
61
83
  }
62
84
  }
85
+
86
+ /**
87
+ * 将状态机 action 解析为转移后的 `appointment_status`。
88
+ *
89
+ * `reschedule` 暂未在状态矩阵启用,返回 null 表示跳过乐观更新。
90
+ *
91
+ * @example
92
+ * resolveStatusAfterTransition('confirm'); // 'confirmed'
93
+ */
63
94
  function resolveStatusAfterTransition(action) {
64
95
  const map = {
65
- confirm: "confirmed",
66
- reject: "rejected",
67
- arrive: "arrived",
68
- start: "started",
69
- complete: "completed",
70
- cancel: "cancelled",
71
- no_show: "no_show",
96
+ confirm: 'confirmed',
97
+ reject: 'rejected',
98
+ arrive: 'arrived',
99
+ start: 'started',
100
+ complete: 'completed',
101
+ cancel: 'cancelled',
102
+ no_show: 'no_show',
72
103
  reschedule: null
73
104
  };
74
105
  return map[action] ?? null;
75
106
  }
107
+
108
+ /**
109
+ * 在 bookings 中按 `schedule_event_id` 定位子预约并乐观写入 `appointment_status`。
110
+ *
111
+ * @returns 写入前的 status;未命中时返回 undefined(调用方跳过回滚)
112
+ *
113
+ * @example
114
+ * const prev = applyChildBookingStatus(tempOrder.bookings, 301, 'confirmed');
115
+ */
76
116
  function applyChildBookingStatus(bookings, scheduleEventId, status) {
77
- var _a;
78
- if (!Array.isArray(bookings))
79
- return void 0;
80
- const idx = bookings.findIndex(
81
- (b) => b && String(b.schedule_event_id) === String(scheduleEventId)
82
- );
83
- if (idx === -1)
84
- return void 0;
85
- const previous = (_a = bookings[idx]) == null ? void 0 : _a.appointment_status;
117
+ if (!Array.isArray(bookings)) return undefined;
118
+ const idx = bookings.findIndex(b => b && String(b.schedule_event_id) === String(scheduleEventId));
119
+ if (idx === -1) return undefined;
120
+ const previous = bookings[idx]?.appointment_status;
86
121
  bookings[idx].appointment_status = status;
87
122
  return previous;
88
123
  }
124
+
125
+ /**
126
+ * 撤销 applyChildBookingStatus 对单条子预约的乐观写入。
127
+ *
128
+ * @example
129
+ * restoreChildBookingStatus(tempOrder.bookings, 301, prev);
130
+ */
89
131
  function restoreChildBookingStatus(bookings, scheduleEventId, previous) {
90
- if (!Array.isArray(bookings) || previous === void 0)
91
- return;
92
- const idx = bookings.findIndex(
93
- (b) => b && String(b.schedule_event_id) === String(scheduleEventId)
94
- );
95
- if (idx === -1)
96
- return;
132
+ if (!Array.isArray(bookings) || previous === undefined) return;
133
+ const idx = bookings.findIndex(b => b && String(b.schedule_event_id) === String(scheduleEventId));
134
+ if (idx === -1) return;
97
135
  bookings[idx].appointment_status = previous;
98
- }
99
- // Annotate the CommonJS export names for ESM import in node:
100
- 0 && (module.exports = {
101
- applyBookingsStatus,
102
- applyChildBookingStatus,
103
- resolveScheduleId,
104
- resolveStatusAfterTransition,
105
- restoreBookingsStatus,
106
- restoreChildBookingStatus
107
- });
136
+ }