@pisell/pisellos 2.2.314 → 2.2.316

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 (268) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +3 -1
  3. package/dist/model/strategy/adapter/itemRule/adapter.d.ts +3 -1
  4. package/dist/model/strategy/adapter/itemRule/adapter.js +74 -7
  5. package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +3 -1
  6. package/dist/model/strategy/adapter/itemRule/evaluator.js +13 -0
  7. package/dist/model/strategy/adapter/itemRule/type.d.ts +40 -1
  8. package/dist/model/strategy/adapter/itemRule/type.js +10 -0
  9. package/dist/model/strategy/adapter/promotion/evaluator.js +89 -104
  10. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
  11. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +28 -4
  12. package/dist/modules/BookingContext/utils/productExtend.d.ts +7 -0
  13. package/dist/modules/BookingContext/utils/productExtend.js +62 -18
  14. package/dist/modules/BookingContext/utils/resources.js +1 -1
  15. package/dist/modules/BusinessAvailability/index.d.ts +30 -0
  16. package/dist/modules/BusinessAvailability/index.js +204 -0
  17. package/dist/modules/Cart/index.js +4 -3
  18. package/dist/modules/Cart/types.d.ts +2 -0
  19. package/dist/modules/Cart/utils/cartProduct.d.ts +3 -1
  20. package/dist/modules/Cart/utils/cartProduct.js +59 -32
  21. package/dist/modules/FulfillmentTiming/index.d.ts +11 -0
  22. package/dist/modules/FulfillmentTiming/index.js +407 -0
  23. package/dist/modules/FulfillmentTiming/types.d.ts +67 -0
  24. package/dist/modules/FulfillmentTiming/types.js +1 -0
  25. package/dist/modules/Holder/utils.d.ts +2 -0
  26. package/dist/modules/Holder/utils.js +32 -2
  27. package/dist/modules/OpenData/contactInfo.d.ts +20 -0
  28. package/dist/modules/OpenData/contactInfo.js +70 -0
  29. package/dist/modules/OpenData/index.d.ts +1 -0
  30. package/dist/modules/OpenData/index.js +1 -0
  31. package/dist/modules/OpenData/types.d.ts +23 -0
  32. package/dist/modules/Order/holderRelations.d.ts +14 -0
  33. package/dist/modules/Order/holderRelations.js +154 -0
  34. package/dist/modules/Order/index.d.ts +16 -4
  35. package/dist/modules/Order/index.js +926 -511
  36. package/dist/modules/Order/localEftposState.d.ts +13 -0
  37. package/dist/modules/Order/localEftposState.js +39 -0
  38. package/dist/modules/Order/pickupTiming.d.ts +46 -0
  39. package/dist/modules/Order/pickupTiming.js +53 -0
  40. package/dist/modules/Order/types.d.ts +49 -3
  41. package/dist/modules/Order/types.js +2 -0
  42. package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
  43. package/dist/modules/Order/utils/discountProductLineIdentity.js +142 -7
  44. package/dist/modules/Order/utils/orderCollectionIdentity.js +24 -10
  45. package/dist/modules/Order/utils.d.ts +2 -1
  46. package/dist/modules/Order/utils.js +61 -17
  47. package/dist/modules/Payment/index.js +9 -10
  48. package/dist/modules/Product/types.d.ts +11 -0
  49. package/dist/modules/ProductList/index.js +1 -1
  50. package/dist/modules/ResourcePlanner/planner.d.ts +2 -0
  51. package/dist/modules/ResourcePlanner/planner.js +332 -23
  52. package/dist/modules/ResourcePlanner/types.d.ts +29 -0
  53. package/dist/modules/Rules/index.js +62 -61
  54. package/dist/modules/Schedule/index.d.ts +8 -0
  55. package/dist/modules/Schedule/index.js +141 -39
  56. package/dist/modules/index.d.ts +1 -0
  57. package/dist/modules/index.js +1 -0
  58. package/dist/plugins/request.d.ts +7 -0
  59. package/dist/server/index.d.ts +1 -0
  60. package/dist/server/index.js +1557 -1322
  61. package/dist/server/modules/form/index.d.ts +19 -0
  62. package/dist/server/modules/form/index.js +205 -0
  63. package/dist/server/modules/form/types.d.ts +13 -0
  64. package/dist/server/modules/form/types.js +3 -0
  65. package/dist/server/modules/index.d.ts +3 -0
  66. package/dist/server/modules/index.js +4 -0
  67. package/dist/server/modules/order/index.d.ts +19 -0
  68. package/dist/server/modules/order/index.js +1071 -774
  69. package/dist/server/modules/order/types.d.ts +4 -0
  70. package/dist/server/modules/products/index.d.ts +28 -7
  71. package/dist/server/modules/products/index.js +1297 -770
  72. package/dist/server/modules/products/replication.d.ts +8 -0
  73. package/dist/server/modules/products/replication.js +69 -0
  74. package/dist/server/modules/products/types.d.ts +12 -1
  75. package/dist/server/modules/products/types.js +4 -0
  76. package/dist/server/test.json +1 -1
  77. package/dist/server/utils/small-ticket.d.ts +1 -85
  78. package/dist/server/utils/small-ticket.js +2 -2542
  79. package/dist/shared/payment/loadPaymentMethods.d.ts +9 -0
  80. package/dist/shared/payment/loadPaymentMethods.js +66 -0
  81. package/dist/shared/receipt/customerInvoiceLanguages.d.ts +8 -0
  82. package/dist/shared/receipt/customerInvoiceLanguages.js +60 -0
  83. package/dist/shared/receipt/loadCustomerInvoiceLayout.d.ts +27 -0
  84. package/dist/shared/receipt/loadCustomerInvoiceLayout.js +184 -0
  85. package/dist/shared/receipt/small-ticket.d.ts +96 -0
  86. package/dist/shared/receipt/small-ticket.js +2763 -0
  87. package/dist/shared/receipt/templateVisibility.d.ts +26 -0
  88. package/dist/shared/receipt/templateVisibility.js +68 -0
  89. package/dist/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
  90. package/dist/shared/sales/loadSalesOrderSnapshot.js +21 -0
  91. package/dist/solution/BaseSales/fulfillmentItemRules.d.ts +27 -0
  92. package/dist/solution/BaseSales/fulfillmentItemRules.js +750 -0
  93. package/dist/solution/BaseSales/index.d.ts +43 -16
  94. package/dist/solution/BaseSales/index.js +2028 -1247
  95. package/dist/solution/BaseSales/pickupTiming.d.ts +47 -0
  96. package/dist/solution/BaseSales/pickupTiming.js +616 -0
  97. package/dist/solution/BaseSales/types.d.ts +12 -0
  98. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
  99. package/dist/solution/BaseSales/utils/parseSalesResponse.js +10 -3
  100. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +14 -4
  101. package/dist/solution/BookingByStep/index.d.ts +4 -2
  102. package/dist/solution/BookingByStep/index.js +8 -3
  103. package/dist/solution/BookingTicket/index.d.ts +23 -3
  104. package/dist/solution/BookingTicket/index.js +867 -507
  105. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +0 -1
  106. package/dist/solution/BookingTicket/utils/addProductDecision.js +1 -1
  107. package/dist/solution/BookingTicket/utils/cartView.js +3 -1
  108. package/dist/solution/OrderInvoicePreview/index.d.ts +66 -0
  109. package/dist/solution/OrderInvoicePreview/index.js +340 -0
  110. package/dist/solution/RegisterAndLogin/config.js +54 -11
  111. package/dist/solution/RegisterAndLogin/index.d.ts +2 -0
  112. package/dist/solution/RegisterAndLogin/index.js +1 -1
  113. package/dist/solution/RegisterAndLogin/utils.d.ts +12 -4
  114. package/dist/solution/RegisterAndLogin/utils.js +36 -16
  115. package/dist/solution/ScanOrder/index.js +65 -31
  116. package/dist/solution/ScanOrder/types.d.ts +3 -0
  117. package/dist/solution/UnifiedBookingSales/businessAvailability.d.ts +27 -0
  118. package/dist/solution/UnifiedBookingSales/businessAvailability.js +292 -0
  119. package/dist/solution/UnifiedBookingSales/index.d.ts +36 -4
  120. package/dist/solution/UnifiedBookingSales/index.js +1715 -906
  121. package/dist/solution/UnifiedBookingSales/types.d.ts +16 -2
  122. package/dist/solution/VenueBooking/index.d.ts +15 -2
  123. package/dist/solution/VenueBooking/index.js +1062 -785
  124. package/dist/solution/VenueBooking/types.d.ts +2 -1
  125. package/dist/solution/VenueBooking/types.js +1 -0
  126. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
  127. package/dist/solution/VenueBooking/utils/dateSummary.js +7 -4
  128. package/dist/solution/VenueBooking/utils/smartPricing.d.ts +71 -0
  129. package/dist/solution/VenueBooking/utils/smartPricing.js +273 -0
  130. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +1 -0
  131. package/dist/solution/VenueBooking/utils/timeSlot.js +6 -3
  132. package/dist/solution/index.d.ts +1 -0
  133. package/dist/solution/index.js +2 -1
  134. package/lib/index.d.ts +2 -0
  135. package/lib/index.js +21 -1
  136. package/lib/model/strategy/adapter/itemRule/adapter.d.ts +3 -1
  137. package/lib/model/strategy/adapter/itemRule/adapter.js +54 -4
  138. package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +3 -1
  139. package/lib/model/strategy/adapter/itemRule/evaluator.js +9 -0
  140. package/lib/model/strategy/adapter/itemRule/type.d.ts +40 -1
  141. package/lib/model/strategy/adapter/itemRule/type.js +10 -0
  142. package/lib/model/strategy/adapter/promotion/evaluator.js +9 -14
  143. package/lib/model/strategy/adapter/promotion/index.js +46 -1
  144. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
  145. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +17 -1
  146. package/lib/modules/BookingContext/utils/productExtend.d.ts +7 -0
  147. package/lib/modules/BookingContext/utils/productExtend.js +45 -2
  148. package/lib/modules/BookingContext/utils/resources.js +1 -1
  149. package/lib/modules/BusinessAvailability/index.d.ts +30 -0
  150. package/lib/modules/BusinessAvailability/index.js +146 -0
  151. package/lib/modules/Cart/index.js +4 -2
  152. package/lib/modules/Cart/types.d.ts +2 -0
  153. package/lib/modules/Cart/utils/cartProduct.d.ts +3 -1
  154. package/lib/modules/Cart/utils/cartProduct.js +39 -20
  155. package/lib/modules/FulfillmentTiming/index.d.ts +11 -0
  156. package/lib/modules/FulfillmentTiming/index.js +359 -0
  157. package/lib/modules/FulfillmentTiming/types.d.ts +67 -0
  158. package/lib/modules/FulfillmentTiming/types.js +5 -0
  159. package/lib/modules/Holder/utils.d.ts +2 -0
  160. package/lib/modules/Holder/utils.js +27 -1
  161. package/lib/modules/OpenData/contactInfo.d.ts +20 -0
  162. package/lib/modules/OpenData/contactInfo.js +56 -0
  163. package/lib/modules/OpenData/index.d.ts +1 -0
  164. package/lib/modules/OpenData/index.js +12 -0
  165. package/lib/modules/OpenData/types.d.ts +23 -0
  166. package/lib/modules/Order/holderRelations.d.ts +14 -0
  167. package/lib/modules/Order/holderRelations.js +98 -0
  168. package/lib/modules/Order/index.d.ts +16 -4
  169. package/lib/modules/Order/index.js +284 -50
  170. package/lib/modules/Order/localEftposState.d.ts +13 -0
  171. package/lib/modules/Order/localEftposState.js +44 -0
  172. package/lib/modules/Order/pickupTiming.d.ts +46 -0
  173. package/lib/modules/Order/pickupTiming.js +61 -0
  174. package/lib/modules/Order/types.d.ts +49 -3
  175. package/lib/modules/Order/types.js +1 -0
  176. package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
  177. package/lib/modules/Order/utils/discountProductLineIdentity.js +51 -2
  178. package/lib/modules/Order/utils/orderCollectionIdentity.js +5 -0
  179. package/lib/modules/Order/utils.d.ts +2 -1
  180. package/lib/modules/Order/utils.js +49 -11
  181. package/lib/modules/Payment/index.js +3 -4
  182. package/lib/modules/Product/types.d.ts +11 -0
  183. package/lib/modules/ProductList/index.js +1 -1
  184. package/lib/modules/ResourcePlanner/planner.d.ts +2 -0
  185. package/lib/modules/ResourcePlanner/planner.js +252 -8
  186. package/lib/modules/ResourcePlanner/types.d.ts +29 -0
  187. package/lib/modules/Rules/index.js +2 -1
  188. package/lib/modules/Schedule/index.d.ts +8 -0
  189. package/lib/modules/Schedule/index.js +68 -12
  190. package/lib/modules/index.d.ts +1 -0
  191. package/lib/modules/index.js +11 -0
  192. package/lib/plugins/request.d.ts +7 -0
  193. package/lib/server/index.d.ts +1 -0
  194. package/lib/server/index.js +166 -39
  195. package/lib/server/modules/form/index.d.ts +19 -0
  196. package/lib/server/modules/form/index.js +73 -0
  197. package/lib/server/modules/form/types.d.ts +13 -0
  198. package/lib/server/modules/form/types.js +9 -0
  199. package/lib/server/modules/index.d.ts +3 -0
  200. package/lib/server/modules/index.js +15 -1
  201. package/lib/server/modules/order/index.d.ts +19 -0
  202. package/lib/server/modules/order/index.js +160 -7
  203. package/lib/server/modules/order/types.d.ts +4 -0
  204. package/lib/server/modules/products/index.d.ts +28 -7
  205. package/lib/server/modules/products/index.js +226 -63
  206. package/lib/server/modules/products/replication.d.ts +8 -0
  207. package/lib/server/modules/products/replication.js +30 -0
  208. package/lib/server/modules/products/types.d.ts +12 -1
  209. package/lib/server/modules/products/types.js +3 -0
  210. package/lib/server/test.json +1 -1
  211. package/lib/server/utils/small-ticket.d.ts +1 -85
  212. package/lib/server/utils/small-ticket.js +9 -2305
  213. package/lib/shared/payment/loadPaymentMethods.d.ts +9 -0
  214. package/lib/shared/payment/loadPaymentMethods.js +40 -0
  215. package/lib/shared/receipt/customerInvoiceLanguages.d.ts +8 -0
  216. package/lib/shared/receipt/customerInvoiceLanguages.js +58 -0
  217. package/lib/shared/receipt/loadCustomerInvoiceLayout.d.ts +27 -0
  218. package/lib/shared/receipt/loadCustomerInvoiceLayout.js +124 -0
  219. package/lib/shared/receipt/small-ticket.d.ts +96 -0
  220. package/lib/shared/receipt/small-ticket.js +2555 -0
  221. package/lib/shared/receipt/templateVisibility.d.ts +26 -0
  222. package/lib/shared/receipt/templateVisibility.js +67 -0
  223. package/lib/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
  224. package/lib/shared/sales/loadSalesOrderSnapshot.js +22 -0
  225. package/lib/solution/BaseSales/fulfillmentItemRules.d.ts +27 -0
  226. package/lib/solution/BaseSales/fulfillmentItemRules.js +259 -0
  227. package/lib/solution/BaseSales/index.d.ts +43 -16
  228. package/lib/solution/BaseSales/index.js +401 -33
  229. package/lib/solution/BaseSales/pickupTiming.d.ts +47 -0
  230. package/lib/solution/BaseSales/pickupTiming.js +290 -0
  231. package/lib/solution/BaseSales/types.d.ts +12 -0
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
  233. package/lib/solution/BaseSales/utils/parseSalesResponse.js +7 -0
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +16 -8
  235. package/lib/solution/BookingByStep/index.d.ts +4 -2
  236. package/lib/solution/BookingByStep/index.js +7 -3
  237. package/lib/solution/BookingTicket/index.d.ts +23 -3
  238. package/lib/solution/BookingTicket/index.js +197 -9
  239. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +0 -1
  240. package/lib/solution/BookingTicket/utils/addProductDecision.js +1 -1
  241. package/lib/solution/BookingTicket/utils/cartView.js +3 -1
  242. package/lib/solution/OrderInvoicePreview/index.d.ts +66 -0
  243. package/lib/solution/OrderInvoicePreview/index.js +246 -0
  244. package/lib/solution/RegisterAndLogin/config.js +57 -11
  245. package/lib/solution/RegisterAndLogin/index.d.ts +2 -0
  246. package/lib/solution/RegisterAndLogin/index.js +9 -1
  247. package/lib/solution/RegisterAndLogin/utils.d.ts +12 -4
  248. package/lib/solution/RegisterAndLogin/utils.js +24 -17
  249. package/lib/solution/ScanOrder/index.js +59 -20
  250. package/lib/solution/ScanOrder/types.d.ts +3 -0
  251. package/lib/solution/UnifiedBookingSales/businessAvailability.d.ts +27 -0
  252. package/lib/solution/UnifiedBookingSales/businessAvailability.js +138 -0
  253. package/lib/solution/UnifiedBookingSales/index.d.ts +36 -4
  254. package/lib/solution/UnifiedBookingSales/index.js +562 -75
  255. package/lib/solution/UnifiedBookingSales/types.d.ts +16 -2
  256. package/lib/solution/VenueBooking/index.d.ts +15 -2
  257. package/lib/solution/VenueBooking/index.js +243 -96
  258. package/lib/solution/VenueBooking/types.d.ts +2 -1
  259. package/lib/solution/VenueBooking/types.js +1 -0
  260. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
  261. package/lib/solution/VenueBooking/utils/dateSummary.js +7 -4
  262. package/lib/solution/VenueBooking/utils/smartPricing.d.ts +71 -0
  263. package/lib/solution/VenueBooking/utils/smartPricing.js +224 -0
  264. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +1 -0
  265. package/lib/solution/VenueBooking/utils/timeSlot.js +5 -2
  266. package/lib/solution/index.d.ts +1 -0
  267. package/lib/solution/index.js +11 -0
  268. package/package.json +1 -1
@@ -0,0 +1,13 @@
1
+ /** Local reconciliation state; never part of a cloud checkout payload. */
2
+ export declare const LOCAL_EFTPOS_REFRESH_REQUIRED = "_local_eftpos_refresh_required";
3
+ export declare const LOCAL_EFTPOS_FINALIZED = "_local_eftpos_finalized";
4
+ export declare const PAYMENT_REFRESH_MESSAGE = "\u8BA2\u5355\u9700\u8981\u5237\u65B0\uFF0C\u8BF7\u8054\u7F51\u5237\u65B0\u8BA2\u5355\u540E\u518D\u4ED8\u6B3E";
5
+ export interface LocalEftposFinalization {
6
+ saleId: string | number;
7
+ paymentNumber: string;
8
+ result: 'failed' | 'not_started';
9
+ failedTransactionNumbers: string[];
10
+ }
11
+ export declare function requiresLocalPaymentRefresh(order: any): boolean;
12
+ export declare function isLocalFinalizedPayment(payment: any): boolean;
13
+ export declare function stripLocalEftposState<T extends Record<string, any>>(order: T): T;
@@ -0,0 +1,39 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ /** Local reconciliation state; never part of a cloud checkout payload. */
8
+ export var LOCAL_EFTPOS_REFRESH_REQUIRED = '_local_eftpos_refresh_required';
9
+ export var LOCAL_EFTPOS_FINALIZED = '_local_eftpos_finalized';
10
+ export var PAYMENT_REFRESH_MESSAGE = '订单需要刷新,请联网刷新订单后再付款';
11
+ export function requiresLocalPaymentRefresh(order) {
12
+ var _order$metadata;
13
+ return (order === null || order === void 0 || (_order$metadata = order.metadata) === null || _order$metadata === void 0 ? void 0 : _order$metadata[LOCAL_EFTPOS_REFRESH_REQUIRED]) === true;
14
+ }
15
+ export function isLocalFinalizedPayment(payment) {
16
+ var _payment$metadata;
17
+ return (payment === null || payment === void 0 ? void 0 : payment.status) === 'voided' && (payment === null || payment === void 0 || (_payment$metadata = payment.metadata) === null || _payment$metadata === void 0 ? void 0 : _payment$metadata[LOCAL_EFTPOS_FINALIZED]) === true;
18
+ }
19
+ export function stripLocalEftposState(order) {
20
+ var result = _objectSpread({}, order);
21
+ if (order.metadata) {
22
+ result.metadata = _objectSpread({}, order.metadata);
23
+ delete result.metadata[LOCAL_EFTPOS_REFRESH_REQUIRED];
24
+ }
25
+ if (Array.isArray(order.payments)) {
26
+ result.payments = order.payments.filter(function (payment) {
27
+ return !isLocalFinalizedPayment(payment);
28
+ }).map(function (payment) {
29
+ var _payment$metadata2;
30
+ if (!((_payment$metadata2 = payment.metadata) !== null && _payment$metadata2 !== void 0 && _payment$metadata2[LOCAL_EFTPOS_FINALIZED])) return payment;
31
+ var metadata = _objectSpread({}, payment.metadata);
32
+ delete metadata[LOCAL_EFTPOS_FINALIZED];
33
+ return _objectSpread(_objectSpread({}, payment), {}, {
34
+ metadata: metadata
35
+ });
36
+ });
37
+ }
38
+ return result;
39
+ }
@@ -0,0 +1,46 @@
1
+ export type PickupTimingSelectionMode = 'asap' | 'scheduled';
2
+ export type PickupTimingSource = 'asap' | 'schedule' | 'pos_manual';
3
+ export interface PickupTimingBookingInput {
4
+ mode: PickupTimingSelectionMode;
5
+ source: PickupTimingSource;
6
+ /** Store-local calendar date and minute; the caller validates availability. */
7
+ date: string;
8
+ time: string;
9
+ /** Absolute timestamp disambiguates a repeated local minute at a DST change. */
10
+ instant?: string;
11
+ timezone?: string;
12
+ frozen?: boolean;
13
+ }
14
+ export interface PickupTimingBookingMetadata {
15
+ unique_identification_number: string;
16
+ is_fulfillment_timing: true;
17
+ fulfillment_timing: {
18
+ method: 'pick_up';
19
+ mode: PickupTimingSelectionMode;
20
+ source: PickupTimingSource;
21
+ instant?: string;
22
+ timezone?: string;
23
+ frozen?: boolean;
24
+ };
25
+ [key: string]: any;
26
+ }
27
+ export interface PickupTimingBooking {
28
+ schedule_id: number | string;
29
+ start_date: string;
30
+ end_date: string;
31
+ start_time: string;
32
+ end_time: string;
33
+ select_date: string;
34
+ duration: 0;
35
+ is_all: 0;
36
+ sub_type: 'minutes';
37
+ like_status: string;
38
+ resources: [];
39
+ metadata: PickupTimingBookingMetadata;
40
+ schedule_event_id?: number | string;
41
+ [key: string]: any;
42
+ }
43
+ /** The explicit marker is the only authority; unlinked ordinary bookings remain ordinary. */
44
+ export declare function isFulfillmentTimingBooking(booking: unknown): boolean;
45
+ /** Update an independent pickup appointment without changing its persisted row identity. */
46
+ export declare function buildPickupTimingBooking(input: PickupTimingBookingInput, existing?: Record<string, any> | null): PickupTimingBooking;
@@ -0,0 +1,53 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ import { createUuidV4 } from "./utils/orderCollectionIdentity";
8
+ /** The explicit marker is the only authority; unlinked ordinary bookings remain ordinary. */
9
+ export function isFulfillmentTimingBooking(booking) {
10
+ var _metadata;
11
+ return (booking === null || booking === void 0 || (_metadata = booking.metadata) === null || _metadata === void 0 ? void 0 : _metadata.is_fulfillment_timing) === true;
12
+ }
13
+
14
+ /** Update an independent pickup appointment without changing its persisted row identity. */
15
+ export function buildPickupTimingBooking(input, existing) {
16
+ var booking = _objectSpread({}, existing || {});
17
+ var metadata = _objectSpread({}, booking.metadata || {});
18
+ // A fulfillment appointment never becomes a product/resource/holder purchase line.
19
+ for (var _i = 0, _arr = ['product_uid', 'product', 'holder', 'holder_id', 'collect_pax', 'capacity']; _i < _arr.length; _i++) {
20
+ var _key = _arr[_i];
21
+ delete booking[_key];
22
+ delete metadata[_key];
23
+ }
24
+ delete metadata.booking_uid;
25
+ return _objectSpread(_objectSpread({}, booking), {}, {
26
+ schedule_id: booking.schedule_id || 0,
27
+ start_date: input.date,
28
+ end_date: input.date,
29
+ start_time: input.time,
30
+ end_time: input.time,
31
+ select_date: input.date,
32
+ duration: 0,
33
+ is_all: 0,
34
+ sub_type: 'minutes',
35
+ like_status: booking.like_status || 'common',
36
+ resources: [],
37
+ metadata: _objectSpread(_objectSpread({}, metadata), {}, {
38
+ unique_identification_number: String(metadata.unique_identification_number || createUuidV4()),
39
+ is_fulfillment_timing: true,
40
+ fulfillment_timing: _objectSpread(_objectSpread(_objectSpread({
41
+ method: 'pick_up',
42
+ mode: input.mode,
43
+ source: input.source
44
+ }, input.instant !== undefined ? {
45
+ instant: input.instant
46
+ } : {}), input.timezone !== undefined ? {
47
+ timezone: input.timezone
48
+ } : {}), input.frozen !== undefined ? {
49
+ frozen: input.frozen
50
+ } : {})
51
+ })
52
+ });
53
+ }
@@ -7,9 +7,10 @@ import type { SubmitPayloadEnhancer } from './utils';
7
7
  import type { PaymentItem } from '../Payment/types';
8
8
  import type { ICustomer } from '../AccountList/types';
9
9
  import type { OrderProductDiscountItem } from '../../server/modules/order/types';
10
+ import type { PickupTimingBooking, PickupTimingBookingInput } from './pickupTiming';
10
11
  export type { OrderProductDiscountItem } from '../../server/modules/order/types';
11
12
  export type PickupReferenceMode = 'counter_pickup' | 'table_service';
12
- export type ShopServiceType = 'dine_in' | 'takeaway';
13
+ export type ShopServiceType = 'dine_in' | 'takeaway' | 'pick_up' | 'delivery';
13
14
  export interface ShopServiceData {
14
15
  pickup_reference_mode?: PickupReferenceMode;
15
16
  service_type?: ShopServiceType | '';
@@ -212,6 +213,7 @@ export interface VirtualCurrencySnapshotItem {
212
213
  id: number | string;
213
214
  tag: 'virtual_currency';
214
215
  product_id?: number | string;
216
+ code?: string;
215
217
  product_name: string;
216
218
  par_value: string;
217
219
  used_par_value: string;
@@ -241,6 +243,11 @@ export interface OrderProduct extends OrderProductIdentity {
241
243
  product_cover?: string;
242
244
  metadata: Record<string, any>;
243
245
  note?: string;
246
+ /** 仅作按行更新输入;正式数据保存于订单顶层。 */
247
+ _extend?: {
248
+ holder_relations?: OrderHolderRelation[];
249
+ [key: string]: any;
250
+ };
244
251
  }
245
252
  export interface OrderSummary {
246
253
  product_quantity: number;
@@ -338,6 +345,17 @@ export interface SalesNotesMutationSnapshot {
338
345
  }
339
346
  export type SalesNoteProtocolRelation = SalesNoteRelation;
340
347
  export type SalesNoteProtocol = SalesNote;
348
+ /** 后端关系及 metadata 均为开放对象,未知字段必须往返保留。 */
349
+ export interface OrderHolderRelation {
350
+ /** 关系自身的 UUID;新选择/旧草稿可缺省,入单与提交时由 OS 补齐。 */
351
+ uuid?: string;
352
+ relation_model: string;
353
+ relation_uuid: string;
354
+ holder_type: 'form' | 'customer';
355
+ holder_id: number;
356
+ metadata?: Record<string, any>;
357
+ [key: string]: any;
358
+ }
341
359
  export interface OrderTempOrder {
342
360
  order_id: number | null;
343
361
  external_sale_number: string;
@@ -377,6 +395,7 @@ export interface OrderTempOrder {
377
395
  created_at: string | undefined;
378
396
  request_unique_idempotency_token?: string;
379
397
  products: OrderProduct[];
398
+ holder_relations?: OrderHolderRelation[];
380
399
  notes: SalesNote[];
381
400
  bookings: any[];
382
401
  payments: any[];
@@ -396,7 +415,7 @@ export interface OrderTempOrder {
396
415
  [key: string]: any;
397
416
  };
398
417
  }
399
- export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num'> {
418
+ export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num' | '_extend'> {
400
419
  product_quantity: number;
401
420
  payment_price: string;
402
421
  product_sku: OrderProductSku;
@@ -439,16 +458,29 @@ export type AddProductBookingInput = Record<string, any>;
439
458
  */
440
459
  export interface AddProductToOrderOptions {
441
460
  insertAfterProductUid?: string;
461
+ /** 新增商品行插入 products 首位,优先于 insertAfterProductUid。 */
462
+ insertAtStart?: boolean;
442
463
  /** 跳过同商品/规格匹配,始终新增购物车行。 */
443
464
  disableMerge?: boolean;
444
465
  /** 商品行 UID 落定后,由 OrderModule 原子绑定到该行的 Sales Notes 草稿。 */
445
466
  salesNotes?: SalesNoteDraftInput[];
467
+ /**
468
+ * 自动预约加购的同步提交门禁;抛错时不发布本次新增。
469
+ * 带门禁时先在私有草稿中准备全部商品/booking,异步等待后及原子发布前重新调用。
470
+ * 门禁须校验当前订单身份/版本和真实时间;发布前不会因本次拆行改变订单版本。
471
+ * 不传时保留原有人工加购行为。
472
+ */
473
+ availabilityCommitGuard?: () => void;
474
+ /** 发布后的订单/业务归属检查;只用于阻止旧异步收尾写入新单,不再校验截止或 revision。 */
475
+ availabilityCommitTargetGuard?: () => boolean;
446
476
  }
447
477
  /**
448
478
  * 删除商品后的可选位置保持策略。
449
479
  * 预约合并行减量时仍删除最新真实行,再把剩余代表行移动到被删除代表行原位置。
450
480
  */
451
481
  export interface RemoveProductsFromOrderOptions {
482
+ /** 自动购物车写入的订单归属检查;失效时不再变更或发布异步收尾结果。 */
483
+ isCurrentOrder?: () => boolean;
452
484
  preserveDisplayPosition?: {
453
485
  remainingProductUid: string;
454
486
  anchorProductUid: string;
@@ -516,7 +548,15 @@ export type OrderProductMergeDecisionResult = boolean | {
516
548
  reason?: string;
517
549
  [key: string]: any;
518
550
  };
551
+ export interface OrderCartIntentCommitContext {
552
+ action: 'add_product' | 'update_product' | 'increase_quantity' | 'scan_promotion';
553
+ tempOrder: OrderTempOrder | null;
554
+ }
519
555
  export interface OrderHooksConfig {
556
+ /** Optional customer-order guard; called synchronously before the first cart write. */
557
+ beforeCartIntentCommit?: (context: OrderCartIntentCommitContext) => void;
558
+ /** Captures tenant/business runtime identity for asynchronous cart intents. */
559
+ getCartIntentScope?: () => unknown;
520
560
  onBeforeMergeProductToOrder?: (context: OrderProductMergeDecisionContext) => OrderProductMergeDecisionResult | Promise<OrderProductMergeDecisionResult>;
521
561
  }
522
562
  /**
@@ -584,6 +624,7 @@ export interface SubmitSalesOrderParams {
584
624
  schedule_date: string;
585
625
  created_at?: string | undefined;
586
626
  products: OrderSubmitProduct[];
627
+ holder_relations?: OrderHolderRelation[];
587
628
  bookings: OrderSubmitBooking[];
588
629
  payments: any[];
589
630
  vouchers: any[];
@@ -863,6 +904,9 @@ export interface OrderModuleAPI {
863
904
  updateTempOrderCustomer: (customer: UpdateTempOrderCustomerInput) => OrderSnapshot['customer'];
864
905
  updateTempOrderPickupReferenceMode: (mode: PickupReferenceMode) => ShopServiceData;
865
906
  updateTempOrderServiceType: (serviceType: ShopServiceType) => ShopServiceData;
907
+ getPickupTimingBooking: () => PickupTimingBooking | null;
908
+ setPickupTimingBooking: (input: PickupTimingBookingInput) => PickupTimingBooking;
909
+ clearPickupTimingBooking: () => void;
866
910
  updateTempOrderBuzzer: (buzzer: string) => string;
867
911
  updateTempOrderContactsInfo: (contactsInfo: Record<string, any> | null) => Record<string, any> | null;
868
912
  addProductToOrder: (product: Partial<OrderProduct> & OrderProductIdentity, booking?: AddProductBookingInput, options?: AddProductToOrderOptions) => Promise<OrderProduct[]>;
@@ -875,7 +919,9 @@ export interface OrderModuleAPI {
875
919
  updateOrderProduct: (params: UpdateOrderProductParams) => Promise<OrderProduct[]>;
876
920
  /** 批量更新购物车行,末尾仅触发一次促销重算与 summary 刷新 */
877
921
  updateOrderProducts: (paramsList: UpdateOrderProductParams[]) => Promise<OrderProduct[]>;
878
- updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams) => Promise<OrderProduct[]>;
922
+ updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams, options?: {
923
+ isCurrentOrder?: () => boolean;
924
+ }) => Promise<OrderProduct[]>;
879
925
  updateOrderBooking: (params: UpdateOrderBookingParams) => any[];
880
926
  removeProductFromOrder: (identity: OrderProductIdentity, options?: RemoveProductsFromOrderOptions) => Promise<OrderProduct[]>;
881
927
  /** 批量删除购物车行,末尾仅触发一次促销重算与 summary 刷新 */
@@ -69,6 +69,8 @@ export var OrderHooks = /*#__PURE__*/function (OrderHooks) {
69
69
  * 该对象应视为 opaque token,只用于原样传回 restoreSalesNotesMutationSnapshot。
70
70
  */
71
71
 
72
+ /** 后端关系及 metadata 均为开放对象,未知字段必须往返保留。 */
73
+
72
74
  /**
73
75
  * 添加商品行时的顺序控制。
74
76
  * 默认追加到 products 尾部;预约数量同步可插入到既有预约组的最新行之后,
@@ -31,7 +31,7 @@ export declare const DISCOUNT_SPLIT_ORIGIN_UID_KEY = "discountSplitOriginUid";
31
31
  * 没有 UID 的裸商品不会被补写 UID。这是为了兼容 Rules/mock 的历史协议形状;
32
32
  * 正常 Order 写路径会在 normalize 阶段提前创建 UID。
33
33
  */
34
- export declare function ensureUniqueProductLineUids(tempOrder: OrderTempOrder): void;
34
+ export declare function ensureUniqueProductLineUids(tempOrder: OrderTempOrder, discounts?: Array<Record<string, any>>): void;
35
35
  /**
36
36
  * 把券移除后已经恢复原价的同源折扣拆分行重新合并。
37
37
  *
@@ -1,3 +1,11 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
4
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
5
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
6
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
7
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
1
9
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
2
10
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3
11
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -10,6 +18,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
10
18
  import { cloneDeep } from 'lodash-es';
11
19
  import { buildProductLineFingerprint, getSafeProductNum } from "../../../solution/ScanOrder/utils";
12
20
  import { createUuidV4 } from "./orderCollectionIdentity";
21
+ import { getProductHolderRelations } from "../holderRelations";
13
22
 
14
23
  /**
15
24
  * 商品券拆行的身份与回并工具。
@@ -80,15 +89,20 @@ function ensureProductsByUid(tempOrder) {
80
89
  * 正常 Order 写路径会在 normalize 阶段提前创建 UID。
81
90
  */
82
91
  export function ensureUniqueProductLineUids(tempOrder) {
92
+ var discounts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
83
93
  // usedUids 只描述本次 Rules 返回的商品集合,不能直接依赖 productsByUid:
84
94
  // productsByUid 可能还保留已删除行的历史 runtime,历史 UID 不应导致当前行被改号。
85
95
  var usedUids = new Set();
86
96
  var productsByUid = ensureProductsByUid(tempOrder);
97
+ var splitGroups = new Map();
87
98
  tempOrder.products = (tempOrder.products || []).map(function (product) {
88
99
  var sourceUid = getProductLineUid(product);
89
100
  // 单测 mock 或兼容旧 Rules 时可能返回没有 UID 的裸商品。
90
101
  // 这里不主动补 UID,避免一个“校验重复”的工具意外改变旧协议对象形状。
91
102
  if (!sourceUid) return product;
103
+ var group = splitGroups.get(sourceUid) || [];
104
+ group.push(product);
105
+ splitGroups.set(sourceUid, group);
92
106
 
93
107
  // 实际场景:可乐 ×5 首次进入 Rules 时只有一行。
94
108
  // 使用三张券后 Rules 可能返回「可乐 ×2 + 三条可乐 ×1」,但四条都复制原 UID。
@@ -122,6 +136,127 @@ export function ensureUniqueProductLineUids(tempOrder) {
122
136
  usedUids.add(splitUid);
123
137
  return product;
124
138
  });
139
+
140
+ // 仅按本次券上的明确 Holder 分配迁移。数组顺序不能代表券对应的人。
141
+ // 未能明确分配时保留原 UID,不把整组关系复制给每一个拆分行。
142
+ var _iterator = _createForOfIteratorHelper(splitGroups),
143
+ _step;
144
+ try {
145
+ var _loop = function _loop() {
146
+ var _step$value = _slicedToArray(_step.value, 2),
147
+ sourceUid = _step$value[0],
148
+ products = _step$value[1];
149
+ if (products.length < 2) return 0; // continue
150
+ var relations = getProductHolderRelations(tempOrder, {
151
+ metadata: {
152
+ unique_identification_number: sourceUid
153
+ }
154
+ });
155
+ if (!relations.length || relations.some(function (relation) {
156
+ return relation.holder_type !== 'form';
157
+ })) return 0; // continue
158
+ var assignments = new Map();
159
+ var remaining = _toConsumableArray(relations);
160
+ var ambiguous = false;
161
+ var _iterator2 = _createForOfIteratorHelper(products),
162
+ _step2;
163
+ try {
164
+ var _loop2 = function _loop2() {
165
+ var product = _step2.value;
166
+ var holderIds = new Set();
167
+ var _iterator4 = _createForOfIteratorHelper(product.discount_list || []),
168
+ _step4;
169
+ try {
170
+ var _loop3 = function _loop3() {
171
+ var _discount$holder;
172
+ var item = _step4.value;
173
+ var discount = discounts.find(function (candidate) {
174
+ var _item$discount;
175
+ return String(candidate.id) === String((_item$discount = item.discount) === null || _item$discount === void 0 ? void 0 : _item$discount.resource_id);
176
+ });
177
+ if ((discount === null || discount === void 0 || (_discount$holder = discount.holder) === null || _discount$holder === void 0 ? void 0 : _discount$holder.holder_type) !== 'form') return 1; // continue
178
+ var value = discount.holder.holder_id;
179
+ (Array.isArray(value) ? value : [value]).forEach(function (id) {
180
+ var recordId = id && _typeof(id) === 'object' ? id.form_record_id : id;
181
+ if (recordId !== undefined && recordId !== null && recordId !== '') holderIds.add(String(recordId));
182
+ });
183
+ };
184
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
185
+ if (_loop3()) continue;
186
+ }
187
+ } catch (err) {
188
+ _iterator4.e(err);
189
+ } finally {
190
+ _iterator4.f();
191
+ }
192
+ if (!holderIds.size) return 0; // continue
193
+ var assigned = remaining.filter(function (relation) {
194
+ return holderIds.has(String(relation.holder_id));
195
+ });
196
+ if (assigned.length !== Number(product.num)) {
197
+ ambiguous = true;
198
+ return 1; // break
199
+ }
200
+ assignments.set(product, assigned);
201
+ remaining = remaining.filter(function (relation) {
202
+ return !assigned.includes(relation);
203
+ });
204
+ },
205
+ _ret2;
206
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
207
+ _ret2 = _loop2();
208
+ if (_ret2 === 0) continue;
209
+ if (_ret2 === 1) break;
210
+ }
211
+ } catch (err) {
212
+ _iterator2.e(err);
213
+ } finally {
214
+ _iterator2.f();
215
+ }
216
+ var unassigned = products.filter(function (product) {
217
+ return !assignments.has(product);
218
+ });
219
+ if (ambiguous || unassigned.length > 1) return 0; // continue
220
+ if (unassigned.length === 1) {
221
+ if (remaining.length !== Number(unassigned[0].num)) return 0; // continue
222
+ assignments.set(unassigned[0], remaining);
223
+ } else if (remaining.length) return 0; // continue
224
+ var _iterator3 = _createForOfIteratorHelper(assignments),
225
+ _step3;
226
+ try {
227
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
228
+ var _step3$value = _slicedToArray(_step3.value, 2),
229
+ product = _step3$value[0],
230
+ assigned = _step3$value[1];
231
+ var _iterator5 = _createForOfIteratorHelper(assigned),
232
+ _step5;
233
+ try {
234
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
235
+ var relation = _step5.value;
236
+ relation.relation_uuid = String(getProductLineUid(product));
237
+ }
238
+ } catch (err) {
239
+ _iterator5.e(err);
240
+ } finally {
241
+ _iterator5.f();
242
+ }
243
+ }
244
+ } catch (err) {
245
+ _iterator3.e(err);
246
+ } finally {
247
+ _iterator3.f();
248
+ }
249
+ },
250
+ _ret;
251
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
252
+ _ret = _loop();
253
+ if (_ret === 0) continue;
254
+ }
255
+ } catch (err) {
256
+ _iterator.e(err);
257
+ } finally {
258
+ _iterator.f();
259
+ }
125
260
  }
126
261
 
127
262
  /**
@@ -140,12 +275,12 @@ export function consolidateDiscountFreeProductLines(tempOrder) {
140
275
  // 清除客户/商品券后,四行都恢复为无折扣状态,应在本轮重算中立即回并为「可乐 ×5」。
141
276
  var consolidatedProducts = [];
142
277
  var productIndexByKey = new Map();
143
- var _iterator = _createForOfIteratorHelper(tempOrder.products || []),
144
- _step;
278
+ var _iterator6 = _createForOfIteratorHelper(tempOrder.products || []),
279
+ _step6;
145
280
  try {
146
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
281
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
147
282
  var _product$booking_uid, _product$metadata4, _booking_id, _product$metadata5, _product$order_detail, _holder_id, _product$metadata6, _product$metadata7, _product$metadata8, _product$product_sku2, _product$metadata9, _tempOrder$_extend, _product$selling_pric, _product$original_pri, _custom_price, _product$is_charge_ta, _product$gift_card, _product$bundle_edit, _product$metadata$pri, _product$metadata10, _product$metadata$sou, _product$metadata11, _product$metadata$mai, _product$metadata12, _product$metadata$mai2, _product$metadata13, _product$product_vari;
148
- var product = _step.value;
283
+ var product = _step6.value;
149
284
  var productBundle = Array.isArray(product.product_bundle) ? product.product_bundle : [];
150
285
  var hasDiscount = (product.discount_list || []).length > 0 || productBundle.some(function (bundle) {
151
286
  return ((bundle === null || bundle === void 0 ? void 0 : bundle.discount_list) || []).length > 0;
@@ -161,7 +296,7 @@ export function consolidateDiscountFreeProductLines(tempOrder) {
161
296
  // - 手动改价/备注:用户显式表达了不同价格或不同制作要求;
162
297
  // - 称重商品:每次称重的净重和金额属于独立交易事实;
163
298
  // - 预约/holder/历史订单行:分别关联预约、持有人或后端 order_detail。
164
- var hasMergeBoundary = hasDiscount || Boolean(((_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7._giftInfo) || product._giftInfo) || Boolean((_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8._promotion) || isManualProductDiscountLine(product) || hasProductLineNote(product) || Number(((_product$product_sku2 = product.product_sku) === null || _product$product_sku2 === void 0 ? void 0 : _product$product_sku2.open_sold_weight) || 0) === 1 || ((_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.is_edit_for_runtime) === true || bookingId !== undefined && bookingId !== null && bookingId !== 0 && bookingId !== '0' || bookingUid !== undefined && bookingUid !== null && String(bookingUid) !== '' || holderId !== undefined && holderId !== null && String(holderId) !== '' || orderDetailId !== undefined && orderDetailId !== null && orderDetailId !== '';
299
+ var hasMergeBoundary = hasDiscount || Boolean(((_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7._giftInfo) || product._giftInfo) || Boolean((_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8._promotion) || isManualProductDiscountLine(product) || hasProductLineNote(product) || Number(((_product$product_sku2 = product.product_sku) === null || _product$product_sku2 === void 0 ? void 0 : _product$product_sku2.open_sold_weight) || 0) === 1 || ((_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.is_edit_for_runtime) === true || bookingId !== undefined && bookingId !== null && bookingId !== 0 && bookingId !== '0' || bookingUid !== undefined && bookingUid !== null && String(bookingUid) !== '' || getProductHolderRelations(tempOrder, product).length > 0 || holderId !== undefined && holderId !== null && String(holderId) !== '' || orderDetailId !== undefined && orderDetailId !== null && orderDetailId !== '';
165
300
  if (hasMergeBoundary) {
166
301
  consolidatedProducts.push(product);
167
302
  continue;
@@ -219,9 +354,9 @@ export function consolidateDiscountFreeProductLines(tempOrder) {
219
354
  // 保留历史索引比立即清理更安全;当前购物车身份始终以 tempOrder.products 为准。
220
355
  }
221
356
  } catch (err) {
222
- _iterator.e(err);
357
+ _iterator6.e(err);
223
358
  } finally {
224
- _iterator.f();
359
+ _iterator6.f();
225
360
  }
226
361
  tempOrder.products = consolidatedProducts;
227
362
  }
@@ -367,12 +367,26 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
367
367
  _iterator4.f();
368
368
  }
369
369
  if (remap.scope !== 'linked-owner') {
370
- var _iterator5 = _createForOfIteratorHelper(order.products || []),
370
+ var _iterator5 = _createForOfIteratorHelper(order.holder_relations || []),
371
371
  _step5;
372
372
  try {
373
373
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
374
+ var relation = _step5.value;
375
+ if (relation.relation_model === 'order_detail' && String(relation.relation_uuid) === remap.from) {
376
+ relation.relation_uuid = remap.to;
377
+ }
378
+ }
379
+ } catch (err) {
380
+ _iterator5.e(err);
381
+ } finally {
382
+ _iterator5.f();
383
+ }
384
+ var _iterator6 = _createForOfIteratorHelper(order.products || []),
385
+ _step6;
386
+ try {
387
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
374
388
  var _product$metadata, _product$metadata2;
375
- var product = _step5.value;
389
+ var product = _step6.value;
376
390
  if (String((product === null || product === void 0 || (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.parent_unique_identification_number) || '') === remap.from) {
377
391
  product.metadata = _objectSpread(_objectSpread({}, product.metadata || {}), {}, {
378
392
  parent_unique_identification_number: remap.to
@@ -394,9 +408,9 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
394
408
  }
395
409
  }
396
410
  } catch (err) {
397
- _iterator5.e(err);
411
+ _iterator6.e(err);
398
412
  } finally {
399
- _iterator5.f();
413
+ _iterator6.f();
400
414
  }
401
415
  }
402
416
  var productsByUid = (_order$_extend = order._extend) === null || _order$_extend === void 0 ? void 0 : _order$_extend.productsByUid;
@@ -429,12 +443,12 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
429
443
  }
430
444
  }
431
445
  if (remap.kind === 'booking') {
432
- var _iterator6 = _createForOfIteratorHelper(order.products || []),
433
- _step6;
446
+ var _iterator7 = _createForOfIteratorHelper(order.products || []),
447
+ _step7;
434
448
  try {
435
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
449
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
436
450
  var _product$metadata3;
437
- var _product = _step6.value;
451
+ var _product = _step7.value;
438
452
  if (remap.scope === 'linked-owner' && (linkedOwnerIsAmbiguous || getOrderCollectionUid('product', _product) !== remap.referenceOwnerUid)) {
439
453
  continue;
440
454
  }
@@ -448,9 +462,9 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
448
462
  }
449
463
  }
450
464
  } catch (err) {
451
- _iterator6.e(err);
465
+ _iterator7.e(err);
452
466
  } finally {
453
- _iterator6.f();
467
+ _iterator7.f();
454
468
  }
455
469
  }
456
470
  },
@@ -173,7 +173,7 @@ export declare function resolveManualOverrideLineOriginalPrice(params: {
173
173
  * // => -4
174
174
  */
175
175
  export declare function resolveEffectivePerUnitDiscount(product: Record<string, any>): number;
176
- export declare function createDefaultOrderRulesHooks(getBookings?: () => OrderTempOrder['bookings']): RulesParamsHooks;
176
+ export declare function createDefaultOrderRulesHooks(getBookings?: () => OrderTempOrder['bookings'], getHolderRelations?: () => OrderTempOrder['holder_relations']): RulesParamsHooks;
177
177
  /**
178
178
  * 通过 session 类商品的开始时间结束时间生成商品的时长
179
179
  * @param {CartItem} cartItem
@@ -213,6 +213,7 @@ export declare function normalizeBookingSubType(booking: Record<string, any>): s
213
213
  export declare function normalizeSubmitBooking<T extends {
214
214
  metadata?: Record<string, any>;
215
215
  }>(booking: T): T;
216
+ export declare function resolveTableOccupancyDuration(tempOrder: OrderTempOrder): number;
216
217
  /** 提交用人数:有限且为正则向下取整,否则为 1 */
217
218
  export declare function normalizeSubmitCollectPaxValue(value: unknown): number;
218
219
  /** 从临时订单 metadata 解析合成 booking 的 collect_pax */