@pisell/pisellos 2.3.7 → 2.3.8

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.
@@ -3,15 +3,15 @@ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArra
3
3
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
4
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
5
5
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
6
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
7
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
8
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
9
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
10
6
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
11
7
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
12
8
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
13
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
10
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
12
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
14
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
15
15
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
16
16
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
17
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -38,6 +38,7 @@ import dayjs from 'dayjs';
38
38
  import { processCartPromotion, appendPromotionTags as _appendPromotionTags, getOrderProductUid as getPromotionUid } from "../../solution/BaseSales/utils/cartPromotion";
39
39
  import { buildProductLineFingerprint, getProductIdentityIndex, getSafeProductNum, isIdentityMatch, normalizeOrderProduct } from "../../solution/ScanOrder/utils";
40
40
  import { syncManualProductDiscountProductNum } from "./utils/manualProductDiscount";
41
+ import { expandHydratedProductsForDiscountCollection, restoreHydratedBundleDiscounts } from "./utils/bundleDiscountHydration";
41
42
  import { DiscountModule } from "../Discount";
42
43
  import { RulesModule } from "../Rules";
43
44
  import { UnavailableReason } from "../Rules/types";
@@ -64,6 +65,20 @@ function isManualProductDiscountProduct(product) {
64
65
  return (item === null || item === void 0 ? void 0 : item.type) === 'product';
65
66
  });
66
67
  }
68
+ var ORDER_PAYMENT_STATUS_PAID = 'paid';
69
+ var ORDER_PAYMENT_STATUS_PENDING = 'payment_pending';
70
+ function isVoucherPaymentRecord(payment) {
71
+ return (payment === null || payment === void 0 ? void 0 : payment.voucher_id) !== undefined && Number(payment.voucher_id) !== 0;
72
+ }
73
+ function hasSyncedOrderPaymentRecord(payment) {
74
+ return (payment === null || payment === void 0 ? void 0 : payment.order_payment_id) !== undefined && payment.order_payment_id !== null;
75
+ }
76
+ function isPendingVoucherPaymentRecord(payment) {
77
+ return isVoucherPaymentRecord(payment) && (payment === null || payment === void 0 ? void 0 : payment.status) === ORDER_PAYMENT_STATUS_PENDING;
78
+ }
79
+ function isPaidPaymentRecord(payment) {
80
+ return (payment === null || payment === void 0 ? void 0 : payment.status) === ORDER_PAYMENT_STATUS_PAID;
81
+ }
67
82
  export var OrderModule = /*#__PURE__*/function (_BaseModule) {
68
83
  _inherits(OrderModule, _BaseModule);
69
84
  var _super = _createSuper(OrderModule);
@@ -108,7 +123,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
108
123
  key: "collectHydratedEditDiscounts",
109
124
  value: function collectHydratedEditDiscounts(products) {
110
125
  var discountMap = new Map();
111
- var _iterator = _createForOfIteratorHelper(products || []),
126
+ var _iterator = _createForOfIteratorHelper(expandHydratedProductsForDiscountCollection(products)),
112
127
  _step;
113
128
  try {
114
129
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
@@ -138,6 +153,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
138
153
  discount: item === null || item === void 0 ? void 0 : item.discount,
139
154
  _num: Number((_ref6 = (_ref7 = (_item$metadata$num2 = item === null || item === void 0 || (_item$metadata2 = item.metadata) === null || _item$metadata2 === void 0 ? void 0 : _item$metadata2.num) !== null && _item$metadata$num2 !== void 0 ? _item$metadata$num2 : product === null || product === void 0 ? void 0 : product.num) !== null && _ref7 !== void 0 ? _ref7 : product === null || product === void 0 ? void 0 : product.product_quantity) !== null && _ref6 !== void 0 ? _ref6 : 1) || 1
140
155
  };
156
+ var existed = discountMap.get(key);
157
+ if (existed) {
158
+ existed.amount = Number(existed.amount || 0) + amount;
159
+ existed.used_par_value = String(Number(existed.used_par_value || 0) + amount);
160
+ existed.balance = String(Number(existed.balance || 0) + amount);
161
+ existed.applicableProductDetails = [].concat(_toConsumableArray(existed.applicableProductDetails || []), [detail]);
162
+ existed.appliedProductDetails = [].concat(_toConsumableArray(existed.appliedProductDetails || []), [detail]);
163
+ continue;
164
+ }
141
165
  discountMap.set(key, {
142
166
  id: key,
143
167
  product_name: '',
@@ -1253,6 +1277,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1253
1277
  return mapPaymentItemsToOrderPayments(payments, {
1254
1278
  includeVoided: false
1255
1279
  }).reduce(function (sum, payment) {
1280
+ if (!isPaidPaymentRecord(payment)) return sum;
1256
1281
  return sum.plus(_this4.calculatePaymentEffectiveAmount(payment));
1257
1282
  }, new Decimal(0));
1258
1283
  }
@@ -1381,7 +1406,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1381
1406
  var _this5 = this;
1382
1407
  return (payments || []).reduce(function (sum, payment) {
1383
1408
  var paymentRecord = payment;
1384
- if ((paymentRecord === null || paymentRecord === void 0 ? void 0 : paymentRecord.status) !== 'paid') return sum;
1409
+ if (!isPaidPaymentRecord(paymentRecord)) return sum;
1385
1410
  var isDepositPayment = paymentRecord.type === 'deposit' || paymentRecord.order_payment_type === 'deposit';
1386
1411
  if (!isDepositPayment) return sum;
1387
1412
  if (paymentRecord.origin_amount !== undefined && paymentRecord.origin_amount !== null && paymentRecord.origin_amount !== '') {
@@ -1532,7 +1557,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1532
1557
  var _this6 = this;
1533
1558
  return (payments || []).reduce(function (summary, payment) {
1534
1559
  var paymentRecord = payment;
1535
- if ((paymentRecord === null || paymentRecord === void 0 ? void 0 : paymentRecord.status) !== 'paid') return summary;
1560
+ if (!isPaidPaymentRecord(paymentRecord)) return summary;
1536
1561
  return {
1537
1562
  customerPaidAmount: summary.customerPaidAmount.plus(paymentRecord.amount || 0),
1538
1563
  orderPaidAmount: summary.orderPaidAmount.plus(paymentRecord.origin_amount || 0),
@@ -2101,6 +2126,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
2101
2126
  key: "restoreOrder",
2102
2127
  value: function restoreOrder() {
2103
2128
  var _this$store$discount11, _this$store$discount12;
2129
+ this.logInfo('restoreOrder start', {});
2104
2130
  var freshTempOrder = this.createDefaultTempOrderInstance();
2105
2131
  this.ensureExternalSaleNumber(freshTempOrder);
2106
2132
  this.store.tempOrder = freshTempOrder;
@@ -3172,6 +3198,76 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3172
3198
  this.persistTempOrder();
3173
3199
  return tempOrder.payments;
3174
3200
  }
3201
+ }, {
3202
+ key: "confirmPendingVoucherPaymentsInList",
3203
+ value: function confirmPendingVoucherPaymentsInList(payments) {
3204
+ return (payments || []).map(function (payment) {
3205
+ if (!isPendingVoucherPaymentRecord(payment)) return payment;
3206
+ return _objectSpread(_objectSpread({}, payment), {}, {
3207
+ status: ORDER_PAYMENT_STATUS_PAID
3208
+ });
3209
+ });
3210
+ }
3211
+ }, {
3212
+ key: "discardPendingVoucherPaymentsFromList",
3213
+ value: function discardPendingVoucherPaymentsFromList(payments) {
3214
+ return (payments || []).filter(function (payment) {
3215
+ return !isPendingVoucherPaymentRecord(payment);
3216
+ });
3217
+ }
3218
+ }, {
3219
+ key: "prepareVoucherPaymentsForSubmit",
3220
+ value: function prepareVoucherPaymentsForSubmit(payments) {
3221
+ var confirmPendingVoucherPayments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
3222
+ var mappedPayments = mapPaymentItemsToOrderPayments(payments || []);
3223
+ return confirmPendingVoucherPayments ? this.confirmPendingVoucherPaymentsInList(mappedPayments) : this.discardPendingVoucherPaymentsFromList(mappedPayments);
3224
+ }
3225
+ }, {
3226
+ key: "applyPaymentLifecycleChange",
3227
+ value: function applyPaymentLifecycleChange(tempOrder, options) {
3228
+ var _this19 = this;
3229
+ this.updateTempOrderPaymentStatus(tempOrder);
3230
+ if ((options === null || options === void 0 ? void 0 : options.persist) !== false) {
3231
+ this.persistTempOrder();
3232
+ }
3233
+ if ((options === null || options === void 0 ? void 0 : options.recalculateSummary) === false) return;
3234
+ var logContext = (options === null || options === void 0 ? void 0 : options.logContext) || 'payment lifecycle change';
3235
+ void this.recalculateSummary({
3236
+ createIfMissing: true
3237
+ }).catch(function (error) {
3238
+ _this19.logError("recalculate summary after ".concat(logContext, " failed"), {
3239
+ error: error instanceof Error ? error.message : String(error)
3240
+ });
3241
+ });
3242
+ }
3243
+ }, {
3244
+ key: "confirmPendingVoucherPayments",
3245
+ value: function confirmPendingVoucherPayments(options) {
3246
+ var tempOrder = this.ensureTempOrder();
3247
+ var payments = tempOrder.payments || [];
3248
+ var hasPendingVoucher = payments.some(function (payment) {
3249
+ return isPendingVoucherPaymentRecord(payment);
3250
+ });
3251
+ if (!hasPendingVoucher) return payments;
3252
+ tempOrder.payments = this.confirmPendingVoucherPaymentsInList(payments);
3253
+ this.applyPaymentLifecycleChange(tempOrder, _objectSpread(_objectSpread({}, options), {}, {
3254
+ logContext: 'confirmPendingVoucherPayments'
3255
+ }));
3256
+ return tempOrder.payments;
3257
+ }
3258
+ }, {
3259
+ key: "discardPendingVoucherPayments",
3260
+ value: function discardPendingVoucherPayments(options) {
3261
+ var tempOrder = this.ensureTempOrder();
3262
+ var payments = tempOrder.payments || [];
3263
+ var nextPayments = this.discardPendingVoucherPaymentsFromList(payments);
3264
+ if (nextPayments.length === payments.length) return payments;
3265
+ tempOrder.payments = nextPayments;
3266
+ this.applyPaymentLifecycleChange(tempOrder, _objectSpread(_objectSpread({}, options), {}, {
3267
+ logContext: 'discardPendingVoucherPayments'
3268
+ }));
3269
+ return tempOrder.payments;
3270
+ }
3175
3271
 
3176
3272
  /**
3177
3273
  * 覆盖当前订单中的 wallet pass 支付项。
@@ -3181,22 +3277,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3181
3277
  */
3182
3278
  }, {
3183
3279
  key: "updateVoucherOrderPayments",
3184
- value: function updateVoucherOrderPayments(payments) {
3185
- var _this19 = this;
3280
+ value: function updateVoucherOrderPayments(payments, options) {
3281
+ var _this20 = this;
3186
3282
  var tempOrder = this.ensureTempOrder();
3187
- var isVoucherPayment = function isVoucherPayment(payment) {
3188
- return payment.voucher_id !== undefined && Number(payment.voucher_id) !== 0;
3189
- };
3190
- var hasSyncedOrderPayment = function hasSyncedOrderPayment(payment) {
3191
- return payment.order_payment_id !== undefined && payment.order_payment_id !== null;
3192
- };
3193
3283
  var isOrderPaymentType = function isOrderPaymentType(value) {
3194
3284
  return value === 'normal' || value === 'deposit';
3195
3285
  };
3196
3286
  var voucherOrderPaymentType = this.resolveNextOrderPaymentType(tempOrder);
3197
3287
  var withVoucherPaymentType = function withVoucherPaymentType(payment) {
3198
3288
  var paymentRecord = payment;
3199
- if (!isVoucherPayment(paymentRecord)) return payment;
3289
+ if (!isVoucherPaymentRecord(paymentRecord)) return payment;
3200
3290
  var explicitPaymentType = isOrderPaymentType(paymentRecord.order_payment_type) ? paymentRecord.order_payment_type : isOrderPaymentType(paymentRecord.type) ? paymentRecord.type : undefined;
3201
3291
  var nextPaymentType = explicitPaymentType || voucherOrderPaymentType;
3202
3292
  var shouldPreserveCustomPaymentType = paymentRecord.custom_payment_type === undefined && paymentRecord.type !== undefined && !isOrderPaymentType(paymentRecord.type);
@@ -3207,36 +3297,39 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3207
3297
  order_payment_type: nextPaymentType
3208
3298
  });
3209
3299
  };
3210
- // const normalizeVoucherPaymentStatus = (payment: OrderPaymentSource): OrderPaymentSource => {
3211
- // const paymentRecord = payment as Record<string, any>;
3212
- // // if (paymentRecord.status !== 'active') return payment;
3213
- // // return {
3214
- // // ...paymentRecord,
3215
- // // status: 'paid',
3216
- // // };
3217
- // if (paymentRecord.status === 'active') {
3218
- // paymentRecord.status = 'paid'
3219
- // }
3220
- // return paymentRecord
3221
- // };
3300
+ var normalizeVoucherPaymentStatus = function normalizeVoucherPaymentStatus(payment) {
3301
+ var paymentRecord = payment;
3302
+ if (!isVoucherPaymentRecord(paymentRecord)) return payment;
3303
+ if (hasSyncedOrderPaymentRecord(paymentRecord) && (paymentRecord.status === undefined || paymentRecord.status === 'active')) {
3304
+ return _objectSpread(_objectSpread({}, paymentRecord), {}, {
3305
+ status: ORDER_PAYMENT_STATUS_PAID
3306
+ });
3307
+ }
3308
+ if (paymentRecord.status !== undefined && paymentRecord.status !== 'active') {
3309
+ return payment;
3310
+ }
3311
+ return _objectSpread(_objectSpread({}, paymentRecord), {}, {
3312
+ status: (options === null || options === void 0 ? void 0 : options.status) || ORDER_PAYMENT_STATUS_PENDING
3313
+ });
3314
+ };
3222
3315
  var mappedVouchers = mapPaymentItemsToOrderPayments(payments.map(function (payment) {
3223
- return _this19.normalizePaymentSource(withVoucherPaymentType(payment), {
3224
- defaultPaid: true
3316
+ return _this20.normalizePaymentSource(normalizeVoucherPaymentStatus(withVoucherPaymentType(payment)), {
3317
+ defaultPaid: false
3225
3318
  });
3226
3319
  })).filter(function (payment) {
3227
- return isVoucherPayment(payment);
3320
+ return isVoucherPaymentRecord(payment);
3228
3321
  });
3229
3322
  var nonVoucherPayments = (tempOrder.payments || []).filter(function (payment) {
3230
- return !isVoucherPayment(payment);
3323
+ return !isVoucherPaymentRecord(payment);
3231
3324
  });
3232
3325
  var syncedVoucherPayments = (tempOrder.payments || []).filter(function (payment) {
3233
- return isVoucherPayment(payment) && hasSyncedOrderPayment(payment);
3326
+ return isVoucherPaymentRecord(payment) && hasSyncedOrderPaymentRecord(payment);
3234
3327
  });
3235
3328
  var syncedVoucherPaymentIds = new Set(syncedVoucherPayments.map(function (payment) {
3236
3329
  return String(payment.order_payment_id);
3237
3330
  }));
3238
3331
  var replaceableVouchers = mappedVouchers.filter(function (payment) {
3239
- if (!hasSyncedOrderPayment(payment)) return true;
3332
+ if (!hasSyncedOrderPaymentRecord(payment)) return true;
3240
3333
  return !syncedVoucherPaymentIds.has(String(payment.order_payment_id));
3241
3334
  });
3242
3335
  var cappedVouchers = this.capVoucherPaymentsByRemainingAmount({
@@ -3249,7 +3342,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3249
3342
  void this.recalculateSummary({
3250
3343
  createIfMissing: true
3251
3344
  }).catch(function (error) {
3252
- _this19.logError('recalculate summary after updateVoucherOrderPayments failed', {
3345
+ _this20.logError('recalculate summary after updateVoucherOrderPayments failed', {
3253
3346
  error: error instanceof Error ? error.message : String(error)
3254
3347
  });
3255
3348
  });
@@ -3385,7 +3478,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3385
3478
  var _appendProductLineToTempOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16(tempOrder, product, booking) {
3386
3479
  var _booking_uid,
3387
3480
  _metadata,
3388
- _this20 = this;
3481
+ _this21 = this;
3389
3482
  var linked, productToAdd, incomingFingerprint, normalizedIncoming, incomingBookingUid, hasIncomingGoodPass, hasIncomingProductNote, hasIncomingBookingUid, shouldForceNewLine, matchedIndex, matchedProduct, existedFingerprint, shouldMerge, _targetProduct$metada, targetProduct, targetUid, normalizedProduct, nextNum, targetIsManualProductDiscount, nextDiscountList;
3390
3483
  return _regeneratorRuntime().wrap(function _callee16$(_context18) {
3391
3484
  while (1) switch (_context18.prev = _context18.next) {
@@ -3410,8 +3503,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3410
3503
  hasIncomingBookingUid = this.hasLinkedBookingUid(productToAdd) || this.hasLinkedBookingUid(normalizedIncoming);
3411
3504
  shouldForceNewLine = !!booking || hasIncomingProductNote || hasIncomingBookingUid;
3412
3505
  matchedIndex = hasIncomingGoodPass || shouldForceNewLine ? -1 : tempOrder.products.findIndex(function (item) {
3413
- if (_this20.hasGoodPassDiscount(item)) return false;
3414
- if (_this20.hasOrderProductLineNote(item)) return false;
3506
+ if (_this21.hasGoodPassDiscount(item)) return false;
3507
+ if (_this21.hasOrderProductLineNote(item)) return false;
3415
3508
  if (item.order_detail_id !== undefined && item.order_detail_id !== null) return false;
3416
3509
  if (item.product_id !== productToAdd.product_id) return false;
3417
3510
  if (item.product_variant_id !== productToAdd.product_variant_id) return false;
@@ -3559,8 +3652,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3559
3652
  _context19.next = 22;
3560
3653
  return this.finalizeProductOrderMutation(tempOrder);
3561
3654
  case 22:
3655
+ this.logInfo('addProductToOrder success', {
3656
+ product_id: product.product_id,
3657
+ with_booking: !!booking
3658
+ });
3562
3659
  return _context19.abrupt("return", tempOrder.products);
3563
- case 23:
3660
+ case 24:
3564
3661
  case "end":
3565
3662
  return _context19.stop();
3566
3663
  }
@@ -3660,8 +3757,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3660
3757
  _context20.next = 40;
3661
3758
  return this.finalizeProductOrderMutation(tempOrder, options);
3662
3759
  case 40:
3760
+ this.logInfo('addProductsToOrder success', {
3761
+ itemsCount: items.length
3762
+ });
3663
3763
  return _context20.abrupt("return", tempOrder.products);
3664
- case 41:
3764
+ case 42:
3665
3765
  case "end":
3666
3766
  return _context20.stop();
3667
3767
  }
@@ -3701,17 +3801,17 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3701
3801
  }, {
3702
3802
  key: "preservePersistedBundlePriceFields",
3703
3803
  value: function preservePersistedBundlePriceFields(previousBundles, nextBundles) {
3704
- var _this21 = this;
3804
+ var _this22 = this;
3705
3805
  if (!Array.isArray(nextBundles)) return nextBundles;
3706
3806
  if (!Array.isArray(previousBundles) || previousBundles.length === 0) return nextBundles;
3707
3807
  var previousByIdentity = new Map();
3708
3808
  previousBundles.forEach(function (bundle) {
3709
- var identity = _this21.getBundleRuntimeIdentity(bundle);
3809
+ var identity = _this22.getBundleRuntimeIdentity(bundle);
3710
3810
  if (identity) previousByIdentity.set(identity, bundle);
3711
3811
  });
3712
3812
  return nextBundles.map(function (bundle, index) {
3713
3813
  if (!bundle || _typeof(bundle) !== 'object') return bundle;
3714
- var previous = previousByIdentity.get(_this21.getBundleRuntimeIdentity(bundle)) || previousBundles[index];
3814
+ var previous = previousByIdentity.get(_this22.getBundleRuntimeIdentity(bundle)) || previousBundles[index];
3715
3815
  if (!previous || _typeof(previous) !== 'object') return bundle;
3716
3816
  return _objectSpread(_objectSpread({}, bundle), {}, {
3717
3817
  price: previous.price,
@@ -3879,8 +3979,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3879
3979
  });
3880
3980
  case 8:
3881
3981
  this.persistTempOrder();
3982
+ this.logInfo('updateOrderProduct success', {
3983
+ params: params
3984
+ });
3882
3985
  return _context21.abrupt("return", tempOrder.products);
3883
- case 10:
3986
+ case 11:
3884
3987
  case "end":
3885
3988
  return _context21.stop();
3886
3989
  }
@@ -3895,7 +3998,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3895
3998
  key: "updateOrderProducts",
3896
3999
  value: function () {
3897
4000
  var _updateOrderProducts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20(paramsList) {
3898
- var _this22 = this;
4001
+ var _this23 = this;
3899
4002
  var tempOrder;
3900
4003
  return _regeneratorRuntime().wrap(function _callee20$(_context22) {
3901
4004
  while (1) switch (_context22.prev = _context22.next) {
@@ -3908,13 +4011,16 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3908
4011
  return _context22.abrupt("return", tempOrder.products);
3909
4012
  case 3:
3910
4013
  paramsList.forEach(function (params) {
3911
- _this22.applyOrderProductUpdateToTempOrder(tempOrder, params);
4014
+ _this23.applyOrderProductUpdateToTempOrder(tempOrder, params);
3912
4015
  });
3913
4016
  _context22.next = 6;
3914
4017
  return this.finalizeAfterProductsMutation(tempOrder);
3915
4018
  case 6:
4019
+ this.logInfo('updateOrderProduct success', {
4020
+ paramsList: paramsList
4021
+ });
3916
4022
  return _context22.abrupt("return", tempOrder.products);
3917
- case 7:
4023
+ case 8:
3918
4024
  case "end":
3919
4025
  return _context22.stop();
3920
4026
  }
@@ -3986,8 +4092,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
3986
4092
  });
3987
4093
  case 22:
3988
4094
  this.persistTempOrder();
4095
+ this.logInfo('updateOrderProductQuantity success', {
4096
+ params: params
4097
+ });
3989
4098
  return _context23.abrupt("return", tempOrder.products);
3990
- case 24:
4099
+ case 25:
3991
4100
  case "end":
3992
4101
  return _context23.stop();
3993
4102
  }
@@ -4072,7 +4181,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4072
4181
  key: "removeProductsFromOrder",
4073
4182
  value: (function () {
4074
4183
  var _removeProductsFromOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23(identities) {
4075
- var _this23 = this;
4184
+ var _this24 = this;
4076
4185
  var tempOrder, productsBeforeRemove, bookingsBeforeRemove, matchedProducts, removedProducts, _i2, _removedProducts, product, linkedBookingUidsToRemove, _iterator21, _step21, _loop3;
4077
4186
  return _regeneratorRuntime().wrap(function _callee23$(_context26) {
4078
4187
  while (1) switch (_context26.prev = _context26.next) {
@@ -4127,7 +4236,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4127
4236
  }
4128
4237
  if (productUid !== undefined && productUid !== null && productUid !== '') {
4129
4238
  bookingsBeforeRemove.forEach(function (booking) {
4130
- var bookingUid = _this23.getBookingUniqueIdentificationNumber(booking);
4239
+ var bookingUid = _this24.getBookingUniqueIdentificationNumber(booking);
4131
4240
  if (bookingUid && String((booking === null || booking === void 0 ? void 0 : booking.product_uid) || '') === String(productUid)) {
4132
4241
  linkedBookingUidsToRemove.add(bookingUid);
4133
4242
  }
@@ -4179,8 +4288,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4179
4288
  _context26.next = 31;
4180
4289
  return this.finalizeAfterProductsMutation(tempOrder);
4181
4290
  case 31:
4291
+ this.logInfo('removeProductsFromOrder success', {
4292
+ identities: identities
4293
+ });
4182
4294
  return _context26.abrupt("return", tempOrder.products);
4183
- case 32:
4295
+ case 33:
4184
4296
  case "end":
4185
4297
  return _context26.stop();
4186
4298
  }
@@ -4242,8 +4354,9 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4242
4354
  });
4243
4355
  case 11:
4244
4356
  this.persistTempOrder();
4357
+ this.logInfo('clearOrderCartLines success', {});
4245
4358
  return _context28.abrupt("return", tempOrder);
4246
- case 13:
4359
+ case 14:
4247
4360
  case "end":
4248
4361
  return _context28.stop();
4249
4362
  }
@@ -4372,39 +4485,54 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4372
4485
  value: function () {
4373
4486
  var _runSubmitTempOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee29(params) {
4374
4487
  var _params$cacheId2, _this$otherParams5, _ref72, _ref73, _submitSnapshot$busin, _this$otherParams6, _this$otherParams7, _submitSnapshot$type;
4375
- var tempOrder, latestSummary, effectiveCacheId, hasPaymentOverride, hasPaymentStatusOverride, hasSmallTicketDataFlagOverride, enhancePayload, submitSnapshot, payload, result, _payload$payments, _payload$payments2, backendErrorResponse, submittedOrderId, resultRecord;
4488
+ var tempOrder, shouldConfirmPendingVoucherPayments, hasPaymentOverride, preparedPaymentOverride, latestSummary, effectiveCacheId, hasPaymentStatusOverride, hasSmallTicketDataFlagOverride, enhancePayload, submitSnapshot, payload, result, _payload$payments, _payload$payments2, backendErrorResponse, submittedOrderId, resultRecord;
4376
4489
  return _regeneratorRuntime().wrap(function _callee29$(_context32) {
4377
4490
  while (1) switch (_context32.prev = _context32.next) {
4378
4491
  case 0:
4379
4492
  tempOrder = this.ensureTempOrder();
4493
+ shouldConfirmPendingVoucherPayments = (params === null || params === void 0 ? void 0 : params.confirmPendingVoucherPayments) !== false;
4494
+ hasPaymentOverride = (params === null || params === void 0 ? void 0 : params.payments) !== undefined;
4495
+ preparedPaymentOverride = hasPaymentOverride ? this.prepareVoucherPaymentsForSubmit((params === null || params === void 0 ? void 0 : params.payments) || [], shouldConfirmPendingVoucherPayments) : undefined;
4496
+ if (!hasPaymentOverride) {
4497
+ if (shouldConfirmPendingVoucherPayments) {
4498
+ this.confirmPendingVoucherPayments({
4499
+ persist: false,
4500
+ recalculateSummary: false
4501
+ });
4502
+ } else {
4503
+ this.discardPendingVoucherPayments({
4504
+ persist: false,
4505
+ recalculateSummary: false
4506
+ });
4507
+ }
4508
+ }
4380
4509
  this.persistTempOrder();
4381
- _context32.next = 4;
4510
+ _context32.next = 8;
4382
4511
  return this.recalculateSummary({
4383
4512
  createIfMissing: true
4384
4513
  });
4385
- case 4:
4514
+ case 8:
4386
4515
  _context32.t1 = _context32.sent;
4387
4516
  if (_context32.t1) {
4388
- _context32.next = 7;
4517
+ _context32.next = 11;
4389
4518
  break;
4390
4519
  }
4391
4520
  _context32.t1 = this.store.summary;
4392
- case 7:
4521
+ case 11:
4393
4522
  _context32.t0 = _context32.t1;
4394
4523
  if (_context32.t0) {
4395
- _context32.next = 10;
4524
+ _context32.next = 14;
4396
4525
  break;
4397
4526
  }
4398
4527
  _context32.t0 = createEmptySummary();
4399
- case 10:
4528
+ case 14:
4400
4529
  latestSummary = _context32.t0;
4401
4530
  effectiveCacheId = (_params$cacheId2 = params === null || params === void 0 ? void 0 : params.cacheId) !== null && _params$cacheId2 !== void 0 ? _params$cacheId2 : this.cacheId;
4402
- hasPaymentOverride = (params === null || params === void 0 ? void 0 : params.payments) !== undefined;
4403
4531
  hasPaymentStatusOverride = (params === null || params === void 0 ? void 0 : params.paymentStatus) !== undefined;
4404
4532
  hasSmallTicketDataFlagOverride = (params === null || params === void 0 ? void 0 : params.smallTicketDataFlag) !== undefined;
4405
4533
  enhancePayload = hasPaymentOverride || hasPaymentStatusOverride || hasSmallTicketDataFlagOverride || params !== null && params !== void 0 && params.enhancePayload ? function (payload, ctx) {
4406
4534
  var nextPayload = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, payload), hasPaymentOverride ? {
4407
- payments: mapPaymentItemsToOrderPayments((params === null || params === void 0 ? void 0 : params.payments) || [])
4535
+ payments: preparedPaymentOverride || []
4408
4536
  } : {}), hasPaymentStatusOverride ? {
4409
4537
  payment_status: params === null || params === void 0 ? void 0 : params.paymentStatus
4410
4538
  } : {}), hasSmallTicketDataFlagOverride ? {
@@ -4425,6 +4553,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4425
4553
  request_unique_idempotency_token: params === null || params === void 0 ? void 0 : params.request_unique_idempotency_token,
4426
4554
  enhance: enhancePayload
4427
4555
  });
4556
+ console.log('[Order.runSubmitTempOrder.payload]', payload);
4428
4557
  if (params !== null && params !== void 0 && params.syncMode) {
4429
4558
  payload.sync_mode = true;
4430
4559
  }
@@ -4432,10 +4561,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4432
4561
  if (!payload.created_at) {
4433
4562
  payload.created_at = dayjs().format('YYYY-MM-DD HH:mm:ss');
4434
4563
  }
4435
- _context32.next = 22;
4564
+ _context32.next = 26;
4436
4565
  return this.saveDraft();
4437
- case 22:
4438
- _context32.prev = 22;
4566
+ case 26:
4567
+ _context32.prev = 26;
4439
4568
  this.logInfo('submitTempOrder calling sales checkout', {
4440
4569
  orderId: payload.order_id,
4441
4570
  externalSaleNumber: payload.external_sale_number,
@@ -4445,26 +4574,26 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4445
4574
  smallTicketDataFlag: payload.small_ticket_data_flag,
4446
4575
  syncMode: payload.sync_mode
4447
4576
  });
4448
- _context32.next = 26;
4577
+ _context32.next = 30;
4449
4578
  return this.submitSalesOrder({
4450
4579
  query: payload
4451
4580
  });
4452
- case 26:
4581
+ case 30:
4453
4582
  result = _context32.sent;
4454
- _context32.next = 39;
4583
+ _context32.next = 43;
4455
4584
  break;
4456
- case 29:
4457
- _context32.prev = 29;
4458
- _context32.t2 = _context32["catch"](22);
4585
+ case 33:
4586
+ _context32.prev = 33;
4587
+ _context32.t2 = _context32["catch"](26);
4459
4588
  backendErrorResponse = this.extractSubmitErrorResponse(_context32.t2);
4460
4589
  if (!backendErrorResponse) {
4461
- _context32.next = 36;
4590
+ _context32.next = 40;
4462
4591
  break;
4463
4592
  }
4464
4593
  this.store.syncState = 'failed';
4465
4594
  this.logSubmitBackendRejected(backendErrorResponse, payload);
4466
4595
  return _context32.abrupt("return", backendErrorResponse);
4467
- case 36:
4596
+ case 40:
4468
4597
  this.store.syncState = 'failed';
4469
4598
  this.logError('submitTempOrder failed', {
4470
4599
  error: _context32.t2 instanceof Error ? _context32.t2.message : String(_context32.t2),
@@ -4474,15 +4603,15 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4474
4603
  paymentsCount: ((_payload$payments2 = payload.payments) === null || _payload$payments2 === void 0 ? void 0 : _payload$payments2.length) || 0
4475
4604
  });
4476
4605
  throw _context32.t2;
4477
- case 39:
4606
+ case 43:
4478
4607
  if (!this.isSubmitResponseRejected(result)) {
4479
- _context32.next = 43;
4608
+ _context32.next = 47;
4480
4609
  break;
4481
4610
  }
4482
4611
  this.store.syncState = 'failed';
4483
4612
  this.logSubmitBackendRejected(result, payload);
4484
4613
  return _context32.abrupt("return", result);
4485
- case 43:
4614
+ case 47:
4486
4615
  submittedOrderId = this.extractOrderIdFromSubmitResult(result);
4487
4616
  this.logInfo('runSubmitTempOrder: 提交成功', {
4488
4617
  submittedOrderId: submittedOrderId,
@@ -4490,29 +4619,29 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4490
4619
  tempOrder: tempOrder
4491
4620
  });
4492
4621
  if (!(submittedOrderId !== null && submittedOrderId !== undefined)) {
4493
- _context32.next = 52;
4622
+ _context32.next = 56;
4494
4623
  break;
4495
4624
  }
4496
4625
  tempOrder.order_id = submittedOrderId;
4497
4626
  resultRecord = result;
4498
- _context32.next = 50;
4627
+ _context32.next = 54;
4499
4628
  return this.markLocalOrderSynced(submittedOrderId, (resultRecord === null || resultRecord === void 0 ? void 0 : resultRecord.data) || resultRecord || {});
4500
- case 50:
4501
- _context32.next = 53;
4629
+ case 54:
4630
+ _context32.next = 57;
4502
4631
  break;
4503
- case 52:
4632
+ case 56:
4504
4633
  if (this.isLocalPendingSubmitResult(result)) {
4505
4634
  this.store.syncState = 'local';
4506
4635
  } else {
4507
4636
  this.store.syncState = 'submitted';
4508
4637
  }
4509
- case 53:
4638
+ case 57:
4510
4639
  return _context32.abrupt("return", result);
4511
- case 54:
4640
+ case 58:
4512
4641
  case "end":
4513
4642
  return _context32.stop();
4514
4643
  }
4515
- }, _callee29, this, [[22, 29]]);
4644
+ }, _callee29, this, [[26, 33]]);
4516
4645
  }));
4517
4646
  function runSubmitTempOrder(_x32) {
4518
4647
  return _runSubmitTempOrder.apply(this, arguments);
@@ -4584,10 +4713,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4584
4713
  value: function extractSubmitErrorResponse(error) {
4585
4714
  var _error$response,
4586
4715
  _error$response2,
4587
- _this24 = this;
4716
+ _this25 = this;
4588
4717
  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];
4589
4718
  return candidates.find(function (candidate) {
4590
- return _this24.isSubmitErrorResponse(candidate);
4719
+ return _this25.isSubmitErrorResponse(candidate);
4591
4720
  }) || null;
4592
4721
  }
4593
4722
  }, {
@@ -4615,41 +4744,46 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4615
4744
  key: "syncPaymentsToOrder",
4616
4745
  value: function () {
4617
4746
  var _syncPaymentsToOrder = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee31(params) {
4618
- var tempOrder, mappedPayments, completion, paymentStatus, paymentSyncIdempotencyToken, submitResult;
4747
+ var _params$confirmPendin;
4748
+ var tempOrder, mappedPayments, shouldConfirmPendingVoucherPayments, effectivePayments, completion, paidPaymentTotal, paymentStatus, paymentSyncIdempotencyToken, submitResult;
4619
4749
  return _regeneratorRuntime().wrap(function _callee31$(_context34) {
4620
4750
  while (1) switch (_context34.prev = _context34.next) {
4621
4751
  case 0:
4622
4752
  tempOrder = this.ensureTempOrder();
4623
4753
  mappedPayments = mapPaymentItemsToOrderPayments(params.payments || []);
4624
- completion = this.getPaymentCompletion(mappedPayments);
4625
- paymentStatus = completion.isOrderFullyPaid ? params.paymentStatus || 'paid' : 'partially_paid';
4626
- tempOrder.payments = mappedPayments;
4754
+ shouldConfirmPendingVoucherPayments = (_params$confirmPendin = params.confirmPendingVoucherPayments) !== null && _params$confirmPendin !== void 0 ? _params$confirmPendin : params.submitWhenPaid === true;
4755
+ effectivePayments = shouldConfirmPendingVoucherPayments ? this.confirmPendingVoucherPaymentsInList(mappedPayments) : params.confirmPendingVoucherPayments === false ? this.discardPendingVoucherPaymentsFromList(mappedPayments) : mappedPayments;
4756
+ completion = this.getPaymentCompletion(effectivePayments);
4757
+ paidPaymentTotal = this.calculatePaymentTotal(effectivePayments);
4758
+ paymentStatus = completion.isOrderFullyPaid ? params.paymentStatus || 'paid' : paidPaymentTotal.gt(0) ? 'partially_paid' : 'payment_processing';
4759
+ tempOrder.payments = effectivePayments;
4627
4760
  tempOrder.payment_status = paymentStatus;
4628
4761
  this.persistTempOrder();
4629
- _context34.next = 9;
4762
+ _context34.next = 12;
4630
4763
  return this.saveDraft();
4631
- case 9:
4764
+ case 12:
4632
4765
  if (params.submitWhenPaid) {
4633
- _context34.next = 11;
4766
+ _context34.next = 14;
4634
4767
  break;
4635
4768
  }
4636
4769
  return _context34.abrupt("return", completion);
4637
- case 11:
4770
+ case 14:
4638
4771
  if (!(this.store.syncState === 'submitting')) {
4639
- _context34.next = 13;
4772
+ _context34.next = 16;
4640
4773
  break;
4641
4774
  }
4642
4775
  return _context34.abrupt("return", completion);
4643
- case 13:
4776
+ case 16:
4644
4777
  this.store.syncState = 'submitting';
4645
- paymentSyncIdempotencyToken = this.buildPaymentSyncIdempotencyToken(tempOrder, mappedPayments);
4646
- _context34.next = 17;
4778
+ paymentSyncIdempotencyToken = this.buildPaymentSyncIdempotencyToken(tempOrder, effectivePayments);
4779
+ _context34.next = 20;
4647
4780
  return this.submitTempOrder({
4648
- payments: mappedPayments,
4781
+ payments: effectivePayments,
4649
4782
  paymentStatus: paymentStatus,
4650
4783
  smallTicketDataFlag: params.smallTicketDataFlag,
4651
4784
  businessCode: params.businessCode,
4652
4785
  channel: params.channel,
4786
+ confirmPendingVoucherPayments: true,
4653
4787
  enhancePayload: function enhancePayload(payload) {
4654
4788
  var nextPayload = _objectSpread(_objectSpread({}, payload), {}, {
4655
4789
  request_unique_idempotency_token: paymentSyncIdempotencyToken
@@ -4657,12 +4791,12 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
4657
4791
  return nextPayload;
4658
4792
  }
4659
4793
  });
4660
- case 17:
4794
+ case 20:
4661
4795
  submitResult = _context34.sent;
4662
4796
  return _context34.abrupt("return", _objectSpread(_objectSpread({}, completion), {}, {
4663
4797
  submitResult: submitResult
4664
4798
  }));
4665
- case 19:
4799
+ case 22:
4666
4800
  case "end":
4667
4801
  return _context34.stop();
4668
4802
  }
@@ -5175,27 +5309,28 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5175
5309
  currentDiscounts = typeof ((_this$store$discount15 = this.store.discount) === null || _this$store$discount15 === void 0 ? void 0 : _this$store$discount15.getDiscountList) === 'function' ? this.store.discount.getDiscountList() || [] : [];
5176
5310
  shouldSkipEmptyDiscountSync = hydratedEditDiscounts.length === 0 && currentDiscounts.length === 0;
5177
5311
  if (shouldSkipEmptyDiscountSync) {
5178
- _context42.next = 16;
5312
+ _context42.next = 17;
5179
5313
  break;
5180
5314
  }
5181
- _context42.next = 14;
5315
+ OrderModule.populateSavedAmounts(nextTempOrder.products, hydratedEditDiscounts);
5316
+ _context42.next = 15;
5182
5317
  return (_this$store$discount16 = this.store.discount) === null || _this$store$discount16 === void 0 ? void 0 : _this$store$discount16.setOriginalDiscountList(hydratedEditDiscounts);
5183
- case 14:
5184
- _context42.next = 16;
5318
+ case 15:
5319
+ _context42.next = 17;
5185
5320
  return (_this$store$discount17 = this.store.discount) === null || _this$store$discount17 === void 0 ? void 0 : _this$store$discount17.setDiscountList(hydratedEditDiscounts);
5186
- case 16:
5321
+ case 17:
5187
5322
  if (!(options !== null && options !== void 0 && options.recalcOnHydrate)) {
5188
- _context42.next = 19;
5323
+ _context42.next = 20;
5189
5324
  break;
5190
5325
  }
5191
- _context42.next = 19;
5326
+ _context42.next = 20;
5192
5327
  return this.recalculateSummary({
5193
5328
  createIfMissing: false
5194
5329
  });
5195
- case 19:
5330
+ case 20:
5196
5331
  this.persistTempOrder();
5197
5332
  return _context42.abrupt("return", nextTempOrder);
5198
- case 21:
5333
+ case 22:
5199
5334
  case "end":
5200
5335
  return _context42.stop();
5201
5336
  }
@@ -5242,7 +5377,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5242
5377
  }, {
5243
5378
  key: "normalizeTempOrderForRuntime",
5244
5379
  value: function normalizeTempOrderForRuntime(raw, options) {
5245
- var _this25 = this;
5380
+ var _this26 = this;
5246
5381
  var nextTempOrder = _objectSpread(_objectSpread({}, this.createDefaultTempOrderInstance()), raw || {});
5247
5382
  // ES 列表详情使用 id 表示订单主键;OS 详情态统一依赖 order_id 驱动操作按钮。
5248
5383
  if ((nextTempOrder.order_id === undefined || nextTempOrder.order_id === null) && (raw === null || raw === void 0 ? void 0 : raw.id) !== undefined && (raw === null || raw === void 0 ? void 0 : raw.id) !== null) {
@@ -5265,10 +5400,10 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5265
5400
  nextTempOrder.holder = raw.holder && _typeof(raw.holder) === 'object' ? _objectSpread({}, raw.holder) : null;
5266
5401
  var rawProducts = Array.isArray(raw.products) ? raw.products : [];
5267
5402
  nextTempOrder.products = rawProducts.length > 0 ? rawProducts.map(function (p) {
5268
- return _this25.normalizeHydratedOrderProduct(p);
5403
+ return _this26.normalizeHydratedOrderProduct(p);
5269
5404
  }) : [];
5270
5405
  nextTempOrder.bookings = Array.isArray(raw.bookings) ? raw.bookings.map(function (b) {
5271
- var booking = _this25.normalizeHydratedBookingHolder(b || {});
5406
+ var booking = _this26.normalizeHydratedBookingHolder(b || {});
5272
5407
  return _objectSpread(_objectSpread({}, booking), {}, {
5273
5408
  is_all: normalizeBookingIsAll(booking),
5274
5409
  sub_type: normalizeBookingSubType(booking)
@@ -5436,7 +5571,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5436
5571
  }, {
5437
5572
  key: "normalizeHydratedOrderProduct",
5438
5573
  value: function normalizeHydratedOrderProduct(product) {
5439
- var _this26 = this;
5574
+ var _this27 = this;
5440
5575
  var row = _objectSpread({}, product || {});
5441
5576
  if (row.num === undefined && row.product_quantity !== undefined) {
5442
5577
  row.num = row.product_quantity;
@@ -5444,7 +5579,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5444
5579
  var productSku = ensureProductSku(row);
5445
5580
  row.product_sku = _objectSpread(_objectSpread({}, productSku), {}, {
5446
5581
  option: normalizeProductSkuOptions(productSku.option.map(function (optionItem) {
5447
- return _this26.normalizeHydratedProductOptionItem(optionItem || {});
5582
+ return _this27.normalizeHydratedProductOptionItem(optionItem || {});
5448
5583
  }))
5449
5584
  });
5450
5585
  delete row["product_".concat('option', "_item")];
@@ -5453,6 +5588,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5453
5588
  if (row.booking_uid && !row.metadata.booking_uid) {
5454
5589
  row.metadata.booking_uid = row.booking_uid;
5455
5590
  }
5591
+ row = restoreHydratedBundleDiscounts(row, normalizeOrderProductDiscountList);
5456
5592
  var existingIdentity = row.metadata.unique_identification_number || row.unique_identification_number;
5457
5593
  if (!existingIdentity) {
5458
5594
  row.metadata.unique_identification_number = createUuidV4();
@@ -5464,7 +5600,8 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
5464
5600
  metadata: _objectSpread(_objectSpread({}, row.metadata), normalized.metadata)
5465
5601
  });
5466
5602
  if (result.metadata) delete result.metadata.price_schema_version;
5467
- return this.sanitizeOrderProductForTempOrder(result);
5603
+ var restored = restoreHydratedBundleDiscounts(result, normalizeOrderProductDiscountList);
5604
+ return this.sanitizeOrderProductForTempOrder(restored);
5468
5605
  }
5469
5606
  }, {
5470
5607
  key: "getLastOrderInfo",