@pisell/pisellos 0.10.55 → 0.10.57

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 (114) hide show
  1. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  2. package/dist/modules/OpenData/index.js +2 -1
  3. package/dist/modules/Order/index.d.ts +1 -0
  4. package/dist/modules/Order/index.js +118 -59
  5. package/dist/modules/Order/utils/weighedProduct.d.ts +12 -0
  6. package/dist/modules/Order/utils/weighedProduct.js +94 -0
  7. package/dist/modules/Order/utils.d.ts +1 -1
  8. package/dist/modules/Order/utils.js +9 -6
  9. package/dist/modules/Payment/index.d.ts +0 -5
  10. package/dist/modules/Payment/index.js +35 -85
  11. package/dist/modules/ProductList/index.js +18 -5
  12. package/dist/modules/ResourcePlanner/planner.js +10 -8
  13. package/dist/modules/Rules/index.js +16 -14
  14. package/dist/modules/Rules/types.d.ts +2 -0
  15. package/dist/plugins/request.d.ts +4 -0
  16. package/dist/server/index.js +122 -69
  17. package/dist/server/modules/floor-plan/index.js +34 -3
  18. package/dist/server/modules/payment/index.d.ts +25 -6
  19. package/dist/server/modules/payment/index.js +660 -133
  20. package/dist/server/test.json +1 -1
  21. package/dist/shared/receipt/customerInvoiceLanguages.d.ts +8 -0
  22. package/dist/shared/receipt/customerInvoiceLanguages.js +60 -0
  23. package/dist/shared/receipt/loadCustomerInvoiceLayout.d.ts +27 -0
  24. package/dist/shared/receipt/loadCustomerInvoiceLayout.js +184 -0
  25. package/dist/shared/receipt/small-ticket.d.ts +11 -0
  26. package/dist/shared/receipt/small-ticket.js +430 -255
  27. package/dist/shared/receipt/templateVisibility.d.ts +23 -0
  28. package/dist/shared/receipt/templateVisibility.js +64 -0
  29. package/dist/solution/BaseSales/index.d.ts +4 -2
  30. package/dist/solution/BaseSales/index.js +1328 -1214
  31. package/dist/solution/BaseSales/types.d.ts +5 -1
  32. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +40 -25
  33. package/dist/solution/BaseSales/utils.js +3 -2
  34. package/dist/solution/BookingByStep/index.d.ts +1 -1
  35. package/dist/solution/BookingTicket/index.d.ts +4 -1
  36. package/dist/solution/BookingTicket/index.js +120 -80
  37. package/dist/solution/OrderInvoicePreview/index.d.ts +10 -0
  38. package/dist/solution/OrderInvoicePreview/index.js +87 -16
  39. package/dist/solution/RegisterAndLogin/config.js +54 -11
  40. package/dist/solution/RegisterAndLogin/index.d.ts +2 -0
  41. package/dist/solution/RegisterAndLogin/index.js +1 -1
  42. package/dist/solution/RegisterAndLogin/utils.d.ts +12 -4
  43. package/dist/solution/RegisterAndLogin/utils.js +36 -16
  44. package/dist/solution/Sales/index.d.ts +2 -0
  45. package/dist/solution/Sales/index.js +15 -1
  46. package/dist/solution/ScanOrder/utils.js +3 -2
  47. package/dist/solution/UnifiedBookingSales/index.js +12 -13
  48. package/dist/solution/VenueBooking/index.d.ts +15 -2
  49. package/dist/solution/VenueBooking/index.js +1062 -785
  50. package/dist/solution/VenueBooking/types.d.ts +2 -1
  51. package/dist/solution/VenueBooking/types.js +1 -0
  52. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
  53. package/dist/solution/VenueBooking/utils/dateSummary.js +7 -4
  54. package/dist/solution/VenueBooking/utils/smartPricing.d.ts +71 -0
  55. package/dist/solution/VenueBooking/utils/smartPricing.js +273 -0
  56. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +1 -0
  57. package/dist/solution/VenueBooking/utils/timeSlot.js +6 -3
  58. package/lib/modules/OpenData/index.js +2 -1
  59. package/lib/modules/Order/index.d.ts +1 -0
  60. package/lib/modules/Order/index.js +71 -11
  61. package/lib/modules/Order/utils/weighedProduct.d.ts +12 -0
  62. package/lib/modules/Order/utils/weighedProduct.js +89 -0
  63. package/lib/modules/Order/utils.d.ts +1 -1
  64. package/lib/modules/Order/utils.js +5 -3
  65. package/lib/modules/Payment/index.d.ts +0 -5
  66. package/lib/modules/Payment/index.js +3 -28
  67. package/lib/modules/ProductList/index.js +14 -1
  68. package/lib/modules/ResourcePlanner/planner.js +10 -8
  69. package/lib/modules/Rules/index.js +16 -14
  70. package/lib/modules/Rules/types.d.ts +2 -0
  71. package/lib/plugins/request.d.ts +4 -0
  72. package/lib/server/index.js +72 -28
  73. package/lib/server/modules/floor-plan/index.js +29 -1
  74. package/lib/server/modules/payment/index.d.ts +25 -6
  75. package/lib/server/modules/payment/index.js +350 -78
  76. package/lib/server/test.json +1 -1
  77. package/lib/shared/receipt/customerInvoiceLanguages.d.ts +8 -0
  78. package/lib/shared/receipt/customerInvoiceLanguages.js +58 -0
  79. package/lib/shared/receipt/loadCustomerInvoiceLayout.d.ts +27 -0
  80. package/lib/shared/receipt/loadCustomerInvoiceLayout.js +124 -0
  81. package/lib/shared/receipt/small-ticket.d.ts +11 -0
  82. package/lib/shared/receipt/small-ticket.js +234 -30
  83. package/lib/shared/receipt/templateVisibility.d.ts +23 -0
  84. package/lib/shared/receipt/templateVisibility.js +63 -0
  85. package/lib/solution/BaseSales/index.d.ts +4 -2
  86. package/lib/solution/BaseSales/index.js +79 -18
  87. package/lib/solution/BaseSales/types.d.ts +5 -1
  88. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +24 -9
  89. package/lib/solution/BaseSales/utils.js +2 -1
  90. package/lib/solution/BookingByStep/index.d.ts +1 -1
  91. package/lib/solution/BookingTicket/index.d.ts +4 -1
  92. package/lib/solution/BookingTicket/index.js +14 -2
  93. package/lib/solution/OrderInvoicePreview/index.d.ts +10 -0
  94. package/lib/solution/OrderInvoicePreview/index.js +62 -10
  95. package/lib/solution/RegisterAndLogin/config.js +57 -11
  96. package/lib/solution/RegisterAndLogin/index.d.ts +2 -0
  97. package/lib/solution/RegisterAndLogin/index.js +9 -1
  98. package/lib/solution/RegisterAndLogin/utils.d.ts +12 -4
  99. package/lib/solution/RegisterAndLogin/utils.js +24 -17
  100. package/lib/solution/Sales/index.d.ts +2 -0
  101. package/lib/solution/Sales/index.js +10 -1
  102. package/lib/solution/ScanOrder/utils.js +2 -1
  103. package/lib/solution/UnifiedBookingSales/index.js +5 -6
  104. package/lib/solution/VenueBooking/index.d.ts +15 -2
  105. package/lib/solution/VenueBooking/index.js +243 -96
  106. package/lib/solution/VenueBooking/types.d.ts +2 -1
  107. package/lib/solution/VenueBooking/types.js +1 -0
  108. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
  109. package/lib/solution/VenueBooking/utils/dateSummary.js +7 -4
  110. package/lib/solution/VenueBooking/utils/smartPricing.d.ts +71 -0
  111. package/lib/solution/VenueBooking/utils/smartPricing.js +224 -0
  112. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +1 -0
  113. package/lib/solution/VenueBooking/utils/timeSlot.js +5 -2
  114. package/package.json +1 -1
@@ -1,4 +1,11 @@
1
+ var _excluded = ["secondaryLocale"];
2
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
3
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
1
4
  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; }
5
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
6
+ 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."); }
7
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
8
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
2
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; }
3
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; }
4
11
  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); } }
@@ -26,7 +33,8 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
26
33
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
27
34
  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); }
28
35
  import { BaseModule } from "../../modules/BaseModule";
29
- import { getDefaultInvoiceLayoutConfig } from "../../modules/OpenData";
36
+ import { loadCustomerInvoiceTemplate } from "../../shared/receipt/loadCustomerInvoiceLayout";
37
+ import { resolveCustomerInvoiceLanguages } from "../../shared/receipt/customerInvoiceLanguages";
30
38
  import { buildSmallTicketData } from "../../shared/receipt/small-ticket";
31
39
  import { loadSalesOrderSnapshot } from "../../shared/sales/loadSalesOrderSnapshot";
32
40
  import { loadPaymentMethods, withPaymentMethodNames } from "../../shared/payment/loadPaymentMethods";
@@ -53,6 +61,8 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
53
61
  _defineProperty(_assertThisInitialized(_this), "disposed", false);
54
62
  _defineProperty(_assertThisInitialized(_this), "input", void 0);
55
63
  _defineProperty(_assertThisInitialized(_this), "activeKey", '');
64
+ // Hosts retain this readonly instance while the same order modal is closed.
65
+ _defineProperty(_assertThisInitialized(_this), "languageSelection", void 0);
56
66
  _defineProperty(_assertThisInitialized(_this), "pending", void 0);
57
67
  _defineProperty(_assertThisInitialized(_this), "snapshotCache", new Map());
58
68
  _defineProperty(_assertThisInitialized(_this), "getState", function () {
@@ -95,7 +105,7 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
95
105
  cache = new Map();
96
106
  contextCaches.set(this.request, cache);
97
107
  }
98
- var key = JSON.stringify([input.tenantId, input.shopId, input.identity, input.locale]);
108
+ var key = JSON.stringify([input.tenantId, input.shopId, input.identity]);
99
109
  var cached = cache.get(key);
100
110
  if (cached) return cached;
101
111
  var task = Promise.all([this.request.get('/shop/show', {}, {
@@ -154,6 +164,7 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
154
164
  var _this$core$getPlugin,
155
165
  _this$core$getPlugin$,
156
166
  _this$core$getPlugin$2,
167
+ _this$languageSelecti,
157
168
  _this3 = this;
158
169
  if (this.disposed) return Promise.reject(new Error('Invoice preview disposed'));
159
170
  var currentShop = (_this$core$getPlugin = this.core.getPlugin('app')) === null || _this$core$getPlugin === void 0 || (_this$core$getPlugin$ = _this$core$getPlugin.getData) === null || _this$core$getPlugin$ === void 0 || (_this$core$getPlugin$2 = _this$core$getPlugin$.call(_this$core$getPlugin)) === null || _this$core$getPlugin$2 === void 0 ? void 0 : _this$core$getPlugin$2('shop_id');
@@ -166,6 +177,7 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
166
177
  if (this.state.status === 'ready' && this.state.result) return Promise.resolve(this.state.result);
167
178
  }
168
179
  if (this.input && this.getScope(this.input) !== this.getScope(input)) this.snapshotCache.clear();
180
+ if (((_this$languageSelecti = this.languageSelection) === null || _this$languageSelecti === void 0 ? void 0 : _this$languageSelecti.scope) !== this.getSelectionScope(input)) this.languageSelection = undefined;
169
181
  this.input = input;
170
182
  this.activeKey = key;
171
183
  var generation = ++this.generation;
@@ -175,20 +187,20 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
175
187
  error: null
176
188
  });
177
189
  var task = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
178
- var _this3$core$getPlugin, _this3$core$getPlugin2, _coreData$core;
179
- var _yield$Promise$all, _yield$Promise$all2, snapshot, context, source, layout, getData, coreData, shop, requestedLocale, locale, result;
190
+ var _this3$core$getPlugin, _this3$core$getPlugin2, _coreData$core, _this3$languageSelect;
191
+ var _yield$Promise$all, _yield$Promise$all2, snapshot, context, template, source, getData, coreData, shop, languageOptions, remembered, selected, locale, result;
180
192
  return _regeneratorRuntime().wrap(function _callee$(_context) {
181
193
  while (1) switch (_context.prev = _context.next) {
182
194
  case 0:
183
195
  _context.next = 2;
184
- return Promise.all([_this3.loadSource(input), _this3.loadContext(input)]);
196
+ return Promise.all([_this3.loadSource(input), _this3.loadContext(input), loadCustomerInvoiceTemplate(_this3.request, input)]);
185
197
  case 2:
186
198
  _yield$Promise$all = _context.sent;
187
- _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
199
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);
188
200
  snapshot = _yield$Promise$all2[0];
189
201
  context = _yield$Promise$all2[1];
190
- source = withPaymentMethodNames(snapshot, context.methods); // Customer templates will use a dedicated backend API. Do not request NocoBase.
191
- layout = getDefaultInvoiceLayoutConfig();
202
+ template = _yield$Promise$all2[2];
203
+ source = withPaymentMethodNames(snapshot, context.methods);
192
204
  getData = (_this3$core$getPlugin = _this3.core.getPlugin('app')) === null || _this3$core$getPlugin === void 0 || (_this3$core$getPlugin2 = _this3$core$getPlugin.getData) === null || _this3$core$getPlugin2 === void 0 ? void 0 : _this3$core$getPlugin2.call(_this3$core$getPlugin);
193
205
  if (!((getData === null || getData === void 0 ? void 0 : getData('shop_id')) != null && String(getData('shop_id')) !== String(input.shopId))) {
194
206
  _context.next = 11;
@@ -206,30 +218,43 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
206
218
  }
207
219
  throw new Error('Invoice request superseded');
208
220
  case 15:
209
- requestedLocale = input.locale.toLowerCase().replace(/_/g, '-');
210
- locale = requestedLocale.startsWith('zh-tw') || requestedLocale.startsWith('zh-hk') ? 'zh_HK' : requestedLocale.startsWith('zh') ? 'zh_CN' : requestedLocale.startsWith('ja') ? 'ja' : requestedLocale.startsWith('pt') ? 'pt' : 'en';
211
- result = {
212
- identity: key,
221
+ languageOptions = resolveCustomerInvoiceLanguages(template.language, input.locale);
222
+ remembered = (_this3$languageSelect = _this3.languageSelection) === null || _this3$languageSelect === void 0 ? void 0 : _this3$languageSelect.code;
223
+ selected = languageOptions.find(function (option) {
224
+ return option.code === remembered;
225
+ }) || languageOptions[0];
226
+ locale = selected.locales[0];
227
+ result = _objectSpread(_objectSpread({
228
+ identity: _this3.documentIdentity(key, selected.code),
229
+ languageOptions: languageOptions,
230
+ selectedLanguage: selected.code
231
+ }, selected.locales[1] ? {
232
+ secondaryLocale: selected.locales[1]
233
+ } : {}), {}, {
213
234
  orderId: input.orderId,
214
235
  sourceRevision: input.sourceRevision,
215
236
  generatedAt: new Date().toISOString(),
216
237
  locale: locale,
217
238
  source: source,
218
239
  shop: shop,
219
- layout: layout,
240
+ layout: template.layout,
220
241
  smallTicketData: buildSmallTicketData({
221
242
  order: source,
222
243
  shopInfo: shop,
223
- locales: [locale]
244
+ locales: _toConsumableArray(new Set(languageOptions.flatMap(function (option) {
245
+ return option.locales;
246
+ }))),
247
+ includeReceiptKeys: true,
248
+ templateSettings: template.layout
224
249
  })
225
- };
250
+ });
226
251
  _this3.publish({
227
252
  status: 'ready',
228
253
  result: result,
229
254
  error: null
230
255
  });
231
256
  return _context.abrupt("return", result);
232
- case 20:
257
+ case 22:
233
258
  case "end":
234
259
  return _context.stop();
235
260
  }
@@ -249,6 +274,52 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
249
274
  this.pending = task;
250
275
  return task;
251
276
  }
277
+ }, {
278
+ key: "getSelectionScope",
279
+ value: function getSelectionScope(input) {
280
+ return JSON.stringify([this.getScope(input), input.orderId]);
281
+ }
282
+ }, {
283
+ key: "documentIdentity",
284
+ value: function documentIdentity(key, language) {
285
+ return JSON.stringify([key, language]);
286
+ }
287
+
288
+ /** Switch only the ready receipt projection; no fetching or rebuilding data. */
289
+ }, {
290
+ key: "selectLanguage",
291
+ value: function selectLanguage(code) {
292
+ var _this$core$getPlugin2, _this$core$getPlugin3, _this$core$getPlugin4;
293
+ if (this.disposed) throw new Error('Invoice preview disposed');
294
+ var current = this.state.result;
295
+ if (this.state.status !== 'ready' || !current || !this.input) throw new Error('Invoice preview is not ready');
296
+ var currentShop = (_this$core$getPlugin2 = this.core.getPlugin('app')) === null || _this$core$getPlugin2 === void 0 || (_this$core$getPlugin3 = _this$core$getPlugin2.getData) === null || _this$core$getPlugin3 === void 0 || (_this$core$getPlugin4 = _this$core$getPlugin3.call(_this$core$getPlugin2)) === null || _this$core$getPlugin4 === void 0 ? void 0 : _this$core$getPlugin4('shop_id');
297
+ if (currentShop != null && String(currentShop) !== String(this.input.shopId)) throw new Error('Invoice shop changed');
298
+ var selected = current.languageOptions.find(function (option) {
299
+ return option.code === code;
300
+ });
301
+ if (!selected) throw new Error('Invoice language is unavailable');
302
+ this.languageSelection = {
303
+ scope: this.getSelectionScope(this.input),
304
+ code: selected.code
305
+ };
306
+ if (selected.code === current.selectedLanguage) return current;
307
+ var _previousSecondary = current.secondaryLocale,
308
+ rest = _objectWithoutProperties(current, _excluded);
309
+ var result = _objectSpread(_objectSpread({}, rest), {}, {
310
+ identity: this.documentIdentity(this.activeKey, selected.code),
311
+ selectedLanguage: selected.code,
312
+ locale: selected.locales[0]
313
+ }, selected.locales[1] ? {
314
+ secondaryLocale: selected.locales[1]
315
+ } : {});
316
+ this.publish({
317
+ status: 'ready',
318
+ result: result,
319
+ error: null
320
+ });
321
+ return result;
322
+ }
252
323
  }, {
253
324
  key: "retry",
254
325
  value: function retry() {
@@ -386,6 +386,26 @@ function withH5AuthPrefix(config) {
386
386
  return nextConfig;
387
387
  }
388
388
  var h5OnlineStoreConfig = withH5AuthPrefix(onlineStoreConfig);
389
+ function withKioskSalesChannel(config) {
390
+ return _objectSpread(_objectSpread({}, config), {}, {
391
+ options: function options(params) {
392
+ var options = (typeof config.options === 'function' ? config.options(params) : config.options) || {};
393
+ var headers = typeof options.headers === 'function' ? options.headers(params) : options.headers;
394
+ return _objectSpread(_objectSpread({}, options), {}, {
395
+ headers: _objectSpread(_objectSpread({}, headers), {}, {
396
+ 'Sales-Channel': 'kiosk'
397
+ })
398
+ });
399
+ }
400
+ });
401
+ }
402
+
403
+ // Kiosk 复用网店顾客认证接口,通过注册(含验证码登录自动注册)请求头标识会员归属渠道。
404
+ var kioskConfig = _objectSpread(_objectSpread({}, h5OnlineStoreConfig), {}, {
405
+ emailCodeRegister: withKioskSalesChannel(h5OnlineStoreConfig.emailCodeRegister),
406
+ phoneCodeRegister: withKioskSalesChannel(h5OnlineStoreConfig.phoneCodeRegister),
407
+ phoneCodeLogin: withKioskSalesChannel(h5OnlineStoreConfig.phoneCodeLogin)
408
+ });
389
409
 
390
410
  /**
391
411
  * 默认配置(通用配置)
@@ -713,6 +733,16 @@ var defaultConfig = {
713
733
  /**
714
734
  * webpos 渠道配置
715
735
  */
736
+ var webposPasswordResetOptions = {
737
+ prefix: false,
738
+ isDefaultSaasDomain: true,
739
+ cache: false,
740
+ noToast: true,
741
+ headers: {
742
+ Accept: 'application/json',
743
+ 'Content-Type': 'application/json'
744
+ }
745
+ };
716
746
  var webposConfig = {
717
747
  sendEmailVerificationCode: {
718
748
  url: '/auth/email/register-code',
@@ -865,15 +895,23 @@ var webposConfig = {
865
895
  }
866
896
  },
867
897
  checkEmailCode: {
868
- url: '/auth/email/check-email-code',
869
- method: 'GET',
898
+ url: '/tenant/account/reset-password/email-code/verify',
899
+ method: 'POST',
870
900
  transformParams: function transformParams(params) {
871
901
  return {
872
902
  email: params.email,
873
- code: params.code,
874
- action: params.action
903
+ code: params.code
875
904
  };
876
- }
905
+ },
906
+ // SaaS 成功时 data 为 null,统一为既有验证码校验返回结构。
907
+ transformResponse: function transformResponse(response) {
908
+ return (response === null || response === void 0 ? void 0 : response.status) === true ? _objectSpread(_objectSpread({}, response), {}, {
909
+ data: {
910
+ valid: true
911
+ }
912
+ }) : response;
913
+ },
914
+ options: webposPasswordResetOptions
877
915
  },
878
916
  checkMobileCode: {
879
917
  url: '/auth/mobile/check-mobile-code',
@@ -899,13 +937,14 @@ var webposConfig = {
899
937
  }
900
938
  },
901
939
  sendPasswordResetEmail: {
902
- url: '/auth/email/reset-password-code',
903
- method: 'GET',
940
+ url: '/tenant/account/reset-password/email-code/send',
941
+ method: 'POST',
904
942
  transformParams: function transformParams(params) {
905
943
  return {
906
944
  email: params.email
907
945
  };
908
- }
946
+ },
947
+ options: webposPasswordResetOptions
909
948
  },
910
949
  sendPasswordResetSms: {
911
950
  url: '/auth/mobile/sms-forget',
@@ -946,15 +985,18 @@ var webposConfig = {
946
985
  }
947
986
  },
948
987
  resetPasswordByEmail: {
949
- url: '/auth/email/reset-password',
988
+ url: '/tenant/account/reset-password/email-code',
950
989
  method: 'POST',
951
990
  transformParams: function transformParams(params) {
952
991
  return {
953
992
  email: params.email,
954
993
  password: params.password,
955
- code: params.code
994
+ code: params.code,
995
+ // 页面先校验两次输入完全一致,SDK 保持原有重置参数。
996
+ password_confirmation: params.password
956
997
  };
957
- }
998
+ },
999
+ options: webposPasswordResetOptions
958
1000
  },
959
1001
  resetPasswordByPhone: {
960
1002
  url: '/auth/mobile/reset-password',
@@ -1383,6 +1425,7 @@ var shopWebposConfig = {
1383
1425
  export var channelConfigMap = {
1384
1426
  'online-store': onlineStoreConfig,
1385
1427
  'online-store-h5': h5OnlineStoreConfig,
1428
+ 'kiosk': kioskConfig,
1386
1429
  'default': defaultConfig,
1387
1430
  'webpos': webposConfig,
1388
1431
  'shop.webpos': shopWebposConfig
@@ -4,6 +4,8 @@ import { RegisterParams, LoginParams, OAuthLoginParams, SendVerificationCodePara
4
4
  import { ApiCaller } from './config';
5
5
  export * from './types';
6
6
  export * from './config';
7
+ export { validatePassword } from './utils';
8
+ export type { PasswordValidationOptions } from './utils';
7
9
  /**
8
10
  * 注册登录解决方案实现
9
11
  */
@@ -22,7 +22,7 @@ import { RegisterAndLoginHooks, VerificationCodeType, VerificationPurpose } from
22
22
  import { createApiCaller } from "./config";
23
23
  export * from "./types";
24
24
  export * from "./config";
25
-
25
+ export { validatePassword } from "./utils";
26
26
  /**
27
27
  * 注册登录解决方案实现
28
28
  */
@@ -10,10 +10,18 @@ export declare function validateEmail(email: string): boolean;
10
10
  * 验证手机号格式(支持多种国际格式)
11
11
  */
12
12
  export declare function validatePhone(phone: string): boolean;
13
- /**
14
- * 验证密码强度
15
- */
16
- export declare function validatePassword(password: string): {
13
+ export interface PasswordValidationOptions {
14
+ minLength?: number;
15
+ maxLength?: number;
16
+ requireLowercase?: boolean;
17
+ requireUppercase?: boolean;
18
+ requireNumber?: boolean;
19
+ requireSpecialCharacters?: boolean;
20
+ specialCharactersPattern?: RegExp;
21
+ messages?: Partial<Record<'minLength' | 'maxLength' | 'requireLowercase' | 'requireUppercase' | 'requireNumber' | 'requireSpecialCharacters', string>>;
22
+ }
23
+ /** 验证密码强度;不传 options 时保持原有规则与返回格式。 */
24
+ export declare function validatePassword(password: string, options?: PasswordValidationOptions): {
17
25
  isValid: boolean;
18
26
  errors: string[];
19
27
  };
@@ -33,29 +33,49 @@ export function validatePhone(phone) {
33
33
  var phoneRegex = /^(\+\d{1,3}[- ]?)?\d{10,14}$/;
34
34
  return phoneRegex.test(cleanPhone);
35
35
  }
36
-
37
- /**
38
- * 验证密码强度
39
- */
36
+ /** 验证密码强度;不传 options 时保持原有规则与返回格式。 */
40
37
  export function validatePassword(password) {
38
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
41
39
  var errors = [];
42
- if (password.length < 8) {
43
- errors.push('密码长度至少为8位');
40
+ var _options$minLength = options.minLength,
41
+ minLength = _options$minLength === void 0 ? 8 : _options$minLength,
42
+ _options$maxLength = options.maxLength,
43
+ maxLength = _options$maxLength === void 0 ? 128 : _options$maxLength,
44
+ _options$requireLower = options.requireLowercase,
45
+ requireLowercase = _options$requireLower === void 0 ? true : _options$requireLower,
46
+ _options$requireUpper = options.requireUppercase,
47
+ requireUppercase = _options$requireUpper === void 0 ? true : _options$requireUpper,
48
+ _options$requireNumbe = options.requireNumber,
49
+ requireNumber = _options$requireNumbe === void 0 ? true : _options$requireNumbe,
50
+ _options$requireSpeci = options.requireSpecialCharacters,
51
+ requireSpecialCharacters = _options$requireSpeci === void 0 ? true : _options$requireSpeci,
52
+ _options$specialChara = options.specialCharactersPattern,
53
+ specialCharactersPattern = _options$specialChara === void 0 ? /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/ : _options$specialChara,
54
+ _options$messages = options.messages,
55
+ messages = _options$messages === void 0 ? {} : _options$messages;
56
+ if (password.length < minLength) {
57
+ var _messages$minLength;
58
+ errors.push((_messages$minLength = messages.minLength) !== null && _messages$minLength !== void 0 ? _messages$minLength : "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11\u4E3A".concat(minLength, "\u4F4D"));
44
59
  }
45
- if (password.length > 128) {
46
- errors.push('密码长度不能超过128位');
60
+ if (password.length > maxLength) {
61
+ var _messages$maxLength;
62
+ errors.push((_messages$maxLength = messages.maxLength) !== null && _messages$maxLength !== void 0 ? _messages$maxLength : "\u5BC6\u7801\u957F\u5EA6\u4E0D\u80FD\u8D85\u8FC7".concat(maxLength, "\u4F4D"));
47
63
  }
48
- if (!/[a-z]/.test(password)) {
49
- errors.push('密码必须包含至少一个小写字母');
64
+ if (requireLowercase && !/[a-z]/.test(password)) {
65
+ var _messages$requireLowe;
66
+ errors.push((_messages$requireLowe = messages.requireLowercase) !== null && _messages$requireLowe !== void 0 ? _messages$requireLowe : '密码必须包含至少一个小写字母');
50
67
  }
51
- if (!/[A-Z]/.test(password)) {
52
- errors.push('密码必须包含至少一个大写字母');
68
+ if (requireUppercase && !/[A-Z]/.test(password)) {
69
+ var _messages$requireUppe;
70
+ errors.push((_messages$requireUppe = messages.requireUppercase) !== null && _messages$requireUppe !== void 0 ? _messages$requireUppe : '密码必须包含至少一个大写字母');
53
71
  }
54
- if (!/\d/.test(password)) {
55
- errors.push('密码必须包含至少一个数字');
72
+ if (requireNumber && !/\d/.test(password)) {
73
+ var _messages$requireNumb;
74
+ errors.push((_messages$requireNumb = messages.requireNumber) !== null && _messages$requireNumb !== void 0 ? _messages$requireNumb : '密码必须包含至少一个数字');
56
75
  }
57
- if (!/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(password)) {
58
- errors.push('密码必须包含至少一个特殊字符');
76
+ if (requireSpecialCharacters && !specialCharactersPattern.test(password)) {
77
+ var _messages$requireSpec;
78
+ errors.push((_messages$requireSpec = messages.requireSpecialCharacters) !== null && _messages$requireSpec !== void 0 ? _messages$requireSpec : '密码必须包含至少一个特殊字符');
59
79
  }
60
80
  return {
61
81
  isValid: errors.length === 0,
@@ -105,6 +105,8 @@ export declare class SalesImpl extends BaseModule implements Module, SalesModule
105
105
  private groupBookingsByResource;
106
106
  private isBookingMatchedResource;
107
107
  private sortMatchedBookings;
108
+ /** 已完成:按订单创建时间降序,避免实时追加和重新加载导致显示顺序不同。 */
109
+ private sortCompletedBookings;
108
110
  /** Unpaid:与 Current 重合的订单沿用 Current 顺序,其余欠款订单按开始时间降序追加。 */
109
111
  private sortUnpaidBookings;
110
112
  /**
@@ -760,6 +760,20 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
760
760
  });
761
761
  }
762
762
 
763
+ /** 已完成:按订单创建时间降序,避免实时追加和重新加载导致显示顺序不同。 */
764
+ }, {
765
+ key: "sortCompletedBookings",
766
+ value: function sortCompletedBookings(bookings) {
767
+ var createdAt = function createdAt(booking) {
768
+ var _booking$order3;
769
+ var timestamp = dayjs(((_booking$order3 = booking.order) === null || _booking$order3 === void 0 ? void 0 : _booking$order3.created_at) || '').valueOf();
770
+ return Number.isFinite(timestamp) ? timestamp : 0;
771
+ };
772
+ return _toConsumableArray(bookings).sort(function (left, right) {
773
+ return createdAt(right) - createdAt(left);
774
+ });
775
+ }
776
+
763
777
  /** Unpaid:与 Current 重合的订单沿用 Current 顺序,其余欠款订单按开始时间降序追加。 */
764
778
  }, {
765
779
  key: "sortUnpaidBookings",
@@ -1260,7 +1274,7 @@ export var SalesImpl = /*#__PURE__*/function (_BaseModule) {
1260
1274
  bookings = this.pickBookingsForCurrentPoint(current, this.normalizeResourceBookings(current, deviceCurrent, matchedBookingList), {
1261
1275
  includeAllFuture: true
1262
1276
  });
1263
- completedBookings = completedBookingList.map(function (booking) {
1277
+ completedBookings = this.sortCompletedBookings(completedBookingList).map(function (booking) {
1264
1278
  return _objectSpread(_objectSpread({}, booking), {}, {
1265
1279
  status: 'compelete',
1266
1280
  isTimeout: false,
@@ -11,10 +11,11 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
11
11
  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; } } }; }
12
12
  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); }
13
13
  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; }
14
+ import { withOriginalBundleOptionPrices } from "../../modules/Order/utils/weighedProduct";
14
15
  import dayjs from 'dayjs';
15
16
  import Decimal from 'decimal.js';
16
17
  import { composeLinePrice, createUuidV4, ensureProductSku, getBundleSellingMagnitude, getProductSkuOptions, normalizeProductSkuOptions, resolveManualOverrideLineOriginalPrice, sumOptionUnitPrice } from "../../modules/Order/utils";
17
- import { ensureManualProductDiscountList } from "../../modules/Order/utils/manualProductDiscount";
18
+ import { ensureManualProductDiscountList, hasManualProductDiscountFlag } from "../../modules/Order/utils/manualProductDiscount";
18
19
 
19
20
  /**
20
21
  * 构建金额全为 0 的空 summary。
@@ -643,7 +644,7 @@ export function normalizeOrderProduct(product) {
643
644
  });
644
645
  var composedOriginalPrice = composeLinePrice({
645
646
  mainPrice: mainOriginalStr,
646
- bundle: normalizedBundle,
647
+ bundle: Number(productSku.open_sold_weight) === 1 && hasManualProductDiscountFlag(metadata) ? withOriginalBundleOptionPrices(normalizedBundle) : normalizedBundle,
647
648
  useOriginalBundle: true
648
649
  });
649
650
  var finalOriginalPrice = resolveManualOverrideLineOriginalPrice({
@@ -49,7 +49,7 @@ import { isCustomerUserPlatform, normalizeRuntimePlatform } from "../../utils/pl
49
49
  import { ItemRuleEvaluator } from "../../model/strategy/adapter/itemRule";
50
50
  export * from "./types";
51
51
  export { AvailabilityError } from "../../modules/ResourcePlanner";
52
- var OPEN_DATA_SECTION_CODES = ['sale', 'reservation', 'fulfillment', 'menu', 'workflow', 'basic', 'checkout', 'availability', 'documents'];
52
+ var OPEN_DATA_SECTION_CODES = ['sale', 'reservation', 'fulfillment', 'menu', 'workflow', 'documents', 'basic', 'checkout', 'availability'];
53
53
  function normalizePositiveInteger(value) {
54
54
  var normalized = Number(value);
55
55
  if (!Number.isInteger(normalized) || normalized <= 0) return undefined;
@@ -304,10 +304,9 @@ function assertAvailabilityCatalogProductIds(productIds, context) {
304
304
  });
305
305
  }
306
306
  }
307
- function normalizeResourceType(_value) {
308
- // 当前业务只支持每个资源组选择一个具体资源。
309
- // 保留公共联合类型以兼容已有调用方,但暂不启用 multiple/capacity 分支。
310
- return 'single';
307
+ function normalizeResourceType(value) {
308
+ // 预约是否独占与每组选择几个资源是两个独立配置。
309
+ return value === 'multiple' || value === 'capacity' ? value : 'single';
311
310
  }
312
311
  function resolveProductKind(product) {
313
312
  var _product$cartDetailVa, _product$_extend;
@@ -2002,10 +2001,10 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
2002
2001
  }, {
2003
2002
  key: "shouldUseCheckoutSyncTask",
2004
2003
  value: function shouldUseCheckoutSyncTask() {
2005
- var _this$otherParams13, _this$otherParams$pla, _this$otherParams14;
2004
+ var _this$otherParams13, _this$otherParams14;
2006
2005
  var configured = (_this$otherParams13 = this.otherParams) === null || _this$otherParams13 === void 0 ? void 0 : _this$otherParams13.checkoutSyncTaskEnabled;
2007
2006
  if (configured === true) return true;
2008
- var platform = String((_this$otherParams$pla = (_this$otherParams14 = this.otherParams) === null || _this$otherParams14 === void 0 ? void 0 : _this$otherParams14.platform) !== null && _this$otherParams$pla !== void 0 ? _this$otherParams$pla : '').trim().toLowerCase();
2007
+ var platform = normalizeRuntimePlatform((_this$otherParams14 = this.otherParams) === null || _this$otherParams14 === void 0 ? void 0 : _this$otherParams14.platform);
2009
2008
  return !isCustomerUserPlatform(platform) && platform !== 'kiosk';
2010
2009
  }
2011
2010
 
@@ -4852,7 +4851,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
4852
4851
  key: "getProductTimeRanges",
4853
4852
  value: (function () {
4854
4853
  var _getProductTimeRanges = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee46(contextId) {
4855
- var _this$otherParams$pla2,
4854
+ var _this$otherParams$pla,
4856
4855
  _this$otherParams24,
4857
4856
  _this13 = this;
4858
4857
  var request,
@@ -4874,7 +4873,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
4874
4873
  context = _yield$this$ensureAva.context;
4875
4874
  projectionEntry = _yield$this$ensureAva.projectionEntry;
4876
4875
  contextVersion = context.activeVersion;
4877
- isPosAvailabilityRequest = String((_this$otherParams$pla2 = (_this$otherParams24 = this.otherParams) === null || _this$otherParams24 === void 0 ? void 0 : _this$otherParams24.platform) !== null && _this$otherParams$pla2 !== void 0 ? _this$otherParams$pla2 : '').trim().toLowerCase() === 'pos';
4876
+ isPosAvailabilityRequest = String((_this$otherParams$pla = (_this$otherParams24 = this.otherParams) === null || _this$otherParams24 === void 0 ? void 0 : _this$otherParams24.platform) !== null && _this$otherParams$pla !== void 0 ? _this$otherParams$pla : '').trim().toLowerCase() === 'pos';
4878
4877
  allowOutsideOperatingHoursForRequestedStartTimes = isPosAvailabilityRequest && Object.values(request.durationStartTimesByProductId || {}).some(function (startTimes) {
4879
4878
  return Array.isArray(startTimes) && startTimes.length > 0;
4880
4879
  });
@@ -4907,7 +4906,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
4907
4906
  key: "queryBookingAvailability",
4908
4907
  value: (function () {
4909
4908
  var _queryBookingAvailability = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee47(contextId, request) {
4910
- var _this$otherParams$pla3, _this$otherParams25;
4909
+ var _this$otherParams$pla2, _this$otherParams25;
4911
4910
  var _yield$this$ensureAva2, context, projectionEntry, refreshed, isPosAvailabilityRequest, result, contextVersion, contextualResult;
4912
4911
  return _regeneratorRuntime().wrap(function _callee47$(_context47) {
4913
4912
  while (1) switch (_context47.prev = _context47.next) {
@@ -4920,7 +4919,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
4920
4919
  projectionEntry = _yield$this$ensureAva2.projectionEntry;
4921
4920
  refreshed = _yield$this$ensureAva2.refreshed;
4922
4921
  this.assertContextualQueryFreshness(context, request);
4923
- isPosAvailabilityRequest = String((_this$otherParams$pla3 = (_this$otherParams25 = this.otherParams) === null || _this$otherParams25 === void 0 ? void 0 : _this$otherParams25.platform) !== null && _this$otherParams$pla3 !== void 0 ? _this$otherParams$pla3 : '').trim().toLowerCase() === 'pos';
4922
+ isPosAvailabilityRequest = String((_this$otherParams$pla2 = (_this$otherParams25 = this.otherParams) === null || _this$otherParams25 === void 0 ? void 0 : _this$otherParams25.platform) !== null && _this$otherParams$pla2 !== void 0 ? _this$otherParams$pla2 : '').trim().toLowerCase() === 'pos';
4924
4923
  result = queryAvailabilityProjection(projectionEntry.projection, request, {
4925
4924
  useExactDurationCandidateMinute: isPosAvailabilityRequest,
4926
4925
  allowExcludedScheduleDateOverride: isPosAvailabilityRequest
@@ -5033,7 +5032,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
5033
5032
  key: "commitAvailabilitySelection",
5034
5033
  value: (function () {
5035
5034
  var _commitAvailabilitySelection = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee48(contextId, params) {
5036
- var normalizedContextId, _params$bookingCount, _ref53, _params$orderProduct$, _params$orderProduct, _params$orderProduct2, _params$orderProduct3, _params$orderProduct$2, _params$orderProduct4, _params$orderProduct5, _editingLine$product_, _baseProjection$meta$, _refreshedProjection$, _baseProjection$meta$2, _this$otherParams$pla4, _this$otherParams26, _ref54, _params$orderProduct$3, _params$orderProduct6, _existingBooking$meta, _ref55, _ref56, _params$orderProduct$4, _params$orderProduct7, _params$orderProduct8, _existingBooking$meta2, _existingBooking$hold, bookingCount, orderProductQuantity, partySize, _yield$this$ensureAva3, context, projectionEntry, refreshed, boundEditingUids, orderProductId, editingLine, _editingLine$product_2, baseProjection, commitWriteGuard, prepareParams, fallbackResources, commitSnapshot, refreshedProjection, _baseProjection$meta$3, latestContext, candidateDurationMinutes, candidateStartTime, allowPosAvailabilityOverride, refreshedRanges, refreshedCandidateBase, product, validation, forced, capacityConflict, revalidationEntry, revalidatedContext, refreshedCandidate, existingBooking, existingBookingUid, booking, transformed, productLineUid, bookingUid, productLineUids, bookingUids, _transformed$product_, _transformed$product_2, _transformed$product_3, _ref57, _transformed$product_4, _this$getTempOrder4, _this$getTempOrder5, _params$salesNotes, _this$getTempOrder6, beforeProductLineUids, beforeBookingUids, products, addedLines, addedBookings, nextContext, result;
5035
+ var normalizedContextId, _params$bookingCount, _ref53, _params$orderProduct$, _params$orderProduct, _params$orderProduct2, _params$orderProduct3, _params$orderProduct$2, _params$orderProduct4, _params$orderProduct5, _editingLine$product_, _baseProjection$meta$, _refreshedProjection$, _baseProjection$meta$2, _this$otherParams$pla3, _this$otherParams26, _ref54, _params$orderProduct$3, _params$orderProduct6, _existingBooking$meta, _ref55, _ref56, _params$orderProduct$4, _params$orderProduct7, _params$orderProduct8, _existingBooking$meta2, _existingBooking$hold, bookingCount, orderProductQuantity, partySize, _yield$this$ensureAva3, context, projectionEntry, refreshed, boundEditingUids, orderProductId, editingLine, _editingLine$product_2, baseProjection, commitWriteGuard, prepareParams, fallbackResources, commitSnapshot, refreshedProjection, _baseProjection$meta$3, latestContext, candidateDurationMinutes, candidateStartTime, allowPosAvailabilityOverride, refreshedRanges, refreshedCandidateBase, product, validation, forced, capacityConflict, revalidationEntry, revalidatedContext, refreshedCandidate, existingBooking, existingBookingUid, booking, transformed, productLineUid, bookingUid, productLineUids, bookingUids, _transformed$product_, _transformed$product_2, _transformed$product_3, _ref57, _transformed$product_4, _this$getTempOrder4, _this$getTempOrder5, _params$salesNotes, _this$getTempOrder6, beforeProductLineUids, beforeBookingUids, products, addedLines, addedBookings, nextContext, result;
5037
5036
  return _regeneratorRuntime().wrap(function _callee48$(_context48) {
5038
5037
  while (1) switch (_context48.prev = _context48.next) {
5039
5038
  case 0:
@@ -5263,7 +5262,7 @@ export var UnifiedBookingSalesImpl = /*#__PURE__*/function (_BookingTicket) {
5263
5262
  this.assertAvailabilityCommitWriteCAS(commitWriteGuard);
5264
5263
  candidateDurationMinutes = getCandidateDurationMinutes(params.candidate);
5265
5264
  candidateStartTime = getCandidateStartTime(params.candidate);
5266
- allowPosAvailabilityOverride = String((_this$otherParams$pla4 = (_this$otherParams26 = this.otherParams) === null || _this$otherParams26 === void 0 ? void 0 : _this$otherParams26.platform) !== null && _this$otherParams$pla4 !== void 0 ? _this$otherParams$pla4 : '').trim().toLowerCase() === 'pos';
5265
+ allowPosAvailabilityOverride = String((_this$otherParams$pla3 = (_this$otherParams26 = this.otherParams) === null || _this$otherParams26 === void 0 ? void 0 : _this$otherParams26.platform) !== null && _this$otherParams$pla3 !== void 0 ? _this$otherParams$pla3 : '').trim().toLowerCase() === 'pos';
5267
5266
  refreshedRanges = getProjectionProductTimeRanges(refreshedProjection, _objectSpread({
5268
5267
  productIds: [params.candidate.productId],
5269
5268
  dateRange: {