@pisell/pisellos 2.3.74 → 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 (276) hide show
  1. package/dist/core/index.js +6 -10
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.js +36 -64
  11. package/dist/modules/Payment/index.js +97 -162
  12. package/dist/modules/Rules/index.js +1 -4
  13. package/dist/modules/Schedule/index.js +0 -1
  14. package/dist/modules/Schedule/utils.js +0 -1
  15. package/dist/modules/Step/index.js +0 -1
  16. package/dist/plugins/request.js +1 -4
  17. package/dist/plugins/window.js +2 -6
  18. package/dist/server/index.js +97 -129
  19. package/dist/server/modules/menu/index.js +32 -41
  20. package/dist/server/modules/order/index.js +2 -4
  21. package/dist/server/modules/products/index.js +24 -42
  22. package/dist/server/modules/quotation/index.js +29 -38
  23. package/dist/server/modules/resource/index.js +3 -4
  24. package/dist/server/modules/schedule/index.js +27 -35
  25. package/dist/server/utils/product.js +0 -1
  26. package/dist/solution/BaseSales/index.js +38 -41
  27. package/dist/solution/BookingByStep/index.js +7 -59
  28. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  29. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  30. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  31. package/dist/solution/BookingTicket/index.js +0 -2
  32. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  33. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  34. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  35. package/dist/solution/BuyTickets/index.js +9 -12
  36. package/dist/solution/Checkout/index.js +177 -252
  37. package/dist/solution/Checkout/utils/index.js +4 -16
  38. package/dist/solution/RegisterAndLogin/index.js +30 -76
  39. package/dist/solution/ScanOrder/index.js +50 -60
  40. package/dist/solution/ShopDiscount/index.js +2 -7
  41. package/dist/solution/VenueBooking/index.js +45 -55
  42. package/dist/utils/task.js +15 -18
  43. package/dist/utils/watch.js +0 -1
  44. package/lib/apis/picoding.js +2 -0
  45. package/lib/core/index.js +134 -134
  46. package/lib/effects/index.js +46 -57
  47. package/lib/index.js +82 -49
  48. package/lib/model/index.js +14 -21
  49. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  50. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  51. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  52. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  53. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  54. package/lib/model/strategy/adapter/index.js +100 -64
  55. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  56. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  57. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  58. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  59. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  60. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  61. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  62. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  63. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  64. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  65. package/lib/model/strategy/adapter/type.js +4 -16
  66. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  67. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  68. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  69. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  70. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  71. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  72. package/lib/model/strategy/engine.js +270 -168
  73. package/lib/model/strategy/index.js +49 -34
  74. package/lib/model/strategy/strategy-example.js +243 -239
  75. package/lib/model/strategy/type.js +100 -40
  76. package/lib/modules/Account/index.js +39 -53
  77. package/lib/modules/Account/types.js +20 -33
  78. package/lib/modules/AccountList/index.js +116 -154
  79. package/lib/modules/AccountList/types.js +30 -31
  80. package/lib/modules/AccountList/utils.js +18 -30
  81. package/lib/modules/BaseModule.js +23 -42
  82. package/lib/modules/BookingContext/index.js +158 -136
  83. package/lib/modules/BookingContext/types.js +46 -32
  84. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  85. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  86. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  87. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  88. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  89. package/lib/modules/BookingContext/utils/index.js +124 -41
  90. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  91. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  92. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  93. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  94. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  95. package/lib/modules/BookingContext/utils/resources.js +209 -167
  96. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  97. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  98. package/lib/modules/Cart/index.js +170 -124
  99. package/lib/modules/Cart/types.js +46 -51
  100. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  101. package/lib/modules/Cart/utils/cartDate.js +56 -61
  102. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  103. package/lib/modules/Cart/utils/cartNote.js +27 -32
  104. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  105. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  106. package/lib/modules/Cart/utils/cartResource.js +70 -78
  107. package/lib/modules/Cart/utils/changePrice.js +22 -50
  108. package/lib/modules/Cart/utils/index.js +106 -48
  109. package/lib/modules/Customer/constants.js +13 -34
  110. package/lib/modules/Customer/index.js +235 -172
  111. package/lib/modules/Customer/types.js +38 -35
  112. package/lib/modules/Date/index.js +116 -115
  113. package/lib/modules/Date/types.js +16 -28
  114. package/lib/modules/Date/utils.js +174 -123
  115. package/lib/modules/Discount/index.js +122 -127
  116. package/lib/modules/Discount/types.js +9 -31
  117. package/lib/modules/Guests/index.js +30 -56
  118. package/lib/modules/Guests/types.js +23 -33
  119. package/lib/modules/Holder/index.js +209 -189
  120. package/lib/modules/Holder/types.js +4 -16
  121. package/lib/modules/Holder/utils.js +20 -49
  122. package/lib/modules/OpenData/index.js +70 -76
  123. package/lib/modules/OpenData/types.js +4 -16
  124. package/lib/modules/OpenData/utils.js +44 -78
  125. package/lib/modules/Order/index.js +1713 -2118
  126. package/lib/modules/Order/payment-utils.js +77 -120
  127. package/lib/modules/Order/types.js +88 -35
  128. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  129. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  130. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  131. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  132. package/lib/modules/Order/utils.js +814 -647
  133. package/lib/modules/Payment/cash.js +20 -33
  134. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  135. package/lib/modules/Payment/eftpos.js +16 -30
  136. package/lib/modules/Payment/index.js +532 -399
  137. package/lib/modules/Payment/mx51.js +1 -0
  138. package/lib/modules/Payment/types.js +230 -108
  139. package/lib/modules/Payment/utils.js +52 -51
  140. package/lib/modules/Payment/walletpass.js +485 -660
  141. package/lib/modules/Product/index.js +51 -46
  142. package/lib/modules/Product/types.js +4 -16
  143. package/lib/modules/Product/utils.js +32 -33
  144. package/lib/modules/ProductList/index.js +113 -123
  145. package/lib/modules/ProductList/types.js +9 -31
  146. package/lib/modules/Quotation/index.js +81 -118
  147. package/lib/modules/Quotation/types.js +4 -16
  148. package/lib/modules/Resource/index.js +27 -59
  149. package/lib/modules/Resource/types.js +22 -32
  150. package/lib/modules/Resource/utils.js +30 -38
  151. package/lib/modules/ResourcePlanner/index.js +25 -23
  152. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  153. package/lib/modules/ResourcePlanner/planner.js +589 -770
  154. package/lib/modules/ResourcePlanner/types.js +10 -29
  155. package/lib/modules/Rules/index.js +1218 -959
  156. package/lib/modules/Rules/types.js +17 -40
  157. package/lib/modules/SalesSummary/index.js +85 -90
  158. package/lib/modules/SalesSummary/types.js +4 -16
  159. package/lib/modules/SalesSummary/utils.js +355 -430
  160. package/lib/modules/ScanOrderLogger/index.js +59 -79
  161. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  162. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  163. package/lib/modules/ScanOrderLogger/types.js +4 -16
  164. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  165. package/lib/modules/Schedule/index.js +100 -114
  166. package/lib/modules/Schedule/type.js +4 -16
  167. package/lib/modules/Schedule/types.js +4 -16
  168. package/lib/modules/Schedule/utils.js +433 -291
  169. package/lib/modules/Step/index.js +40 -52
  170. package/lib/modules/Step/tyeps.js +4 -16
  171. package/lib/modules/Summary/index.js +66 -71
  172. package/lib/modules/Summary/types.js +4 -16
  173. package/lib/modules/Summary/utils.js +773 -418
  174. package/lib/modules/SurchargeList/index.js +46 -60
  175. package/lib/modules/SurchargeList/types.js +4 -16
  176. package/lib/modules/index.js +245 -63
  177. package/lib/plugins/app.js +4 -16
  178. package/lib/plugins/index.js +36 -25
  179. package/lib/plugins/request.js +137 -126
  180. package/lib/plugins/shopStore.js +4 -16
  181. package/lib/plugins/user.js +4 -16
  182. package/lib/plugins/window.js +171 -179
  183. package/lib/server/index.js +3050 -2665
  184. package/lib/server/modules/floor-plan/index.js +118 -134
  185. package/lib/server/modules/floor-plan/types.js +15 -30
  186. package/lib/server/modules/index.js +106 -68
  187. package/lib/server/modules/menu/index.js +142 -122
  188. package/lib/server/modules/menu/types.js +18 -31
  189. package/lib/server/modules/order/index.js +784 -1002
  190. package/lib/server/modules/order/types.js +122 -33
  191. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  192. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  193. package/lib/server/modules/payment/index.js +59 -83
  194. package/lib/server/modules/payment/types.js +4 -16
  195. package/lib/server/modules/products/index.js +583 -471
  196. package/lib/server/modules/products/types.js +44 -34
  197. package/lib/server/modules/quotation/index.js +137 -172
  198. package/lib/server/modules/quotation/types.js +21 -31
  199. package/lib/server/modules/resource/index.js +220 -186
  200. package/lib/server/modules/resource/types.js +42 -33
  201. package/lib/server/modules/schedule/index.js +135 -123
  202. package/lib/server/modules/schedule/types.js +14 -21
  203. package/lib/server/modules/schedule/utils.js +334 -163
  204. package/lib/server/types.js +4 -16
  205. package/lib/server/utils/index.js +25 -23
  206. package/lib/server/utils/product.js +196 -139
  207. package/lib/server/utils/schedule.js +34 -41
  208. package/lib/server/utils/small-ticket.js +479 -456
  209. package/lib/server/utils/time.js +40 -49
  210. package/lib/solution/BaseSales/index.js +1186 -1410
  211. package/lib/solution/BaseSales/types.js +42 -38
  212. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  213. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  214. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  215. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  216. package/lib/solution/BaseSales/utils.js +158 -143
  217. package/lib/solution/BookingByStep/index.js +1527 -1340
  218. package/lib/solution/BookingByStep/types.js +40 -99
  219. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  220. package/lib/solution/BookingByStep/utils/products.js +42 -52
  221. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  222. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  223. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  224. package/lib/solution/BookingTicket/index.js +607 -522
  225. package/lib/solution/BookingTicket/types.js +99 -77
  226. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  227. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  228. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  229. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  230. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  231. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  232. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  233. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  234. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  235. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  236. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  237. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  238. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  239. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  240. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  241. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  242. package/lib/solution/BuyTickets/index.js +67 -70
  243. package/lib/solution/BuyTickets/types.js +22 -38
  244. package/lib/solution/Checkout/index.js +1451 -1158
  245. package/lib/solution/Checkout/types.js +91 -61
  246. package/lib/solution/Checkout/utils/index.js +228 -156
  247. package/lib/solution/PlaceOrder/index.js +55 -0
  248. package/lib/solution/RegisterAndLogin/config.js +493 -460
  249. package/lib/solution/RegisterAndLogin/index.js +633 -630
  250. package/lib/solution/RegisterAndLogin/types.js +189 -76
  251. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  252. package/lib/solution/Sales/index.js +328 -324
  253. package/lib/solution/Sales/types.js +27 -33
  254. package/lib/solution/ScanOrder/index.js +832 -864
  255. package/lib/solution/ScanOrder/types.js +33 -34
  256. package/lib/solution/ScanOrder/utils.js +409 -374
  257. package/lib/solution/ShopDiscount/index.js +226 -232
  258. package/lib/solution/ShopDiscount/types.js +15 -37
  259. package/lib/solution/ShopDiscount/utils.js +300 -172
  260. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  261. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  262. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  263. package/lib/solution/VenueBooking/index.js +811 -879
  264. package/lib/solution/VenueBooking/types.js +19 -39
  265. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  266. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  267. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  268. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  269. package/lib/solution/VenueBooking/utils.js +130 -67
  270. package/lib/solution/index.js +124 -41
  271. package/lib/store/createStore.js +32 -29
  272. package/lib/types/index.js +4 -16
  273. package/lib/utils/payment-number.js +26 -46
  274. package/lib/utils/task.js +36 -36
  275. package/lib/utils/watch.js +81 -47
  276. package/package.json +2 -1
@@ -1,145 +1,129 @@
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/BaseSales/utils/parseSalesResponse.ts
20
- var parseSalesResponse_exports = {};
21
- __export(parseSalesResponse_exports, {
22
- parseSalesResponse: () => parseSalesResponse
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(parseSalesResponse_exports);
25
- var import_orderCollectionIdentity = require("../../../modules/Order/utils/orderCollectionIdentity");
26
- var HEADER_KEYS = [
27
- "order_id",
28
- "order_number",
29
- "shop_order_number",
30
- "shop_full_order_number",
31
- "type",
32
- "business_code",
33
- "platform",
34
- "sales_channel",
35
- "order_sales_channel",
36
- "vouchers",
37
- "status",
38
- "payment_status",
39
- "shipping_status",
40
- "customer_id",
41
- "customer_name",
42
- "country_calling_code",
43
- "phone",
44
- "email",
45
- "is_price_include_tax",
46
- "tax_title",
47
- "tax_country_code",
48
- "currency_code",
49
- "currency_symbol",
50
- "currency_format",
51
- "is_deposit",
52
- "deposit_amount",
53
- "shop_discount",
54
- "surcharge_fee",
55
- "note",
56
- "schedule_date",
57
- "created_at",
58
- "updated_at",
59
- "metadata",
60
- "total_amount",
61
- "shop_id",
62
- "create_date",
63
- "holder",
64
- "relation_forms",
65
- "contacts",
66
- "contacts_info"
67
- ];
6
+ exports.parseSalesResponse = parseSalesResponse;
7
+ var _orderCollectionIdentity = require("../../../modules/Order/utils/orderCollectionIdentity");
8
+ /**
9
+ * 把 `/order/sales/{id}` 响应(OrderData)解析为 ISalesDetail。
10
+ *
11
+ * - 纯函数:不依赖任何运行时模块/插件,便于单测与 view-model 适配
12
+ * - products 保留 tempOrder / 后端详情原字段,仅规范化集合身份并浅拷贝,避免丢失 product_sku 等协议字段
13
+ * - bookings 平铺保留服务端原顺序,同时输出 byProductUid 反查表与 rootBooking
14
+ * - header 收敛"非数组顶层字段",便于 ticketBooking view-model 直接消费
15
+ *
16
+ * 设计原则参考 `.cursor/rules/data-field-semantics.mdc`:
17
+ * - 字段命名以《统一 Sales 数据协议》为准(OrderData 类型)
18
+ * - root booking 以 `parent_id === 0` 判定,沿用 ticketBooking 现有约定
19
+ * (`packages/private-materials/src/components/ticketBooking/index.tsx`:
20
+ * `booking.parent_id === 0 ? 'list' : 'detail'`)
21
+ * - 不在此处发明等价关系;UI 侧(ticketBooking)若需要别的字段,由 view-model 适配层做转换
22
+ */
23
+
24
+ /** OrderData 中除大数组外的"顶层 header 字段"白名单,按需扩展。 */
25
+ const HEADER_KEYS = ['order_id', 'order_number', 'shop_order_number', 'shop_full_order_number', 'type', 'business_code', 'platform', 'sales_channel', 'order_sales_channel', 'vouchers', 'status', 'payment_status', 'shipping_status', 'customer_id', 'customer_name', 'country_calling_code', 'phone', 'email', 'is_price_include_tax', 'tax_title', 'tax_country_code', 'currency_code', 'currency_symbol', 'currency_format', 'is_deposit', 'deposit_amount', 'shop_discount', 'surcharge_fee', 'note', 'schedule_date', 'created_at', 'updated_at', 'metadata', 'total_amount', 'shop_id', 'create_date', 'holder', 'relation_forms', 'contacts', 'contacts_info'];
68
26
  function pickHeader(raw) {
69
- const header = { order_id: (raw == null ? void 0 : raw.order_id) ?? null };
70
- if (!raw || typeof raw !== "object")
71
- return header;
27
+ const header = {
28
+ order_id: raw?.order_id ?? null
29
+ };
30
+ if (!raw || typeof raw !== 'object') return header;
72
31
  for (const key of HEADER_KEYS) {
73
- if (raw[key] !== void 0)
74
- header[key] = raw[key];
32
+ if (raw[key] !== undefined) header[key] = raw[key];
75
33
  }
76
34
  return header;
77
35
  }
78
36
  function pickCustomer(raw) {
79
- if (!raw || typeof raw !== "object")
80
- return null;
37
+ if (!raw || typeof raw !== 'object') return null;
81
38
  const explicit = raw.customer;
82
- if (explicit && typeof explicit === "object") {
39
+ if (explicit && typeof explicit === 'object') {
83
40
  return {
84
41
  id: explicit.id ?? raw.customer_id ?? null,
85
- name: explicit.name ?? raw.customer_name ?? "",
42
+ name: explicit.name ?? raw.customer_name ?? '',
86
43
  phone: explicit.phone ?? raw.phone,
87
44
  email: explicit.email ?? raw.email,
88
45
  country_calling_code: explicit.country_calling_code ?? raw.country_calling_code,
89
46
  ...explicit
90
47
  };
91
48
  }
92
- if (raw.customer_id == null && !raw.customer_name)
93
- return null;
49
+ if (raw.customer_id == null && !raw.customer_name) return null;
94
50
  return {
95
51
  id: raw.customer_id ?? null,
96
- name: raw.customer_name ?? "",
52
+ name: raw.customer_name ?? '',
97
53
  phone: raw.phone,
98
54
  email: raw.email,
99
55
  country_calling_code: raw.country_calling_code
100
56
  };
101
57
  }
58
+
59
+ /**
60
+ * 判定根 booking。沿用 ticketBooking 现有约定:
61
+ * `parent_id === 0` 视为根;其余为子(item_type === 'recurring_booking' 也按 parent_id 判定)。
62
+ * 见 `packages/private-materials/src/components/ticketBooking/index.tsx`:
63
+ * `type: booking.parent_id === 0 ? 'list' : 'detail'`。
64
+ */
102
65
  function isRootBooking(booking) {
103
- if (!booking || typeof booking !== "object")
104
- return false;
66
+ if (!booking || typeof booking !== 'object') return false;
105
67
  const parentId = booking.parent_id;
106
- if (parentId === 0 || parentId === null || parentId === void 0)
107
- return true;
68
+ if (parentId === 0 || parentId === null || parentId === undefined) return true;
108
69
  return false;
109
70
  }
110
71
  function indexBookingsByProductUid(bookings) {
111
- var _a;
112
72
  const result = {};
113
73
  for (const b of bookings) {
114
- const uid = b && (b.product_uid || ((_a = b.metadata) == null ? void 0 : _a.product_uid)) || "";
115
- if (!uid)
116
- continue;
74
+ const uid = b && (b.product_uid || b.metadata?.product_uid) || '';
75
+ if (!uid) continue;
117
76
  const key = String(uid);
118
- if (!result[key])
119
- result[key] = [];
77
+ if (!result[key]) result[key] = [];
120
78
  result[key].push(b);
121
79
  }
122
80
  return result;
123
81
  }
82
+
83
+ /**
84
+ * 将 `/order/sales/{id}` 响应解析为 ISalesDetail。
85
+ *
86
+ * 注意:
87
+ * - 入参允许是 `{ data: OrderData }` 或直接 `OrderData`,自动识别。
88
+ * - products/bookings/payments 在此补齐集合身份;其余 runtime 字段由 OrderModule hydrate 负责。
89
+ * - 不做远程请求;不修改入参;返回新对象。
90
+ */
124
91
  function parseSalesResponse(input) {
125
- const sourceRaw = input && typeof input === "object" && input.data && input.order_id == null ? input.data : input || {};
126
- const raw = (0, import_orderCollectionIdentity.normalizeOrderCollections)(sourceRaw).order;
127
- const productsRaw = Array.isArray(raw == null ? void 0 : raw.products) ? raw.products : [];
128
- const products = productsRaw.map((p) => {
129
- const row = { ...p || {} };
130
- const metadata = row.metadata && typeof row.metadata === "object" ? { ...row.metadata } : {};
92
+ const sourceRaw = input && typeof input === 'object' && input.data && input.order_id == null ? input.data : input || {};
93
+ const raw = (0, _orderCollectionIdentity.normalizeOrderCollections)(sourceRaw).order;
94
+ const productsRaw = Array.isArray(raw?.products) ? raw.products : [];
95
+ const products = productsRaw.map(p => {
96
+ const row = {
97
+ ...(p || {})
98
+ };
99
+ const metadata = row.metadata && typeof row.metadata === 'object' ? {
100
+ ...row.metadata
101
+ } : {};
131
102
  delete metadata.price_schema_version;
132
103
  delete row.identity_key;
133
- return { ...row, metadata };
104
+ return {
105
+ ...row,
106
+ metadata
107
+ };
134
108
  });
135
- const bookingsRaw = Array.isArray(raw == null ? void 0 : raw.bookings) ? raw.bookings : [];
136
- const bookings = bookingsRaw.map((b) => ({ ...b || {} }));
109
+ const bookingsRaw = Array.isArray(raw?.bookings) ? raw.bookings : [];
110
+ const bookings = bookingsRaw.map(b => ({
111
+ ...(b || {})
112
+ }));
137
113
  const rootBooking = bookings.find(isRootBooking) || null;
138
114
  const bookingsByProductUid = indexBookingsByProductUid(bookings);
139
- const payments = Array.isArray(raw == null ? void 0 : raw.payments) ? raw.payments.map((p) => ({ ...p || {} })) : [];
140
- const surcharges = Array.isArray(raw == null ? void 0 : raw.surcharges) ? raw.surcharges.map((s) => ({ ...s || {} })) : [];
141
- const discount_list = Array.isArray(raw == null ? void 0 : raw.discount_list) ? raw.discount_list.map((d) => ({ ...d || {} })) : [];
142
- const summary = (raw == null ? void 0 : raw.summary) && typeof raw.summary === "object" ? { ...raw.summary } : {};
115
+ const payments = Array.isArray(raw?.payments) ? raw.payments.map(p => ({
116
+ ...(p || {})
117
+ })) : [];
118
+ const surcharges = Array.isArray(raw?.surcharges) ? raw.surcharges.map(s => ({
119
+ ...(s || {})
120
+ })) : [];
121
+ const discount_list = Array.isArray(raw?.discount_list) ? raw.discount_list.map(d => ({
122
+ ...(d || {})
123
+ })) : [];
124
+ const summary = raw?.summary && typeof raw.summary === 'object' ? {
125
+ ...raw.summary
126
+ } : {};
143
127
  return {
144
128
  header: pickHeader(raw),
145
129
  products,
@@ -153,8 +137,4 @@ function parseSalesResponse(input) {
153
137
  summary,
154
138
  raw
155
139
  };
156
- }
157
- // Annotate the CommonJS export names for ESM import in node:
158
- 0 && (module.exports = {
159
- parseSalesResponse
160
- });
140
+ }
@@ -1,132 +1,78 @@
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/BaseSales/utils/quotationPrice.ts
30
- var quotationPrice_exports = {};
31
- __export(quotationPrice_exports, {
32
- calculateBaseSalesProductBookingPrice: () => calculateBaseSalesProductBookingPrice
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
33
5
  });
34
- module.exports = __toCommonJS(quotationPrice_exports);
35
- var import_dayjs = __toESM(require("dayjs"));
36
- var import_decimal = __toESM(require("decimal.js"));
6
+ exports.calculateBaseSalesProductBookingPrice = calculateBaseSalesProductBookingPrice;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ var _decimal = _interopRequireDefault(require("decimal.js"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
10
  function toFiniteNumber(value, fallback = 0) {
38
11
  const parsedValue = Number(value);
39
- if (!Number.isFinite(parsedValue))
40
- return fallback;
12
+ if (!Number.isFinite(parsedValue)) return fallback;
41
13
  return parsedValue;
42
14
  }
43
15
  function toPositiveInt(value, fallback = 1) {
44
16
  const parsedValue = Math.floor(Number(value));
45
- if (!Number.isFinite(parsedValue) || parsedValue < 1)
46
- return fallback;
17
+ if (!Number.isFinite(parsedValue) || parsedValue < 1) return fallback;
47
18
  return parsedValue;
48
19
  }
49
20
  function toPriceString(value) {
50
- return new import_decimal.default(Number(value) || 0).toDecimalPlaces(2).toFixed(2);
21
+ return new _decimal.default(Number(value) || 0).toDecimalPlaces(2).toFixed(2);
51
22
  }
52
23
  function normalizeDateTime(value) {
53
- if (typeof value !== "string" || !value.trim())
54
- return null;
55
- const normalized = value.includes(":") ? value : `${value} 00:00:00`;
56
- const datetime = (0, import_dayjs.default)(normalized);
57
- if (!datetime.isValid())
58
- return null;
24
+ if (typeof value !== 'string' || !value.trim()) return null;
25
+ const normalized = value.includes(':') ? value : `${value} 00:00:00`;
26
+ const datetime = (0, _dayjs.default)(normalized);
27
+ if (!datetime.isValid()) return null;
59
28
  return datetime;
60
29
  }
61
30
  function buildBookingDateTime(date, time) {
62
- if (typeof date !== "string" || !date.trim())
63
- return null;
64
- const timeText = typeof time === "string" && time.trim() ? time.trim() : "00:00";
65
- const datetime = (0, import_dayjs.default)(`${date.trim()} ${timeText}`);
66
- if (!datetime.isValid())
67
- return null;
31
+ if (typeof date !== 'string' || !date.trim()) return null;
32
+ const timeText = typeof time === 'string' && time.trim() ? time.trim() : '00:00';
33
+ const datetime = (0, _dayjs.default)(`${date.trim()} ${timeText}`);
34
+ if (!datetime.isValid()) return null;
68
35
  return datetime;
69
36
  }
70
37
  function getDurationUnit(type) {
71
- const normalizedType = String(type || "").toLowerCase();
72
- if (normalizedType === "day" || normalizedType === "days")
73
- return "day";
74
- if (normalizedType === "minute" || normalizedType === "minutes")
75
- return "minute";
38
+ const normalizedType = String(type || '').toLowerCase();
39
+ if (normalizedType === 'day' || normalizedType === 'days') return 'day';
40
+ if (normalizedType === 'minute' || normalizedType === 'minutes') return 'minute';
76
41
  return null;
77
42
  }
78
43
  function getProductId(product) {
79
44
  const productId = toFiniteNumber(product.product_id ?? product.id, NaN);
80
- if (!Number.isFinite(productId))
81
- return null;
45
+ if (!Number.isFinite(productId)) return null;
82
46
  return productId;
83
47
  }
84
48
  function getProductVariantId(product) {
85
- const variantId = toFiniteNumber(
86
- product.product_variant_id ?? product.variant_id,
87
- 0
88
- );
89
- if (!Number.isFinite(variantId) || variantId <= 0)
90
- return void 0;
49
+ const variantId = toFiniteNumber(product.product_variant_id ?? product.variant_id, 0);
50
+ if (!Number.isFinite(variantId) || variantId <= 0) return undefined;
91
51
  return variantId;
92
52
  }
93
53
  function getFallbackPrice(params) {
94
54
  const product = params.product || {};
95
- return toPriceString(
96
- params.fallback_price ?? product.price ?? product.selling_price ?? product.original_price ?? 0
97
- );
55
+ return toPriceString(params.fallback_price ?? product.price ?? product.selling_price ?? product.original_price ?? 0);
98
56
  }
99
57
  function getProductQuantity(product) {
100
58
  return toPositiveInt(product.num ?? product.quantity, 1);
101
59
  }
102
60
  function getBundleProductId(bundle) {
103
- const productId = toFiniteNumber(
104
- bundle.bundle_product_id ?? bundle._bundle_product_id,
105
- NaN
106
- );
107
- if (!Number.isFinite(productId))
108
- return null;
61
+ const productId = toFiniteNumber(bundle.bundle_product_id ?? bundle._bundle_product_id, NaN);
62
+ if (!Number.isFinite(productId)) return null;
109
63
  return productId;
110
64
  }
111
65
  function getBundleVariantId(bundle) {
112
- const variantId = toFiniteNumber(
113
- bundle.bundle_variant_id ?? bundle.variant_id,
114
- 0
115
- );
116
- if (!Number.isFinite(variantId) || variantId <= 0)
117
- return void 0;
66
+ const variantId = toFiniteNumber(bundle.bundle_variant_id ?? bundle.variant_id, 0);
67
+ if (!Number.isFinite(variantId) || variantId <= 0) return undefined;
118
68
  return variantId;
119
69
  }
120
70
  function getBundleFallbackPrice(bundle) {
121
- return toPriceString(
122
- bundle.bundle_selling_price ?? bundle.price ?? bundle.original_price ?? bundle.base_price ?? 0
123
- );
71
+ return toPriceString(bundle.bundle_selling_price ?? bundle.price ?? bundle.original_price ?? bundle.base_price ?? 0);
124
72
  }
125
73
  function shouldSplitByDuration(duration, start, end) {
126
- if (!duration)
127
- return false;
128
- if (!start || !end || !end.isAfter(start))
129
- return false;
74
+ if (!duration) return false;
75
+ if (!start || !end || !end.isAfter(start)) return false;
130
76
  const unit = getDurationUnit(duration.type);
131
77
  const value = toFiniteNumber(duration.value);
132
78
  return !!unit && value > 0;
@@ -135,29 +81,33 @@ function buildTimeSegments(params) {
135
81
  const booking = params.booking || {};
136
82
  const explicitDatetime = normalizeDateTime(params.datetime);
137
83
  const bookingStart = buildBookingDateTime(booking.start_date, booking.start_time);
138
- const start = bookingStart || explicitDatetime || (0, import_dayjs.default)();
84
+ const start = bookingStart || explicitDatetime || (0, _dayjs.default)();
139
85
  const bookingEnd = buildBookingDateTime(booking.end_date, booking.end_time);
140
86
  if (!shouldSplitByDuration(params.duration, start, bookingEnd)) {
141
- return [{ start }];
87
+ return [{
88
+ start
89
+ }];
142
90
  }
143
91
  const unit = getDurationUnit(params.duration.type);
144
92
  const value = toFiniteNumber(params.duration.value);
145
93
  const segments = [];
146
94
  let cursor = start;
147
95
  let guard = 0;
148
- while (cursor.isBefore(bookingEnd) && guard < 1e4) {
96
+ while (cursor.isBefore(bookingEnd) && guard < 10000) {
149
97
  const next = cursor.add(value, unit);
150
98
  segments.push({
151
99
  start: cursor,
152
- end: next.isBefore(bookingEnd) ? next : bookingEnd ?? void 0
100
+ end: next.isBefore(bookingEnd) ? next : bookingEnd ?? undefined
153
101
  });
154
102
  cursor = next;
155
103
  guard += 1;
156
104
  }
157
- return segments.length ? segments : [{ start }];
105
+ return segments.length ? segments : [{
106
+ start
107
+ }];
158
108
  }
159
109
  function formatTimePoint(datetime) {
160
- return datetime.format("YYYY-MM-DD HH:mm:ss");
110
+ return datetime.format('YYYY-MM-DD HH:mm:ss');
161
111
  }
162
112
  function buildPriceSegment(params) {
163
113
  const timePoint = formatTimePoint(params.segment.start);
@@ -176,7 +126,7 @@ function buildPriceSegment(params) {
176
126
  customer_id: params.customerId
177
127
  }) : null;
178
128
  const unitPrice = toPriceString(quotedPrice ?? params.fallbackPrice);
179
- const quotationShelfId = quotedPrice !== null ? (match == null ? void 0 : match.quotationShelfId) ?? (params.quotation && params.productId !== null ? params.quotation.getQuotationShelfId({
129
+ const quotationShelfId = quotedPrice !== null ? match?.quotationShelfId ?? (params.quotation && params.productId !== null ? params.quotation.getQuotationShelfId({
180
130
  productId: params.productId,
181
131
  variantId: params.variantId,
182
132
  datetime: timePoint,
@@ -185,18 +135,17 @@ function buildPriceSegment(params) {
185
135
  }) : 0) : 0;
186
136
  return {
187
137
  start_datetime: timePoint,
188
- end_datetime: params.segment.end ? formatTimePoint(params.segment.end) : void 0,
138
+ end_datetime: params.segment.end ? formatTimePoint(params.segment.end) : undefined,
189
139
  time_point: timePoint,
190
140
  unit_price: unitPrice,
191
141
  quantity: 1,
192
142
  total_price: unitPrice,
193
143
  quotation_shelf_id: quotationShelfId,
194
- source: quotedPrice !== null ? "quotation" : "fallback"
144
+ source: quotedPrice !== null ? 'quotation' : 'fallback'
195
145
  };
196
146
  }
197
147
  function calculatePriceForProduct(params) {
198
- var _a;
199
- const segments = params.segments.map((segment) => buildPriceSegment({
148
+ const segments = params.segments.map(segment => buildPriceSegment({
200
149
  quotation: params.quotation,
201
150
  productId: params.productId,
202
151
  variantId: params.variantId,
@@ -205,12 +154,9 @@ function calculatePriceForProduct(params) {
205
154
  fallbackPrice: params.fallbackPrice,
206
155
  segment
207
156
  }));
208
- const unitPrice = segments.reduce(
209
- (total, segment) => total.plus(segment.total_price),
210
- new import_decimal.default(0)
211
- );
157
+ const unitPrice = segments.reduce((total, segment) => total.plus(segment.total_price), new _decimal.default(0));
212
158
  const totalPrice = unitPrice.times(params.quantity);
213
- const quotationShelfId = ((_a = segments.find((segment) => segment.quotation_shelf_id)) == null ? void 0 : _a.quotation_shelf_id) || 0;
159
+ const quotationShelfId = segments.find(segment => segment.quotation_shelf_id)?.quotation_shelf_id || 0;
214
160
  return {
215
161
  unitPrice,
216
162
  totalPrice,
@@ -219,11 +165,9 @@ function calculatePriceForProduct(params) {
219
165
  };
220
166
  }
221
167
  function calculateBundlePrices(params, segments) {
222
- var _a;
223
- const bundleList = ((_a = params.product) == null ? void 0 : _a.product_bundle) || [];
224
- if (!bundleList.length)
225
- return void 0;
226
- return bundleList.map((bundle) => {
168
+ const bundleList = params.product?.product_bundle || [];
169
+ if (!bundleList.length) return undefined;
170
+ return bundleList.map(bundle => {
227
171
  const productId = getBundleProductId(bundle);
228
172
  const variantId = getBundleVariantId(bundle);
229
173
  const quantity = getProductQuantity(bundle);
@@ -247,7 +191,7 @@ function calculateBundlePrices(params, segments) {
247
191
  total_price: price.totalPrice.toDecimalPlaces(2).toFixed(2),
248
192
  quantity,
249
193
  quotation_shelf_id: price.quotationShelfId,
250
- source: price.segments.some((segment) => segment.source === "quotation") ? "quotation" : "fallback",
194
+ source: price.segments.some(segment => segment.source === 'quotation') ? 'quotation' : 'fallback',
251
195
  segments: price.segments
252
196
  };
253
197
  });
@@ -280,10 +224,8 @@ function calculateBaseSalesProductBookingPrice(params) {
280
224
  duration: params.duration,
281
225
  quotation_shelf_id: price.quotationShelfId,
282
226
  segments: price.segments,
283
- ...bundlePrices ? { product_bundle: bundlePrices } : {}
227
+ ...(bundlePrices ? {
228
+ product_bundle: bundlePrices
229
+ } : {})
284
230
  };
285
- }
286
- // Annotate the CommonJS export names for ESM import in node:
287
- 0 && (module.exports = {
288
- calculateBaseSalesProductBookingPrice
289
- });
231
+ }