@pisell/pisellos 0.10.54 → 0.10.56
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.
- package/dist/modules/BusinessAvailability/index.d.ts +30 -0
- package/dist/modules/BusinessAvailability/index.js +204 -0
- package/dist/modules/OpenData/types.d.ts +2 -0
- package/dist/modules/Order/index.d.ts +4 -1
- package/dist/modules/Order/index.js +315 -241
- package/dist/modules/Order/types.d.ts +8 -0
- package/dist/plugins/request.d.ts +4 -0
- package/dist/shared/receipt/loadCustomerInvoiceLayout.d.ts +22 -0
- package/dist/shared/receipt/loadCustomerInvoiceLayout.js +142 -0
- package/dist/solution/BaseSales/index.d.ts +4 -15
- package/dist/solution/BaseSales/index.js +131 -86
- package/dist/solution/BaseSales/types.d.ts +11 -0
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +41 -13
- package/dist/solution/OrderInvoicePreview/index.js +6 -6
- package/dist/solution/UnifiedBookingSales/businessAvailability.d.ts +27 -0
- package/dist/solution/UnifiedBookingSales/businessAvailability.js +292 -0
- package/dist/solution/UnifiedBookingSales/index.d.ts +11 -0
- package/dist/solution/UnifiedBookingSales/index.js +154 -75
- package/dist/solution/UnifiedBookingSales/types.d.ts +2 -0
- package/lib/model/strategy/adapter/promotion/index.js +1 -46
- package/lib/modules/BusinessAvailability/index.d.ts +30 -0
- package/lib/modules/BusinessAvailability/index.js +146 -0
- package/lib/modules/OpenData/types.d.ts +2 -0
- package/lib/modules/Order/index.d.ts +4 -1
- package/lib/modules/Order/index.js +62 -6
- package/lib/modules/Order/types.d.ts +8 -0
- package/lib/plugins/request.d.ts +4 -0
- package/lib/shared/receipt/loadCustomerInvoiceLayout.d.ts +22 -0
- package/lib/shared/receipt/loadCustomerInvoiceLayout.js +86 -0
- package/lib/solution/BaseSales/index.d.ts +4 -15
- package/lib/solution/BaseSales/index.js +45 -24
- package/lib/solution/BaseSales/types.d.ts +11 -0
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +37 -4
- package/lib/solution/OrderInvoicePreview/index.js +2 -4
- package/lib/solution/UnifiedBookingSales/businessAvailability.d.ts +27 -0
- package/lib/solution/UnifiedBookingSales/businessAvailability.js +138 -0
- package/lib/solution/UnifiedBookingSales/index.d.ts +11 -0
- package/lib/solution/UnifiedBookingSales/index.js +54 -0
- package/lib/solution/UnifiedBookingSales/types.d.ts +2 -0
- package/package.json +1 -1
|
@@ -326,7 +326,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
326
326
|
date: string;
|
|
327
327
|
status: string;
|
|
328
328
|
week: string;
|
|
329
|
-
weekNum: 0 |
|
|
329
|
+
weekNum: 0 | 2 | 1 | 6 | 4 | 5 | 3;
|
|
330
330
|
}[]>;
|
|
331
331
|
submitTimeSlot(timeSlots: TimeSliceItem): void;
|
|
332
332
|
private getScheduleDataByIds;
|
|
@@ -345,7 +345,7 @@ export declare class BookingTicketImpl extends BaseSalesImpl implements Module {
|
|
|
345
345
|
* 获取当前的客户搜索条件
|
|
346
346
|
* @returns 当前搜索条件
|
|
347
347
|
*/
|
|
348
|
-
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "
|
|
348
|
+
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
|
|
349
349
|
/**
|
|
350
350
|
* 获取客户列表状态(包含滚动加载相关状态)
|
|
351
351
|
* @returns 客户状态
|
|
@@ -2664,7 +2664,7 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2664
2664
|
value: (function () {
|
|
2665
2665
|
var _handleGlobalScanCode = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee32(code, bridge) {
|
|
2666
2666
|
var _this7 = this;
|
|
2667
|
-
var trimmed, _bridge$onNotify, _bridge$refresh, localSearch, scanCallback, raw, formatted, _bridge$onNotify2, _result7, _bridge$onNotify3;
|
|
2667
|
+
var trimmed, _bridge$onNotify, _bridge$refresh, beforeScanCommit, beforeScanDialog, guardCallback, guardedBridge, localSearch, scanCallback, raw, formatted, _bridge$onNotify2, _result7, _bridge$onNotify3;
|
|
2668
2668
|
return _regeneratorRuntime().wrap(function _callee32$(_context32) {
|
|
2669
2669
|
while (1) switch (_context32.prev = _context32.next) {
|
|
2670
2670
|
case 0:
|
|
@@ -2680,20 +2680,45 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2680
2680
|
});
|
|
2681
2681
|
case 4:
|
|
2682
2682
|
_context32.prev = 4;
|
|
2683
|
+
// Capture before lookup/UI awaits, so a result cannot land in a new cart.
|
|
2684
|
+
// Unscoped POS Order modules return a no-op guard.
|
|
2685
|
+
beforeScanCommit = this.store.order.createCartIntentCommitGuard('add_product');
|
|
2686
|
+
beforeScanDialog = this.store.order.createCartIntentCommitGuard('add_product');
|
|
2687
|
+
guardCallback = function guardCallback(callback) {
|
|
2688
|
+
return callback ? function () {
|
|
2689
|
+
beforeScanCommit();
|
|
2690
|
+
return callback.apply(void 0, arguments);
|
|
2691
|
+
} : undefined;
|
|
2692
|
+
};
|
|
2693
|
+
guardedBridge = bridge ? _objectSpread(_objectSpread({}, bridge), {}, {
|
|
2694
|
+
confirmDetail: guardCallback(bridge.confirmDetail),
|
|
2695
|
+
confirmBookingEdit: guardCallback(bridge.confirmBookingEdit),
|
|
2696
|
+
applyPromotionCode: guardCallback(bridge.applyPromotionCode),
|
|
2697
|
+
requestCustomerSwitch: guardCallback(bridge.requestCustomerSwitch),
|
|
2698
|
+
openOrder: guardCallback(bridge.openOrder),
|
|
2699
|
+
openProductDetail: bridge.openProductDetail ? function (payload) {
|
|
2700
|
+
beforeScanDialog();
|
|
2701
|
+
return bridge.openProductDetail(payload);
|
|
2702
|
+
} : undefined,
|
|
2703
|
+
openBookingEdit: bridge.openBookingEdit ? function (payload) {
|
|
2704
|
+
beforeScanDialog();
|
|
2705
|
+
return bridge.openBookingEdit(payload);
|
|
2706
|
+
} : undefined
|
|
2707
|
+
}) : undefined;
|
|
2683
2708
|
localSearch = function localSearch(v) {
|
|
2684
2709
|
return _this7.store.products.findProductsByCodeOrBarcode(v);
|
|
2685
2710
|
};
|
|
2686
2711
|
scanCallback = handleGlobalScan(this.request, localSearch, this.getSubmitOrderSalesChannel());
|
|
2687
|
-
_context32.next =
|
|
2712
|
+
_context32.next = 13;
|
|
2688
2713
|
return scanCallback({
|
|
2689
2714
|
type: 'nativeScanner',
|
|
2690
2715
|
value: trimmed
|
|
2691
2716
|
});
|
|
2692
|
-
case
|
|
2717
|
+
case 13:
|
|
2693
2718
|
raw = _context32.sent;
|
|
2694
2719
|
formatted = formatGlobalScanResult(raw, trimmed);
|
|
2695
2720
|
if (formatted) {
|
|
2696
|
-
_context32.next =
|
|
2721
|
+
_context32.next = 18;
|
|
2697
2722
|
break;
|
|
2698
2723
|
}
|
|
2699
2724
|
bridge === null || bridge === void 0 || (_bridge$onNotify2 = bridge.onNotify) === null || _bridge$onNotify2 === void 0 || _bridge$onNotify2.call(bridge, 'fail', 'pisell2.text.scan-global-failed');
|
|
@@ -2701,11 +2726,12 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2701
2726
|
status: 'failed',
|
|
2702
2727
|
reason: 'not_found'
|
|
2703
2728
|
});
|
|
2704
|
-
case
|
|
2705
|
-
_context32.next =
|
|
2729
|
+
case 18:
|
|
2730
|
+
_context32.next = 20;
|
|
2706
2731
|
return applyGlobalScan({
|
|
2707
2732
|
setOrderCustomer: function setOrderCustomer(customer) {
|
|
2708
|
-
|
|
2733
|
+
beforeScanCommit();
|
|
2734
|
+
_this7.setOrderCustomer(customer);
|
|
2709
2735
|
},
|
|
2710
2736
|
getOrderCustomerSnapshot: function getOrderCustomerSnapshot() {
|
|
2711
2737
|
return _this7.getOrderCustomerSnapshot();
|
|
@@ -2730,21 +2756,23 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2730
2756
|
return _this7.transformDetailToProductAndBooking(input);
|
|
2731
2757
|
},
|
|
2732
2758
|
addProductToOrder: function addProductToOrder(product, booking) {
|
|
2759
|
+
beforeScanCommit();
|
|
2733
2760
|
return _this7.addProductToOrder(product, booking);
|
|
2734
2761
|
},
|
|
2735
2762
|
refreshWalletAssets: function refreshWalletAssets(params) {
|
|
2736
2763
|
return _this7.refreshWalletAssets(params);
|
|
2737
2764
|
},
|
|
2738
2765
|
scanWalletAsset: function scanWalletAsset(scanCode) {
|
|
2766
|
+
beforeScanCommit();
|
|
2739
2767
|
return _this7.scanWalletAsset(scanCode);
|
|
2740
2768
|
}
|
|
2741
|
-
}, formatted,
|
|
2742
|
-
case
|
|
2769
|
+
}, formatted, guardedBridge);
|
|
2770
|
+
case 20:
|
|
2743
2771
|
_result7 = _context32.sent;
|
|
2744
2772
|
bridge === null || bridge === void 0 || (_bridge$refresh = bridge.refresh) === null || _bridge$refresh === void 0 || _bridge$refresh.call(bridge);
|
|
2745
2773
|
return _context32.abrupt("return", _result7);
|
|
2746
|
-
case
|
|
2747
|
-
_context32.prev =
|
|
2774
|
+
case 25:
|
|
2775
|
+
_context32.prev = 25;
|
|
2748
2776
|
_context32.t0 = _context32["catch"](4);
|
|
2749
2777
|
console.error('[BookingTicket] handleGlobalScanCode failed', _context32.t0);
|
|
2750
2778
|
bridge === null || bridge === void 0 || (_bridge$onNotify3 = bridge.onNotify) === null || _bridge$onNotify3 === void 0 || _bridge$onNotify3.call(bridge, 'fail', 'pisell2.text.scan-global-failed');
|
|
@@ -2752,11 +2780,11 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
2752
2780
|
status: 'failed',
|
|
2753
2781
|
reason: 'not_found'
|
|
2754
2782
|
});
|
|
2755
|
-
case
|
|
2783
|
+
case 30:
|
|
2756
2784
|
case "end":
|
|
2757
2785
|
return _context32.stop();
|
|
2758
2786
|
}
|
|
2759
|
-
}, _callee32, this, [[4,
|
|
2787
|
+
}, _callee32, this, [[4, 25]]);
|
|
2760
2788
|
}));
|
|
2761
2789
|
function handleGlobalScanCode(_x21, _x22) {
|
|
2762
2790
|
return _handleGlobalScanCode.apply(this, arguments);
|
|
@@ -26,7 +26,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key i
|
|
|
26
26
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
27
27
|
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
28
|
import { BaseModule } from "../../modules/BaseModule";
|
|
29
|
-
import {
|
|
29
|
+
import { loadCustomerInvoiceLayout } from "../../shared/receipt/loadCustomerInvoiceLayout";
|
|
30
30
|
import { buildSmallTicketData } from "../../shared/receipt/small-ticket";
|
|
31
31
|
import { loadSalesOrderSnapshot } from "../../shared/sales/loadSalesOrderSnapshot";
|
|
32
32
|
import { loadPaymentMethods, withPaymentMethodNames } from "../../shared/payment/loadPaymentMethods";
|
|
@@ -176,19 +176,19 @@ export var OrderInvoicePreviewImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
176
176
|
});
|
|
177
177
|
var task = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
178
178
|
var _this3$core$getPlugin, _this3$core$getPlugin2, _coreData$core;
|
|
179
|
-
var _yield$Promise$all, _yield$Promise$all2, snapshot, context,
|
|
179
|
+
var _yield$Promise$all, _yield$Promise$all2, snapshot, context, layout, source, getData, coreData, shop, requestedLocale, locale, result;
|
|
180
180
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
181
181
|
while (1) switch (_context.prev = _context.next) {
|
|
182
182
|
case 0:
|
|
183
183
|
_context.next = 2;
|
|
184
|
-
return Promise.all([_this3.loadSource(input), _this3.loadContext(input)]);
|
|
184
|
+
return Promise.all([_this3.loadSource(input), _this3.loadContext(input), loadCustomerInvoiceLayout(_this3.request, input)]);
|
|
185
185
|
case 2:
|
|
186
186
|
_yield$Promise$all = _context.sent;
|
|
187
|
-
_yield$Promise$all2 = _slicedToArray(_yield$Promise$all,
|
|
187
|
+
_yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);
|
|
188
188
|
snapshot = _yield$Promise$all2[0];
|
|
189
189
|
context = _yield$Promise$all2[1];
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
layout = _yield$Promise$all2[2];
|
|
191
|
+
source = withPaymentMethodNames(snapshot, context.methods);
|
|
192
192
|
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
193
|
if (!((getData === null || getData === void 0 ? void 0 : getData('shop_id')) != null && String(getData('shop_id')) !== String(input.shopId))) {
|
|
194
194
|
_context.next = 11;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type BusinessAvailability } from '../../modules/BusinessAvailability';
|
|
2
|
+
import type { ScheduleModule } from '../../modules/Schedule';
|
|
3
|
+
interface BusinessAvailabilityHost {
|
|
4
|
+
loadOpenData: () => Promise<Record<string, unknown> | null>;
|
|
5
|
+
getSchedule: () => ScheduleModule | undefined;
|
|
6
|
+
getTimezone: () => string;
|
|
7
|
+
getScope: () => string;
|
|
8
|
+
now?: () => Date;
|
|
9
|
+
}
|
|
10
|
+
/** Read successful configuration once per business runtime; evaluate the clock on demand. */
|
|
11
|
+
export declare class BusinessAvailabilityController {
|
|
12
|
+
private readonly host;
|
|
13
|
+
private runtime?;
|
|
14
|
+
constructor(host: BusinessAvailabilityHost);
|
|
15
|
+
invalidate(): void;
|
|
16
|
+
private now;
|
|
17
|
+
private getRuntime;
|
|
18
|
+
private assertCurrent;
|
|
19
|
+
private loadConfig;
|
|
20
|
+
private loadSchedules;
|
|
21
|
+
private error;
|
|
22
|
+
/** Synchronous final cart-commit check; deliberately never starts a load. */
|
|
23
|
+
getCachedAvailability(): BusinessAvailability;
|
|
24
|
+
getAvailability(): Promise<BusinessAvailability>;
|
|
25
|
+
assertAvailable(): void;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _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; }
|
|
3
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
4
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
5
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
6
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
7
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
8
|
+
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); }
|
|
9
|
+
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); } }
|
|
10
|
+
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); }); }; }
|
|
11
|
+
import { cloneDeep } from 'lodash-es';
|
|
12
|
+
import { computeBusinessAvailability, normalizeBusinessAvailabilityConfig } from "../../modules/BusinessAvailability";
|
|
13
|
+
function withTimeout(_x) {
|
|
14
|
+
return _withTimeout.apply(this, arguments);
|
|
15
|
+
}
|
|
16
|
+
/** Read successful configuration once per business runtime; evaluate the clock on demand. */
|
|
17
|
+
function _withTimeout() {
|
|
18
|
+
_withTimeout = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(request) {
|
|
19
|
+
var timer;
|
|
20
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
21
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
22
|
+
case 0:
|
|
23
|
+
_context6.prev = 0;
|
|
24
|
+
_context6.next = 3;
|
|
25
|
+
return Promise.race([request, new Promise(function (_, reject) {
|
|
26
|
+
timer = setTimeout(function () {
|
|
27
|
+
return reject(new Error('Unable to load business settings. Please try again.'));
|
|
28
|
+
}, 30000);
|
|
29
|
+
})]);
|
|
30
|
+
case 3:
|
|
31
|
+
return _context6.abrupt("return", _context6.sent);
|
|
32
|
+
case 4:
|
|
33
|
+
_context6.prev = 4;
|
|
34
|
+
if (timer !== undefined) clearTimeout(timer);
|
|
35
|
+
return _context6.finish(4);
|
|
36
|
+
case 7:
|
|
37
|
+
case "end":
|
|
38
|
+
return _context6.stop();
|
|
39
|
+
}
|
|
40
|
+
}, _callee6, null, [[0,, 4, 7]]);
|
|
41
|
+
}));
|
|
42
|
+
return _withTimeout.apply(this, arguments);
|
|
43
|
+
}
|
|
44
|
+
export var BusinessAvailabilityController = /*#__PURE__*/function () {
|
|
45
|
+
function BusinessAvailabilityController(host) {
|
|
46
|
+
_classCallCheck(this, BusinessAvailabilityController);
|
|
47
|
+
_defineProperty(this, "runtime", void 0);
|
|
48
|
+
this.host = host;
|
|
49
|
+
}
|
|
50
|
+
_createClass(BusinessAvailabilityController, [{
|
|
51
|
+
key: "invalidate",
|
|
52
|
+
value: function invalidate() {
|
|
53
|
+
this.runtime = undefined;
|
|
54
|
+
}
|
|
55
|
+
}, {
|
|
56
|
+
key: "now",
|
|
57
|
+
value: function now() {
|
|
58
|
+
var _this$host$now, _this$host$now2, _this$host;
|
|
59
|
+
return (_this$host$now = (_this$host$now2 = (_this$host = this.host).now) === null || _this$host$now2 === void 0 ? void 0 : _this$host$now2.call(_this$host)) !== null && _this$host$now !== void 0 ? _this$host$now : new Date();
|
|
60
|
+
}
|
|
61
|
+
}, {
|
|
62
|
+
key: "getRuntime",
|
|
63
|
+
value: function getRuntime() {
|
|
64
|
+
var _this$runtime;
|
|
65
|
+
var scope = this.host.getScope();
|
|
66
|
+
if (((_this$runtime = this.runtime) === null || _this$runtime === void 0 ? void 0 : _this$runtime.scope) !== scope) this.runtime = {
|
|
67
|
+
scope: scope
|
|
68
|
+
};
|
|
69
|
+
return this.runtime;
|
|
70
|
+
}
|
|
71
|
+
}, {
|
|
72
|
+
key: "assertCurrent",
|
|
73
|
+
value: function assertCurrent(runtime) {
|
|
74
|
+
if (this.runtime !== runtime || runtime.scope !== this.host.getScope()) {
|
|
75
|
+
throw new Error('Store settings changed. Please try again.');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}, {
|
|
79
|
+
key: "loadConfig",
|
|
80
|
+
value: function () {
|
|
81
|
+
var _loadConfig = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(runtime) {
|
|
82
|
+
var _this = this;
|
|
83
|
+
var request;
|
|
84
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
85
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
86
|
+
case 0:
|
|
87
|
+
if (!runtime.config) {
|
|
88
|
+
_context2.next = 2;
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
return _context2.abrupt("return", runtime.config);
|
|
92
|
+
case 2:
|
|
93
|
+
if (!runtime.configRequest) {
|
|
94
|
+
runtime.configRequest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
95
|
+
var data, config;
|
|
96
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
97
|
+
while (1) switch (_context.prev = _context.next) {
|
|
98
|
+
case 0:
|
|
99
|
+
_context.next = 2;
|
|
100
|
+
return withTimeout(_this.host.loadOpenData());
|
|
101
|
+
case 2:
|
|
102
|
+
data = _context.sent;
|
|
103
|
+
_this.assertCurrent(runtime);
|
|
104
|
+
if (data) {
|
|
105
|
+
_context.next = 6;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
throw new Error('Business settings are unavailable. Please try again.');
|
|
109
|
+
case 6:
|
|
110
|
+
config = cloneDeep(normalizeBusinessAvailabilityConfig(data));
|
|
111
|
+
runtime.config = config;
|
|
112
|
+
return _context.abrupt("return", config);
|
|
113
|
+
case 9:
|
|
114
|
+
case "end":
|
|
115
|
+
return _context.stop();
|
|
116
|
+
}
|
|
117
|
+
}, _callee);
|
|
118
|
+
}))();
|
|
119
|
+
}
|
|
120
|
+
request = runtime.configRequest;
|
|
121
|
+
_context2.prev = 4;
|
|
122
|
+
_context2.next = 7;
|
|
123
|
+
return request;
|
|
124
|
+
case 7:
|
|
125
|
+
return _context2.abrupt("return", _context2.sent);
|
|
126
|
+
case 8:
|
|
127
|
+
_context2.prev = 8;
|
|
128
|
+
if (runtime.configRequest === request) runtime.configRequest = undefined;
|
|
129
|
+
return _context2.finish(8);
|
|
130
|
+
case 11:
|
|
131
|
+
case "end":
|
|
132
|
+
return _context2.stop();
|
|
133
|
+
}
|
|
134
|
+
}, _callee2, null, [[4,, 8, 11]]);
|
|
135
|
+
}));
|
|
136
|
+
function loadConfig(_x2) {
|
|
137
|
+
return _loadConfig.apply(this, arguments);
|
|
138
|
+
}
|
|
139
|
+
return loadConfig;
|
|
140
|
+
}()
|
|
141
|
+
}, {
|
|
142
|
+
key: "loadSchedules",
|
|
143
|
+
value: function () {
|
|
144
|
+
var _loadSchedules = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(runtime) {
|
|
145
|
+
var _this2 = this;
|
|
146
|
+
var request;
|
|
147
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
148
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
149
|
+
case 0:
|
|
150
|
+
if (!runtime.schedules) {
|
|
151
|
+
_context4.next = 2;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
return _context4.abrupt("return", runtime.schedules);
|
|
155
|
+
case 2:
|
|
156
|
+
if (!runtime.scheduleRequest) {
|
|
157
|
+
runtime.scheduleRequest = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
158
|
+
var schedule, schedules;
|
|
159
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
160
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
161
|
+
case 0:
|
|
162
|
+
schedule = _this2.host.getSchedule();
|
|
163
|
+
if (schedule) {
|
|
164
|
+
_context3.next = 3;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
throw new Error('Business operating-hours schedule is unavailable. Please try again.');
|
|
168
|
+
case 3:
|
|
169
|
+
_context3.next = 5;
|
|
170
|
+
return withTimeout(schedule.loadAllSchedule({
|
|
171
|
+
useCache: true
|
|
172
|
+
}));
|
|
173
|
+
case 5:
|
|
174
|
+
_this2.assertCurrent(runtime);
|
|
175
|
+
schedules = cloneDeep(schedule.getScheduleListByIds(runtime.config.scheduleIds) || []);
|
|
176
|
+
runtime.schedules = schedules;
|
|
177
|
+
return _context3.abrupt("return", schedules);
|
|
178
|
+
case 9:
|
|
179
|
+
case "end":
|
|
180
|
+
return _context3.stop();
|
|
181
|
+
}
|
|
182
|
+
}, _callee3);
|
|
183
|
+
}))();
|
|
184
|
+
}
|
|
185
|
+
request = runtime.scheduleRequest;
|
|
186
|
+
_context4.prev = 4;
|
|
187
|
+
_context4.next = 7;
|
|
188
|
+
return request;
|
|
189
|
+
case 7:
|
|
190
|
+
return _context4.abrupt("return", _context4.sent);
|
|
191
|
+
case 8:
|
|
192
|
+
_context4.prev = 8;
|
|
193
|
+
if (runtime.scheduleRequest === request) runtime.scheduleRequest = undefined;
|
|
194
|
+
return _context4.finish(8);
|
|
195
|
+
case 11:
|
|
196
|
+
case "end":
|
|
197
|
+
return _context4.stop();
|
|
198
|
+
}
|
|
199
|
+
}, _callee4, null, [[4,, 8, 11]]);
|
|
200
|
+
}));
|
|
201
|
+
function loadSchedules(_x3) {
|
|
202
|
+
return _loadSchedules.apply(this, arguments);
|
|
203
|
+
}
|
|
204
|
+
return loadSchedules;
|
|
205
|
+
}()
|
|
206
|
+
}, {
|
|
207
|
+
key: "error",
|
|
208
|
+
value: function error(reason, runtime) {
|
|
209
|
+
var _runtime$config$requi, _runtime$config;
|
|
210
|
+
return {
|
|
211
|
+
status: 'error',
|
|
212
|
+
behavior: 'hide_all',
|
|
213
|
+
message: null,
|
|
214
|
+
nextChangeAt: this.now().getTime() + 60000,
|
|
215
|
+
requirePaymentOnSubmit: (_runtime$config$requi = runtime === null || runtime === void 0 || (_runtime$config = runtime.config) === null || _runtime$config === void 0 ? void 0 : _runtime$config.requirePaymentOnSubmit) !== null && _runtime$config$requi !== void 0 ? _runtime$config$requi : true,
|
|
216
|
+
error: reason instanceof Error ? reason.message : 'Business settings are unavailable. Please try again.'
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/** Synchronous final cart-commit check; deliberately never starts a load. */
|
|
221
|
+
}, {
|
|
222
|
+
key: "getCachedAvailability",
|
|
223
|
+
value: function getCachedAvailability() {
|
|
224
|
+
var runtime = this.getRuntime();
|
|
225
|
+
try {
|
|
226
|
+
this.assertCurrent(runtime);
|
|
227
|
+
if (!runtime.config) throw new Error('Business settings are still loading. Please try again.');
|
|
228
|
+
return computeBusinessAvailability({
|
|
229
|
+
config: runtime.config,
|
|
230
|
+
schedules: runtime.schedules || [],
|
|
231
|
+
timezone: this.host.getTimezone(),
|
|
232
|
+
now: this.now()
|
|
233
|
+
});
|
|
234
|
+
} catch (reason) {
|
|
235
|
+
return this.error(reason, runtime);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}, {
|
|
239
|
+
key: "getAvailability",
|
|
240
|
+
value: function () {
|
|
241
|
+
var _getAvailability = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
|
|
242
|
+
var runtime, config;
|
|
243
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
244
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
245
|
+
case 0:
|
|
246
|
+
runtime = this.getRuntime();
|
|
247
|
+
_context5.prev = 1;
|
|
248
|
+
_context5.next = 4;
|
|
249
|
+
return this.loadConfig(runtime);
|
|
250
|
+
case 4:
|
|
251
|
+
config = _context5.sent;
|
|
252
|
+
this.assertCurrent(runtime);
|
|
253
|
+
if (!(!config.paused && !config.invalidScheduleIds && config.scheduleIds.length)) {
|
|
254
|
+
_context5.next = 9;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
_context5.next = 9;
|
|
258
|
+
return this.loadSchedules(runtime);
|
|
259
|
+
case 9:
|
|
260
|
+
this.assertCurrent(runtime);
|
|
261
|
+
return _context5.abrupt("return", this.getCachedAvailability());
|
|
262
|
+
case 13:
|
|
263
|
+
_context5.prev = 13;
|
|
264
|
+
_context5.t0 = _context5["catch"](1);
|
|
265
|
+
return _context5.abrupt("return", this.error(_context5.t0, runtime));
|
|
266
|
+
case 16:
|
|
267
|
+
case "end":
|
|
268
|
+
return _context5.stop();
|
|
269
|
+
}
|
|
270
|
+
}, _callee5, this, [[1, 13]]);
|
|
271
|
+
}));
|
|
272
|
+
function getAvailability() {
|
|
273
|
+
return _getAvailability.apply(this, arguments);
|
|
274
|
+
}
|
|
275
|
+
return getAvailability;
|
|
276
|
+
}()
|
|
277
|
+
}, {
|
|
278
|
+
key: "assertAvailable",
|
|
279
|
+
value: function assertAvailable() {
|
|
280
|
+
var availability = this.getCachedAvailability();
|
|
281
|
+
if (availability.status !== 'open') {
|
|
282
|
+
var error = new Error(availability.error || (availability.status === 'paused' ? 'Ordering is temporarily paused.' : 'Ordering is currently closed.'));
|
|
283
|
+
Object.assign(error, {
|
|
284
|
+
code: 'BUSINESS_UNAVAILABLE',
|
|
285
|
+
businessAvailability: availability
|
|
286
|
+
});
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}]);
|
|
291
|
+
return BusinessAvailabilityController;
|
|
292
|
+
}();
|
|
@@ -5,9 +5,11 @@ import type { LoadScheduleAvailableDateParams, ScheduleItem } from '../../module
|
|
|
5
5
|
import type { ProductListLoadProductsParams, ProductListStoreQueryParams } from '../../modules/ProductList';
|
|
6
6
|
import type { AvailabilityDateRange, AvailabilityOccupancy, AvailabilityProduct, AvailabilityResource, GetProductTimeRangesRequest } from '../../modules/ResourcePlanner';
|
|
7
7
|
import type { AvailabilityContextRef, ContextualAvailabilityQuery, ContextualAvailabilityQueryResult, ContextualCommitAvailabilitySelectionParams, ContextualProductTimeRangeGroup, UnifiedBookingSalesAddRetailProductParams, UnifiedBookingSalesApplyPlannerDiscountsParams, UnifiedBookingSalesCommitAvailabilitySelectionResult, UnifiedBookingSalesDiscountResult, UnifiedBookingSalesLoadProductsByScheduleDateParams, UnifiedBookingSalesLoadOpenDataParams, UnifiedBookingSalesPrepareAvailabilityProjectionParams, UnifiedBookingSalesPolicyResponse, UnifiedBookingSalesResolveProductAllergyRequirementParams, UnifiedBookingSalesStageRetailProductsParams, UnifiedBookingSalesState } from './types';
|
|
8
|
+
import type { BusinessAvailability } from '../../modules/BusinessAvailability';
|
|
8
9
|
import { BookingTicket } from '../BookingTicket';
|
|
9
10
|
import type { AllergyRequirement } from '../../model/strategy/adapter/itemRule';
|
|
10
11
|
export * from './types';
|
|
12
|
+
export type { BusinessAvailability, BusinessClosedBehavior } from '../../modules/BusinessAvailability';
|
|
11
13
|
export { AvailabilityError } from '../../modules/ResourcePlanner';
|
|
12
14
|
/**
|
|
13
15
|
* Converts Rules/Order discount internals into a small UI-facing diagnostic. The result keeps
|
|
@@ -60,6 +62,7 @@ export declare class UnifiedBookingSalesImpl extends BookingTicket {
|
|
|
60
62
|
protected defaultVersion: string;
|
|
61
63
|
protected store: UnifiedBookingSalesState;
|
|
62
64
|
protected pickupTimingEnabled: boolean;
|
|
65
|
+
private businessAvailabilityController?;
|
|
63
66
|
private runtimeOpenDataScope;
|
|
64
67
|
private runtimeOpenDataSnapshot;
|
|
65
68
|
private runtimeOpenDataModule;
|
|
@@ -86,6 +89,14 @@ export declare class UnifiedBookingSalesImpl extends BookingTicket {
|
|
|
86
89
|
private allergyItemRuleConfigsPromise;
|
|
87
90
|
initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
|
|
88
91
|
protected getSubmitOrderSalesChannel(): string;
|
|
92
|
+
/** Only the explicit Kiosk Sales consumer entry enables this policy; POS stays unchanged. */
|
|
93
|
+
protected isBusinessAvailabilityEnabled(): boolean;
|
|
94
|
+
protected getBusinessAvailabilityScope(): string;
|
|
95
|
+
private getBusinessAvailabilityController;
|
|
96
|
+
getBusinessAvailability(): Promise<BusinessAvailability>;
|
|
97
|
+
/** Internal final-write assertion; does not fetch OpenData or Schedule. */
|
|
98
|
+
assertBusinessAvailability(): void;
|
|
99
|
+
protected getSubModuleHooks(moduleName: string): any;
|
|
89
100
|
private createAvailabilityFacadeError;
|
|
90
101
|
private getAvailabilityScopeDescriptor;
|
|
91
102
|
private normalizeAvailabilityIdList;
|