@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
@@ -30,11 +30,15 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
30
30
  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; }
31
31
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
32
32
  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); }
33
+ import { loadSalesOrderSnapshot } from "../../shared/sales/loadSalesOrderSnapshot";
34
+ import { PAYMENT_REFRESH_MESSAGE, requiresLocalPaymentRefresh, stripLocalEftposState } from "./localEftposState";
33
35
  import { BaseModule } from "../BaseModule";
34
36
  import { OrderHooks } from "./types";
35
- import { composeLinePrice, generateDuration, getAllDiscountList, mergeRelationForms, ensureCartItemOriginHolder, buildSubmitPayload, createDefaultTempOrder, createDefaultOrderRulesHooks, createEmptySummary, createUuidV4, formatDateTime, isTempOrder, normalizeOrderMetaList, normalizeBookingIsAll, normalizeBookingSubType, mapPaymentItemsToOrderPayments, normalizeOrderProductDiscountList, resolveEffectivePerUnitDiscount, ensureProductSku, getProductSkuOptions, normalizeProductSkuOptions, sumOptionUnitPrice, clearTempOrderHolderAssignments, getOrderProductLineUid, indexOrderProductsByUid, calculateOrderProductsDeposit, collectPointCardSnapshotCodeCandidates, mergePointCardSnapshotCodes as _mergePointCardSnapshotCodes, buildVirtualCurrencySnapshotFromList, mergeOrderProductDisplayFields, resolveIsFormSubject, isMarkdownBundle } from "./utils";
37
+ import { composeLinePrice, generateDuration, getAllDiscountList, mergeRelationForms, ensureCartItemOriginHolder, buildSubmitPayload, createDefaultTempOrder, createDefaultOrderRulesHooks, createEmptySummary, createUuidV4, formatDateTime, isTempOrder, normalizeOrderMetaList, normalizeBookingIsAll, normalizeBookingSubType, mapPaymentItemsToOrderPayments, normalizeOrderProductDiscountList, resolveEffectivePerUnitDiscount, ensureProductSku, getProductSkuOptions, normalizeProductSkuOptions, sumOptionUnitPrice, clearTempOrderHolderAssignments, hasAssignedHolderId, getOrderProductLineUid, indexOrderProductsByUid, calculateOrderProductsDeposit, collectPointCardSnapshotCodeCandidates, mergePointCardSnapshotCodes as _mergePointCardSnapshotCodes, buildVirtualCurrencySnapshotFromList, mergeOrderProductDisplayFields, resolveIsFormSubject, isMarkdownBundle } from "./utils";
36
38
  import { isNormalProduct } from "../Product/utils";
39
+ import { ensureHolderRelationUuids, getProductHolderRelations, hasProductBooking, removeProductHolderRelations, replaceProductHolderRelations, restoreLegacyHolderRelations } from "./holderRelations";
37
40
  import { getWeighedProductPriceFingerprint, resolveWeighedSourcePrice, withOriginalBundleOptionPrices } from "./utils/weighedProduct";
41
+ import { buildPickupTimingBooking, isFulfillmentTimingBooking } from "./pickupTiming";
38
42
  import dayjs from 'dayjs';
39
43
  import { getDiscountLifecycleReason } from "../Discount/availability";
40
44
  import { stripOsPrivatePayloadFields } from "../../utils/os-private-payload";
@@ -53,7 +57,7 @@ import { RulesModule } from "../Rules";
53
57
  import { isEntitlementPass, isFullCoveragePass } from "../Discount/entitlementPass";
54
58
  import { UnavailableReason } from "../Rules/types";
55
59
  import Decimal from 'decimal.js';
56
- import { cloneDeep } from 'lodash-es';
60
+ import { cloneDeep, isEqual } from 'lodash-es';
57
61
  function normalizeDiscountListSignature(discountList) {
58
62
  return (discountList || []).map(function (item) {
59
63
  var _item$type, _item$discount_id, _item$order_discount_;
@@ -520,6 +524,36 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
520
524
  this.otherParams = otherParams;
521
525
  }
522
526
 
527
+ /** Internal intent boundary shared with asynchronous scanner/detail flows. */
528
+ }, {
529
+ key: "createCartIntentCommitGuard",
530
+ value: function createCartIntentCommitGuard(action) {
531
+ var _this$orderHooks,
532
+ _this$orderHooks2,
533
+ _this2 = this;
534
+ var tempOrder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder;
535
+ var hook = (_this$orderHooks = this.orderHooks) === null || _this$orderHooks === void 0 ? void 0 : _this$orderHooks.beforeCartIntentCommit;
536
+ if (!hook) return function () {};
537
+ var getScope = (_this$orderHooks2 = this.orderHooks) === null || _this$orderHooks2 === void 0 ? void 0 : _this$orderHooks2.getCartIntentScope;
538
+ var scope = getScope === null || getScope === void 0 ? void 0 : getScope();
539
+ var otherParams = this.otherParams;
540
+ var committed = false;
541
+ return function () {
542
+ var _this2$orderHooks, _this2$orderHooks2;
543
+ if (_this2.store.tempOrder !== tempOrder || _this2.otherParams !== otherParams || ((_this2$orderHooks = _this2.orderHooks) === null || _this2$orderHooks === void 0 ? void 0 : _this2$orderHooks.beforeCartIntentCommit) !== hook || ((_this2$orderHooks2 = _this2.orderHooks) === null || _this2$orderHooks2 === void 0 ? void 0 : _this2$orderHooks2.getCartIntentScope) !== getScope || (getScope === null || getScope === void 0 ? void 0 : getScope()) !== scope) {
544
+ throw new Error('[Order] Cart intent belongs to a previous order or business');
545
+ }
546
+ // Derived gifts, discounts and persistence belong to the accepted intent,
547
+ // but an asynchronous continuation must never target a different cart.
548
+ if (committed) return;
549
+ hook({
550
+ action: action,
551
+ tempOrder: tempOrder
552
+ });
553
+ committed = true;
554
+ };
555
+ }
556
+
523
557
  /** PC/H5 属于在线店铺;其它或缺失平台统一沿用 POS 行为。 */
524
558
  }, {
525
559
  key: "isOnlineStorePlatform",
@@ -611,10 +645,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
611
645
  }, {
612
646
  key: "createDefaultRulesHooks",
613
647
  value: function createDefaultRulesHooks() {
614
- var _this2 = this;
648
+ var _this3 = this;
615
649
  return createDefaultOrderRulesHooks(function () {
616
- var _this2$store$tempOrde;
617
- return ((_this2$store$tempOrde = _this2.store.tempOrder) === null || _this2$store$tempOrde === void 0 ? void 0 : _this2$store$tempOrde.bookings) || [];
650
+ var _this3$store$tempOrde;
651
+ return ((_this3$store$tempOrde = _this3.store.tempOrder) === null || _this3$store$tempOrde === void 0 ? void 0 : _this3$store$tempOrde.bookings) || [];
652
+ }, function () {
653
+ var _this3$store$tempOrde2;
654
+ return (_this3$store$tempOrde2 = _this3.store.tempOrder) === null || _this3$store$tempOrde2 === void 0 ? void 0 : _this3$store$tempOrde2.holder_relations;
618
655
  });
619
656
  }
620
657
 
@@ -637,7 +674,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
637
674
  var _loadDiscountConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(params) {
638
675
  var _this$store$tempOrder,
639
676
  _this$store$discount,
640
- _this3 = this,
677
+ _this4 = this,
641
678
  _this$store$tempOrder2;
642
679
  var orderId, requestEpoch, requestOrderIdentityKey, prepareConfigResult, isCurrentRequest, discountList, _this$store$discount2, _this$store$discount3, _this$store$discount4, currentDiscountList, currentCommittedDiscounts, currentScanDiscounts, currentScanDiscountById, committedDiscountById, mergedCommittedDiscountIds, refreshedScanDiscountIds, runtimeDiscountIds, runtimeDiscounts, retainedCommittedDiscounts, retainedScanDiscounts, mergedDiscountList;
643
680
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
@@ -665,8 +702,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
665
702
  case 5:
666
703
  prepareConfigResult = _context3.sent;
667
704
  isCurrentRequest = function isCurrentRequest() {
668
- var _this3$store$tempOrde, _this3$store$tempOrde2;
669
- return requestEpoch === _this3.customerWalletPrepareConfigEpoch && _this3.getDiscountConfigOrderIdentityKey(_this3.store.tempOrder) === requestOrderIdentityKey && String((_this3$store$tempOrde = (_this3$store$tempOrde2 = _this3.store.tempOrder) === null || _this3$store$tempOrde2 === void 0 ? void 0 : _this3$store$tempOrde2.customer_id) !== null && _this3$store$tempOrde !== void 0 ? _this3$store$tempOrde : '') === String(params.customerId);
705
+ var _this4$store$tempOrde, _this4$store$tempOrde2;
706
+ return requestEpoch === _this4.customerWalletPrepareConfigEpoch && _this4.getDiscountConfigOrderIdentityKey(_this4.store.tempOrder) === requestOrderIdentityKey && String((_this4$store$tempOrde = (_this4$store$tempOrde2 = _this4.store.tempOrder) === null || _this4$store$tempOrde2 === void 0 ? void 0 : _this4$store$tempOrde2.customer_id) !== null && _this4$store$tempOrde !== void 0 ? _this4$store$tempOrde : '') === String(params.customerId);
670
707
  };
671
708
  if (isCurrentRequest()) {
672
709
  _context3.next = 9;
@@ -898,12 +935,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
898
935
  value: function () {
899
936
  var _scanCode = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(code, customerId) {
900
937
  var _this$store$discount11, _tempOrder$holder, _this$store$summary;
901
- var resultDiscountWithReason, resultDiscountList, unavailableReasonKey, rulesModule, withScanList, currentSelected, tempOrder, holders, _ref16, isAvailable, newDiscountList, evaluatedDiscountList, unavailableReason, scannedIds, evaluatedScannedDiscounts, shouldRetainForLater, normalizedNewDiscountList, resolvedDiscountList, _this$store$discount12, _this$store$discount13, retainedDiscounts;
938
+ var beforeCommit, resultDiscountWithReason, resultDiscountList, unavailableReasonKey, rulesModule, withScanList, currentSelected, tempOrder, holders, _ref16, isAvailable, newDiscountList, evaluatedDiscountList, unavailableReason, scannedIds, evaluatedScannedDiscounts, shouldRetainForLater, normalizedNewDiscountList, resolvedDiscountList, _this$store$discount12, _this$store$discount13, retainedDiscounts;
902
939
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
903
940
  while (1) switch (_context6.prev = _context6.next) {
904
941
  case 0:
942
+ beforeCommit = this.createCartIntentCommitGuard('scan_promotion');
905
943
  if (!this.isActiveVirtualSettlementOrder(this.store.tempOrder)) {
906
- _context6.next = 2;
944
+ _context6.next = 3;
907
945
  break;
908
946
  }
909
947
  return _context6.abrupt("return", {
@@ -914,27 +952,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
914
952
  scannedDiscountList: [],
915
953
  unavailableReason: UnavailableReason.ProductNotApplicable
916
954
  });
917
- case 2:
918
- _context6.next = 4;
955
+ case 3:
956
+ _context6.next = 5;
919
957
  return (_this$store$discount11 = this.store.discount) === null || _this$store$discount11 === void 0 ? void 0 : _this$store$discount11.batchSearch(code, {
920
958
  customerId: customerId
921
959
  });
922
- case 4:
960
+ case 5:
923
961
  _context6.t0 = _context6.sent;
924
962
  if (_context6.t0) {
925
- _context6.next = 7;
963
+ _context6.next = 8;
926
964
  break;
927
965
  }
928
966
  _context6.t0 = {
929
967
  discountList: [],
930
968
  unavailableReasonKey: null
931
969
  };
932
- case 7:
970
+ case 8:
933
971
  resultDiscountWithReason = _context6.t0;
934
972
  resultDiscountList = resultDiscountWithReason.discountList, unavailableReasonKey = resultDiscountWithReason.unavailableReasonKey;
935
973
  rulesModule = this.store.rules;
936
974
  if (rulesModule) {
937
- _context6.next = 12;
975
+ _context6.next = 13;
938
976
  break;
939
977
  }
940
978
  return _context6.abrupt("return", {
@@ -945,9 +983,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
945
983
  scannedDiscountList: resultDiscountList,
946
984
  unavailableReason: UnavailableReason.Unknown
947
985
  });
948
- case 12:
986
+ case 13:
949
987
  if (resultDiscountList.length) {
950
- _context6.next = 14;
988
+ _context6.next = 15;
951
989
  break;
952
990
  }
953
991
  return _context6.abrupt("return", {
@@ -958,7 +996,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
958
996
  scannedDiscountList: resultDiscountList,
959
997
  unavailableReasonKey: unavailableReasonKey
960
998
  });
961
- case 14:
999
+ case 15:
962
1000
  withScanList = resultDiscountList.map(function (item) {
963
1001
  return _objectSpread(_objectSpread({}, item), {}, {
964
1002
  isScan: true
@@ -972,12 +1010,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
972
1010
  return m.id === n.id;
973
1011
  });
974
1012
  }))) {
975
- _context6.next = 20;
1013
+ _context6.next = 22;
976
1014
  break;
977
1015
  }
978
- _context6.next = 19;
1016
+ beforeCommit();
1017
+ _context6.next = 21;
979
1018
  return this.syncScannedDiscountsToOriginalDiscountList(this.getDiscountList());
980
- case 19:
1019
+ case 21:
981
1020
  return _context6.abrupt("return", {
982
1021
  type: 'clientCalc',
983
1022
  isAvailable: true,
@@ -985,7 +1024,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
985
1024
  discountList: this.getDiscountList(),
986
1025
  scannedDiscountList: resultDiscountList
987
1026
  });
988
- case 20:
1027
+ case 22:
989
1028
  tempOrder = this.store.tempOrder;
990
1029
  holders = (tempOrder === null || tempOrder === void 0 || (_tempOrder$holder = tempOrder.holder) === null || _tempOrder$holder === void 0 ? void 0 : _tempOrder$holder.form_record) || [];
991
1030
  _ref16 = rulesModule.isDiscountListAvailable({
@@ -1011,12 +1050,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1011
1050
  normalizedNewDiscountList = newDiscountList ? markScannedDiscounts(newDiscountList, withScanList) : undefined;
1012
1051
  resolvedDiscountList = normalizedNewDiscountList || this.getDiscountList();
1013
1052
  if (!(isAvailable && normalizedNewDiscountList)) {
1014
- _context6.next = 37;
1053
+ _context6.next = 40;
1015
1054
  break;
1016
1055
  }
1017
- _context6.next = 31;
1056
+ beforeCommit();
1057
+ _context6.next = 34;
1018
1058
  return (_this$store$discount12 = this.store.discount) === null || _this$store$discount12 === void 0 ? void 0 : _this$store$discount12.setDiscountList(normalizedNewDiscountList);
1019
- case 31:
1059
+ case 34:
1020
1060
  // 实际写回商品时沿用扫码试算的优先级,避免旧商品行的选卡覆盖本次扫码。
1021
1061
  this.applyDiscount({
1022
1062
  preferredEntitlementPassIds: withScanList.filter(function (discount) {
@@ -1025,17 +1065,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1025
1065
  return discount.id;
1026
1066
  })
1027
1067
  });
1028
- _context6.next = 34;
1068
+ _context6.next = 37;
1029
1069
  return this.syncScannedDiscountsToOriginalDiscountList(this.getDiscountList());
1030
- case 34:
1070
+ case 37:
1031
1071
  resolvedDiscountList = this.getDiscountList();
1032
- _context6.next = 45;
1072
+ _context6.next = 49;
1033
1073
  break;
1034
- case 37:
1074
+ case 40:
1035
1075
  if (!shouldRetainForLater) {
1036
- _context6.next = 45;
1076
+ _context6.next = 49;
1037
1077
  break;
1038
1078
  }
1079
+ beforeCommit();
1039
1080
  // 只合并本次识别的卡券;不把试算产生的其他选券状态写回订单。
1040
1081
  retainedDiscounts = new Map(this.getDiscountList().map(function (discount) {
1041
1082
  return [String(discount.id), discount];
@@ -1050,14 +1091,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1050
1091
  savedAmount: 0
1051
1092
  }));
1052
1093
  });
1053
- _context6.next = 42;
1094
+ _context6.next = 46;
1054
1095
  return (_this$store$discount13 = this.store.discount) === null || _this$store$discount13 === void 0 ? void 0 : _this$store$discount13.setDiscountList(_toConsumableArray(retainedDiscounts.values()));
1055
- case 42:
1056
- _context6.next = 44;
1096
+ case 46:
1097
+ _context6.next = 48;
1057
1098
  return this.syncScannedDiscountsToOriginalDiscountList(this.getDiscountList());
1058
- case 44:
1099
+ case 48:
1059
1100
  resolvedDiscountList = this.getDiscountList();
1060
- case 45:
1101
+ case 49:
1061
1102
  return _context6.abrupt("return", {
1062
1103
  type: 'clientCalc',
1063
1104
  isAvailable: isAvailable || false,
@@ -1066,7 +1107,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1066
1107
  scannedDiscountList: evaluatedScannedDiscounts,
1067
1108
  unavailableReason: unavailableReason
1068
1109
  });
1069
- case 46:
1110
+ case 50:
1070
1111
  case "end":
1071
1112
  return _context6.stop();
1072
1113
  }
@@ -1082,7 +1123,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1082
1123
  value: function applyDiscount(options) {
1083
1124
  var _this$store$discount16,
1084
1125
  _this$store$summary2,
1085
- _this4 = this;
1126
+ _this5 = this;
1086
1127
  var tempOrder = this.store.tempOrder;
1087
1128
  // 任意 products CRUD 后都应当重算 discount 状态;即使 products 为空,
1088
1129
  // 也需要让 Rules.calcDiscount 把 DiscountModule 的 isSelected / isAvailable /
@@ -1131,7 +1172,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1131
1172
  discount_list: normalizeOrderProductDiscountList(syncManualProductDiscountProductNum(mergedProduct.discount_list, mergedProduct.num))
1132
1173
  });
1133
1174
  }));
1134
- ensureUniqueProductLineUids(tempOrder);
1175
+ ensureUniqueProductLineUids(tempOrder, discountList);
1135
1176
  consolidateDiscountFreeProductLines(tempOrder);
1136
1177
  }
1137
1178
  if (result !== null && result !== void 0 && result.discountList) {
@@ -1140,7 +1181,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1140
1181
  (_this$store$discount17 = this.store.discount) === null || _this$store$discount17 === void 0 || _this$store$discount17.setDiscountList(result.discountList);
1141
1182
  }
1142
1183
  this.hasActiveCustomerBoundDiscount = (tempOrder.products || []).some(function (product) {
1143
- return _this4.productHasCustomerBoundDiscount(product);
1184
+ return _this5.productHasCustomerBoundDiscount(product);
1144
1185
  });
1145
1186
  }
1146
1187
 
@@ -1200,49 +1241,55 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1200
1241
  }, {
1201
1242
  key: "evaluatePromotion",
1202
1243
  value: (function () {
1203
- var _evaluatePromotion = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
1244
+ var _evaluatePromotion = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(options) {
1204
1245
  var _this$promotionEvalua,
1205
1246
  _this$promotionEvalua2,
1206
- _this5 = this;
1207
- var tempOrder, strategyConfigs, result, removeSet, _iterator3, _step3, reduce, _iterator6, _step6, _loop2, _iterator4, _step4, _loop, payload;
1247
+ _this6 = this;
1248
+ var tempOrder, strategyConfigs, result, removeSet, _iterator3, _step3, reduce, _iterator6, _step6, _loop2, _iterator4, _step4, _loop, _ret, payload;
1208
1249
  return _regeneratorRuntime().wrap(function _callee7$(_context9) {
1209
1250
  while (1) switch (_context9.prev = _context9.next) {
1210
1251
  case 0:
1211
- if (!(this.isApplyingPromotion || this.isEmittingPromotionApplied)) {
1252
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !options.isCurrentOrder())) {
1212
1253
  _context9.next = 2;
1213
1254
  break;
1214
1255
  }
1215
1256
  return _context9.abrupt("return", null);
1216
1257
  case 2:
1217
- if (this.promotionEvaluator) {
1258
+ if (!(this.isApplyingPromotion || this.isEmittingPromotionApplied)) {
1218
1259
  _context9.next = 4;
1219
1260
  break;
1220
1261
  }
1221
1262
  return _context9.abrupt("return", null);
1222
1263
  case 4:
1264
+ if (this.promotionEvaluator) {
1265
+ _context9.next = 6;
1266
+ break;
1267
+ }
1268
+ return _context9.abrupt("return", null);
1269
+ case 6:
1223
1270
  tempOrder = this.store.tempOrder;
1224
1271
  if (tempOrder) {
1225
- _context9.next = 7;
1272
+ _context9.next = 9;
1226
1273
  break;
1227
1274
  }
1228
1275
  return _context9.abrupt("return", null);
1229
- case 7:
1276
+ case 9:
1230
1277
  if (!this.isActiveVirtualSettlementOrder(tempOrder)) {
1231
- _context9.next = 10;
1278
+ _context9.next = 12;
1232
1279
  break;
1233
1280
  }
1234
1281
  tempOrder.products = normalizeVirtualSettlementProducts(tempOrder.products);
1235
1282
  return _context9.abrupt("return", null);
1236
- case 10:
1283
+ case 12:
1237
1284
  strategyConfigs = (_this$promotionEvalua = (_this$promotionEvalua2 = this.promotionEvaluator).getStrategyConfigs) === null || _this$promotionEvalua === void 0 ? void 0 : _this$promotionEvalua.call(_this$promotionEvalua2);
1238
1285
  if (!(Array.isArray(strategyConfigs) && strategyConfigs.length === 0)) {
1239
- _context9.next = 13;
1286
+ _context9.next = 15;
1240
1287
  break;
1241
1288
  }
1242
1289
  return _context9.abrupt("return", null);
1243
- case 13:
1290
+ case 15:
1244
1291
  this.isApplyingPromotion = true;
1245
- _context9.prev = 14;
1292
+ _context9.prev = 16;
1246
1293
  result = processCartPromotion(tempOrder.products, this.promotionEvaluator); // step 1: toRemove —— 直接过滤
1247
1294
  if (result.giftActions.toRemove.length > 0) {
1248
1295
  removeSet = new Set(result.giftActions.toRemove.map(String));
@@ -1254,16 +1301,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1254
1301
 
1255
1302
  // step 2: toReduce —— 调整数量
1256
1303
  _iterator3 = _createForOfIteratorHelper(result.giftActions.toReduce);
1257
- _context9.prev = 18;
1304
+ _context9.prev = 20;
1258
1305
  _iterator3.s();
1259
- case 20:
1306
+ case 22:
1260
1307
  if ((_step3 = _iterator3.n()).done) {
1261
- _context9.next = 40;
1308
+ _context9.next = 42;
1262
1309
  break;
1263
1310
  }
1264
1311
  reduce = _step3.value;
1265
1312
  _iterator6 = _createForOfIteratorHelper(reduce.items);
1266
- _context9.prev = 23;
1313
+ _context9.prev = 25;
1267
1314
  _loop2 = /*#__PURE__*/_regeneratorRuntime().mark(function _loop2() {
1268
1315
  var item, product;
1269
1316
  return _regeneratorRuntime().wrap(function _loop2$(_context8) {
@@ -1283,47 +1330,47 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1283
1330
  }, _loop2);
1284
1331
  });
1285
1332
  _iterator6.s();
1286
- case 26:
1333
+ case 28:
1287
1334
  if ((_step6 = _iterator6.n()).done) {
1288
- _context9.next = 30;
1335
+ _context9.next = 32;
1289
1336
  break;
1290
1337
  }
1291
- return _context9.delegateYield(_loop2(), "t0", 28);
1292
- case 28:
1293
- _context9.next = 26;
1294
- break;
1338
+ return _context9.delegateYield(_loop2(), "t0", 30);
1295
1339
  case 30:
1296
- _context9.next = 35;
1340
+ _context9.next = 28;
1297
1341
  break;
1298
1342
  case 32:
1299
- _context9.prev = 32;
1300
- _context9.t1 = _context9["catch"](23);
1343
+ _context9.next = 37;
1344
+ break;
1345
+ case 34:
1346
+ _context9.prev = 34;
1347
+ _context9.t1 = _context9["catch"](25);
1301
1348
  _iterator6.e(_context9.t1);
1302
- case 35:
1303
- _context9.prev = 35;
1349
+ case 37:
1350
+ _context9.prev = 37;
1304
1351
  _iterator6.f();
1305
- return _context9.finish(35);
1306
- case 38:
1307
- _context9.next = 20;
1308
- break;
1352
+ return _context9.finish(37);
1309
1353
  case 40:
1310
- _context9.next = 45;
1354
+ _context9.next = 22;
1311
1355
  break;
1312
1356
  case 42:
1313
- _context9.prev = 42;
1314
- _context9.t2 = _context9["catch"](18);
1357
+ _context9.next = 47;
1358
+ break;
1359
+ case 44:
1360
+ _context9.prev = 44;
1361
+ _context9.t2 = _context9["catch"](20);
1315
1362
  _iterator3.e(_context9.t2);
1316
- case 45:
1317
- _context9.prev = 45;
1363
+ case 47:
1364
+ _context9.prev = 47;
1318
1365
  _iterator3.f();
1319
- return _context9.finish(45);
1320
- case 48:
1366
+ return _context9.finish(47);
1367
+ case 50:
1321
1368
  if (!(result.giftActions.toAdd.length > 0)) {
1322
- _context9.next = 71;
1369
+ _context9.next = 76;
1323
1370
  break;
1324
1371
  }
1325
1372
  if (this.giftSelectResolver) {
1326
- _context9.next = 53;
1373
+ _context9.next = 55;
1327
1374
  break;
1328
1375
  }
1329
1376
  if (result.giftActions.toAdd.some(function (g) {
@@ -1334,13 +1381,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1334
1381
  } else {
1335
1382
  console.warn('[OrderModule] giftSelectResolver not set, skip applying single-option gifts', result.giftActions.toAdd);
1336
1383
  }
1337
- _context9.next = 71;
1384
+ _context9.next = 76;
1338
1385
  break;
1339
- case 53:
1386
+ case 55:
1340
1387
  _iterator4 = _createForOfIteratorHelper(result.giftActions.toAdd);
1341
- _context9.prev = 54;
1388
+ _context9.prev = 56;
1342
1389
  _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
1343
- var addAction, _sameStrategy$metadat, sameStrategy, giftResult, giftProducts, giftBookings, _iterator5, _step5, _step5$value, index, gp, booking, linked;
1390
+ var addAction, _sameStrategy$metadat, sameStrategy, giftMutationBaseline, giftResult, giftProducts, giftBookings, _iterator5, _step5, _step5$value, index, gp, booking, linked;
1344
1391
  return _regeneratorRuntime().wrap(function _loop$(_context7) {
1345
1392
  while (1) switch (_context7.prev = _context7.next) {
1346
1393
  case 0:
@@ -1358,111 +1405,166 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1358
1405
  break;
1359
1406
  }
1360
1407
  sameStrategy.num = (Number(sameStrategy.num) || 0) + (addAction.giftCount || 1);
1361
- return _context7.abrupt("return", 1);
1408
+ return _context7.abrupt("return", 0);
1362
1409
  case 6:
1363
- _context7.prev = 6;
1364
- _context7.next = 9;
1365
- return _this5.giftSelectResolver({
1410
+ giftMutationBaseline = options !== null && options !== void 0 && options.isCurrentOrder ? cloneDeep({
1411
+ products: tempOrder.products,
1412
+ bookings: tempOrder.bookings
1413
+ }) : null;
1414
+ _context7.prev = 7;
1415
+ _context7.next = 10;
1416
+ return _this6.giftSelectResolver({
1366
1417
  strategyId: addAction.strategyId,
1367
1418
  strategyName: addAction.strategyName,
1368
1419
  giftCount: addAction.giftCount,
1369
1420
  giftOptions: addAction.giftOptions,
1370
1421
  sourceProductIds: addAction.sourceProductIds
1371
1422
  });
1372
- case 9:
1423
+ case 10:
1373
1424
  giftResult = _context7.sent;
1425
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !options.isCurrentOrder())) {
1426
+ _context7.next = 13;
1427
+ break;
1428
+ }
1429
+ return _context7.abrupt("return", {
1430
+ v: null
1431
+ });
1432
+ case 13:
1433
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !isEqual({
1434
+ products: tempOrder.products,
1435
+ bookings: tempOrder.bookings
1436
+ }, giftMutationBaseline))) {
1437
+ _context7.next = 15;
1438
+ break;
1439
+ }
1440
+ return _context7.abrupt("return", {
1441
+ v: null
1442
+ });
1443
+ case 15:
1374
1444
  giftProducts = Array.isArray(giftResult) ? giftResult : giftResult === null || giftResult === void 0 ? void 0 : giftResult.products;
1375
1445
  giftBookings = Array.isArray(giftResult) ? [] : (giftResult === null || giftResult === void 0 ? void 0 : giftResult.bookings) || [];
1376
1446
  if (!(Array.isArray(giftProducts) && giftProducts.length > 0)) {
1377
- _context7.next = 37;
1447
+ _context7.next = 42;
1378
1448
  break;
1379
1449
  }
1380
1450
  _iterator5 = _createForOfIteratorHelper(giftProducts.entries());
1381
- _context7.prev = 14;
1451
+ _context7.prev = 19;
1382
1452
  _iterator5.s();
1383
- case 16:
1453
+ case 21:
1384
1454
  if ((_step5 = _iterator5.n()).done) {
1385
- _context7.next = 29;
1455
+ _context7.next = 34;
1386
1456
  break;
1387
1457
  }
1388
1458
  _step5$value = _slicedToArray(_step5.value, 2), index = _step5$value[0], gp = _step5$value[1];
1389
1459
  if (gp) {
1390
- _context7.next = 20;
1460
+ _context7.next = 25;
1391
1461
  break;
1392
1462
  }
1393
- return _context7.abrupt("continue", 27);
1394
- case 20:
1463
+ return _context7.abrupt("continue", 32);
1464
+ case 25:
1395
1465
  booking = giftBookings[index];
1396
1466
  if (!booking) {
1397
- _context7.next = 26;
1467
+ _context7.next = 31;
1398
1468
  break;
1399
1469
  }
1400
- linked = _this5.createLinkedProductAndBooking({
1470
+ linked = _this6.createLinkedProductAndBooking({
1401
1471
  product: gp,
1402
1472
  booking: booking
1403
1473
  });
1404
1474
  result.products.push(linked.product);
1405
1475
  tempOrder.bookings = [].concat(_toConsumableArray(tempOrder.bookings || []), [linked.booking]);
1406
- return _context7.abrupt("continue", 27);
1407
- case 26:
1476
+ return _context7.abrupt("continue", 32);
1477
+ case 31:
1408
1478
  // normalize 略过:调用方应保证返回完整 OrderProduct。
1409
1479
  result.products.push(gp);
1410
- case 27:
1411
- _context7.next = 16;
1412
- break;
1413
- case 29:
1414
- _context7.next = 34;
1480
+ case 32:
1481
+ _context7.next = 21;
1415
1482
  break;
1416
- case 31:
1417
- _context7.prev = 31;
1418
- _context7.t0 = _context7["catch"](14);
1419
- _iterator5.e(_context7.t0);
1420
1483
  case 34:
1421
- _context7.prev = 34;
1422
- _iterator5.f();
1423
- return _context7.finish(34);
1424
- case 37:
1425
- _context7.next = 42;
1484
+ _context7.next = 39;
1426
1485
  break;
1486
+ case 36:
1487
+ _context7.prev = 36;
1488
+ _context7.t0 = _context7["catch"](19);
1489
+ _iterator5.e(_context7.t0);
1427
1490
  case 39:
1428
1491
  _context7.prev = 39;
1429
- _context7.t1 = _context7["catch"](6);
1492
+ _iterator5.f();
1493
+ return _context7.finish(39);
1494
+ case 42:
1495
+ _context7.next = 51;
1496
+ break;
1497
+ case 44:
1498
+ _context7.prev = 44;
1499
+ _context7.t1 = _context7["catch"](7);
1500
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !options.isCurrentOrder())) {
1501
+ _context7.next = 48;
1502
+ break;
1503
+ }
1504
+ return _context7.abrupt("return", {
1505
+ v: null
1506
+ });
1507
+ case 48:
1508
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !isEqual({
1509
+ products: tempOrder.products,
1510
+ bookings: tempOrder.bookings
1511
+ }, giftMutationBaseline))) {
1512
+ _context7.next = 50;
1513
+ break;
1514
+ }
1515
+ return _context7.abrupt("return", {
1516
+ v: null
1517
+ });
1518
+ case 50:
1430
1519
  // 用户取消 / 选择失败 → 视为放弃本次新增
1431
1520
  console.warn('[OrderModule] giftSelectResolver rejected, skip add gift', addAction.strategyId, _context7.t1);
1432
- case 42:
1521
+ case 51:
1433
1522
  case "end":
1434
1523
  return _context7.stop();
1435
1524
  }
1436
- }, _loop, null, [[6, 39], [14, 31, 34, 37]]);
1525
+ }, _loop, null, [[7, 44], [19, 36, 39, 42]]);
1437
1526
  });
1438
1527
  _iterator4.s();
1439
- case 57:
1528
+ case 59:
1440
1529
  if ((_step4 = _iterator4.n()).done) {
1441
- _context9.next = 63;
1530
+ _context9.next = 68;
1442
1531
  break;
1443
1532
  }
1444
- return _context9.delegateYield(_loop(), "t3", 59);
1445
- case 59:
1446
- if (!_context9.t3) {
1447
- _context9.next = 61;
1533
+ return _context9.delegateYield(_loop(), "t3", 61);
1534
+ case 61:
1535
+ _ret = _context9.t3;
1536
+ if (!(_ret === 0)) {
1537
+ _context9.next = 64;
1448
1538
  break;
1449
1539
  }
1450
- return _context9.abrupt("continue", 61);
1451
- case 61:
1452
- _context9.next = 57;
1540
+ return _context9.abrupt("continue", 66);
1541
+ case 64:
1542
+ if (!_ret) {
1543
+ _context9.next = 66;
1544
+ break;
1545
+ }
1546
+ return _context9.abrupt("return", _ret.v);
1547
+ case 66:
1548
+ _context9.next = 59;
1453
1549
  break;
1454
- case 63:
1455
- _context9.next = 68;
1550
+ case 68:
1551
+ _context9.next = 73;
1456
1552
  break;
1457
- case 65:
1458
- _context9.prev = 65;
1459
- _context9.t4 = _context9["catch"](54);
1553
+ case 70:
1554
+ _context9.prev = 70;
1555
+ _context9.t4 = _context9["catch"](56);
1460
1556
  _iterator4.e(_context9.t4);
1461
- case 68:
1462
- _context9.prev = 68;
1557
+ case 73:
1558
+ _context9.prev = 73;
1463
1559
  _iterator4.f();
1464
- return _context9.finish(68);
1465
- case 71:
1560
+ return _context9.finish(73);
1561
+ case 76:
1562
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !options.isCurrentOrder())) {
1563
+ _context9.next = 78;
1564
+ break;
1565
+ }
1566
+ return _context9.abrupt("return", null);
1567
+ case 78:
1466
1568
  tempOrder.products = result.products;
1467
1569
  this.lastUnfulfilledPromotions = result.unfulfilledPromotions;
1468
1570
  this.lastGiftActions = result.giftActions;
@@ -1480,22 +1582,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1480
1582
  products: tempOrder.products
1481
1583
  };
1482
1584
  return _context9.abrupt("return", payload);
1483
- case 78:
1484
- _context9.prev = 78;
1485
- _context9.t5 = _context9["catch"](14);
1585
+ case 85:
1586
+ _context9.prev = 85;
1587
+ _context9.t5 = _context9["catch"](16);
1486
1588
  console.error('[OrderModule] applyPromotion failed', _context9.t5);
1487
1589
  return _context9.abrupt("return", null);
1488
- case 82:
1489
- _context9.prev = 82;
1590
+ case 89:
1591
+ _context9.prev = 89;
1490
1592
  this.isApplyingPromotion = false;
1491
- return _context9.finish(82);
1492
- case 85:
1593
+ return _context9.finish(89);
1594
+ case 92:
1493
1595
  case "end":
1494
1596
  return _context9.stop();
1495
1597
  }
1496
- }, _callee7, this, [[14, 78, 82, 85], [18, 42, 45, 48], [23, 32, 35, 38], [54, 65, 68, 71]]);
1598
+ }, _callee7, this, [[16, 85, 89, 92], [20, 44, 47, 50], [25, 34, 37, 40], [56, 70, 73, 76]]);
1497
1599
  }));
1498
- function evaluatePromotion() {
1600
+ function evaluatePromotion(_x8) {
1499
1601
  return _evaluatePromotion.apply(this, arguments);
1500
1602
  }
1501
1603
  return evaluatePromotion;
@@ -1612,7 +1714,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1612
1714
  }, {
1613
1715
  key: "persistTempOrder",
1614
1716
  value: function persistTempOrder() {
1615
- if (!this.sessionStoragePersistEnabled || !this.store.tempOrder) return;
1717
+ if (!this.store.tempOrder) return;
1718
+ ensureHolderRelationUuids(this.store.tempOrder);
1719
+ if (!this.sessionStoragePersistEnabled) return;
1616
1720
  this.checkSaveCache({
1617
1721
  cacheId: this.cacheId,
1618
1722
  fatherModule: this.fatherModule,
@@ -1727,12 +1831,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1727
1831
  }, {
1728
1832
  key: "rememberPointCardSnapshotCodeCandidates",
1729
1833
  value: function rememberPointCardSnapshotCodeCandidates(value) {
1730
- var _this6 = this;
1834
+ var _this7 = this;
1731
1835
  collectPointCardSnapshotCodeCandidates(value).forEach(function (_ref18) {
1732
1836
  var id = _ref18.id,
1733
1837
  code = _ref18.code;
1734
- if (!_this6.pointCardSnapshotCodeCandidates.has(id)) {
1735
- _this6.pointCardSnapshotCodeCandidates.set(id, code);
1838
+ if (!_this7.pointCardSnapshotCodeCandidates.has(id)) {
1839
+ _this7.pointCardSnapshotCodeCandidates.set(id, code);
1736
1840
  }
1737
1841
  });
1738
1842
  }
@@ -1913,7 +2017,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1913
2017
  }
1914
2018
  }, _callee10, this);
1915
2019
  }));
1916
- function hydrateTempOrderFromLocalRecord(_x8) {
2020
+ function hydrateTempOrderFromLocalRecord(_x9) {
1917
2021
  return _hydrateTempOrderFromLocalRecord.apply(this, arguments);
1918
2022
  }
1919
2023
  return hydrateTempOrderFromLocalRecord;
@@ -1939,23 +2043,23 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1939
2043
  }, {
1940
2044
  key: "calculatePaymentTotal",
1941
2045
  value: function calculatePaymentTotal(payments) {
1942
- var _this7 = this;
2046
+ var _this8 = this;
1943
2047
  return mapPaymentItemsToOrderPayments(payments, {
1944
2048
  includeVoided: false
1945
2049
  }).reduce(function (sum, payment) {
1946
2050
  if (!isPaidPaymentRecord(payment)) return sum;
1947
- return sum.plus(_this7.calculatePaymentEffectiveAmount(payment));
2051
+ return sum.plus(_this8.calculatePaymentEffectiveAmount(payment));
1948
2052
  }, new Decimal(0));
1949
2053
  }
1950
2054
  }, {
1951
2055
  key: "calculateOrderPaidPaymentTotal",
1952
2056
  value: function calculateOrderPaidPaymentTotal(payments) {
1953
- var _this8 = this;
2057
+ var _this9 = this;
1954
2058
  return mapPaymentItemsToOrderPayments(payments, {
1955
2059
  includeVoided: false
1956
2060
  }).reduce(function (sum, payment) {
1957
2061
  if (!isPaidPaymentRecord(payment)) return sum;
1958
- return sum.plus(_this8.calculatePaymentGapAmount(payment));
2062
+ return sum.plus(_this9.calculatePaymentGapAmount(payment));
1959
2063
  }, new Decimal(0));
1960
2064
  }
1961
2065
  }, {
@@ -2091,13 +2195,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2091
2195
  }, {
2092
2196
  key: "calculateDepositPaidAmount",
2093
2197
  value: function calculateDepositPaidAmount(payments) {
2094
- var _this9 = this;
2198
+ var _this10 = this;
2095
2199
  return (payments || []).reduce(function (sum, payment) {
2096
2200
  var paymentRecord = payment;
2097
2201
  if (!isPaidPaymentRecord(paymentRecord)) return sum;
2098
2202
  var isDepositPayment = paymentRecord.type === 'deposit' || paymentRecord.order_payment_type === 'deposit';
2099
2203
  if (!isDepositPayment) return sum;
2100
- return sum.plus(_this9.calculatePaymentGapAmount(paymentRecord));
2204
+ return sum.plus(_this10.calculatePaymentGapAmount(paymentRecord));
2101
2205
  }, new Decimal(0));
2102
2206
  }
2103
2207
  }, {
@@ -2134,17 +2238,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2134
2238
  }, {
2135
2239
  key: "getPaymentNumberDevicePrefixSync",
2136
2240
  value: function getPaymentNumberDevicePrefixSync() {
2137
- var _this10 = this;
2241
+ var _this11 = this;
2138
2242
  return resolvePaymentNumberDevicePrefixFromDeviceId(function (key) {
2139
- return _this10.getPaymentNumberAppData(key);
2243
+ return _this11.getPaymentNumberAppData(key);
2140
2244
  });
2141
2245
  }
2142
2246
  }, {
2143
2247
  key: "getPaymentNumberDevicePrefixAsync",
2144
2248
  value: function getPaymentNumberDevicePrefixAsync() {
2145
- var _this11 = this;
2249
+ var _this12 = this;
2146
2250
  return resolvePaymentNumberDevicePrefix(function (key) {
2147
- return _this11.getPaymentNumberAppData(key);
2251
+ return _this12.getPaymentNumberAppData(key);
2148
2252
  });
2149
2253
  }
2150
2254
  }, {
@@ -2274,16 +2378,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2274
2378
  }, {
2275
2379
  key: "calculatePaidPaymentSummary",
2276
2380
  value: function calculatePaidPaymentSummary(payments) {
2277
- var _this12 = this;
2381
+ var _this13 = this;
2278
2382
  return (payments || []).reduce(function (summary, payment) {
2279
2383
  var paymentRecord = payment;
2280
2384
  if (!isPaidPaymentRecord(paymentRecord)) return summary;
2281
2385
  return {
2282
2386
  customerPaidAmount: summary.customerPaidAmount.plus(paymentRecord.amount || 0),
2283
- orderPaidAmount: summary.orderPaidAmount.plus(_this12.calculatePaymentOrderAmount(paymentRecord)),
2284
- gapPaidAmount: summary.gapPaidAmount.plus(_this12.calculatePaymentGapAmount(paymentRecord)),
2285
- payServiceChargeAmount: summary.payServiceChargeAmount.plus(_this12.calculatePaymentServiceFee(paymentRecord)),
2286
- roundingAmount: summary.roundingAmount.plus(_this12.calculatePaymentRoundingAmount(paymentRecord))
2387
+ orderPaidAmount: summary.orderPaidAmount.plus(_this13.calculatePaymentOrderAmount(paymentRecord)),
2388
+ gapPaidAmount: summary.gapPaidAmount.plus(_this13.calculatePaymentGapAmount(paymentRecord)),
2389
+ payServiceChargeAmount: summary.payServiceChargeAmount.plus(_this13.calculatePaymentServiceFee(paymentRecord)),
2390
+ roundingAmount: summary.roundingAmount.plus(_this13.calculatePaymentRoundingAmount(paymentRecord))
2287
2391
  };
2288
2392
  }, {
2289
2393
  customerPaidAmount: new Decimal(0),
@@ -2490,15 +2594,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2490
2594
  }, {
2491
2595
  key: "normalizeFingerprintValue",
2492
2596
  value: function normalizeFingerprintValue(value) {
2493
- var _this13 = this;
2597
+ var _this14 = this;
2494
2598
  if (Array.isArray(value)) {
2495
2599
  return value.map(function (item) {
2496
- return _this13.normalizeFingerprintValue(item);
2600
+ return _this14.normalizeFingerprintValue(item);
2497
2601
  });
2498
2602
  }
2499
2603
  if (!value || _typeof(value) !== 'object') return value !== null && value !== void 0 ? value : '';
2500
2604
  return Object.keys(value).sort().reduce(function (result, key) {
2501
- result[key] = _this13.normalizeFingerprintValue(value[key]);
2605
+ result[key] = _this14.normalizeFingerprintValue(value[key]);
2502
2606
  return result;
2503
2607
  }, {});
2504
2608
  }
@@ -2513,7 +2617,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2513
2617
  _sku$barcode,
2514
2618
  _ref26,
2515
2619
  _sku$variant_id,
2516
- _this14 = this;
2620
+ _this15 = this;
2517
2621
  var sku = (product === null || product === void 0 ? void 0 : product.product_sku) || {};
2518
2622
  var metadata = (product === null || product === void 0 ? void 0 : product.metadata) || {};
2519
2623
  var discountTypes = ((product === null || product === void 0 ? void 0 : product.discount_list) || []).map(function (discount) {
@@ -2532,12 +2636,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2532
2636
  selling_price: this.normalizeFingerprintMoney(product === null || product === void 0 ? void 0 : product.selling_price),
2533
2637
  original_price: this.normalizeFingerprintMoney(product === null || product === void 0 ? void 0 : product.original_price),
2534
2638
  payment_price: this.normalizeFingerprintMoney((_product$payment_pric = product === null || product === void 0 ? void 0 : product.payment_price) !== null && _product$payment_pric !== void 0 ? _product$payment_pric : product === null || product === void 0 ? void 0 : product.selling_price),
2535
- metadata: {
2639
+ metadata: _objectSpread({
2536
2640
  source_product_price: this.normalizeFingerprintMoney(metadata.source_product_price),
2537
2641
  main_product_selling_price: this.normalizeFingerprintMoney(metadata.main_product_selling_price),
2538
2642
  main_product_original_price: this.normalizeFingerprintMoney(metadata.main_product_original_price),
2539
2643
  product_discount_difference: this.normalizeFingerprintMoney(metadata.product_discount_difference)
2540
- },
2644
+ }, !hasProductBooking(product) ? {
2645
+ holder_relations: this.normalizeFingerprintValue(getProductHolderRelations(this.store.tempOrder || {}, product))
2646
+ } : {}),
2541
2647
  product_sku: this.normalizeFingerprintValue({
2542
2648
  code: (_sku$code = sku.code) !== null && _sku$code !== void 0 ? _sku$code : '',
2543
2649
  barcode: (_sku$barcode = sku.barcode) !== null && _sku$barcode !== void 0 ? _sku$barcode : '',
@@ -2550,7 +2656,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2550
2656
  option_group_id: (_option$option_group_ = option === null || option === void 0 ? void 0 : option.option_group_id) !== null && _option$option_group_ !== void 0 ? _option$option_group_ : null,
2551
2657
  option_group_item_id: (_ref28 = (_option$option_group_2 = option === null || option === void 0 ? void 0 : option.option_group_item_id) !== null && _option$option_group_2 !== void 0 ? _option$option_group_2 : option === null || option === void 0 ? void 0 : option.id) !== null && _ref28 !== void 0 ? _ref28 : null,
2552
2658
  num: Number((_option$num = option === null || option === void 0 ? void 0 : option.num) !== null && _option$num !== void 0 ? _option$num : 1) || 1,
2553
- add_price: _this14.normalizeFingerprintMoney((_option$add_price = option === null || option === void 0 ? void 0 : option.add_price) !== null && _option$add_price !== void 0 ? _option$add_price : option === null || option === void 0 ? void 0 : option.price)
2659
+ add_price: _this15.normalizeFingerprintMoney((_option$add_price = option === null || option === void 0 ? void 0 : option.add_price) !== null && _option$add_price !== void 0 ? _option$add_price : option === null || option === void 0 ? void 0 : option.price)
2554
2660
  };
2555
2661
  })
2556
2662
  }),
@@ -2560,8 +2666,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2560
2666
  bundle_product_id: (_ref29 = (_ref30 = (_bundle$bundle_produc = bundle === null || bundle === void 0 ? void 0 : bundle.bundle_product_id) !== null && _bundle$bundle_produc !== void 0 ? _bundle$bundle_produc : bundle === null || bundle === void 0 ? void 0 : bundle._bundle_product_id) !== null && _ref30 !== void 0 ? _ref30 : bundle === null || bundle === void 0 ? void 0 : bundle.product_id) !== null && _ref29 !== void 0 ? _ref29 : null,
2561
2667
  bundle_variant_id: (_ref31 = (_bundle$bundle_varian = bundle === null || bundle === void 0 ? void 0 : bundle.bundle_variant_id) !== null && _bundle$bundle_varian !== void 0 ? _bundle$bundle_varian : bundle === null || bundle === void 0 ? void 0 : bundle.product_variant_id) !== null && _ref31 !== void 0 ? _ref31 : 0,
2562
2668
  num: getSafeProductNum((_bundle$num = bundle === null || bundle === void 0 ? void 0 : bundle.num) !== null && _bundle$num !== void 0 ? _bundle$num : bundle === null || bundle === void 0 ? void 0 : bundle.quantity),
2563
- price: _this14.normalizeFingerprintMoney(bundle === null || bundle === void 0 ? void 0 : bundle.price),
2564
- bundle_selling_price: _this14.normalizeFingerprintMoney(bundle === null || bundle === void 0 ? void 0 : bundle.bundle_selling_price),
2669
+ price: _this15.normalizeFingerprintMoney(bundle === null || bundle === void 0 ? void 0 : bundle.price),
2670
+ bundle_selling_price: _this15.normalizeFingerprintMoney(bundle === null || bundle === void 0 ? void 0 : bundle.bundle_selling_price),
2565
2671
  price_type: (_bundle$price_type = bundle === null || bundle === void 0 ? void 0 : bundle.price_type) !== null && _bundle$price_type !== void 0 ? _bundle$price_type : '',
2566
2672
  price_type_ext: (_bundle$price_type_ex = bundle === null || bundle === void 0 ? void 0 : bundle.price_type_ext) !== null && _bundle$price_type_ex !== void 0 ? _bundle$price_type_ex : ''
2567
2673
  };
@@ -2571,7 +2677,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2571
2677
  return {
2572
2678
  type: (_ref32 = (_discount$type2 = discount === null || discount === void 0 ? void 0 : discount.type) !== null && _discount$type2 !== void 0 ? _discount$type2 : discount === null || discount === void 0 ? void 0 : discount.tag) !== null && _ref32 !== void 0 ? _ref32 : '',
2573
2679
  discount_id: (_ref33 = (_ref34 = (_discount$discount_id = discount === null || discount === void 0 ? void 0 : discount.discount_id) !== null && _discount$discount_id !== void 0 ? _discount$discount_id : discount === null || discount === void 0 ? void 0 : discount.order_discount_id) !== null && _ref34 !== void 0 ? _ref34 : discount === null || discount === void 0 || (_discount$discount = discount.discount) === null || _discount$discount === void 0 ? void 0 : _discount$discount.resource_id) !== null && _ref33 !== void 0 ? _ref33 : null,
2574
- amount: _this14.normalizeFingerprintMoney(discount === null || discount === void 0 ? void 0 : discount.amount)
2680
+ amount: _this15.normalizeFingerprintMoney(discount === null || discount === void 0 ? void 0 : discount.amount)
2575
2681
  };
2576
2682
  }))
2577
2683
  };
@@ -2579,9 +2685,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2579
2685
  }, {
2580
2686
  key: "buildOrderProductsFingerprint",
2581
2687
  value: function buildOrderProductsFingerprint(products) {
2582
- var _this15 = this;
2688
+ var _this16 = this;
2583
2689
  var items = (products || []).map(function (product) {
2584
- return _this15.buildProductFingerprintItem(product);
2690
+ return _this16.buildProductFingerprintItem(product);
2585
2691
  });
2586
2692
  items.sort(function (left, right) {
2587
2693
  return JSON.stringify(left).localeCompare(JSON.stringify(right));
@@ -2603,7 +2709,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2603
2709
  _sku$barcode2,
2604
2710
  _ref36,
2605
2711
  _sku$variant_id2,
2606
- _this16 = this;
2712
+ _this17 = this;
2713
+ var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder || {};
2607
2714
  var sku = (product === null || product === void 0 ? void 0 : product.product_sku) || {};
2608
2715
  var metadata = (product === null || product === void 0 ? void 0 : product.metadata) || {};
2609
2716
  var discountTypes = ((product === null || product === void 0 ? void 0 : product.discount_list) || []).map(function (discount) {
@@ -2619,12 +2726,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2619
2726
  product_variant_id: (_product$product_vari2 = product === null || product === void 0 ? void 0 : product.product_variant_id) !== null && _product$product_vari2 !== void 0 ? _product$product_vari2 : null,
2620
2727
  extension_type: extensionType,
2621
2728
  num: getSafeProductNum((_product$num2 = product === null || product === void 0 ? void 0 : product.num) !== null && _product$num2 !== void 0 ? _product$num2 : product === null || product === void 0 ? void 0 : product.product_quantity),
2622
- metadata: {
2729
+ metadata: _objectSpread({
2623
2730
  unique_identification_number: (_ref35 = (_metadata$unique_iden = metadata.unique_identification_number) !== null && _metadata$unique_iden !== void 0 ? _metadata$unique_iden : product === null || product === void 0 ? void 0 : product.unique_identification_number) !== null && _ref35 !== void 0 ? _ref35 : '',
2624
2731
  price_override: (_metadata$price_overr = metadata.price_override) !== null && _metadata$price_overr !== void 0 ? _metadata$price_overr : '',
2625
2732
  is_manual_discount: (_metadata$is_manual_d = metadata.is_manual_discount) !== null && _metadata$is_manual_d !== void 0 ? _metadata$is_manual_d : '',
2626
2733
  product_discount_reason: (_metadata$product_dis = metadata.product_discount_reason) !== null && _metadata$product_dis !== void 0 ? _metadata$product_dis : ''
2627
- },
2734
+ }, !hasProductBooking(product) ? {
2735
+ holder_relations: this.normalizeFingerprintValue(getProductHolderRelations(order, product))
2736
+ } : {}),
2628
2737
  product_sku: this.normalizeFingerprintValue({
2629
2738
  code: (_sku$code2 = sku.code) !== null && _sku$code2 !== void 0 ? _sku$code2 : '',
2630
2739
  barcode: (_sku$barcode2 = sku.barcode) !== null && _sku$barcode2 !== void 0 ? _sku$barcode2 : '',
@@ -2637,7 +2746,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2637
2746
  option_group_id: (_option$option_group_3 = option === null || option === void 0 ? void 0 : option.option_group_id) !== null && _option$option_group_3 !== void 0 ? _option$option_group_3 : null,
2638
2747
  option_group_item_id: (_ref38 = (_option$option_group_4 = option === null || option === void 0 ? void 0 : option.option_group_item_id) !== null && _option$option_group_4 !== void 0 ? _option$option_group_4 : option === null || option === void 0 ? void 0 : option.id) !== null && _ref38 !== void 0 ? _ref38 : null,
2639
2748
  num: Number((_option$num2 = option === null || option === void 0 ? void 0 : option.num) !== null && _option$num2 !== void 0 ? _option$num2 : 1) || 1,
2640
- add_price: _this16.normalizeFingerprintMoney((_option$add_price2 = option === null || option === void 0 ? void 0 : option.add_price) !== null && _option$add_price2 !== void 0 ? _option$add_price2 : option === null || option === void 0 ? void 0 : option.price)
2749
+ add_price: _this17.normalizeFingerprintMoney((_option$add_price2 = option === null || option === void 0 ? void 0 : option.add_price) !== null && _option$add_price2 !== void 0 ? _option$add_price2 : option === null || option === void 0 ? void 0 : option.price)
2641
2750
  };
2642
2751
  })
2643
2752
  }),
@@ -2651,14 +2760,14 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2651
2760
  num: getSafeProductNum((_bundle$num2 = bundle === null || bundle === void 0 ? void 0 : bundle.num) !== null && _bundle$num2 !== void 0 ? _bundle$num2 : bundle === null || bundle === void 0 ? void 0 : bundle.quantity),
2652
2761
  price_type: (_bundle$price_type2 = bundle === null || bundle === void 0 ? void 0 : bundle.price_type) !== null && _bundle$price_type2 !== void 0 ? _bundle$price_type2 : '',
2653
2762
  price_type_ext: (_bundle$price_type_ex2 = bundle === null || bundle === void 0 ? void 0 : bundle.price_type_ext) !== null && _bundle$price_type_ex2 !== void 0 ? _bundle$price_type_ex2 : '',
2654
- option: _this16.normalizeFingerprintValue(((bundle === null || bundle === void 0 ? void 0 : bundle.option) || []).map(function (option) {
2763
+ option: _this17.normalizeFingerprintValue(((bundle === null || bundle === void 0 ? void 0 : bundle.option) || []).map(function (option) {
2655
2764
  var _ref44, _option$id3, _option$option_group_5, _ref45, _option$option_group_6, _option$num3, _option$add_price3;
2656
2765
  return {
2657
2766
  id: (_ref44 = (_option$id3 = option === null || option === void 0 ? void 0 : option.id) !== null && _option$id3 !== void 0 ? _option$id3 : option === null || option === void 0 ? void 0 : option.option_group_item_id) !== null && _ref44 !== void 0 ? _ref44 : null,
2658
2767
  option_group_id: (_option$option_group_5 = option === null || option === void 0 ? void 0 : option.option_group_id) !== null && _option$option_group_5 !== void 0 ? _option$option_group_5 : null,
2659
2768
  option_group_item_id: (_ref45 = (_option$option_group_6 = option === null || option === void 0 ? void 0 : option.option_group_item_id) !== null && _option$option_group_6 !== void 0 ? _option$option_group_6 : option === null || option === void 0 ? void 0 : option.id) !== null && _ref45 !== void 0 ? _ref45 : null,
2660
2769
  num: Number((_option$num3 = option === null || option === void 0 ? void 0 : option.num) !== null && _option$num3 !== void 0 ? _option$num3 : 1) || 1,
2661
- add_price: _this16.normalizeFingerprintMoney((_option$add_price3 = option === null || option === void 0 ? void 0 : option.add_price) !== null && _option$add_price3 !== void 0 ? _option$add_price3 : option === null || option === void 0 ? void 0 : option.price)
2770
+ add_price: _this17.normalizeFingerprintMoney((_option$add_price3 = option === null || option === void 0 ? void 0 : option.add_price) !== null && _option$add_price3 !== void 0 ? _option$add_price3 : option === null || option === void 0 ? void 0 : option.price)
2662
2771
  };
2663
2772
  }))
2664
2773
  };
@@ -2668,7 +2777,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2668
2777
  return {
2669
2778
  type: (_ref46 = (_discount$type4 = discount === null || discount === void 0 ? void 0 : discount.type) !== null && _discount$type4 !== void 0 ? _discount$type4 : discount === null || discount === void 0 ? void 0 : discount.tag) !== null && _ref46 !== void 0 ? _ref46 : '',
2670
2779
  discount_id: (_ref47 = (_ref48 = (_discount$discount_id2 = discount === null || discount === void 0 ? void 0 : discount.discount_id) !== null && _discount$discount_id2 !== void 0 ? _discount$discount_id2 : discount === null || discount === void 0 ? void 0 : discount.order_discount_id) !== null && _ref48 !== void 0 ? _ref48 : discount === null || discount === void 0 || (_discount$discount2 = discount.discount) === null || _discount$discount2 === void 0 ? void 0 : _discount$discount2.resource_id) !== null && _ref47 !== void 0 ? _ref47 : null,
2671
- amount: _this16.normalizeFingerprintMoney(discount === null || discount === void 0 ? void 0 : discount.amount)
2780
+ amount: _this17.normalizeFingerprintMoney(discount === null || discount === void 0 ? void 0 : discount.amount)
2672
2781
  };
2673
2782
  }))
2674
2783
  };
@@ -2676,9 +2785,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2676
2785
  }, {
2677
2786
  key: "buildOrderProductsStructuralFingerprint",
2678
2787
  value: function buildOrderProductsStructuralFingerprint(products) {
2679
- var _this17 = this;
2788
+ var _this18 = this;
2789
+ var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.store.tempOrder || {};
2680
2790
  var items = (products || []).map(function (product) {
2681
- return _this17.buildProductStructuralFingerprintItem(product);
2791
+ return _this18.buildProductStructuralFingerprintItem(product, order);
2682
2792
  });
2683
2793
  items.sort(function (left, right) {
2684
2794
  return JSON.stringify(left).localeCompare(JSON.stringify(right));
@@ -2764,7 +2874,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2764
2874
  var manualDepositOverride = this.getManualDepositOverride(tempOrder);
2765
2875
  if (currentFingerprint !== snapshot.productFingerprint) {
2766
2876
  var currentStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(tempOrder.products);
2767
- var snapshotStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(Array.isArray(snapshot.products) ? snapshot.products : []);
2877
+ var snapshotStructuralFingerprint = this.buildOrderProductsStructuralFingerprint(Array.isArray(snapshot.products) ? snapshot.products : [], snapshot);
2768
2878
  if (currentStructuralFingerprint !== snapshotStructuralFingerprint) return null;
2769
2879
  }
2770
2880
  var summary = _objectSpread(_objectSpread({}, createEmptySummary()), cloneDeep(snapshot.summary || {}));
@@ -2986,7 +3096,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2986
3096
  }
2987
3097
  }, _callee11, this);
2988
3098
  }));
2989
- function replaceTempOrder(_x9, _x10) {
3099
+ function replaceTempOrder(_x10, _x11) {
2990
3100
  return _replaceTempOrder.apply(this, arguments);
2991
3101
  }
2992
3102
  return replaceTempOrder;
@@ -3122,17 +3232,26 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3122
3232
  }, {
3123
3233
  key: "sanitizeOrderProductForTempOrder",
3124
3234
  value: function sanitizeOrderProductForTempOrder(product) {
3235
+ var _product$_extend;
3236
+ var deferHolderCleanup = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3125
3237
  if (product.metadata && _typeof(product.metadata) === 'object') {
3126
3238
  delete product.metadata.origin;
3239
+ if (!deferHolderCleanup && !hasProductBooking(product)) {
3240
+ delete product.metadata.holder;
3241
+ delete product.metadata.holder_id;
3242
+ }
3243
+ }
3244
+ if (((_product$_extend = product._extend) === null || _product$_extend === void 0 ? void 0 : _product$_extend.holder_relations) !== undefined) {
3245
+ delete product._extend.holder_relations;
3127
3246
  }
3128
3247
  return product;
3129
3248
  }
3130
3249
  }, {
3131
3250
  key: "sanitizeTempOrderProducts",
3132
3251
  value: function sanitizeTempOrderProducts(tempOrder) {
3133
- var _this18 = this;
3252
+ var _this19 = this;
3134
3253
  tempOrder.products = (tempOrder.products || []).map(function (product) {
3135
- return _this18.sanitizeOrderProductForTempOrder(_this18.normalizeVirtualSettlementProductIfEnabled(product));
3254
+ return _this19.sanitizeOrderProductForTempOrder(_this19.normalizeVirtualSettlementProductIfEnabled(product));
3136
3255
  });
3137
3256
  this.syncTempOrderSettlementState(tempOrder);
3138
3257
  ensureUniqueProductLineUids(tempOrder);
@@ -3252,7 +3371,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3252
3371
  }, {
3253
3372
  key: "syncLinkedBookingHoldersToProducts",
3254
3373
  value: function syncLinkedBookingHoldersToProducts(tempOrder) {
3255
- var _this19 = this;
3374
+ var _this20 = this;
3256
3375
  var bookings = tempOrder.bookings || [];
3257
3376
  var products = tempOrder.products || [];
3258
3377
  if (!bookings.length || !products.length) return;
@@ -3261,6 +3380,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3261
3380
  bookings.forEach(function (booking) {
3262
3381
  var _booking$metadata2, _booking$metadata3;
3263
3382
  if (!booking || _typeof(booking) !== 'object') return;
3383
+ if (isFulfillmentTimingBooking(booking)) return;
3264
3384
  var productUid = booking.product_uid || ((_booking$metadata2 = booking.metadata) === null || _booking$metadata2 === void 0 ? void 0 : _booking$metadata2.product_uid);
3265
3385
  if (productUid !== undefined && productUid !== null && String(productUid) !== '') {
3266
3386
  bookingByProductUid.set(String(productUid), booking);
@@ -3277,7 +3397,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3277
3397
  var bookingUid = product.booking_uid || ((_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.booking_uid);
3278
3398
  var linkedBooking = (productUid !== undefined && productUid !== null && String(productUid) !== '' ? bookingByProductUid.get(String(productUid)) : undefined) || (bookingUid !== undefined && bookingUid !== null && String(bookingUid) !== '' ? bookingByBookingUid.get(String(bookingUid)) : undefined);
3279
3399
  if (linkedBooking) {
3280
- _this19.setProductHolderFromBooking(product, linkedBooking);
3400
+ _this20.setProductHolderFromBooking(product, linkedBooking);
3281
3401
  }
3282
3402
  });
3283
3403
  }
@@ -3325,6 +3445,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3325
3445
  try {
3326
3446
  for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {
3327
3447
  var booking = _step18.value;
3448
+ if (isFulfillmentTimingBooking(booking)) continue;
3328
3449
  var holder = booking !== null && booking !== void 0 && booking.holder && _typeof(booking.holder) === 'object' ? booking.holder : null;
3329
3450
  if (!baseHolder && holder) {
3330
3451
  baseHolder = holder;
@@ -3383,7 +3504,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3383
3504
  }, {
3384
3505
  key: "syncTempOrderHolderFromBookings",
3385
3506
  value: function syncTempOrderHolderFromBookings(tempOrder) {
3386
- var bookings = tempOrder.bookings || [];
3507
+ var bookings = (tempOrder.bookings || []).filter(function (booking) {
3508
+ return !isFulfillmentTimingBooking(booking);
3509
+ });
3387
3510
  var hasHolderSource = bookings.some(function (booking) {
3388
3511
  var _booking$metadata4;
3389
3512
  return (booking === null || booking === void 0 ? void 0 : booking.holder) !== undefined || (booking === null || booking === void 0 || (_booking$metadata4 = booking.metadata) === null || _booking$metadata4 === void 0 ? void 0 : _booking$metadata4.holder_id) !== undefined;
@@ -3405,9 +3528,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3405
3528
  }, {
3406
3529
  key: "findBookingIndexByUniqueIdentificationNumber",
3407
3530
  value: function findBookingIndexByUniqueIdentificationNumber(tempOrder, uniqueIdentificationNumber) {
3408
- var _this20 = this;
3531
+ var _this21 = this;
3409
3532
  return (tempOrder.bookings || []).findIndex(function (booking) {
3410
- return _this20.getBookingUniqueIdentificationNumber(booking) === uniqueIdentificationNumber;
3533
+ return _this21.getBookingUniqueIdentificationNumber(booking) === uniqueIdentificationNumber;
3411
3534
  });
3412
3535
  }
3413
3536
  }, {
@@ -3415,12 +3538,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3415
3538
  value: function removeLinkedBookingsForProduct(tempOrder, product) {
3416
3539
  var _product$metadata5,
3417
3540
  _product$metadata6,
3418
- _this21 = this;
3541
+ _this22 = this;
3419
3542
  var productUid = (product === null || product === void 0 || (_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.unique_identification_number) || (product === null || product === void 0 ? void 0 : product.unique_identification_number);
3420
3543
  var bookingUid = (product === null || product === void 0 ? void 0 : product.booking_uid) || (product === null || product === void 0 || (_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.booking_uid);
3421
3544
  if (!productUid && !bookingUid) return;
3422
3545
  tempOrder.bookings = (tempOrder.bookings || []).filter(function (booking) {
3423
- var currentBookingUid = _this21.getBookingUniqueIdentificationNumber(booking);
3546
+ if (isFulfillmentTimingBooking(booking)) return true;
3547
+ var currentBookingUid = _this22.getBookingUniqueIdentificationNumber(booking);
3424
3548
  if (bookingUid && currentBookingUid === String(bookingUid)) return false;
3425
3549
  if (productUid && String((booking === null || booking === void 0 ? void 0 : booking.product_uid) || '') === String(productUid)) return false;
3426
3550
  return true;
@@ -3468,30 +3592,36 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3468
3592
  value: function () {
3469
3593
  var _recalculateSummary = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(options) {
3470
3594
  var _this$otherParams3, _ref53, _salesSummaryResult$e;
3471
- var tempOrder, originalSnapshot, hasShopDiscountChanged, shouldReuseOriginalSnapshot, snapshotSummary, shouldFullRecalculateFromSnapshot, summaryProducts, salesSummary, existedSummary, totalRefundAmount, paidPaymentSummary, emptyBaseSummary, emptySummaryBase, emptySummaryWithDeposit, emptySummary, salesSummaryResult, roundingAmount, payServiceChargeAmount, hasSalesSummaryAmount, expectAmount, amountPaymentPatch, normalizedExpectAmountPatch, summaryForGap, summary;
3595
+ var tempOrder, originalSnapshot, hasShopDiscountChanged, shouldReuseOriginalSnapshot, snapshotSummary, shouldFullRecalculateFromSnapshot, summaryProducts, salesSummary, existedSummary, totalRefundAmount, paidPaymentSummary, emptyBaseSummary, emptySummaryBase, emptySummaryWithDeposit, emptySummary, summaryMutationBaseline, salesSummaryResult, roundingAmount, payServiceChargeAmount, hasSalesSummaryAmount, expectAmount, amountPaymentPatch, normalizedExpectAmountPatch, summaryForGap, summary;
3472
3596
  return _regeneratorRuntime().wrap(function _callee13$(_context15) {
3473
3597
  while (1) switch (_context15.prev = _context15.next) {
3474
3598
  case 0:
3599
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !options.isCurrentOrder())) {
3600
+ _context15.next = 2;
3601
+ break;
3602
+ }
3603
+ return _context15.abrupt("return", null);
3604
+ case 2:
3475
3605
  tempOrder = options !== null && options !== void 0 && options.createIfMissing ? this.ensureTempOrder() : this.store.tempOrder;
3476
3606
  if (tempOrder) {
3477
- _context15.next = 3;
3607
+ _context15.next = 5;
3478
3608
  break;
3479
3609
  }
3480
3610
  return _context15.abrupt("return", null);
3481
- case 3:
3611
+ case 5:
3482
3612
  this.sanitizeTempOrderProducts(tempOrder);
3483
3613
  originalSnapshot = this.getOriginalSalesSnapshot(tempOrder);
3484
3614
  hasShopDiscountChanged = originalSnapshot ? this.hasShopDiscountChangedFromSnapshot(tempOrder, originalSnapshot) : false;
3485
3615
  shouldReuseOriginalSnapshot = originalSnapshot && !hasShopDiscountChanged;
3486
3616
  snapshotSummary = shouldReuseOriginalSnapshot ? this.restoreOriginalSnapshotIfProductsUnchanged(tempOrder, originalSnapshot) : null;
3487
3617
  if (!snapshotSummary) {
3488
- _context15.next = 10;
3618
+ _context15.next = 12;
3489
3619
  break;
3490
3620
  }
3491
3621
  return _context15.abrupt("return", snapshotSummary);
3492
- case 10:
3622
+ case 12:
3493
3623
  shouldFullRecalculateFromSnapshot = Boolean(originalSnapshot);
3494
- summaryProducts = shouldFullRecalculateFromSnapshot ? cloneDeep(tempOrder.products || []) : tempOrder.products;
3624
+ summaryProducts = shouldFullRecalculateFromSnapshot || options !== null && options !== void 0 && options.isCurrentOrder ? cloneDeep(tempOrder.products || []) : tempOrder.products;
3495
3625
  if (shouldFullRecalculateFromSnapshot) {
3496
3626
  this.clearPersistedAmountFieldsForFullRecalc(summaryProducts || []);
3497
3627
  }
@@ -3500,7 +3630,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3500
3630
  totalRefundAmount = existedSummary.total_refund_amount || '0.00';
3501
3631
  paidPaymentSummary = this.calculatePaidPaymentSummary(tempOrder.payments || []);
3502
3632
  if (salesSummary) {
3503
- _context15.next = 26;
3633
+ _context15.next = 28;
3504
3634
  break;
3505
3635
  }
3506
3636
  emptyBaseSummary = _objectSpread(_objectSpread(_objectSpread({}, createEmptySummary()), existedSummary), {}, {
@@ -3527,8 +3657,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3527
3657
  summary: emptySummary
3528
3658
  });
3529
3659
  return _context15.abrupt("return", this.store.summary);
3530
- case 26:
3531
- _context15.next = 28;
3660
+ case 28:
3661
+ summaryMutationBaseline = options !== null && options !== void 0 && options.isCurrentOrder ? cloneDeep({
3662
+ tempOrder: tempOrder,
3663
+ summary: this.store.summary
3664
+ }) : null;
3665
+ _context15.next = 31;
3532
3666
  return salesSummary.getSummary(_objectSpread({
3533
3667
  products: summaryProducts,
3534
3668
  isPriceIncludeTax: tempOrder.is_price_include_tax,
@@ -3537,9 +3671,24 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3537
3671
  }, (_this$otherParams3 = this.otherParams) !== null && _this$otherParams3 !== void 0 && _this$otherParams3.channel ? {
3538
3672
  channel: this.otherParams.channel
3539
3673
  } : {}));
3540
- case 28:
3674
+ case 31:
3541
3675
  salesSummaryResult = _context15.sent;
3542
- if (shouldFullRecalculateFromSnapshot) {
3676
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !options.isCurrentOrder())) {
3677
+ _context15.next = 34;
3678
+ break;
3679
+ }
3680
+ return _context15.abrupt("return", null);
3681
+ case 34:
3682
+ if (!(options !== null && options !== void 0 && options.isCurrentOrder && !isEqual({
3683
+ tempOrder: tempOrder,
3684
+ summary: this.store.summary
3685
+ }, summaryMutationBaseline))) {
3686
+ _context15.next = 36;
3687
+ break;
3688
+ }
3689
+ return _context15.abrupt("return", null);
3690
+ case 36:
3691
+ if (shouldFullRecalculateFromSnapshot || options !== null && options !== void 0 && options.isCurrentOrder) {
3543
3692
  tempOrder.products = summaryProducts;
3544
3693
  }
3545
3694
  this.syncSummaryProductMetadata(tempOrder.products || []);
@@ -3584,13 +3733,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3584
3733
  summary: summary
3585
3734
  });
3586
3735
  return _context15.abrupt("return", this.store.summary);
3587
- case 46:
3736
+ case 53:
3588
3737
  case "end":
3589
3738
  return _context15.stop();
3590
3739
  }
3591
3740
  }, _callee13, this);
3592
3741
  }));
3593
- function recalculateSummary(_x11) {
3742
+ function recalculateSummary(_x12) {
3594
3743
  return _recalculateSummary.apply(this, arguments);
3595
3744
  }
3596
3745
  return recalculateSummary;
@@ -3661,7 +3810,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3661
3810
  }
3662
3811
  }, _callee15, this);
3663
3812
  }));
3664
- function syncTempOrderNoteToRemote(_x12, _x13) {
3813
+ function syncTempOrderNoteToRemote(_x13, _x14) {
3665
3814
  return _syncTempOrderNoteToRemote.apply(this, arguments);
3666
3815
  }
3667
3816
  return syncTempOrderNoteToRemote;
@@ -3722,7 +3871,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3722
3871
  }, {
3723
3872
  key: "removeSalesNotesForMissingProductLines",
3724
3873
  value: function removeSalesNotesForMissingProductLines(tempOrder) {
3725
- var _this22 = this;
3874
+ var _this23 = this;
3726
3875
  var state = this.ensureSalesNotesRuntimeState(tempOrder);
3727
3876
  if (!state.loaded || !Array.isArray(tempOrder.notes) || tempOrder.notes.length === 0) {
3728
3877
  return;
@@ -3734,7 +3883,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3734
3883
  return typeof uid === 'string' && uid.length > 0;
3735
3884
  }));
3736
3885
  var nextNotes = tempOrder.notes.filter(function (note) {
3737
- var primary = _this22.getSalesNotePrimaryRelation(note);
3886
+ var primary = _this23.getSalesNotePrimaryRelation(note);
3738
3887
  if (!primary || primary.target_type !== 'order_detail') return true;
3739
3888
  return remainingProductUids.has(primary.target_uuid);
3740
3889
  });
@@ -3746,7 +3895,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3746
3895
  key: "setSalesNoteOnTempOrder",
3747
3896
  value: function setSalesNoteOnTempOrder(tempOrder, input) {
3748
3897
  var _input$target,
3749
- _this23 = this,
3898
+ _this24 = this,
3750
3899
  _tempOrder$shop_order;
3751
3900
  this.ensureSalesNotesLoadedForMutation(tempOrder);
3752
3901
  var note_type = String(input.note_type || '').trim();
@@ -3770,7 +3919,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3770
3919
  var notes = tempOrder.notes || [];
3771
3920
  // 当前 allergy policy 固定同一商品行只保留一条;业务调用方不参与去重规则。
3772
3921
  var existingIndex = policy.uniquePerPrimaryTarget ? notes.findIndex(function (note) {
3773
- var primary = _this23.getSalesNotePrimaryRelation(note);
3922
+ var primary = _this24.getSalesNotePrimaryRelation(note);
3774
3923
  return note.note_type === note_type && (primary === null || primary === void 0 ? void 0 : primary.target_type) === 'order_detail' && primary.target_uuid === target_uuid;
3775
3924
  }) : -1;
3776
3925
  var existing = existingIndex >= 0 ? notes[existingIndex] : null;
@@ -3877,7 +4026,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3877
4026
  }
3878
4027
  }, _callee16, this);
3879
4028
  }));
3880
- function setSalesNote(_x14) {
4029
+ function setSalesNote(_x15) {
3881
4030
  return _setSalesNote.apply(this, arguments);
3882
4031
  }
3883
4032
  return setSalesNote;
@@ -3913,7 +4062,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3913
4062
  }
3914
4063
  }, _callee17, this);
3915
4064
  }));
3916
- function removeSalesNote(_x15) {
4065
+ function removeSalesNote(_x16) {
3917
4066
  return _removeSalesNote.apply(this, arguments);
3918
4067
  }
3919
4068
  return removeSalesNote;
@@ -4007,10 +4156,47 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4007
4156
  }, {
4008
4157
  key: "updateTempOrderServiceType",
4009
4158
  value: function updateTempOrderServiceType(serviceType) {
4159
+ if (serviceType !== 'pick_up') {
4160
+ var tempOrder = this.ensureTempOrder();
4161
+ tempOrder.bookings = (tempOrder.bookings || []).filter(function (booking) {
4162
+ return !isFulfillmentTimingBooking(booking);
4163
+ });
4164
+ }
4010
4165
  return this.updateTempOrderShopServiceData({
4011
4166
  service_type: serviceType
4012
4167
  });
4013
4168
  }
4169
+ }, {
4170
+ key: "getPickupTimingBooking",
4171
+ value: function getPickupTimingBooking() {
4172
+ var _this$store$tempOrder7;
4173
+ return (((_this$store$tempOrder7 = this.store.tempOrder) === null || _this$store$tempOrder7 === void 0 ? void 0 : _this$store$tempOrder7.bookings) || []).find(isFulfillmentTimingBooking) || null;
4174
+ }
4175
+ }, {
4176
+ key: "setPickupTimingBooking",
4177
+ value: function setPickupTimingBooking(input) {
4178
+ var tempOrder = this.ensureTempOrder();
4179
+ var bookings = tempOrder.bookings || [];
4180
+ var firstIndex = bookings.findIndex(isFulfillmentTimingBooking);
4181
+ var nextBooking = buildPickupTimingBooking(input, bookings[firstIndex]);
4182
+ // Keep the first row's identity and position; repair duplicate marked rows only.
4183
+ tempOrder.bookings = firstIndex === -1 ? [].concat(_toConsumableArray(bookings), [nextBooking]) : bookings.flatMap(function (booking, index) {
4184
+ return index === firstIndex ? [nextBooking] : isFulfillmentTimingBooking(booking) ? [] : [booking];
4185
+ });
4186
+ this.notifyTempOrderChanged();
4187
+ return nextBooking;
4188
+ }
4189
+ }, {
4190
+ key: "clearPickupTimingBooking",
4191
+ value: function clearPickupTimingBooking() {
4192
+ var _tempOrder$bookings;
4193
+ var tempOrder = this.store.tempOrder;
4194
+ if (!(tempOrder !== null && tempOrder !== void 0 && (_tempOrder$bookings = tempOrder.bookings) !== null && _tempOrder$bookings !== void 0 && _tempOrder$bookings.some(isFulfillmentTimingBooking))) return;
4195
+ tempOrder.bookings = tempOrder.bookings.filter(function (booking) {
4196
+ return !isFulfillmentTimingBooking(booking);
4197
+ });
4198
+ this.notifyTempOrderChanged();
4199
+ }
4014
4200
  }, {
4015
4201
  key: "updateTempOrderContactsInfo",
4016
4202
  value: function updateTempOrderContactsInfo(contactsInfo) {
@@ -4052,15 +4238,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4052
4238
  }, {
4053
4239
  key: "productHasCustomerBoundDiscount",
4054
4240
  value: function productHasCustomerBoundDiscount(product) {
4055
- var _this24 = this;
4241
+ var _this25 = this;
4056
4242
  if (((product === null || product === void 0 ? void 0 : product.discount_list) || []).some(function (discount) {
4057
- return _this24.isCustomerBoundDiscount(discount);
4243
+ return _this25.isCustomerBoundDiscount(discount);
4058
4244
  })) {
4059
4245
  return true;
4060
4246
  }
4061
4247
  return ((product === null || product === void 0 ? void 0 : product.product_bundle) || []).some(function (bundle) {
4062
4248
  return ((bundle === null || bundle === void 0 ? void 0 : bundle.discount_list) || []).some(function (discount) {
4063
- return _this24.isCustomerBoundDiscount(discount);
4249
+ return _this25.isCustomerBoundDiscount(discount);
4064
4250
  });
4065
4251
  });
4066
4252
  }
@@ -4069,18 +4255,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4069
4255
  value: function shouldSkipDiscountCalculation(tempOrder) {
4070
4256
  var _this$store$discount20,
4071
4257
  _this$store$discount21,
4072
- _this25 = this;
4258
+ _this26 = this;
4073
4259
  if (this.hasActiveCustomerBoundDiscount) return false;
4074
4260
  var discountList = ((_this$store$discount20 = this.store.discount) === null || _this$store$discount20 === void 0 || (_this$store$discount21 = _this$store$discount20.getDiscountList) === null || _this$store$discount21 === void 0 ? void 0 : _this$store$discount21.call(_this$store$discount20)) || [];
4075
4261
  if (discountList.length > 0) return false;
4076
4262
  return !(tempOrder.products || []).some(function (product) {
4077
- return _this25.productHasCustomerBoundDiscount(product);
4263
+ return _this26.productHasCustomerBoundDiscount(product);
4078
4264
  });
4079
4265
  }
4080
4266
  }, {
4081
4267
  key: "clearCustomerBoundDiscounts",
4082
4268
  value: function clearCustomerBoundDiscounts(tempOrder) {
4083
- var _this26 = this,
4269
+ var _this27 = this,
4084
4270
  _discountModule$getDi,
4085
4271
  _discountModule$getOr,
4086
4272
  _discountModule$setDi,
@@ -4089,7 +4275,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4089
4275
  var filterDiscountList = function filterDiscountList(discountList) {
4090
4276
  if (!Array.isArray(discountList)) return [];
4091
4277
  return discountList.filter(function (discount) {
4092
- var shouldRemove = _this26.isCustomerBoundDiscount(discount);
4278
+ var shouldRemove = _this27.isCustomerBoundDiscount(discount);
4093
4279
  if (shouldRemove) didRemoveCustomerBoundDiscount = true;
4094
4280
  return !shouldRemove;
4095
4281
  });
@@ -4116,12 +4302,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4116
4302
  var currentDiscounts = ((_discountModule$getDi = discountModule.getDiscountList) === null || _discountModule$getDi === void 0 ? void 0 : _discountModule$getDi.call(discountModule)) || [];
4117
4303
  var currentOriginalDiscounts = ((_discountModule$getOr = discountModule.getOriginalDiscountList) === null || _discountModule$getOr === void 0 ? void 0 : _discountModule$getOr.call(discountModule)) || [];
4118
4304
  var nextDiscounts = currentDiscounts.filter(function (discount) {
4119
- if (_this26.shouldKeepCustomerBoundDiscountAfterCustomerChange(discount)) return true;
4120
- return !_this26.isCustomerBoundDiscount(discount);
4305
+ if (_this27.shouldKeepCustomerBoundDiscountAfterCustomerChange(discount)) return true;
4306
+ return !_this27.isCustomerBoundDiscount(discount);
4121
4307
  });
4122
4308
  var nextOriginalDiscounts = currentOriginalDiscounts.filter(function (discount) {
4123
- if (_this26.shouldKeepCustomerBoundDiscountAfterCustomerChange(discount)) return true;
4124
- return !_this26.isCustomerBoundDiscount(discount);
4309
+ if (_this27.shouldKeepCustomerBoundDiscountAfterCustomerChange(discount)) return true;
4310
+ return !_this27.isCustomerBoundDiscount(discount);
4125
4311
  });
4126
4312
  void ((_discountModule$setDi = discountModule.setDiscountList) === null || _discountModule$setDi === void 0 ? void 0 : _discountModule$setDi.call(discountModule, nextDiscounts));
4127
4313
  void ((_discountModule$setOr = discountModule.setOriginalDiscountList) === null || _discountModule$setOr === void 0 ? void 0 : _discountModule$setOr.call(discountModule, nextOriginalDiscounts));
@@ -4157,6 +4343,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4157
4343
  var nextCustomerId = (_tempOrder$customer_i4 = tempOrder.customer_id) !== null && _tempOrder$customer_i4 !== void 0 ? _tempOrder$customer_i4 : null;
4158
4344
  if (String(previousCustomerId !== null && previousCustomerId !== void 0 ? previousCustomerId : '') !== String(nextCustomerId !== null && nextCustomerId !== void 0 ? nextCustomerId : '')) {
4159
4345
  this.clearCustomerWalletState(tempOrder);
4346
+ removeProductHolderRelations(tempOrder, tempOrder.products.filter(function (product) {
4347
+ return !hasProductBooking(product);
4348
+ }));
4160
4349
  }
4161
4350
  this.persistTempOrder();
4162
4351
  return {
@@ -4224,8 +4413,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4224
4413
  }, {
4225
4414
  key: "getOrderCustomerSnapshot",
4226
4415
  value: function getOrderCustomerSnapshot() {
4227
- var _this$store$tempOrder7;
4228
- var snapshot = (_this$store$tempOrder7 = this.store.tempOrder) === null || _this$store$tempOrder7 === void 0 || (_this$store$tempOrder7 = _this$store$tempOrder7._extend) === null || _this$store$tempOrder7 === void 0 ? void 0 : _this$store$tempOrder7.customerSnapshot;
4416
+ var _this$store$tempOrder8;
4417
+ var snapshot = (_this$store$tempOrder8 = this.store.tempOrder) === null || _this$store$tempOrder8 === void 0 || (_this$store$tempOrder8 = _this$store$tempOrder8._extend) === null || _this$store$tempOrder8 === void 0 ? void 0 : _this$store$tempOrder8.customerSnapshot;
4229
4418
  return snapshot ? cloneDeep(snapshot) : null;
4230
4419
  }
4231
4420
  }, {
@@ -4285,10 +4474,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4285
4474
  }, {
4286
4475
  key: "setOrderPayments",
4287
4476
  value: function setOrderPayments(payments) {
4288
- var _this27 = this;
4477
+ var _this28 = this;
4289
4478
  var tempOrder = this.ensureTempOrder();
4290
4479
  tempOrder.payments = mapPaymentItemsToOrderPayments((payments || []).map(function (payment) {
4291
- return _this27.normalizePaymentSource(payment, {
4480
+ return _this28.normalizePaymentSource(payment, {
4292
4481
  defaultPaid: false
4293
4482
  });
4294
4483
  }));
@@ -4335,7 +4524,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4335
4524
  }
4336
4525
  }, _callee19, this);
4337
4526
  }));
4338
- function addOrderPaymentAsync(_x16) {
4527
+ function addOrderPaymentAsync(_x17) {
4339
4528
  return _addOrderPaymentAsync.apply(this, arguments);
4340
4529
  }
4341
4530
  return addOrderPaymentAsync;
@@ -4343,7 +4532,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4343
4532
  }, {
4344
4533
  key: "addOrderPaymentWithDevicePrefix",
4345
4534
  value: function addOrderPaymentWithDevicePrefix(payment, devicePrefix) {
4346
- var _this28 = this;
4535
+ var _this29 = this;
4347
4536
  this.logInfo('addOrderPayment', {
4348
4537
  payment: payment
4349
4538
  });
@@ -4361,7 +4550,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4361
4550
  void this.recalculateSummary({
4362
4551
  createIfMissing: true
4363
4552
  }).catch(function (error) {
4364
- _this28.logError('recalculate summary after addOrderPayment failed', {
4553
+ _this29.logError('recalculate summary after addOrderPayment failed', {
4365
4554
  error: error instanceof Error ? error.message : String(error)
4366
4555
  });
4367
4556
  });
@@ -4381,6 +4570,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4381
4570
  identity,
4382
4571
  matchMode,
4383
4572
  matchedPayment,
4573
+ _this$logger,
4574
+ _this$logger$addLog,
4384
4575
  updatedPayment,
4385
4576
  summary,
4386
4577
  payments,
@@ -4394,11 +4585,25 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4394
4585
  matchMode = options.matchBy === 'compat' || options.matchBy === 'legacy' ? 'compat' : 'payment_number';
4395
4586
  matchedPayment = resolveOrderPaymentIdentity(tempOrder.payments || [], identity, matchMode);
4396
4587
  if (matchedPayment) {
4397
- _context22.next = 7;
4588
+ _context22.next = 8;
4398
4589
  break;
4399
4590
  }
4591
+ try {
4592
+ void Promise.resolve((_this$logger = this.logger) === null || _this$logger === void 0 || (_this$logger$addLog = _this$logger.addLog) === null || _this$logger$addLog === void 0 ? void 0 : _this$logger$addLog.call(_this$logger, {
4593
+ type: 'warning',
4594
+ title: '[PaymentTrace] payment-missing',
4595
+ metadata: {
4596
+ moduleName: this.name,
4597
+ saleId: tempOrder.external_sale_number,
4598
+ paymentNumber: identity,
4599
+ currentPaymentNumbers: (tempOrder.payments || []).map(function (p) {
4600
+ return p.payment_number;
4601
+ })
4602
+ }
4603
+ })).catch(function () {});
4604
+ } catch (_unused4) {/* 日志失败不影响原异常。 */}
4400
4605
  throw new Error("\u672A\u627E\u5230\u652F\u4ED8\u9879: ".concat(identity));
4401
- case 7:
4606
+ case 8:
4402
4607
  updatedPayment = null;
4403
4608
  tempOrder.payments = (tempOrder.payments || []).map(function (payment, index) {
4404
4609
  if (index !== matchedPayment.index) return payment;
@@ -4409,11 +4614,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4409
4614
  return nextPayment;
4410
4615
  });
4411
4616
  this.persistTempOrder();
4412
- _context22.next = 12;
4617
+ _context22.next = 13;
4413
4618
  return this.recalculateSummary({
4414
4619
  createIfMissing: true
4415
4620
  });
4416
- case 12:
4621
+ case 13:
4417
4622
  summary = _context22.sent;
4418
4623
  this.persistTempOrder();
4419
4624
  payments = tempOrder.payments;
@@ -4423,13 +4628,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4423
4628
  payments: payments,
4424
4629
  summary: summary
4425
4630
  });
4426
- case 16:
4631
+ case 17:
4427
4632
  case "end":
4428
4633
  return _context22.stop();
4429
4634
  }
4430
4635
  }, _callee20, this);
4431
4636
  }));
4432
- function updateOrderPayment(_x17, _x18) {
4637
+ function updateOrderPayment(_x18, _x19) {
4433
4638
  return _updateOrderPayment.apply(this, arguments);
4434
4639
  }
4435
4640
  return updateOrderPayment;
@@ -4474,7 +4679,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4474
4679
  }, {
4475
4680
  key: "applyPaymentLifecycleChange",
4476
4681
  value: function applyPaymentLifecycleChange(tempOrder, options) {
4477
- var _this29 = this;
4682
+ var _this30 = this;
4478
4683
  this.updateTempOrderPaymentStatus(tempOrder);
4479
4684
  if ((options === null || options === void 0 ? void 0 : options.persist) !== false) {
4480
4685
  this.persistTempOrder();
@@ -4484,7 +4689,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4484
4689
  void this.recalculateSummary({
4485
4690
  createIfMissing: true
4486
4691
  }).catch(function (error) {
4487
- _this29.logError("recalculate summary after ".concat(logContext, " failed"), {
4692
+ _this30.logError("recalculate summary after ".concat(logContext, " failed"), {
4488
4693
  error: error instanceof Error ? error.message : String(error)
4489
4694
  });
4490
4695
  });
@@ -4528,7 +4733,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4528
4733
  }, {
4529
4734
  key: "updateVoucherOrderPayments",
4530
4735
  value: function updateVoucherOrderPayments(payments, options) {
4531
- var _this30 = this;
4736
+ var _this31 = this;
4532
4737
  var tempOrder = this.ensureTempOrder();
4533
4738
  var isOrderPaymentType = function isOrderPaymentType(value) {
4534
4739
  return value === 'normal' || value === 'deposit';
@@ -4563,7 +4768,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4563
4768
  });
4564
4769
  };
4565
4770
  var mappedVouchers = mapPaymentItemsToOrderPayments(payments.map(function (payment) {
4566
- return _this30.normalizePaymentSource(normalizeVoucherPaymentStatus(withVoucherPaymentType(payment)), {
4771
+ return _this31.normalizePaymentSource(normalizeVoucherPaymentStatus(withVoucherPaymentType(payment)), {
4567
4772
  defaultPaid: false,
4568
4773
  devicePrefix: options === null || options === void 0 ? void 0 : options.devicePrefix
4569
4774
  });
@@ -4616,7 +4821,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4616
4821
  void this.recalculateSummary({
4617
4822
  createIfMissing: true
4618
4823
  }).catch(function (error) {
4619
- _this30.logError('recalculate summary after updateVoucherOrderPayments failed', {
4824
+ _this31.logError('recalculate summary after updateVoucherOrderPayments failed', {
4620
4825
  error: error instanceof Error ? error.message : String(error)
4621
4826
  });
4622
4827
  });
@@ -4656,7 +4861,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4656
4861
  }
4657
4862
  }, _callee21, this);
4658
4863
  }));
4659
- function updateVoucherOrderPaymentsAsync(_x19, _x20) {
4864
+ function updateVoucherOrderPaymentsAsync(_x20, _x21) {
4660
4865
  return _updateVoucherOrderPaymentsAsync.apply(this, arguments);
4661
4866
  }
4662
4867
  return updateVoucherOrderPaymentsAsync;
@@ -4673,16 +4878,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4673
4878
  }, {
4674
4879
  key: "shouldMergeProductToOrder",
4675
4880
  value: function shouldMergeProductToOrder(params) {
4676
- var _this$orderHooks,
4677
- _this31 = this;
4678
- var onBeforeMergeProductToOrder = (_this$orderHooks = this.orderHooks) === null || _this$orderHooks === void 0 ? void 0 : _this$orderHooks.onBeforeMergeProductToOrder;
4881
+ var _this$orderHooks3,
4882
+ _this32 = this;
4883
+ var onBeforeMergeProductToOrder = (_this$orderHooks3 = this.orderHooks) === null || _this$orderHooks3 === void 0 ? void 0 : _this$orderHooks3.onBeforeMergeProductToOrder;
4679
4884
  if (!onBeforeMergeProductToOrder) return true;
4680
4885
  var result = onBeforeMergeProductToOrder(_objectSpread(_objectSpread({}, params), {}, {
4681
4886
  defaultShouldMerge: true
4682
4887
  }));
4683
4888
  if (result && _typeof(result) === 'object' && typeof result.then === 'function') {
4684
4889
  return Promise.resolve(result).then(function (resolved) {
4685
- return _this31.normalizeShouldMergeProductResult(resolved);
4890
+ return _this32.normalizeShouldMergeProductResult(resolved);
4686
4891
  });
4687
4892
  }
4688
4893
  return this.normalizeShouldMergeProductResult(result);
@@ -4812,52 +5017,82 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4812
5017
  key: "finalizeProductOrderMutation",
4813
5018
  value: function () {
4814
5019
  var _finalizeProductOrderMutation = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22(tempOrder, options) {
4815
- var isVirtualSettlement, promotionPayload;
5020
+ var isCurrentOrder, isVirtualSettlement, promotionPayload, summary;
4816
5021
  return _regeneratorRuntime().wrap(function _callee22$(_context24) {
4817
5022
  while (1) switch (_context24.prev = _context24.next) {
4818
5023
  case 0:
5024
+ isCurrentOrder = options === null || options === void 0 ? void 0 : options.isCurrentOrder;
5025
+ if (!(isCurrentOrder && !isCurrentOrder())) {
5026
+ _context24.next = 3;
5027
+ break;
5028
+ }
5029
+ return _context24.abrupt("return");
5030
+ case 3:
4819
5031
  this.syncTempOrderHolderFromBookings(tempOrder);
4820
5032
  this.prepareVirtualSettlementTempOrder(tempOrder);
4821
5033
  isVirtualSettlement = this.isActiveVirtualSettlementOrder(tempOrder);
4822
5034
  if (!(!(options !== null && options !== void 0 && options.skipEditDiscountConfigRefresh) && !isVirtualSettlement)) {
4823
- _context24.next = 6;
5035
+ _context24.next = 9;
4824
5036
  break;
4825
5037
  }
4826
- _context24.next = 6;
5038
+ _context24.next = 9;
4827
5039
  return this.ensureEditDiscountConfigForProductChange(tempOrder);
4828
- case 6:
5040
+ case 9:
5041
+ if (!(isCurrentOrder && !isCurrentOrder())) {
5042
+ _context24.next = 11;
5043
+ break;
5044
+ }
5045
+ return _context24.abrupt("return");
5046
+ case 11:
4829
5047
  if (!(!(options !== null && options !== void 0 && options.skipDiscountRecalculation) && !isVirtualSettlement)) {
4830
- _context24.next = 12;
5048
+ _context24.next = 17;
4831
5049
  break;
4832
5050
  }
4833
- _context24.next = 9;
4834
- return this.evaluatePromotion();
4835
- case 9:
5051
+ _context24.next = 14;
5052
+ return this.evaluatePromotion(isCurrentOrder ? {
5053
+ isCurrentOrder: isCurrentOrder
5054
+ } : undefined);
5055
+ case 14:
4836
5056
  _context24.t0 = _context24.sent;
4837
- _context24.next = 13;
5057
+ _context24.next = 18;
4838
5058
  break;
4839
- case 12:
5059
+ case 17:
4840
5060
  _context24.t0 = null;
4841
- case 13:
5061
+ case 18:
4842
5062
  promotionPayload = _context24.t0;
5063
+ if (!(isCurrentOrder && !isCurrentOrder())) {
5064
+ _context24.next = 21;
5065
+ break;
5066
+ }
5067
+ return _context24.abrupt("return");
5068
+ case 21:
4843
5069
  if (!(options !== null && options !== void 0 && options.skipDiscountRecalculation) && !isVirtualSettlement) {
4844
5070
  this.applyDiscount();
4845
5071
  }
4846
5072
  this.sanitizeTempOrderProducts(tempOrder);
4847
- _context24.next = 18;
4848
- return this.recalculateSummary({
5073
+ _context24.next = 25;
5074
+ return this.recalculateSummary(_objectSpread({
4849
5075
  createIfMissing: true
4850
- });
4851
- case 18:
5076
+ }, isCurrentOrder ? {
5077
+ isCurrentOrder: isCurrentOrder
5078
+ } : {}));
5079
+ case 25:
5080
+ summary = _context24.sent;
5081
+ if (!(isCurrentOrder && (!isCurrentOrder() || !summary))) {
5082
+ _context24.next = 28;
5083
+ break;
5084
+ }
5085
+ return _context24.abrupt("return");
5086
+ case 28:
4852
5087
  this.persistTempOrder();
4853
5088
  this.emitPromotionApplied(promotionPayload);
4854
- case 20:
5089
+ case 30:
4855
5090
  case "end":
4856
5091
  return _context24.stop();
4857
5092
  }
4858
5093
  }, _callee22, this);
4859
5094
  }));
4860
- function finalizeProductOrderMutation(_x21, _x22) {
5095
+ function finalizeProductOrderMutation(_x22, _x23) {
4861
5096
  return _finalizeProductOrderMutation.apply(this, arguments);
4862
5097
  }
4863
5098
  return finalizeProductOrderMutation;
@@ -4881,15 +5116,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4881
5116
  _normalizedIncoming$p2,
4882
5117
  _booking_uid,
4883
5118
  _metadata,
5119
+ _productToAdd$_extend,
4884
5120
  _productToAdd$metadat,
4885
5121
  _origin,
4886
- _this32 = this;
5122
+ _this33 = this;
4887
5123
  var linked = booking ? this.createLinkedProductAndBooking({
4888
5124
  product: product,
4889
5125
  booking: booking
4890
5126
  }) : null;
4891
5127
  var productToAdd = (linked === null || linked === void 0 ? void 0 : linked.product) || product;
4892
- this.assertAndLockProductSettlement(tempOrder, productToAdd);
4893
5128
  var disableMerge = (options === null || options === void 0 ? void 0 : options.disableMerge) === true;
4894
5129
  var incomingFingerprint = disableMerge ? '' : buildProductLineFingerprint(getProductSkuOptions(productToAdd), productToAdd.product_bundle);
4895
5130
  var normalizedIncoming = this.normalizeVirtualSettlementProductIfEnabled(mergeOrderProductDisplayFields(productToAdd, normalizeOrderProduct(productToAdd)));
@@ -4916,29 +5151,33 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4916
5151
  var hasIncomingProductNote = this.hasOrderProductLineNote(normalizedIncoming);
4917
5152
  var hasIncomingManualProductDiscount = isManualProductDiscountProduct(normalizedIncoming);
4918
5153
  var hasIncomingBookingUid = this.hasLinkedBookingUid(productToAdd) || this.hasLinkedBookingUid(normalizedIncoming);
5154
+ var holderRelationsPatch = !hasIncomingBookingUid ? (_productToAdd$_extend = productToAdd._extend) === null || _productToAdd$_extend === void 0 ? void 0 : _productToAdd$_extend.holder_relations : undefined;
5155
+ var hasIncomingHolder = Array.isArray(holderRelationsPatch) && holderRelationsPatch.length > 0;
4919
5156
  var isIncomingCustomItem = ((_productToAdd$metadat = productToAdd.metadata) === null || _productToAdd$metadat === void 0 || (_productToAdd$metadat = _productToAdd$metadat.origin) === null || _productToAdd$metadat === void 0 ? void 0 : _productToAdd$metadat.isCustomItem) === true || ((_origin = productToAdd._origin) === null || _origin === void 0 ? void 0 : _origin.isCustomItem) === true;
4920
- var shouldForceNewLine = disableMerge || !!booking || hasIncomingGoodPass || isIncomingPersistedEntitlementPass || hasIncomingBookingUid || isIncomingCustomItem || isWeighingProduct;
5157
+ var shouldForceNewLine = disableMerge || !!booking || hasIncomingGoodPass || isIncomingPersistedEntitlementPass || hasIncomingBookingUid || hasIncomingHolder || isIncomingCustomItem || isWeighingProduct;
4921
5158
  var matchedIndex = shouldForceNewLine ? -1 : tempOrder.products.findIndex(function (item) {
4922
- if (_this32.hasGoodPassDiscount(item)) return false;
4923
- var isRuntimeEntitlementPass = _this32.isRuntimeEntitlementAppend(item, tempOrder);
5159
+ var _item$metadata4;
5160
+ if (_this33.hasGoodPassDiscount(item)) return false;
5161
+ if (getProductHolderRelations(tempOrder, item).length > 0 || hasAssignedHolderId((_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.holder_id)) return false;
5162
+ var isRuntimeEntitlementPass = _this33.isRuntimeEntitlementAppend(item, tempOrder);
4924
5163
  if (isIncomingEntitlementAppend !== isRuntimeEntitlementPass) {
4925
5164
  return false;
4926
5165
  }
4927
- if (isIncomingEntitlementAppend && _this32.isPersistedProductLine(item)) {
5166
+ if (isIncomingEntitlementAppend && _this33.isPersistedProductLine(item)) {
4928
5167
  return false;
4929
5168
  }
4930
- var hasExistingProductNote = _this32.hasOrderProductLineNote(item);
5169
+ var hasExistingProductNote = _this33.hasOrderProductLineNote(item);
4931
5170
  if ((hasIncomingProductNote || hasExistingProductNote) && (!isRuntimeEntitlementPass || String(normalizedIncoming.note || '').trim() !== String(item.note || '').trim())) {
4932
5171
  return false;
4933
5172
  }
4934
5173
  var hasExistingManualProductDiscount = isManualProductDiscountProduct(item);
4935
- if (isRuntimeEntitlementPass && !_this32.hasSameEntitlementMergePriceConfig(normalizedIncoming, item)) {
5174
+ if (isRuntimeEntitlementPass && !_this33.hasSameEntitlementMergePriceConfig(normalizedIncoming, item)) {
4936
5175
  return false;
4937
5176
  }
4938
5177
  if ((hasIncomingManualProductDiscount || hasExistingManualProductDiscount) && !isRuntimeEntitlementPass) {
4939
5178
  return false;
4940
5179
  }
4941
- if (_this32.isPersistedProductLine(item)) return false;
5180
+ if (_this33.isPersistedProductLine(item)) return false;
4942
5181
  if (item.product_id !== productToAdd.product_id) return false;
4943
5182
  if (item.product_variant_id !== productToAdd.product_variant_id) return false;
4944
5183
  var existedFingerprint = buildProductLineFingerprint(getProductSkuOptions(item), item.product_bundle);
@@ -4947,9 +5186,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4947
5186
  var matchedProduct = matchedIndex === -1 ? null : tempOrder.products[matchedIndex];
4948
5187
  var existedFingerprint = matchedProduct ? buildProductLineFingerprint(getProductSkuOptions(matchedProduct), matchedProduct.product_bundle) : '';
4949
5188
  var commitProductLine = function commitProductLine(shouldMerge) {
5189
+ var _options$beforeCommit;
5190
+ options === null || options === void 0 || (_options$beforeCommit = options.beforeCommit) === null || _options$beforeCommit === void 0 || _options$beforeCommit.call(options);
5191
+ _this33.assertAndLockProductSettlement(tempOrder, productToAdd);
4950
5192
  var committedProduct;
4951
5193
  if (matchedIndex === -1 || !matchedProduct || !shouldMerge) {
4952
- _this32.captureProductRuntime(tempOrder, productToAdd, normalizedIncoming);
5194
+ _this33.captureProductRuntime(tempOrder, productToAdd, normalizedIncoming);
4953
5195
  if (linked) {
4954
5196
  normalizedIncoming.booking_uid = linked.bookingUid;
4955
5197
  normalizedIncoming.metadata = _objectSpread(_objectSpread({}, normalizedIncoming.metadata || {}), {}, {
@@ -4967,7 +5209,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4967
5209
  var _targetProduct$metada;
4968
5210
  var targetProduct = matchedProduct;
4969
5211
  var targetUid = (_targetProduct$metada = targetProduct.metadata) === null || _targetProduct$metada === void 0 ? void 0 : _targetProduct$metada.unique_identification_number;
4970
- var normalizedProduct = _this32.normalizeVirtualSettlementProductIfEnabled(mergeOrderProductDisplayFields(targetProduct, normalizeOrderProduct(_objectSpread(_objectSpread({}, productToAdd), {}, {
5212
+ var normalizedProduct = _this33.normalizeVirtualSettlementProductIfEnabled(mergeOrderProductDisplayFields(targetProduct, normalizeOrderProduct(_objectSpread(_objectSpread({}, productToAdd), {}, {
4971
5213
  metadata: _objectSpread(_objectSpread({}, productToAdd.metadata || {}), {}, {
4972
5214
  unique_identification_number: targetUid
4973
5215
  })
@@ -4990,7 +5232,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4990
5232
  order_detail_id: targetProduct.order_detail_id,
4991
5233
  num: nextNum
4992
5234
  });
4993
- _this32.captureProductRuntime(tempOrder, productToAdd, tempOrder.products[matchedIndex], targetUid);
5235
+ _this33.captureProductRuntime(tempOrder, productToAdd, tempOrder.products[matchedIndex], targetUid);
4994
5236
  committedProduct = tempOrder.products[matchedIndex];
4995
5237
  if (matchedIndex !== tempOrder.products.length - 1) {
4996
5238
  var mergedProduct = tempOrder.products[matchedIndex];
@@ -5000,6 +5242,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5000
5242
  if (linked) {
5001
5243
  tempOrder.bookings = [].concat(_toConsumableArray(tempOrder.bookings || []), [linked.booking]);
5002
5244
  }
5245
+ replaceProductHolderRelations(tempOrder, committedProduct, holderRelationsPatch);
5003
5246
  return committedProduct;
5004
5247
  };
5005
5248
  if (!matchedProduct) {
@@ -5100,12 +5343,24 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5100
5343
  key: "addProductToOrder",
5101
5344
  value: (function () {
5102
5345
  var _addProductToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23(product, booking, options) {
5103
- var _this33 = this;
5104
- var tempOrder, salesNoteDrafts, mutationSnapshot, attachSalesNoteDrafts, rollbackProductAndNotesMutation, insertAfterProductUid, anchorIndex, insertAtIndex, _ref71, _productRecord$num, productRecord, splitCount, i, splitLine, committedProduct, _committedProduct, _committedProduct2;
5346
+ var _this34 = this;
5347
+ var availabilityCommitGuard, liveTempOrder, beforeCommit, tempOrder, guardedMutationFields, readGuardedMutationFields, guardedMutationBaseline, salesNoteDrafts, mutationSnapshot, attachSalesNoteDrafts, rollbackProductAndNotesMutation, insertAfterProductUid, anchorIndex, insertAtIndex, _ref71, _productRecord$num, productRecord, splitCount, i, splitLine, committedProduct, _committedProduct, _committedProduct2, committedIdentity, isCurrentOrder;
5105
5348
  return _regeneratorRuntime().wrap(function _callee23$(_context25) {
5106
5349
  while (1) switch (_context25.prev = _context25.next) {
5107
5350
  case 0:
5108
- tempOrder = this.ensureTempOrder();
5351
+ availabilityCommitGuard = options === null || options === void 0 ? void 0 : options.availabilityCommitGuard;
5352
+ availabilityCommitGuard === null || availabilityCommitGuard === void 0 || availabilityCommitGuard();
5353
+ liveTempOrder = this.ensureTempOrder();
5354
+ beforeCommit = this.createCartIntentCommitGuard('add_product', liveTempOrder); // 自动预约在草稿上准备完整批次,避免拆票期间暴露半成品,或在失败时
5355
+ // 用整单快照回滚而抹掉其他入口的并发修改。人工路径保持原有写入行为。
5356
+ tempOrder = availabilityCommitGuard ? cloneDeep(liveTempOrder) : liveTempOrder;
5357
+ guardedMutationFields = ['products', 'bookings', 'notes', '_extend', 'metadata', 'currency_code', 'currency_symbol', 'currency_format'];
5358
+ readGuardedMutationFields = function readGuardedMutationFields(order) {
5359
+ return Object.fromEntries(guardedMutationFields.map(function (key) {
5360
+ return [key, order[key]];
5361
+ }));
5362
+ };
5363
+ guardedMutationBaseline = availabilityCommitGuard ? cloneDeep(readGuardedMutationFields(liveTempOrder)) : null;
5109
5364
  salesNoteDrafts = ((options === null || options === void 0 ? void 0 : options.salesNotes) || []).map(function (draft) {
5110
5365
  return {
5111
5366
  note_type: String(draft.note_type || '').trim(),
@@ -5117,6 +5372,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5117
5372
  });
5118
5373
  mutationSnapshot = salesNoteDrafts.length > 0 ? {
5119
5374
  products: cloneDeep(tempOrder.products || []),
5375
+ holder_relations: cloneDeep(tempOrder.holder_relations),
5120
5376
  bookings: cloneDeep(tempOrder.bookings || []),
5121
5377
  notes: cloneDeep(tempOrder.notes || []),
5122
5378
  extend: cloneDeep(tempOrder._extend || {})
@@ -5129,7 +5385,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5129
5385
  throw new Error('[Order Notes] 商品行缺少 unique_identification_number');
5130
5386
  }
5131
5387
  salesNoteDrafts.forEach(function (draft) {
5132
- _this33.setSalesNoteOnTempOrder(tempOrder, {
5388
+ _this34.setSalesNoteOnTempOrder(tempOrder, {
5133
5389
  note_type: draft.note_type,
5134
5390
  target: {
5135
5391
  target_type: 'order_detail',
@@ -5142,6 +5398,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5142
5398
  rollbackProductAndNotesMutation = function rollbackProductAndNotesMutation() {
5143
5399
  if (!mutationSnapshot) return;
5144
5400
  tempOrder.products = mutationSnapshot.products;
5401
+ if (mutationSnapshot.holder_relations === undefined) delete tempOrder.holder_relations;else tempOrder.holder_relations = mutationSnapshot.holder_relations;
5145
5402
  tempOrder.bookings = mutationSnapshot.bookings;
5146
5403
  tempOrder.notes = mutationSnapshot.notes;
5147
5404
  tempOrder._extend = mutationSnapshot.extend;
@@ -5152,22 +5409,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5152
5409
  var uid = ((_line$metadata = line.metadata) === null || _line$metadata === void 0 ? void 0 : _line$metadata.unique_identification_number) || line.unique_identification_number;
5153
5410
  return uid !== undefined && uid !== null && String(uid) === String(insertAfterProductUid);
5154
5411
  }) : -1;
5155
- insertAtIndex = anchorIndex >= 0 ? anchorIndex + 1 : undefined;
5156
- _context25.prev = 8;
5412
+ insertAtIndex = options !== null && options !== void 0 && options.insertAtStart ? 0 : anchorIndex >= 0 ? anchorIndex + 1 : undefined;
5413
+ _context25.prev = 15;
5157
5414
  if (!booking) {
5158
- _context25.next = 33;
5415
+ _context25.next = 42;
5159
5416
  break;
5160
5417
  }
5161
5418
  productRecord = product;
5162
5419
  splitCount = getSafeProductNum((_ref71 = (_productRecord$num = productRecord.num) !== null && _productRecord$num !== void 0 ? _productRecord$num : productRecord.product_quantity) !== null && _ref71 !== void 0 ? _ref71 : 1);
5163
5420
  if (!(splitCount > 1)) {
5164
- _context25.next = 27;
5421
+ _context25.next = 35;
5165
5422
  break;
5166
5423
  }
5167
5424
  i = 0;
5168
- case 14:
5425
+ case 21:
5169
5426
  if (!(i < splitCount)) {
5170
- _context25.next = 25;
5427
+ _context25.next = 33;
5171
5428
  break;
5172
5429
  }
5173
5430
  splitLine = this.createSplitBookingLine(productRecord, booking, i, splitCount);
@@ -5185,67 +5442,125 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5185
5442
  delete splitLine.booking.metadata.unique_identification_number;
5186
5443
  }
5187
5444
  }
5188
- _context25.next = 19;
5445
+ _context25.next = 26;
5189
5446
  return this.appendProductLineToTempOrder(tempOrder, splitLine.product, splitLine.booking, {
5190
5447
  insertAtIndex: insertAtIndex,
5191
- disableMerge: options === null || options === void 0 ? void 0 : options.disableMerge
5448
+ disableMerge: options === null || options === void 0 ? void 0 : options.disableMerge,
5449
+ beforeCommit: beforeCommit
5192
5450
  });
5193
- case 19:
5451
+ case 26:
5194
5452
  committedProduct = _context25.sent;
5453
+ availabilityCommitGuard === null || availabilityCommitGuard === void 0 || availabilityCommitGuard();
5195
5454
  attachSalesNoteDrafts(committedProduct);
5196
5455
  if (insertAtIndex !== undefined) insertAtIndex += 1;
5197
- case 22:
5456
+ case 30:
5198
5457
  i += 1;
5199
- _context25.next = 14;
5458
+ _context25.next = 21;
5200
5459
  break;
5201
- case 25:
5202
- _context25.next = 31;
5460
+ case 33:
5461
+ _context25.next = 40;
5203
5462
  break;
5204
- case 27:
5205
- _context25.next = 29;
5463
+ case 35:
5464
+ _context25.next = 37;
5206
5465
  return this.appendProductLineToTempOrder(tempOrder, product, cloneDeep(booking), {
5207
5466
  insertAtIndex: insertAtIndex,
5208
- disableMerge: options === null || options === void 0 ? void 0 : options.disableMerge
5467
+ disableMerge: options === null || options === void 0 ? void 0 : options.disableMerge,
5468
+ beforeCommit: beforeCommit
5209
5469
  });
5210
- case 29:
5470
+ case 37:
5211
5471
  _committedProduct = _context25.sent;
5472
+ availabilityCommitGuard === null || availabilityCommitGuard === void 0 || availabilityCommitGuard();
5212
5473
  attachSalesNoteDrafts(_committedProduct);
5213
- case 31:
5214
- _context25.next = 37;
5474
+ case 40:
5475
+ _context25.next = 47;
5215
5476
  break;
5216
- case 33:
5217
- _context25.next = 35;
5477
+ case 42:
5478
+ _context25.next = 44;
5218
5479
  return this.appendProductLineToTempOrder(tempOrder, product, undefined, {
5219
5480
  insertAtIndex: insertAtIndex,
5220
- disableMerge: options === null || options === void 0 ? void 0 : options.disableMerge
5481
+ disableMerge: options === null || options === void 0 ? void 0 : options.disableMerge,
5482
+ beforeCommit: beforeCommit
5221
5483
  });
5222
- case 35:
5484
+ case 44:
5223
5485
  _committedProduct2 = _context25.sent;
5486
+ availabilityCommitGuard === null || availabilityCommitGuard === void 0 || availabilityCommitGuard();
5224
5487
  attachSalesNoteDrafts(_committedProduct2);
5225
- case 37:
5226
- _context25.next = 43;
5488
+ case 47:
5489
+ if (!availabilityCommitGuard) {
5490
+ _context25.next = 53;
5491
+ break;
5492
+ }
5493
+ availabilityCommitGuard();
5494
+ beforeCommit();
5495
+ // 调用方的结构 revision 可能不包括备注、价格或结算元数据。
5496
+ // 本次会覆盖的字段也要保持原值,不能让草稿覆盖并发编辑。
5497
+ if (isEqual(readGuardedMutationFields(liveTempOrder), guardedMutationBaseline)) {
5498
+ _context25.next = 52;
5499
+ break;
5500
+ }
5501
+ throw Object.assign(new Error('预约加购期间订单已变化,请重新选择'), {
5502
+ code: 'AVAILABILITY_SELECTION_STALE'
5503
+ });
5504
+ case 52:
5505
+ // 从最后一次门禁到真正新增之间不再 await。只发布本次新增会改写的
5506
+ // 字段;其余订单字段继续使用 live 对象,外部持有的订单引用也不变。
5507
+ Object.assign(liveTempOrder, readGuardedMutationFields(tempOrder));
5508
+ case 53:
5509
+ _context25.next = 59;
5227
5510
  break;
5228
- case 39:
5229
- _context25.prev = 39;
5230
- _context25.t0 = _context25["catch"](8);
5511
+ case 55:
5512
+ _context25.prev = 55;
5513
+ _context25.t0 = _context25["catch"](15);
5231
5514
  rollbackProductAndNotesMutation();
5232
5515
  throw _context25.t0;
5233
- case 43:
5234
- _context25.next = 45;
5235
- return this.finalizeProductOrderMutation(tempOrder);
5236
- case 45:
5516
+ case 59:
5517
+ if (!availabilityCommitGuard) {
5518
+ _context25.next = 73;
5519
+ break;
5520
+ }
5521
+ committedIdentity = [liveTempOrder.order_id, liveTempOrder.external_sale_number];
5522
+ isCurrentOrder = function isCurrentOrder() {
5523
+ var _options$availability, _options$availability2;
5524
+ return _this34.store.tempOrder === liveTempOrder && liveTempOrder.order_id === committedIdentity[0] && liveTempOrder.external_sale_number === committedIdentity[1] && ((_options$availability = options === null || options === void 0 || (_options$availability2 = options.availabilityCommitTargetGuard) === null || _options$availability2 === void 0 ? void 0 : _options$availability2.call(options)) !== null && _options$availability !== void 0 ? _options$availability : true);
5525
+ };
5526
+ _context25.prev = 62;
5527
+ // 新增已发布,即使后续报价/促销收尾失败,也不能向调用方报告未加购。
5528
+ // 先保存已提交行;异步结果只允许写回仍属于本次提交的订单。
5529
+ if (isCurrentOrder()) this.persistTempOrder();
5530
+ _context25.next = 66;
5531
+ return this.finalizeProductOrderMutation(liveTempOrder, {
5532
+ isCurrentOrder: isCurrentOrder
5533
+ });
5534
+ case 66:
5535
+ _context25.next = 71;
5536
+ break;
5537
+ case 68:
5538
+ _context25.prev = 68;
5539
+ _context25.t1 = _context25["catch"](62);
5540
+ this.logWarning('addProductToOrder committed; finalization failed', {
5541
+ product_id: product.product_id,
5542
+ committed: true,
5543
+ error: _context25.t1 instanceof Error ? _context25.t1.message : String(_context25.t1)
5544
+ });
5545
+ case 71:
5546
+ _context25.next = 75;
5547
+ break;
5548
+ case 73:
5549
+ _context25.next = 75;
5550
+ return this.finalizeProductOrderMutation(liveTempOrder);
5551
+ case 75:
5237
5552
  this.logInfo('addProductToOrder success', {
5238
5553
  product_id: product.product_id,
5239
5554
  with_booking: !!booking
5240
5555
  });
5241
- return _context25.abrupt("return", tempOrder.products);
5242
- case 47:
5556
+ return _context25.abrupt("return", liveTempOrder.products);
5557
+ case 77:
5243
5558
  case "end":
5244
5559
  return _context25.stop();
5245
5560
  }
5246
- }, _callee23, this, [[8, 39]]);
5561
+ }, _callee23, this, [[15, 55], [62, 68]]);
5247
5562
  }));
5248
- function addProductToOrder(_x23, _x24, _x25) {
5563
+ function addProductToOrder(_x24, _x25, _x26) {
5249
5564
  return _addProductToOrder.apply(this, arguments);
5250
5565
  }
5251
5566
  return addProductToOrder;
@@ -5264,7 +5579,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5264
5579
  key: "addProductsToOrder",
5265
5580
  value: (function () {
5266
5581
  var _addProductsToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24(items, options) {
5267
- var tempOrder, _iterator20, _step20, item, product, booking, _ref72, _productRecord$num2, productRecord, splitCount, i, splitLine, _appendResult, appendResult;
5582
+ var tempOrder, beforeCommit, _iterator20, _step20, item, product, booking, _ref72, _productRecord$num2, productRecord, splitCount, i, splitLine, _appendResult, appendResult;
5268
5583
  return _regeneratorRuntime().wrap(function _callee24$(_context26) {
5269
5584
  while (1) switch (_context26.prev = _context26.next) {
5270
5585
  case 0:
@@ -5275,89 +5590,94 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5275
5590
  }
5276
5591
  return _context26.abrupt("return", tempOrder.products);
5277
5592
  case 3:
5593
+ beforeCommit = this.createCartIntentCommitGuard('add_product', tempOrder);
5278
5594
  _iterator20 = _createForOfIteratorHelper(items || []);
5279
- _context26.prev = 4;
5595
+ _context26.prev = 5;
5280
5596
  _iterator20.s();
5281
- case 6:
5597
+ case 7:
5282
5598
  if ((_step20 = _iterator20.n()).done) {
5283
- _context26.next = 32;
5599
+ _context26.next = 33;
5284
5600
  break;
5285
5601
  }
5286
5602
  item = _step20.value;
5287
5603
  product = item.product, booking = item.booking;
5288
5604
  if (product) {
5289
- _context26.next = 11;
5605
+ _context26.next = 12;
5290
5606
  break;
5291
5607
  }
5292
- return _context26.abrupt("continue", 30);
5293
- case 11:
5608
+ return _context26.abrupt("continue", 31);
5609
+ case 12:
5294
5610
  if (!booking) {
5295
- _context26.next = 26;
5611
+ _context26.next = 27;
5296
5612
  break;
5297
5613
  }
5298
5614
  productRecord = product;
5299
5615
  splitCount = getSafeProductNum((_ref72 = (_productRecord$num2 = productRecord.num) !== null && _productRecord$num2 !== void 0 ? _productRecord$num2 : productRecord.product_quantity) !== null && _ref72 !== void 0 ? _ref72 : 1);
5300
5616
  if (!(splitCount > 1)) {
5301
- _context26.next = 26;
5617
+ _context26.next = 27;
5302
5618
  break;
5303
5619
  }
5304
5620
  i = 0;
5305
- case 16:
5621
+ case 17:
5306
5622
  if (!(i < splitCount)) {
5307
- _context26.next = 25;
5623
+ _context26.next = 26;
5308
5624
  break;
5309
5625
  }
5310
5626
  splitLine = this.createSplitBookingLine(productRecord, booking, i, splitCount);
5311
- _appendResult = this.appendProductLineToTempOrder(tempOrder, splitLine.product, splitLine.booking);
5627
+ _appendResult = this.appendProductLineToTempOrder(tempOrder, splitLine.product, splitLine.booking, {
5628
+ beforeCommit: beforeCommit
5629
+ });
5312
5630
  if (!_appendResult) {
5313
- _context26.next = 22;
5631
+ _context26.next = 23;
5314
5632
  break;
5315
5633
  }
5316
- _context26.next = 22;
5634
+ _context26.next = 23;
5317
5635
  return _appendResult;
5318
- case 22:
5636
+ case 23:
5319
5637
  i += 1;
5320
- _context26.next = 16;
5638
+ _context26.next = 17;
5321
5639
  break;
5322
- case 25:
5323
- return _context26.abrupt("continue", 30);
5324
5640
  case 26:
5325
- appendResult = this.appendProductLineToTempOrder(tempOrder, product, booking);
5641
+ return _context26.abrupt("continue", 31);
5642
+ case 27:
5643
+ appendResult = this.appendProductLineToTempOrder(tempOrder, product, booking, {
5644
+ beforeCommit: beforeCommit
5645
+ });
5326
5646
  if (!appendResult) {
5327
- _context26.next = 30;
5647
+ _context26.next = 31;
5328
5648
  break;
5329
5649
  }
5330
- _context26.next = 30;
5650
+ _context26.next = 31;
5331
5651
  return appendResult;
5332
- case 30:
5333
- _context26.next = 6;
5652
+ case 31:
5653
+ _context26.next = 7;
5334
5654
  break;
5335
- case 32:
5336
- _context26.next = 37;
5655
+ case 33:
5656
+ _context26.next = 38;
5337
5657
  break;
5338
- case 34:
5339
- _context26.prev = 34;
5340
- _context26.t0 = _context26["catch"](4);
5658
+ case 35:
5659
+ _context26.prev = 35;
5660
+ _context26.t0 = _context26["catch"](5);
5341
5661
  _iterator20.e(_context26.t0);
5342
- case 37:
5343
- _context26.prev = 37;
5662
+ case 38:
5663
+ _context26.prev = 38;
5344
5664
  _iterator20.f();
5345
- return _context26.finish(37);
5346
- case 40:
5347
- _context26.next = 42;
5665
+ return _context26.finish(38);
5666
+ case 41:
5667
+ _context26.next = 43;
5348
5668
  return this.finalizeProductOrderMutation(tempOrder, options);
5349
- case 42:
5669
+ case 43:
5350
5670
  this.logInfo('addProductsToOrder success', {
5351
5671
  itemsCount: items.length
5352
5672
  });
5353
5673
  return _context26.abrupt("return", tempOrder.products);
5354
- case 44:
5674
+ case 45:
5355
5675
  case "end":
5356
5676
  return _context26.stop();
5357
5677
  }
5358
- }, _callee24, this, [[4, 34, 37, 40]]);
5678
+ }, _callee24, this, [[5, 35, 38, 41]]);
5359
5679
  }));
5360
- function addProductsToOrder(_x26, _x27) {
5680
+ function addProductsToOrder(_x27, _x28) {
5361
5681
  return _addProductsToOrder.apply(this, arguments);
5362
5682
  }
5363
5683
  return addProductsToOrder;
@@ -5365,12 +5685,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5365
5685
  }, {
5366
5686
  key: "getFullCoveragePassDiscounts",
5367
5687
  value: function getFullCoveragePassDiscounts(product) {
5368
- var _product$_extend;
5688
+ var _product$_extend2;
5369
5689
  var discountList = _toConsumableArray(product.discount_list || []);
5370
5690
  (product.product_bundle || []).forEach(function (item) {
5371
5691
  discountList.push.apply(discountList, _toConsumableArray((item === null || item === void 0 ? void 0 : item.discount_list) || []));
5372
5692
  });
5373
- ((product === null || product === void 0 || (_product$_extend = product._extend) === null || _product$_extend === void 0 || (_product$_extend = _product$_extend.other) === null || _product$_extend === void 0 ? void 0 : _product$_extend.bundle) || []).forEach(function (item) {
5693
+ ((product === null || product === void 0 || (_product$_extend2 = product._extend) === null || _product$_extend2 === void 0 || (_product$_extend2 = _product$_extend2.other) === null || _product$_extend2 === void 0 ? void 0 : _product$_extend2.bundle) || []).forEach(function (item) {
5374
5694
  discountList.push.apply(discountList, _toConsumableArray((item === null || item === void 0 ? void 0 : item.discount_list) || []));
5375
5695
  });
5376
5696
  return discountList.filter(function (item) {
@@ -5409,7 +5729,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5409
5729
  }, {
5410
5730
  key: "hasSameEntitlementMergePriceConfig",
5411
5731
  value: function hasSameEntitlementMergePriceConfig(incoming, existing) {
5412
- var _this34 = this;
5732
+ var _this35 = this;
5413
5733
  var buildPriceConfig = function buildPriceConfig(product) {
5414
5734
  var metadata = product.metadata || {};
5415
5735
  var bundle = (product.product_bundle || []).map(function (item) {
@@ -5425,10 +5745,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5425
5745
  return JSON.stringify(left).localeCompare(JSON.stringify(right));
5426
5746
  });
5427
5747
  return JSON.stringify({
5428
- original_price: _this34.normalizeFingerprintMoney(product.original_price),
5429
- source_product_price: _this34.normalizeFingerprintMoney(metadata.source_product_price),
5430
- main_product_original_price: _this34.normalizeFingerprintMoney(metadata.main_product_original_price),
5431
- price_override: _this34.normalizeFingerprintMoney(metadata.price_override),
5748
+ original_price: _this35.normalizeFingerprintMoney(product.original_price),
5749
+ source_product_price: _this35.normalizeFingerprintMoney(metadata.source_product_price),
5750
+ main_product_original_price: _this35.normalizeFingerprintMoney(metadata.main_product_original_price),
5751
+ price_override: _this35.normalizeFingerprintMoney(metadata.price_override),
5432
5752
  is_manual_discount: Boolean(metadata.is_manual_discount),
5433
5753
  bundle: bundle
5434
5754
  });
@@ -5445,17 +5765,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5445
5765
  }, {
5446
5766
  key: "preservePersistedBundlePriceFields",
5447
5767
  value: function preservePersistedBundlePriceFields(previousBundles, nextBundles) {
5448
- var _this35 = this;
5768
+ var _this36 = this;
5449
5769
  if (!Array.isArray(nextBundles)) return nextBundles;
5450
5770
  if (!Array.isArray(previousBundles) || previousBundles.length === 0) return nextBundles;
5451
5771
  var previousByIdentity = new Map();
5452
5772
  previousBundles.forEach(function (bundle) {
5453
- var identity = _this35.getBundleRuntimeIdentity(bundle);
5773
+ var identity = _this36.getBundleRuntimeIdentity(bundle);
5454
5774
  if (identity) previousByIdentity.set(identity, bundle);
5455
5775
  });
5456
5776
  return nextBundles.map(function (bundle, index) {
5457
5777
  if (!bundle || _typeof(bundle) !== 'object') return bundle;
5458
- var previous = previousByIdentity.get(_this35.getBundleRuntimeIdentity(bundle)) || previousBundles[index];
5778
+ var previous = previousByIdentity.get(_this36.getBundleRuntimeIdentity(bundle)) || previousBundles[index];
5459
5779
  if (!previous || _typeof(previous) !== 'object') return bundle;
5460
5780
  return _objectSpread(_objectSpread(_objectSpread({}, bundle), (bundle.cover === undefined || bundle.cover === null || bundle.cover === '') && previous.cover !== undefined && previous.cover !== null && previous.cover !== '' ? {
5461
5781
  cover: previous.cover
@@ -5469,10 +5789,28 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5469
5789
  });
5470
5790
  });
5471
5791
  }
5792
+ }, {
5793
+ key: "isRestrictedCartProductUpdate",
5794
+ value: function isRestrictedCartProductUpdate(tempOrder, params) {
5795
+ var _this$orderHooks4, _params$updates;
5796
+ if (!((_this$orderHooks4 = this.orderHooks) !== null && _this$orderHooks4 !== void 0 && _this$orderHooks4.beforeCartIntentCommit)) return false;
5797
+ if (params.booking || Object.keys(params.updates || {}).some(function (key) {
5798
+ return key !== 'num';
5799
+ })) {
5800
+ return true;
5801
+ }
5802
+ if (((_params$updates = params.updates) === null || _params$updates === void 0 ? void 0 : _params$updates.num) === undefined) return false;
5803
+ var uid = params.unique_identification_number;
5804
+ var product = uid !== undefined ? tempOrder.products.find(function (item) {
5805
+ var _item$metadata5;
5806
+ return String(((_item$metadata5 = item.metadata) === null || _item$metadata5 === void 0 ? void 0 : _item$metadata5.unique_identification_number) || item.unique_identification_number || '') === String(uid);
5807
+ }) : tempOrder.products[getProductIdentityIndex(tempOrder.products, params)];
5808
+ return !product || getSafeProductNum(params.updates.num) > product.num;
5809
+ }
5472
5810
  }, {
5473
5811
  key: "applyOrderProductUpdateToTempOrder",
5474
5812
  value: function applyOrderProductUpdateToTempOrder(tempOrder, params, reapplyWeighedDiscountProductUids) {
5475
- var _targetProduct$metada2, _product_sku, _metadata2, _metadata3, _metadata4, _metadata5, _metadata6, _metadata7, _metadata8, _metadata9, _metadata10, _nextProduct$metadata2, _targetProduct$metada20, _tempOrder$products$p, _tempOrder$products$p2;
5813
+ var _targetProduct$metada2, _product_sku, _metadata2, _metadata3, _metadata4, _metadata5, _metadata6, _metadata7, _metadata8, _metadata9, _metadata10, _nextProduct$metadata2, _targetProduct$metada20, _updates$_extend, _tempOrder$products$p, _tempOrder$products$p2;
5476
5814
  var product_id = params.product_id,
5477
5815
  product_variant_id = params.product_variant_id,
5478
5816
  updates = params.updates,
@@ -5500,8 +5838,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5500
5838
  if (unique_identification_number !== undefined) {
5501
5839
  var targetUid = String(unique_identification_number);
5502
5840
  productIndex = tempOrder.products.findIndex(function (item) {
5503
- var _item$metadata4;
5504
- return String(((_item$metadata4 = item.metadata) === null || _item$metadata4 === void 0 ? void 0 : _item$metadata4.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5841
+ var _item$metadata6;
5842
+ return String(((_item$metadata6 = item.metadata) === null || _item$metadata6 === void 0 ? void 0 : _item$metadata6.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5505
5843
  });
5506
5844
  }
5507
5845
  if (productIndex === -1) {
@@ -5701,6 +6039,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5701
6039
  if (uid) reapplyWeighedDiscountProductUids === null || reapplyWeighedDiscountProductUids === void 0 || reapplyWeighedDiscountProductUids.push(String(uid));
5702
6040
  }
5703
6041
  tempOrder.products[productIndex] = normalizedProduct;
6042
+ replaceProductHolderRelations(tempOrder, normalizedProduct, (_updates$_extend = updates._extend) === null || _updates$_extend === void 0 ? void 0 : _updates$_extend.holder_relations);
5704
6043
  this.syncTempOrderHolderFromBookings(tempOrder);
5705
6044
  this.captureProductRuntime(tempOrder, updates, tempOrder.products[productIndex], (_tempOrder$products$p = tempOrder.products[productIndex].metadata) === null || _tempOrder$products$p === void 0 ? void 0 : _tempOrder$products$p.unique_identification_number);
5706
6045
  return (_tempOrder$products$p2 = tempOrder.products[productIndex].metadata) === null || _tempOrder$products$p2 === void 0 ? void 0 : _tempOrder$products$p2.unique_identification_number;
@@ -5714,35 +6053,38 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5714
6053
  while (1) switch (_context27.prev = _context27.next) {
5715
6054
  case 0:
5716
6055
  tempOrder = this.ensureTempOrder();
6056
+ if (this.isRestrictedCartProductUpdate(tempOrder, params)) {
6057
+ this.createCartIntentCommitGuard('update_product', tempOrder)();
6058
+ }
5717
6059
  reapplyWeighedDiscountProductUids = [];
5718
6060
  updatedProductUid = this.applyOrderProductUpdateToTempOrder(tempOrder, params, reapplyWeighedDiscountProductUids);
5719
- _context27.next = 5;
6061
+ _context27.next = 6;
5720
6062
  return this.evaluatePromotion();
5721
- case 5:
6063
+ case 6:
5722
6064
  promotionPayload = _context27.sent;
5723
6065
  this.applyDiscount({
5724
6066
  reapplyWeighedDiscountProductUids: reapplyWeighedDiscountProductUids,
5725
6067
  reapplyBookingDiscountProductUids: params.allow_booking_discount_reapply && updatedProductUid ? [String(updatedProductUid)] : undefined
5726
6068
  });
5727
6069
  this.sanitizeTempOrderProducts(tempOrder);
5728
- _context27.next = 10;
6070
+ _context27.next = 11;
5729
6071
  return this.recalculateSummary({
5730
6072
  createIfMissing: true
5731
6073
  });
5732
- case 10:
6074
+ case 11:
5733
6075
  this.persistTempOrder();
5734
6076
  this.emitPromotionApplied(promotionPayload);
5735
6077
  this.logInfo('updateOrderProduct success', {
5736
6078
  params: params
5737
6079
  });
5738
6080
  return _context27.abrupt("return", tempOrder.products);
5739
- case 14:
6081
+ case 15:
5740
6082
  case "end":
5741
6083
  return _context27.stop();
5742
6084
  }
5743
6085
  }, _callee25, this);
5744
6086
  }));
5745
- function updateOrderProduct(_x28) {
6087
+ function updateOrderProduct(_x29) {
5746
6088
  return _updateOrderProduct.apply(this, arguments);
5747
6089
  }
5748
6090
  return updateOrderProduct;
@@ -5751,7 +6093,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5751
6093
  key: "updateOrderProducts",
5752
6094
  value: function () {
5753
6095
  var _updateOrderProducts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26(paramsList) {
5754
- var _this36 = this;
6096
+ var _this37 = this;
5755
6097
  var tempOrder, reapplyWeighedDiscountProductUids, reapplyBookingDiscountProductUids;
5756
6098
  return _regeneratorRuntime().wrap(function _callee26$(_context28) {
5757
6099
  while (1) switch (_context28.prev = _context28.next) {
@@ -5763,32 +6105,37 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5763
6105
  }
5764
6106
  return _context28.abrupt("return", tempOrder.products);
5765
6107
  case 3:
6108
+ if (paramsList.some(function (params) {
6109
+ return _this37.isRestrictedCartProductUpdate(tempOrder, params);
6110
+ })) {
6111
+ this.createCartIntentCommitGuard('update_product', tempOrder)();
6112
+ }
5766
6113
  reapplyWeighedDiscountProductUids = [];
5767
6114
  reapplyBookingDiscountProductUids = paramsList.reduce(function (acc, params) {
5768
- var updatedProductUid = _this36.applyOrderProductUpdateToTempOrder(tempOrder, params, reapplyWeighedDiscountProductUids);
6115
+ var updatedProductUid = _this37.applyOrderProductUpdateToTempOrder(tempOrder, params, reapplyWeighedDiscountProductUids);
5769
6116
  // 批量改预约时间时,延迟到最后一次折扣计算里统一恢复已选预约折扣卡。
5770
6117
  if (params.allow_booking_discount_reapply && updatedProductUid) {
5771
6118
  acc.push(String(updatedProductUid));
5772
6119
  }
5773
6120
  return acc;
5774
6121
  }, []);
5775
- _context28.next = 7;
6122
+ _context28.next = 8;
5776
6123
  return this.finalizeAfterProductsMutation(tempOrder, {
5777
6124
  reapplyWeighedDiscountProductUids: reapplyWeighedDiscountProductUids,
5778
6125
  reapplyBookingDiscountProductUids: reapplyBookingDiscountProductUids.length ? reapplyBookingDiscountProductUids : undefined
5779
6126
  });
5780
- case 7:
6127
+ case 8:
5781
6128
  this.logInfo('updateOrderProduct success', {
5782
6129
  paramsList: paramsList
5783
6130
  });
5784
6131
  return _context28.abrupt("return", tempOrder.products);
5785
- case 9:
6132
+ case 10:
5786
6133
  case "end":
5787
6134
  return _context28.stop();
5788
6135
  }
5789
6136
  }, _callee26, this);
5790
6137
  }));
5791
- function updateOrderProducts(_x29) {
6138
+ function updateOrderProducts(_x30) {
5792
6139
  return _updateOrderProducts.apply(this, arguments);
5793
6140
  }
5794
6141
  return updateOrderProducts;
@@ -5796,12 +6143,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5796
6143
  }, {
5797
6144
  key: "updateOrderProductQuantity",
5798
6145
  value: function () {
5799
- var _updateOrderProductQuantity = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27(params) {
5800
- var _targetProduct$metada22;
5801
- var product_id, product_variant_id, num, unique_identification_number, identity_key, product_sku, product_bundle, tempOrder, identityLookup, productIndex, targetUid, targetProduct, isPersistedOrderLine, normalizedProduct, settlementSnapshot, currencyProductId, asset, requiredAmount, balance, isVirtualSettlement, promotionPayload;
6146
+ var _updateOrderProductQuantity = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27(params, options) {
6147
+ var _this$store$tempOrder9, _targetProduct$metada22;
6148
+ var isCurrentOrder, product_id, product_variant_id, num, unique_identification_number, identity_key, product_sku, product_bundle, tempOrder, identityLookup, productIndex, targetUid, targetProduct, isPersistedOrderLine, normalizedProduct, settlementSnapshot, currencyProductId, asset, requiredAmount, balance, isVirtualSettlement, promotionPayload;
5802
6149
  return _regeneratorRuntime().wrap(function _callee27$(_context29) {
5803
6150
  while (1) switch (_context29.prev = _context29.next) {
5804
6151
  case 0:
6152
+ isCurrentOrder = options === null || options === void 0 ? void 0 : options.isCurrentOrder;
6153
+ if (!(isCurrentOrder && !isCurrentOrder())) {
6154
+ _context29.next = 3;
6155
+ break;
6156
+ }
6157
+ return _context29.abrupt("return", ((_this$store$tempOrder9 = this.store.tempOrder) === null || _this$store$tempOrder9 === void 0 ? void 0 : _this$store$tempOrder9.products) || []);
6158
+ case 3:
5805
6159
  product_id = params.product_id, product_variant_id = params.product_variant_id, num = params.num, unique_identification_number = params.unique_identification_number, identity_key = params.identity_key, product_sku = params.product_sku, product_bundle = params.product_bundle;
5806
6160
  tempOrder = this.ensureTempOrder();
5807
6161
  this.repairDuplicateProductLineIdentities(tempOrder);
@@ -5822,19 +6176,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5822
6176
  if (unique_identification_number !== undefined) {
5823
6177
  targetUid = String(unique_identification_number);
5824
6178
  productIndex = tempOrder.products.findIndex(function (item) {
5825
- var _item$metadata5;
5826
- return String(((_item$metadata5 = item.metadata) === null || _item$metadata5 === void 0 ? void 0 : _item$metadata5.unique_identification_number) || item.unique_identification_number || '') === targetUid;
6179
+ var _item$metadata7;
6180
+ return String(((_item$metadata7 = item.metadata) === null || _item$metadata7 === void 0 ? void 0 : _item$metadata7.unique_identification_number) || item.unique_identification_number || '') === targetUid;
5827
6181
  });
5828
6182
  }
5829
6183
  if (productIndex === -1) {
5830
6184
  productIndex = getProductIdentityIndex(tempOrder.products, identityLookup);
5831
6185
  }
5832
6186
  if (!(productIndex === -1)) {
5833
- _context29.next = 13;
6187
+ _context29.next = 16;
5834
6188
  break;
5835
6189
  }
5836
6190
  throw new Error('[Order] 目标商品不存在,无法更新数量');
5837
- case 13:
6191
+ case 16:
5838
6192
  targetProduct = tempOrder.products[productIndex];
5839
6193
  isPersistedOrderLine = targetProduct.order_detail_id !== undefined && targetProduct.order_detail_id !== null;
5840
6194
  normalizedProduct = this.normalizeVirtualSettlementProductIfEnabled(normalizeOrderProduct(_objectSpread(_objectSpread({}, targetProduct), {}, {
@@ -5846,7 +6200,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5846
6200
  normalizedProduct.discount_list = normalizeOrderProductDiscountList(isPersistedOrderLine ? syncReducedEntitlementPassUsageCount(normalizedProduct.discount_list, targetProduct.num, normalizedProduct.num) : normalizedProduct.discount_list);
5847
6201
  settlementSnapshot = getSelectedSettlementSnapshot(normalizedProduct);
5848
6202
  if (!(this.isMultiCurrencySettlementEnabled() && (settlementSnapshot === null || settlementSnapshot === void 0 ? void 0 : settlementSnapshot.settlement_type) === 'virtual_currency' && tempOrder.customer_id && Number(tempOrder.customer_id) !== 1)) {
5849
- _context29.next = 27;
6203
+ _context29.next = 30;
5850
6204
  break;
5851
6205
  }
5852
6206
  currencyProductId = Number(settlementSnapshot.currency_product_id);
@@ -5854,11 +6208,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5854
6208
  return Number(item === null || item === void 0 ? void 0 : item.product_id) === currencyProductId;
5855
6209
  });
5856
6210
  if (asset) {
5857
- _context29.next = 23;
6211
+ _context29.next = 26;
5858
6212
  break;
5859
6213
  }
5860
6214
  throw new VirtualCurrencyAssetNotFoundError(currencyProductId);
5861
- case 23:
6215
+ case 26:
5862
6216
  requiredAmount = tempOrder.products.reduce(function (sum, item, index) {
5863
6217
  var current = index === productIndex ? normalizedProduct : item;
5864
6218
  var currentSnapshot = getSelectedSettlementSnapshot(current);
@@ -5866,50 +6220,73 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5866
6220
  }, new Decimal(0));
5867
6221
  balance = new Decimal(asset.balance || 0);
5868
6222
  if (!balance.lt(requiredAmount)) {
5869
- _context29.next = 27;
6223
+ _context29.next = 30;
5870
6224
  break;
5871
6225
  }
5872
6226
  throw new VirtualCurrencyBalanceError(balance.toFixed(2), requiredAmount.toFixed(2));
5873
- case 27:
6227
+ case 30:
6228
+ if (normalizedProduct.num > targetProduct.num) {
6229
+ this.createCartIntentCommitGuard('increase_quantity', tempOrder)();
6230
+ }
6231
+ if (!(isCurrentOrder && !isCurrentOrder())) {
6232
+ _context29.next = 33;
6233
+ break;
6234
+ }
6235
+ return _context29.abrupt("return", tempOrder.products);
6236
+ case 33:
5874
6237
  tempOrder.products[productIndex] = normalizedProduct;
6238
+ if (!isCurrentOrder) {
6239
+ _context29.next = 39;
6240
+ break;
6241
+ }
6242
+ _context29.next = 37;
6243
+ return this.finalizeProductOrderMutation(tempOrder, {
6244
+ skipEditDiscountConfigRefresh: true,
6245
+ isCurrentOrder: isCurrentOrder
6246
+ });
6247
+ case 37:
6248
+ _context29.next = 55;
6249
+ break;
6250
+ case 39:
5875
6251
  this.prepareVirtualSettlementTempOrder(tempOrder);
5876
6252
  isVirtualSettlement = this.isActiveVirtualSettlementOrder(tempOrder);
5877
6253
  if (isVirtualSettlement) {
5878
- _context29.next = 36;
6254
+ _context29.next = 47;
5879
6255
  break;
5880
6256
  }
5881
- _context29.next = 33;
6257
+ _context29.next = 44;
5882
6258
  return this.evaluatePromotion();
5883
- case 33:
6259
+ case 44:
5884
6260
  _context29.t0 = _context29.sent;
5885
- _context29.next = 37;
6261
+ _context29.next = 48;
5886
6262
  break;
5887
- case 36:
6263
+ case 47:
5888
6264
  _context29.t0 = null;
5889
- case 37:
6265
+ case 48:
5890
6266
  promotionPayload = _context29.t0;
5891
6267
  if (!isVirtualSettlement) {
5892
6268
  this.applyDiscount();
5893
6269
  }
5894
6270
  this.sanitizeTempOrderProducts(tempOrder);
5895
- _context29.next = 42;
6271
+ _context29.next = 53;
5896
6272
  return this.recalculateSummary({
5897
6273
  createIfMissing: true
5898
6274
  });
5899
- case 42:
6275
+ case 53:
5900
6276
  this.persistTempOrder();
5901
6277
  this.emitPromotionApplied(promotionPayload);
6278
+ case 55:
5902
6279
  this.logInfo('updateOrderProductQuantity success', {
5903
6280
  params: params
5904
6281
  });
5905
6282
  return _context29.abrupt("return", tempOrder.products);
5906
- case 46:
6283
+ case 57:
5907
6284
  case "end":
5908
6285
  return _context29.stop();
5909
6286
  }
5910
6287
  }, _callee27, this);
5911
6288
  }));
5912
- function updateOrderProductQuantity(_x30) {
6289
+ function updateOrderProductQuantity(_x31, _x32) {
5913
6290
  return _updateOrderProductQuantity.apply(this, arguments);
5914
6291
  }
5915
6292
  return updateOrderProductQuantity;
@@ -5978,7 +6355,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5978
6355
  }
5979
6356
  }, _callee28, this);
5980
6357
  }));
5981
- function finalizeAfterProductsMutation(_x31, _x32) {
6358
+ function finalizeAfterProductsMutation(_x33, _x34) {
5982
6359
  return _finalizeAfterProductsMutation.apply(this, arguments);
5983
6360
  }
5984
6361
  return finalizeAfterProductsMutation;
@@ -5994,18 +6371,26 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5994
6371
  key: "removeProductsFromOrder",
5995
6372
  value: (function () {
5996
6373
  var _removeProductsFromOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee29(identities, options) {
5997
- var _this37 = this;
5998
- var tempOrder, productsBeforeRemove, bookingsBeforeRemove, preserveDisplayPosition, anchorIndex, productsAfterAnchor, matchedProducts, removedProducts, _i2, _removedProducts, product, linkedBookingUidsToRemove, _iterator21, _step21, _loop3, remainingProductIndex, remainingProduct, nextProduct, productsWithoutRemaining, nextProductIndex;
6374
+ var _this$store$tempOrder10,
6375
+ _this38 = this;
6376
+ var isCurrentOrder, tempOrder, productsBeforeRemove, bookingsBeforeRemove, preserveDisplayPosition, anchorIndex, productsAfterAnchor, matchedProducts, removedProducts, _i2, _removedProducts, product, linkedBookingUidsToRemove, _iterator21, _step21, _loop3, remainingProductIndex, remainingProduct, nextProduct, productsWithoutRemaining, nextProductIndex;
5999
6377
  return _regeneratorRuntime().wrap(function _callee29$(_context32) {
6000
6378
  while (1) switch (_context32.prev = _context32.next) {
6001
6379
  case 0:
6380
+ isCurrentOrder = options === null || options === void 0 ? void 0 : options.isCurrentOrder;
6381
+ if (!(isCurrentOrder && !isCurrentOrder())) {
6382
+ _context32.next = 3;
6383
+ break;
6384
+ }
6385
+ return _context32.abrupt("return", ((_this$store$tempOrder10 = this.store.tempOrder) === null || _this$store$tempOrder10 === void 0 ? void 0 : _this$store$tempOrder10.products) || []);
6386
+ case 3:
6002
6387
  tempOrder = this.ensureTempOrder();
6003
6388
  if (identities.length) {
6004
- _context32.next = 3;
6389
+ _context32.next = 6;
6005
6390
  break;
6006
6391
  }
6007
6392
  return _context32.abrupt("return", tempOrder.products);
6008
- case 3:
6393
+ case 6:
6009
6394
  // 商品删除会同步删除以商品行为主关系的 Notes;快照不完整时禁止产生孤儿 Relation。
6010
6395
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6011
6396
  this.repairDuplicateProductLineIdentities(tempOrder);
@@ -6013,8 +6398,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6013
6398
  bookingsBeforeRemove = tempOrder.bookings || [];
6014
6399
  preserveDisplayPosition = options === null || options === void 0 ? void 0 : options.preserveDisplayPosition;
6015
6400
  anchorIndex = preserveDisplayPosition ? productsBeforeRemove.findIndex(function (item) {
6016
- var _item$metadata6;
6017
- var uid = ((_item$metadata6 = item.metadata) === null || _item$metadata6 === void 0 ? void 0 : _item$metadata6.unique_identification_number) || item.unique_identification_number;
6401
+ var _item$metadata8;
6402
+ var uid = ((_item$metadata8 = item.metadata) === null || _item$metadata8 === void 0 ? void 0 : _item$metadata8.unique_identification_number) || item.unique_identification_number;
6018
6403
  return uid !== undefined && uid !== null && String(uid) === String(preserveDisplayPosition.anchorProductUid);
6019
6404
  }) : -1;
6020
6405
  productsAfterAnchor = anchorIndex >= 0 ? productsBeforeRemove.slice(anchorIndex + 1) : [];
@@ -6037,7 +6422,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6037
6422
  }
6038
6423
  linkedBookingUidsToRemove = new Set();
6039
6424
  _iterator21 = _createForOfIteratorHelper(matchedProducts);
6040
- _context32.prev = 16;
6425
+ _context32.prev = 19;
6041
6426
  _loop3 = /*#__PURE__*/_regeneratorRuntime().mark(function _loop3() {
6042
6427
  var _metadata11, _metadata12, _metadata13, _metadata14;
6043
6428
  var product, productUid, productBookingUid, isAddTimeProduct;
@@ -6059,7 +6444,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6059
6444
  }
6060
6445
  if (productUid !== undefined && productUid !== null && productUid !== '') {
6061
6446
  bookingsBeforeRemove.forEach(function (booking) {
6062
- var bookingUid = _this37.getBookingUniqueIdentificationNumber(booking);
6447
+ var bookingUid = _this38.getBookingUniqueIdentificationNumber(booking);
6063
6448
  if (bookingUid && String((booking === null || booking === void 0 ? void 0 : booking.product_uid) || '') === String(productUid)) {
6064
6449
  linkedBookingUidsToRemove.add(bookingUid);
6065
6450
  }
@@ -6072,33 +6457,33 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6072
6457
  }, _loop3);
6073
6458
  });
6074
6459
  _iterator21.s();
6075
- case 19:
6460
+ case 22:
6076
6461
  if ((_step21 = _iterator21.n()).done) {
6077
- _context32.next = 25;
6462
+ _context32.next = 28;
6078
6463
  break;
6079
6464
  }
6080
- return _context32.delegateYield(_loop3(), "t0", 21);
6081
- case 21:
6465
+ return _context32.delegateYield(_loop3(), "t0", 24);
6466
+ case 24:
6082
6467
  if (!_context32.t0) {
6083
- _context32.next = 23;
6468
+ _context32.next = 26;
6084
6469
  break;
6085
6470
  }
6086
- return _context32.abrupt("continue", 23);
6087
- case 23:
6088
- _context32.next = 19;
6471
+ return _context32.abrupt("continue", 26);
6472
+ case 26:
6473
+ _context32.next = 22;
6089
6474
  break;
6090
- case 25:
6091
- _context32.next = 30;
6475
+ case 28:
6476
+ _context32.next = 33;
6092
6477
  break;
6093
- case 27:
6094
- _context32.prev = 27;
6095
- _context32.t1 = _context32["catch"](16);
6096
- _iterator21.e(_context32.t1);
6097
6478
  case 30:
6098
6479
  _context32.prev = 30;
6099
- _iterator21.f();
6100
- return _context32.finish(30);
6480
+ _context32.t1 = _context32["catch"](19);
6481
+ _iterator21.e(_context32.t1);
6101
6482
  case 33:
6483
+ _context32.prev = 33;
6484
+ _iterator21.f();
6485
+ return _context32.finish(33);
6486
+ case 36:
6102
6487
  if (linkedBookingUidsToRemove.size > 0) {
6103
6488
  // 删除主预约商品时,同步移除挂在同一 booking_uid 下的加时商品,避免残留孤儿行。
6104
6489
  tempOrder.products = (tempOrder.products || []).filter(function (line) {
@@ -6110,8 +6495,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6110
6495
  }
6111
6496
  if (preserveDisplayPosition && anchorIndex >= 0) {
6112
6497
  remainingProductIndex = tempOrder.products.findIndex(function (item) {
6113
- var _item$metadata7;
6114
- var uid = ((_item$metadata7 = item.metadata) === null || _item$metadata7 === void 0 ? void 0 : _item$metadata7.unique_identification_number) || item.unique_identification_number;
6498
+ var _item$metadata9;
6499
+ var uid = ((_item$metadata9 = item.metadata) === null || _item$metadata9 === void 0 ? void 0 : _item$metadata9.unique_identification_number) || item.unique_identification_number;
6115
6500
  return uid !== undefined && uid !== null && String(uid) === String(preserveDisplayPosition.remainingProductUid);
6116
6501
  });
6117
6502
  if (remainingProductIndex >= 0) {
@@ -6124,21 +6509,37 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6124
6509
  tempOrder.products = nextProductIndex >= 0 ? [].concat(_toConsumableArray(productsWithoutRemaining.slice(0, nextProductIndex)), [remainingProduct], _toConsumableArray(productsWithoutRemaining.slice(nextProductIndex))) : [].concat(_toConsumableArray(productsWithoutRemaining), [remainingProduct]);
6125
6510
  }
6126
6511
  }
6512
+ removeProductHolderRelations(tempOrder, productsBeforeRemove.filter(function (product) {
6513
+ return !tempOrder.products.includes(product);
6514
+ }));
6127
6515
  this.removeSalesNotesForMissingProductLines(tempOrder);
6128
- _context32.next = 38;
6516
+ if (!isCurrentOrder) {
6517
+ _context32.next = 45;
6518
+ break;
6519
+ }
6520
+ _context32.next = 43;
6521
+ return this.finalizeProductOrderMutation(tempOrder, {
6522
+ skipEditDiscountConfigRefresh: true,
6523
+ isCurrentOrder: isCurrentOrder
6524
+ });
6525
+ case 43:
6526
+ _context32.next = 47;
6527
+ break;
6528
+ case 45:
6529
+ _context32.next = 47;
6129
6530
  return this.finalizeAfterProductsMutation(tempOrder);
6130
- case 38:
6531
+ case 47:
6131
6532
  this.logInfo('removeProductsFromOrder success', {
6132
6533
  identities: identities
6133
6534
  });
6134
6535
  return _context32.abrupt("return", tempOrder.products);
6135
- case 40:
6536
+ case 49:
6136
6537
  case "end":
6137
6538
  return _context32.stop();
6138
6539
  }
6139
- }, _callee29, this, [[16, 27, 30, 33]]);
6540
+ }, _callee29, this, [[19, 30, 33, 36]]);
6140
6541
  }));
6141
- function removeProductsFromOrder(_x33, _x34) {
6542
+ function removeProductsFromOrder(_x35, _x36) {
6142
6543
  return _removeProductsFromOrder.apply(this, arguments);
6143
6544
  }
6144
6545
  return removeProductsFromOrder;
@@ -6157,7 +6558,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6157
6558
  }
6158
6559
  }, _callee30, this);
6159
6560
  }));
6160
- function removeProductFromOrder(_x35, _x36) {
6561
+ function removeProductFromOrder(_x37, _x38) {
6161
6562
  return _removeProductFromOrder.apply(this, arguments);
6162
6563
  }
6163
6564
  return removeProductFromOrder;
@@ -6176,6 +6577,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6176
6577
  case 0:
6177
6578
  tempOrder = this.ensureTempOrder();
6178
6579
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6580
+ removeProductHolderRelations(tempOrder, tempOrder.products);
6179
6581
  tempOrder.products = [];
6180
6582
  tempOrder.bookings = [];
6181
6583
  releaseTempOrderSettlementState(tempOrder);
@@ -6186,22 +6588,22 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6186
6588
  productsByUid: {}
6187
6589
  });
6188
6590
  }
6189
- _context34.next = 10;
6591
+ _context34.next = 11;
6190
6592
  return this.evaluatePromotion();
6191
- case 10:
6593
+ case 11:
6192
6594
  promotionPayload = _context34.sent;
6193
6595
  this.applyDiscount();
6194
6596
  this.sanitizeTempOrderProducts(tempOrder);
6195
- _context34.next = 15;
6597
+ _context34.next = 16;
6196
6598
  return this.recalculateSummary({
6197
6599
  createIfMissing: true
6198
6600
  });
6199
- case 15:
6601
+ case 16:
6200
6602
  this.persistTempOrder();
6201
6603
  this.emitPromotionApplied(promotionPayload);
6202
6604
  this.logInfo('clearOrderCartLines success', {});
6203
6605
  return _context34.abrupt("return", tempOrder);
6204
- case 19:
6606
+ case 20:
6205
6607
  case "end":
6206
6608
  return _context34.stop();
6207
6609
  }
@@ -6227,6 +6629,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6227
6629
  case 0:
6228
6630
  tempOrder = this.ensureTempOrder();
6229
6631
  this.ensureSalesNotesLoadedForMutation(tempOrder);
6632
+ removeProductHolderRelations(tempOrder, tempOrder.products);
6230
6633
  tempOrder.products = [];
6231
6634
  tempOrder.bookings = [];
6232
6635
  this.removeSalesNotesForMissingProductLines(tempOrder);
@@ -6242,24 +6645,24 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6242
6645
  productsByUid: {}
6243
6646
  });
6244
6647
  }
6245
- _context35.next = 15;
6648
+ _context35.next = 16;
6246
6649
  return (_this$store$discount22 = this.store.discount) === null || _this$store$discount22 === void 0 ? void 0 : _this$store$discount22.setDiscountList([]);
6247
- case 15:
6248
- _context35.next = 17;
6650
+ case 16:
6651
+ _context35.next = 18;
6249
6652
  return (_this$store$discount23 = this.store.discount) === null || _this$store$discount23 === void 0 ? void 0 : _this$store$discount23.setOriginalDiscountList([]);
6250
- case 17:
6653
+ case 18:
6251
6654
  this.hasActiveCustomerBoundDiscount = false;
6252
6655
  this.lastUnfulfilledPromotions = [];
6253
6656
  this.lastGiftActions = null;
6254
- _context35.next = 22;
6657
+ _context35.next = 23;
6255
6658
  return this.recalculateSummary({
6256
6659
  createIfMissing: true
6257
6660
  });
6258
- case 22:
6661
+ case 23:
6259
6662
  this.persistTempOrder();
6260
6663
  this.logInfo('clearOrderForSettlementSwitch success', {});
6261
6664
  return _context35.abrupt("return", tempOrder);
6262
- case 25:
6665
+ case 26:
6263
6666
  case "end":
6264
6667
  return _context35.stop();
6265
6668
  }
@@ -6332,7 +6735,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6332
6735
  }
6333
6736
  }, _callee33, this);
6334
6737
  }));
6335
- function applyLocalPrintOrderNumbers(_x37) {
6738
+ function applyLocalPrintOrderNumbers(_x39) {
6336
6739
  return _applyLocalPrintOrderNumbers.apply(this, arguments);
6337
6740
  }
6338
6741
  return applyLocalPrintOrderNumbers;
@@ -6399,7 +6802,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6399
6802
  }
6400
6803
  }, _callee34, this);
6401
6804
  }));
6402
- function saveTempOrderAsDraft(_x38) {
6805
+ function saveTempOrderAsDraft(_x40) {
6403
6806
  return _saveTempOrderAsDraft.apply(this, arguments);
6404
6807
  }
6405
6808
  return saveTempOrderAsDraft;
@@ -6424,7 +6827,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6424
6827
  }
6425
6828
  }, _callee35, this);
6426
6829
  }));
6427
- function submitTempOrder(_x39) {
6830
+ function submitTempOrder(_x41) {
6428
6831
  return _submitTempOrder.apply(this, arguments);
6429
6832
  }
6430
6833
  return submitTempOrder;
@@ -6445,7 +6848,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6445
6848
  }
6446
6849
  }, _callee36, this);
6447
6850
  }));
6448
- function submitTempOrderAsync(_x40) {
6851
+ function submitTempOrderAsync(_x42) {
6449
6852
  return _submitTempOrderAsync.apply(this, arguments);
6450
6853
  }
6451
6854
  return submitTempOrderAsync;
@@ -6460,6 +6863,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6460
6863
  while (1) switch (_context40.prev = _context40.next) {
6461
6864
  case 0:
6462
6865
  tempOrder = this.ensureTempOrder();
6866
+ if (!requiresLocalPaymentRefresh(tempOrder)) {
6867
+ _context40.next = 3;
6868
+ break;
6869
+ }
6870
+ throw new Error(PAYMENT_REFRESH_MESSAGE);
6871
+ case 3:
6463
6872
  this.prepareVirtualSettlementTempOrder(tempOrder);
6464
6873
  isOnlineStorePlatform = this.isOnlineStorePlatform();
6465
6874
  shouldConfirmPendingVoucherPayments = (params === null || params === void 0 ? void 0 : params.confirmPendingVoucherPayments) !== false;
@@ -6481,25 +6890,25 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6481
6890
  }
6482
6891
  }
6483
6892
  this.persistTempOrder();
6484
- _context40.next = 10;
6893
+ _context40.next = 12;
6485
6894
  return this.recalculateSummary({
6486
6895
  createIfMissing: true
6487
6896
  });
6488
- case 10:
6897
+ case 12:
6489
6898
  _context40.t1 = _context40.sent;
6490
6899
  if (_context40.t1) {
6491
- _context40.next = 13;
6900
+ _context40.next = 15;
6492
6901
  break;
6493
6902
  }
6494
6903
  _context40.t1 = this.store.summary;
6495
- case 13:
6904
+ case 15:
6496
6905
  _context40.t0 = _context40.t1;
6497
6906
  if (_context40.t0) {
6498
- _context40.next = 16;
6907
+ _context40.next = 18;
6499
6908
  break;
6500
6909
  }
6501
6910
  _context40.t0 = createEmptySummary();
6502
- case 16:
6911
+ case 18:
6503
6912
  latestSummary = _context40.t0;
6504
6913
  effectiveCacheId = (_params$cacheId3 = params === null || params === void 0 ? void 0 : params.cacheId) !== null && _params$cacheId3 !== void 0 ? _params$cacheId3 : this.cacheId;
6505
6914
  hasPaymentStatusOverride = (params === null || params === void 0 ? void 0 : params.paymentStatus) !== undefined;
@@ -6536,10 +6945,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6536
6945
  if (!payload.created_at) {
6537
6946
  payload.created_at = dayjs().format('YYYY-MM-DD HH:mm:ss');
6538
6947
  }
6539
- _context40.next = 28;
6948
+ _context40.next = 30;
6540
6949
  return this.saveDraft();
6541
- case 28:
6542
- _context40.prev = 28;
6950
+ case 30:
6951
+ _context40.prev = 30;
6543
6952
  this.logInfo('submitTempOrder calling sales checkout', {
6544
6953
  orderId: payload.order_id,
6545
6954
  externalSaleNumber: payload.external_sale_number,
@@ -6549,26 +6958,26 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6549
6958
  smallTicketDataFlag: payload.small_ticket_data_flag,
6550
6959
  syncMode: payload.sync_mode
6551
6960
  });
6552
- _context40.next = 32;
6961
+ _context40.next = 34;
6553
6962
  return this.submitSalesOrder({
6554
6963
  query: payload
6555
6964
  });
6556
- case 32:
6965
+ case 34:
6557
6966
  result = _context40.sent;
6558
- _context40.next = 45;
6967
+ _context40.next = 47;
6559
6968
  break;
6560
- case 35:
6561
- _context40.prev = 35;
6562
- _context40.t2 = _context40["catch"](28);
6969
+ case 37:
6970
+ _context40.prev = 37;
6971
+ _context40.t2 = _context40["catch"](30);
6563
6972
  backendErrorResponse = this.extractSubmitErrorResponse(_context40.t2);
6564
6973
  if (!backendErrorResponse) {
6565
- _context40.next = 42;
6974
+ _context40.next = 44;
6566
6975
  break;
6567
6976
  }
6568
6977
  this.store.syncState = 'failed';
6569
6978
  this.logSubmitBackendRejected(backendErrorResponse, payload);
6570
6979
  return _context40.abrupt("return", backendErrorResponse);
6571
- case 42:
6980
+ case 44:
6572
6981
  this.store.syncState = 'failed';
6573
6982
  this.logError('submitTempOrder failed', {
6574
6983
  error: _context40.t2 instanceof Error ? _context40.t2.message : String(_context40.t2),
@@ -6578,15 +6987,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6578
6987
  paymentsCount: ((_payload$payments2 = payload.payments) === null || _payload$payments2 === void 0 ? void 0 : _payload$payments2.length) || 0
6579
6988
  });
6580
6989
  throw _context40.t2;
6581
- case 45:
6990
+ case 47:
6582
6991
  if (!this.isSubmitResponseRejected(result)) {
6583
- _context40.next = 49;
6992
+ _context40.next = 51;
6584
6993
  break;
6585
6994
  }
6586
6995
  this.store.syncState = 'failed';
6587
6996
  this.logSubmitBackendRejected(result, payload);
6588
6997
  return _context40.abrupt("return", result);
6589
- case 49:
6998
+ case 51:
6590
6999
  isLocalPendingSubmit = this.isLocalPendingSubmitResult(result); // need_sync=1 仅表示已进入本地同步队列,不能视为远端已确认 Notes。
6591
7000
  if (Object.prototype.hasOwnProperty.call(payload, 'notes') && !isLocalPendingSubmit) {
6592
7001
  salesNotesState = this.ensureSalesNotesRuntimeState(tempOrder);
@@ -6601,27 +7010,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6601
7010
  })
6602
7011
  });
6603
7012
  if (!(submittedOrderId !== null && submittedOrderId !== undefined)) {
6604
- _context40.next = 58;
7013
+ _context40.next = 60;
6605
7014
  break;
6606
7015
  }
6607
7016
  tempOrder.order_id = submittedOrderId;
6608
7017
  resultRecord = result;
6609
- _context40.next = 58;
7018
+ _context40.next = 60;
6610
7019
  return this.markLocalOrderSynced(submittedOrderId, (resultRecord === null || resultRecord === void 0 ? void 0 : resultRecord.data) || resultRecord || {});
6611
- case 58:
7020
+ case 60:
6612
7021
  if (isLocalPendingSubmit) {
6613
7022
  this.store.syncState = 'local';
6614
7023
  } else if (submittedOrderId === null || submittedOrderId === undefined) {
6615
7024
  this.store.syncState = 'submitted';
6616
7025
  }
6617
7026
  return _context40.abrupt("return", result);
6618
- case 60:
7027
+ case 62:
6619
7028
  case "end":
6620
7029
  return _context40.stop();
6621
7030
  }
6622
- }, _callee37, this, [[28, 35]]);
7031
+ }, _callee37, this, [[30, 37]]);
6623
7032
  }));
6624
- function runSubmitTempOrder(_x41) {
7033
+ function runSubmitTempOrder(_x43) {
6625
7034
  return _runSubmitTempOrder.apply(this, arguments);
6626
7035
  }
6627
7036
  return runSubmitTempOrder;
@@ -6648,7 +7057,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6648
7057
  }
6649
7058
  }, _callee38, this);
6650
7059
  }));
6651
- function markLocalOrderSynced(_x42, _x43) {
7060
+ function markLocalOrderSynced(_x44, _x45) {
6652
7061
  return _markLocalOrderSynced.apply(this, arguments);
6653
7062
  }
6654
7063
  return markLocalOrderSynced;
@@ -6691,10 +7100,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6691
7100
  value: function extractSubmitErrorResponse(error) {
6692
7101
  var _error$response,
6693
7102
  _error$response2,
6694
- _this38 = this;
7103
+ _this39 = this;
6695
7104
  var candidates = [error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data, error === null || error === void 0 ? void 0 : error.data, error === null || error === void 0 || (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.body, error === null || error === void 0 ? void 0 : error.body];
6696
7105
  return candidates.find(function (candidate) {
6697
- return _this38.isSubmitErrorResponse(candidate);
7106
+ return _this39.isSubmitErrorResponse(candidate);
6698
7107
  }) || null;
6699
7108
  }
6700
7109
  }, {
@@ -6722,7 +7131,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6722
7131
  key: "syncPaymentsToOrder",
6723
7132
  value: function () {
6724
7133
  var _syncPaymentsToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee39(params) {
6725
- var _this39 = this,
7134
+ var _this40 = this,
6726
7135
  _params$confirmPendin;
6727
7136
  var tempOrder, needsPaymentNumber, devicePrefix, mappedPayments, shouldConfirmPendingVoucherPayments, effectivePayments, completion, orderPaidPaymentTotal, paymentStatus, paymentSyncIdempotencyToken, enhancePayload, submitParams, submitResult;
6728
7137
  return _regeneratorRuntime().wrap(function _callee39$(_context42) {
@@ -6747,7 +7156,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6747
7156
  case 9:
6748
7157
  devicePrefix = _context42.t0;
6749
7158
  mappedPayments = mapPaymentItemsToOrderPayments((params.payments || []).map(function (payment) {
6750
- return _this39.normalizePaymentSource(payment, {
7159
+ return _this40.normalizePaymentSource(payment, {
6751
7160
  defaultPaid: false,
6752
7161
  devicePrefix: devicePrefix
6753
7162
  });
@@ -6818,7 +7227,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6818
7227
  }
6819
7228
  }, _callee39, this);
6820
7229
  }));
6821
- function syncPaymentsToOrder(_x44) {
7230
+ function syncPaymentsToOrder(_x46) {
6822
7231
  return _syncPaymentsToOrder.apply(this, arguments);
6823
7232
  }
6824
7233
  return syncPaymentsToOrder;
@@ -6826,7 +7235,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6826
7235
  }, {
6827
7236
  key: "createOrder",
6828
7237
  value: function createOrder(params) {
6829
- var _this40 = this;
7238
+ var _this41 = this;
6830
7239
  var order = _objectSpread({
6831
7240
  type: (params === null || params === void 0 ? void 0 : params.type) || 'appointment_booking',
6832
7241
  // 要从外面拿,virtual
@@ -6858,7 +7267,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6858
7267
 
6859
7268
  // 为预约补齐 holder 信息
6860
7269
  if (params !== null && params !== void 0 && (_params$extraData = params.extraData) !== null && _params$extraData !== void 0 && _params$extraData.is_add_holder_info) {
6861
- ensureCartItemOriginHolder(item, _this40.window);
7270
+ ensureCartItemOriginHolder(item, _this41.window);
6862
7271
  }
6863
7272
 
6864
7273
  // 购物车是否为普通商品
@@ -6946,7 +7355,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6946
7355
  }
6947
7356
  }, _callee40, this);
6948
7357
  }));
6949
- function submitOrder(_x45) {
7358
+ function submitOrder(_x47) {
6950
7359
  return _submitOrder.apply(this, arguments);
6951
7360
  }
6952
7361
  return submitOrder;
@@ -6985,7 +7394,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
6985
7394
  }
6986
7395
  }, _callee41, this);
6987
7396
  }));
6988
- function cancelOrder(_x46) {
7397
+ function cancelOrder(_x48) {
6989
7398
  return _cancelOrder.apply(this, arguments);
6990
7399
  }
6991
7400
  return cancelOrder;
@@ -7029,7 +7438,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7029
7438
  }
7030
7439
  }, _callee42, this);
7031
7440
  }));
7032
- function changeBookingStatus(_x47) {
7441
+ function changeBookingStatus(_x49) {
7033
7442
  return _changeBookingStatus.apply(this, arguments);
7034
7443
  }
7035
7444
  return changeBookingStatus;
@@ -7149,7 +7558,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7149
7558
  }
7150
7559
  }, _callee43, this, [[3, 15]]);
7151
7560
  }));
7152
- function createOrderByCheckout(_x48) {
7561
+ function createOrderByCheckout(_x50) {
7153
7562
  return _createOrderByCheckout.apply(this, arguments);
7154
7563
  }
7155
7564
  return createOrderByCheckout;
@@ -7164,7 +7573,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7164
7573
  case 0:
7165
7574
  url = params.url, query = params.query;
7166
7575
  fetchUrl = url || '/order/sales/checkout';
7167
- requestQuery = this.isSalesCheckoutHandledByOsServer(fetchUrl) ? query : stripOsPrivatePayloadFields(query);
7576
+ requestQuery = this.isSalesCheckoutHandledByOsServer(fetchUrl) ? query : stripLocalEftposState(stripOsPrivatePayloadFields(query));
7168
7577
  return _context47.abrupt("return", this.request.post(fetchUrl, requestQuery, {
7169
7578
  osServer: true,
7170
7579
  customToast: function customToast() {}
@@ -7175,7 +7584,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7175
7584
  }
7176
7585
  }, _callee44, this);
7177
7586
  }));
7178
- function submitSalesOrder(_x49) {
7587
+ function submitSalesOrder(_x51) {
7179
7588
  return _submitSalesOrder.apply(this, arguments);
7180
7589
  }
7181
7590
  return submitSalesOrder;
@@ -7232,7 +7641,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7232
7641
  }
7233
7642
  }, _callee45, this);
7234
7643
  }));
7235
- function sendCustomerPayLink(_x50) {
7644
+ function sendCustomerPayLink(_x52) {
7236
7645
  return _sendCustomerPayLink.apply(this, arguments);
7237
7646
  }
7238
7647
  return sendCustomerPayLink;
@@ -7257,12 +7666,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7257
7666
  params.forceRemote = false;
7258
7667
  }
7259
7668
  _context49.next = 6;
7260
- return this.request.get("/order/sales/".concat(encodeURIComponent(lookup)), _objectSpread({
7261
- with: ['products', 'bookings', 'payments', 'customer', 'summary', 'contacts_info', 'order_meta_list', 'refunds', 'notes']
7262
- }, params.forceRemote ? {
7263
- forceRemote: true
7264
- } : {}), {
7265
- osServer: true
7669
+ return loadSalesOrderSnapshot(this.request, {
7670
+ lookup: lookup,
7671
+ transport: 'os-server',
7672
+ forceRemote: params.forceRemote
7266
7673
  });
7267
7674
  case 6:
7268
7675
  res = _context49.sent;
@@ -7276,7 +7683,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7276
7683
  }
7277
7684
  }, _callee46, this);
7278
7685
  }));
7279
- function getSalesOrderByLookup(_x51) {
7686
+ function getSalesOrderByLookup(_x53) {
7280
7687
  return _getSalesOrderByLookup.apply(this, arguments);
7281
7688
  }
7282
7689
  return getSalesOrderByLookup;
@@ -7389,6 +7796,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7389
7796
  originalSalesSnapshot: _objectSpread(_objectSpread({
7390
7797
  summary: cloneDeep(this.store.summary),
7391
7798
  products: cloneDeep(nextTempOrder.products || []),
7799
+ holder_relations: cloneDeep(nextTempOrder.holder_relations),
7392
7800
  bookings: cloneDeep(nextTempOrder.bookings || []),
7393
7801
  payments: cloneDeep(nextTempOrder.payments || []),
7394
7802
  surcharges: cloneDeep(nextTempOrder.surcharges || []),
@@ -7447,7 +7855,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7447
7855
  }
7448
7856
  }, _callee47, this);
7449
7857
  }));
7450
- function hydrateTempOrderFromRecord(_x52, _x53) {
7858
+ function hydrateTempOrderFromRecord(_x54, _x55) {
7451
7859
  return _hydrateTempOrderFromRecord.apply(this, arguments);
7452
7860
  }
7453
7861
  return hydrateTempOrderFromRecord;
@@ -7561,7 +7969,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7561
7969
  }, {
7562
7970
  key: "normalizeTempOrderForRuntime",
7563
7971
  value: function normalizeTempOrderForRuntime(raw, options) {
7564
- var _this41 = this,
7972
+ var _this42 = this,
7565
7973
  _raw$_extend;
7566
7974
  var runtimeRaw = this.withoutSyntheticDraftOrderIdForRuntime(raw);
7567
7975
  var nextTempOrder = _objectSpread(_objectSpread({}, this.createDefaultTempOrderInstance()), runtimeRaw || {});
@@ -7583,15 +7991,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7583
7991
  delete nextTempOrder.total_refund_amount;
7584
7992
  delete nextTempOrder.holder_id;
7585
7993
  nextTempOrder.metadata = raw.metadata && _typeof(raw.metadata) === 'object' ? _objectSpread({}, raw.metadata) : {};
7994
+ var holderRelations = restoreLegacyHolderRelations(raw);
7995
+ if (holderRelations === undefined) delete nextTempOrder.holder_relations;else nextTempOrder.holder_relations = cloneDeep(holderRelations);
7996
+ ensureHolderRelationUuids(nextTempOrder);
7586
7997
  nextTempOrder.holder = raw.holder && _typeof(raw.holder) === 'object' ? _objectSpread({}, raw.holder) : null;
7587
7998
  var rawProducts = Array.isArray(raw.products) ? raw.products : [];
7588
7999
  nextTempOrder.products = rawProducts.length > 0 ? rawProducts.map(function (p) {
7589
- return _this41.normalizeHydratedOrderProduct(p, {
8000
+ return _this42.normalizeHydratedOrderProduct(p, {
7590
8001
  makeEditMark: options === null || options === void 0 ? void 0 : options.makeEditMark
7591
8002
  });
7592
8003
  }) : [];
7593
8004
  nextTempOrder.bookings = Array.isArray(raw.bookings) ? raw.bookings.map(function (b) {
7594
- var booking = _this41.normalizeHydratedBookingHolder(b || {});
8005
+ var booking = _this42.normalizeHydratedBookingHolder(b || {});
7595
8006
  return _objectSpread(_objectSpread({}, booking), {}, {
7596
8007
  is_all: normalizeBookingIsAll(booking),
7597
8008
  sub_type: normalizeBookingSubType(booking)
@@ -7671,6 +8082,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7671
8082
  }
7672
8083
  tempOrderExtend.productsByUid = productsByUid;
7673
8084
  this.hydrateLinkedBookingIdentity(nextTempOrder);
8085
+ nextTempOrder.products.forEach(function (product) {
8086
+ return _this42.sanitizeOrderProductForTempOrder(product);
8087
+ });
7674
8088
  if ((options === null || options === void 0 ? void 0 : options.ensureIdentity) !== false) {
7675
8089
  this.ensureExternalSaleNumber(nextTempOrder);
7676
8090
  }
@@ -7798,7 +8212,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7798
8212
  }, {
7799
8213
  key: "normalizeHydratedOrderProduct",
7800
8214
  value: function normalizeHydratedOrderProduct(product, options) {
7801
- var _this42 = this;
8215
+ var _this43 = this;
7802
8216
  var row = _objectSpread({}, product || {});
7803
8217
  if (row.num === undefined && row.product_quantity !== undefined) {
7804
8218
  row.num = row.product_quantity;
@@ -7806,7 +8220,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7806
8220
  var productSku = ensureProductSku(row);
7807
8221
  row.product_sku = _objectSpread(_objectSpread({}, productSku), {}, {
7808
8222
  option: normalizeProductSkuOptions(productSku.option.map(function (optionItem) {
7809
- return _this42.normalizeHydratedProductOptionItem(optionItem || {});
8223
+ return _this43.normalizeHydratedProductOptionItem(optionItem || {});
7810
8224
  }))
7811
8225
  });
7812
8226
  delete row["product_".concat('option', "_item")];
@@ -7855,7 +8269,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7855
8269
  });
7856
8270
  if (result.metadata) delete result.metadata.price_schema_version;
7857
8271
  var restored = restoreHydratedBundleDiscounts(result, normalizeOrderProductDiscountList);
7858
- return this.sanitizeOrderProductForTempOrder(this.normalizeVirtualSettlementProductIfEnabled(restored));
8272
+ return this.sanitizeOrderProductForTempOrder(this.normalizeVirtualSettlementProductIfEnabled(restored), true);
7859
8273
  }
7860
8274
  }, {
7861
8275
  key: "getLastOrderInfo",
@@ -7886,7 +8300,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7886
8300
  }
7887
8301
  }, _callee48, this);
7888
8302
  }));
7889
- function getOrderInfo(_x54) {
8303
+ function getOrderInfo(_x56) {
7890
8304
  return _getOrderInfo.apply(this, arguments);
7891
8305
  }
7892
8306
  return getOrderInfo;
@@ -7894,8 +8308,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7894
8308
  }, {
7895
8309
  key: "getVouchers",
7896
8310
  value: function getVouchers() {
7897
- var _this$store$tempOrder8;
7898
- return ((_this$store$tempOrder8 = this.store.tempOrder) === null || _this$store$tempOrder8 === void 0 ? void 0 : _this$store$tempOrder8.vouchers) || [];
8311
+ var _this$store$tempOrder11;
8312
+ return ((_this$store$tempOrder11 = this.store.tempOrder) === null || _this$store$tempOrder11 === void 0 ? void 0 : _this$store$tempOrder11.vouchers) || [];
7899
8313
  }
7900
8314
  }], [{
7901
8315
  key: "populateSavedAmounts",
@@ -7989,4 +8403,5 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
7989
8403
  }
7990
8404
  }]);
7991
8405
  return OrderModule;
7992
- }(BaseModule);
8406
+ }(BaseModule);
8407
+ export { isFulfillmentTimingBooking } from "./pickupTiming";