@pisell/pisellos 0.10.53 → 0.10.55
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/index.d.ts +2 -0
- package/dist/index.js +3 -1
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/modules/BusinessAvailability/index.d.ts +30 -0
- package/dist/modules/BusinessAvailability/index.js +204 -0
- package/dist/modules/OpenData/index.js +1 -1
- package/dist/modules/OpenData/types.d.ts +2 -0
- package/dist/modules/Order/index.d.ts +5 -2
- package/dist/modules/Order/index.js +320 -247
- package/dist/modules/Order/types.d.ts +8 -0
- package/dist/modules/Payment/index.js +9 -10
- package/dist/plugins/request.d.ts +3 -0
- package/dist/server/utils/small-ticket.d.ts +1 -85
- package/dist/server/utils/small-ticket.js +2 -2576
- package/dist/shared/payment/loadPaymentMethods.d.ts +9 -0
- package/dist/shared/payment/loadPaymentMethods.js +66 -0
- package/dist/shared/receipt/small-ticket.d.ts +85 -0
- package/dist/shared/receipt/small-ticket.js +2576 -0
- package/dist/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
- package/dist/shared/sales/loadSalesOrderSnapshot.js +21 -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.js +41 -13
- package/dist/solution/OrderInvoicePreview/index.d.ts +56 -0
- package/dist/solution/OrderInvoicePreview/index.js +269 -0
- 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/dist/solution/index.d.ts +1 -0
- package/dist/solution/index.js +2 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +21 -1
- package/lib/modules/BusinessAvailability/index.d.ts +30 -0
- package/lib/modules/BusinessAvailability/index.js +146 -0
- package/lib/modules/OpenData/index.js +1 -1
- package/lib/modules/OpenData/types.d.ts +2 -0
- package/lib/modules/Order/index.d.ts +5 -2
- package/lib/modules/Order/index.js +67 -13
- package/lib/modules/Order/types.d.ts +8 -0
- package/lib/modules/Payment/index.js +3 -4
- package/lib/plugins/request.d.ts +3 -0
- package/lib/server/utils/small-ticket.d.ts +1 -85
- package/lib/server/utils/small-ticket.js +9 -2335
- package/lib/shared/payment/loadPaymentMethods.d.ts +9 -0
- package/lib/shared/payment/loadPaymentMethods.js +40 -0
- package/lib/shared/receipt/small-ticket.d.ts +85 -0
- package/lib/shared/receipt/small-ticket.js +2342 -0
- package/lib/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
- package/lib/shared/sales/loadSalesOrderSnapshot.js +22 -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.js +37 -4
- package/lib/solution/OrderInvoicePreview/index.d.ts +56 -0
- package/lib/solution/OrderInvoicePreview/index.js +194 -0
- 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/lib/solution/index.d.ts +1 -0
- package/lib/solution/index.js +11 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -10,3 +10,5 @@ export * from './model';
|
|
|
10
10
|
export { PisellOSCore } from './core';
|
|
11
11
|
import PisellOSCore from './core';
|
|
12
12
|
export default PisellOSCore;
|
|
13
|
+
export * from './shared/receipt/small-ticket';
|
|
14
|
+
export { loadSalesOrderSnapshot } from './shared/sales/loadSalesOrderSnapshot';
|
package/dist/index.js
CHANGED
|
@@ -15,4 +15,6 @@ export { PisellOSCore } from "./core";
|
|
|
15
15
|
|
|
16
16
|
// 导出框架主类
|
|
17
17
|
import PisellOSCore from "./core";
|
|
18
|
-
export default PisellOSCore;
|
|
18
|
+
export default PisellOSCore;
|
|
19
|
+
export * from "./shared/receipt/small-ticket";
|
|
20
|
+
export { loadSalesOrderSnapshot } from "./shared/sales/loadSalesOrderSnapshot";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// 导出评估器
|
|
2
|
+
export { PromotionEvaluator } from "./evaluator";
|
|
3
|
+
|
|
4
|
+
// 导出适配器
|
|
5
|
+
export { PromotionAdapter } from "./adapter";
|
|
6
|
+
export { default } from "./adapter";
|
|
7
|
+
|
|
8
|
+
// 导出策略配置示例常量
|
|
9
|
+
export { X_ITEMS_FOR_Y_PRICE_STRATEGY, BUY_X_GET_Y_FREE_STRATEGY, ITEM_REWARD_STRATEGY } from "./examples";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { MultiLangObject } from '../OpenData/types';
|
|
2
|
+
import type { ScheduleItem } from '../Schedule/types';
|
|
3
|
+
export type BusinessClosedBehavior = 'show_menu_disabled' | 'hide_all';
|
|
4
|
+
export interface BusinessAvailability {
|
|
5
|
+
status: 'open' | 'paused' | 'closed' | 'error';
|
|
6
|
+
behavior: BusinessClosedBehavior | null;
|
|
7
|
+
message: string | MultiLangObject | null;
|
|
8
|
+
/** Epoch milliseconds. Re-evaluate the cached configuration at this time. */
|
|
9
|
+
nextChangeAt: number;
|
|
10
|
+
requirePaymentOnSubmit: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface BusinessAvailabilityConfig {
|
|
14
|
+
paused: boolean;
|
|
15
|
+
pauseBehavior: BusinessClosedBehavior;
|
|
16
|
+
closedBehavior: BusinessClosedBehavior;
|
|
17
|
+
pauseMessage: BusinessAvailability['message'];
|
|
18
|
+
closedMessage: BusinessAvailability['message'];
|
|
19
|
+
scheduleIds: number[];
|
|
20
|
+
invalidScheduleIds: boolean;
|
|
21
|
+
requirePaymentOnSubmit: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function normalizeBusinessAvailabilityConfig(data: Record<string, unknown>): BusinessAvailabilityConfig;
|
|
24
|
+
/** Business ordering is independent of reservation switches and Pickup slot availability. */
|
|
25
|
+
export declare function computeBusinessAvailability(input: {
|
|
26
|
+
config: BusinessAvailabilityConfig;
|
|
27
|
+
schedules: ScheduleItem[];
|
|
28
|
+
timezone: string;
|
|
29
|
+
now: Date;
|
|
30
|
+
}): BusinessAvailability;
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
4
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
5
|
+
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; } } }; }
|
|
6
|
+
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; }
|
|
7
|
+
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; }
|
|
8
|
+
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; }
|
|
9
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
10
|
+
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); }
|
|
11
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
12
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
+
function _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); }
|
|
14
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
15
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
16
|
+
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; }
|
|
17
|
+
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); }
|
|
18
|
+
import dayjs from 'dayjs';
|
|
19
|
+
import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
|
|
20
|
+
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
|
|
21
|
+
import { getScheduleStartEndTimePoints } from "../Schedule/getDateIsInSchedule";
|
|
22
|
+
dayjs.extend(isSameOrAfter);
|
|
23
|
+
dayjs.extend(isSameOrBefore);
|
|
24
|
+
var DAY = 86400000;
|
|
25
|
+
var behavior = function behavior(value) {
|
|
26
|
+
return value === 'show_menu_disabled' ? value : 'hide_all';
|
|
27
|
+
};
|
|
28
|
+
var message = function message(value) {
|
|
29
|
+
return typeof value === 'string' || value !== null && _typeof(value) === 'object' && !Array.isArray(value) ? value : null;
|
|
30
|
+
};
|
|
31
|
+
export function normalizeBusinessAvailabilityConfig(data) {
|
|
32
|
+
var rawIds = data['availability.operating_hours'];
|
|
33
|
+
var ids = Array.isArray(rawIds) ? rawIds.map(function (id) {
|
|
34
|
+
return typeof id === 'number' || typeof id === 'string' ? Number(id) : NaN;
|
|
35
|
+
}) : [];
|
|
36
|
+
var validIds = ids.filter(function (id) {
|
|
37
|
+
return Number.isInteger(id) && id > 0;
|
|
38
|
+
});
|
|
39
|
+
var paused = data['availability.paused'];
|
|
40
|
+
return {
|
|
41
|
+
paused: paused === true || paused === 1 || paused === 'true' || paused === '1',
|
|
42
|
+
pauseBehavior: behavior(data['availability.pause_behavior']),
|
|
43
|
+
closedBehavior: behavior(data['availability.closed_behavior']),
|
|
44
|
+
pauseMessage: message(data['availability.pause_message']),
|
|
45
|
+
closedMessage: message(data['availability.closed_message']),
|
|
46
|
+
scheduleIds: _toConsumableArray(new Set(validIds)),
|
|
47
|
+
invalidScheduleIds: rawIds != null && (!Array.isArray(rawIds) || validIds.length !== ids.length),
|
|
48
|
+
// Only an explicitly disabled setting changes the existing payment flow.
|
|
49
|
+
requirePaymentOnSubmit: data['sale.require_payment_on_submit'] !== false
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function createClock(timezone) {
|
|
53
|
+
if (!timezone) throw new Error('Store timezone is unavailable.');
|
|
54
|
+
var formatter = new Intl.DateTimeFormat('en-GB', {
|
|
55
|
+
timeZone: timezone,
|
|
56
|
+
year: 'numeric',
|
|
57
|
+
month: '2-digit',
|
|
58
|
+
day: '2-digit',
|
|
59
|
+
hour: '2-digit',
|
|
60
|
+
minute: '2-digit',
|
|
61
|
+
second: '2-digit',
|
|
62
|
+
hourCycle: 'h23'
|
|
63
|
+
});
|
|
64
|
+
var local = function local(timestamp) {
|
|
65
|
+
var parts = {};
|
|
66
|
+
formatter.formatToParts(timestamp).forEach(function (part) {
|
|
67
|
+
parts[part.type] = part.value;
|
|
68
|
+
});
|
|
69
|
+
var date = "".concat(parts.year, "-").concat(parts.month, "-").concat(parts.day);
|
|
70
|
+
return {
|
|
71
|
+
date: date,
|
|
72
|
+
scalar: Date.parse("".concat(date, "T").concat(parts.hour, ":").concat(parts.minute, ":").concat(parts.second, "Z"))
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
var offsets = new Set();
|
|
76
|
+
var instants = function instants(scalar) {
|
|
77
|
+
offsets.clear();
|
|
78
|
+
for (var hours = -36; hours <= 36; hours += 6) {
|
|
79
|
+
var sample = scalar + hours * 3600000;
|
|
80
|
+
offsets.add(local(sample).scalar - sample);
|
|
81
|
+
}
|
|
82
|
+
return _toConsumableArray(offsets).map(function (offset) {
|
|
83
|
+
return scalar - offset;
|
|
84
|
+
}).filter(function (instant) {
|
|
85
|
+
return local(instant).scalar === scalar;
|
|
86
|
+
}).sort(function (a, b) {
|
|
87
|
+
return a - b;
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
local: local,
|
|
92
|
+
instants: instants
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Business ordering is independent of reservation switches and Pickup slot availability. */
|
|
97
|
+
export function computeBusinessAvailability(input) {
|
|
98
|
+
var config = input.config,
|
|
99
|
+
schedules = input.schedules,
|
|
100
|
+
timezone = input.timezone,
|
|
101
|
+
now = input.now;
|
|
102
|
+
var nowAt = now.getTime();
|
|
103
|
+
var base = {
|
|
104
|
+
requirePaymentOnSubmit: config.requirePaymentOnSubmit,
|
|
105
|
+
nextChangeAt: nowAt + DAY
|
|
106
|
+
};
|
|
107
|
+
if (config.paused) {
|
|
108
|
+
return _objectSpread(_objectSpread({}, base), {}, {
|
|
109
|
+
status: 'paused',
|
|
110
|
+
behavior: config.pauseBehavior,
|
|
111
|
+
message: config.pauseMessage
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (config.invalidScheduleIds) throw new Error('Business operating-hours configuration is invalid.');
|
|
115
|
+
if (!config.scheduleIds.length) return _objectSpread(_objectSpread({}, base), {}, {
|
|
116
|
+
status: 'open',
|
|
117
|
+
behavior: null,
|
|
118
|
+
message: null
|
|
119
|
+
});
|
|
120
|
+
var selected = schedules.filter(function (schedule) {
|
|
121
|
+
return config.scheduleIds.includes(Number(schedule.id));
|
|
122
|
+
});
|
|
123
|
+
if (config.scheduleIds.some(function (id) {
|
|
124
|
+
return !selected.some(function (schedule) {
|
|
125
|
+
return Number(schedule.id) === id;
|
|
126
|
+
});
|
|
127
|
+
})) {
|
|
128
|
+
throw new Error('A configured business operating-hours schedule is unavailable.');
|
|
129
|
+
}
|
|
130
|
+
var clock = createClock(timezone);
|
|
131
|
+
var current = clock.local(nowAt);
|
|
132
|
+
var today = Date.parse("".concat(current.date, "T00:00:00Z"));
|
|
133
|
+
var nextMidnight = clock.instants(today + DAY).find(function (instant) {
|
|
134
|
+
return instant > nowAt;
|
|
135
|
+
});
|
|
136
|
+
var nextChangeAt = nextMidnight !== null && nextMidnight !== void 0 ? nextMidnight : nowAt + 60000;
|
|
137
|
+
var open = false;
|
|
138
|
+
// Yesterday contributes the tail of overnight windows; today supplies the next boundary.
|
|
139
|
+
for (var _i = 0, _arr = [today - DAY, today]; _i < _arr.length; _i++) {
|
|
140
|
+
var dateAt = _arr[_i];
|
|
141
|
+
var date = new Date(dateAt).toISOString().slice(0, 10);
|
|
142
|
+
// Schedule's resolver merges by time-of-day, so resolve each schedule independently.
|
|
143
|
+
var _iterator = _createForOfIteratorHelper(selected),
|
|
144
|
+
_step;
|
|
145
|
+
try {
|
|
146
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
147
|
+
var schedule = _step.value;
|
|
148
|
+
var _iterator2 = _createForOfIteratorHelper(getScheduleStartEndTimePoints(date, [schedule])),
|
|
149
|
+
_step2;
|
|
150
|
+
try {
|
|
151
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
152
|
+
var window = _step2.value;
|
|
153
|
+
var toMinutes = function toMinutes(value) {
|
|
154
|
+
if (!/^(?:[01]\d|2[0-3]):[0-5]\d$/.test(value) && value !== '24:00') {
|
|
155
|
+
throw new Error('Business operating-hours schedule contains an invalid time.');
|
|
156
|
+
}
|
|
157
|
+
var _value$split$map = value.split(':').map(Number),
|
|
158
|
+
_value$split$map2 = _slicedToArray(_value$split$map, 2),
|
|
159
|
+
hours = _value$split$map2[0],
|
|
160
|
+
minutes = _value$split$map2[1];
|
|
161
|
+
return hours * 60 + minutes;
|
|
162
|
+
};
|
|
163
|
+
var start = dateAt + toMinutes(window.start_time) * 60000;
|
|
164
|
+
var end = dateAt + toMinutes(window.end_time) * 60000;
|
|
165
|
+
if (end <= start) end += DAY;
|
|
166
|
+
if (current.scalar >= start && current.scalar < end) open = true;
|
|
167
|
+
for (var _i2 = 0, _arr2 = [start, end]; _i2 < _arr2.length; _i2++) {
|
|
168
|
+
var boundary = _arr2[_i2];
|
|
169
|
+
var _iterator3 = _createForOfIteratorHelper(clock.instants(boundary)),
|
|
170
|
+
_step3;
|
|
171
|
+
try {
|
|
172
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
173
|
+
var instant = _step3.value;
|
|
174
|
+
if (instant > nowAt) nextChangeAt = Math.min(nextChangeAt, instant);
|
|
175
|
+
}
|
|
176
|
+
} catch (err) {
|
|
177
|
+
_iterator3.e(err);
|
|
178
|
+
} finally {
|
|
179
|
+
_iterator3.f();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
} catch (err) {
|
|
184
|
+
_iterator2.e(err);
|
|
185
|
+
} finally {
|
|
186
|
+
_iterator2.f();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
} catch (err) {
|
|
190
|
+
_iterator.e(err);
|
|
191
|
+
} finally {
|
|
192
|
+
_iterator.f();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// A timezone offset change can repeat/skip a wall-clock boundary. A local-only safety
|
|
196
|
+
// check also covers throttled timers; it does not fetch either configuration source.
|
|
197
|
+
nextChangeAt = Math.min(nextChangeAt, nowAt + 60000);
|
|
198
|
+
return _objectSpread(_objectSpread({}, base), {}, {
|
|
199
|
+
nextChangeAt: nextChangeAt,
|
|
200
|
+
status: open ? 'open' : 'closed',
|
|
201
|
+
behavior: open ? null : config.closedBehavior,
|
|
202
|
+
message: open ? null : config.closedMessage
|
|
203
|
+
});
|
|
204
|
+
}
|
|
@@ -132,7 +132,7 @@ export var OpenDataModule = /*#__PURE__*/function (_BaseModule) {
|
|
|
132
132
|
key: "shouldSkipInvoiceTemplateDocument",
|
|
133
133
|
value: function shouldSkipInvoiceTemplateDocument() {
|
|
134
134
|
var _this$otherParams;
|
|
135
|
-
return String(((_this$otherParams = this.otherParams) === null || _this$otherParams === void 0 ? void 0 : _this$otherParams.platform) || '').trim().toLowerCase() === 'h5';
|
|
135
|
+
return this.otherParams.invoiceDocument !== true && String(((_this$otherParams = this.otherParams) === null || _this$otherParams === void 0 ? void 0 : _this$otherParams.platform) || '').trim().toLowerCase() === 'h5';
|
|
136
136
|
}
|
|
137
137
|
}, {
|
|
138
138
|
key: "fetchOpenData",
|
|
@@ -69,6 +69,8 @@ export interface OpenDataConfig {
|
|
|
69
69
|
'reservation.time_slice'?: number | string;
|
|
70
70
|
'sale.allow_item_notes'?: boolean;
|
|
71
71
|
'sale.allow_order_notes'?: boolean;
|
|
72
|
+
/** False submits an order without starting or confirming payment. */
|
|
73
|
+
'sale.require_payment_on_submit'?: boolean | null;
|
|
72
74
|
'sale.enable_item_rules'?: boolean;
|
|
73
75
|
'sale.enable_short_number'?: boolean;
|
|
74
76
|
'sale.short_number_daily_reset'?: boolean;
|
|
@@ -4,7 +4,7 @@ import { OrderModuleAPI, CommitOrderParams, UpdateOrderBookingParams, UpdateOrde
|
|
|
4
4
|
import { CartItem } from '../Cart/types';
|
|
5
5
|
import { type SubmitPayloadEnhancer } from './utils';
|
|
6
6
|
import { type PickupTimingBooking, type PickupTimingBookingInput } from './pickupTiming';
|
|
7
|
-
import type { OrderAmountSnapshot, AddProductBookingInput, AddProductToOrderOptions, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions, SalesNote, SalesNotesMutationSnapshot, SetSalesNoteInput, PickupReferenceMode, PointCardSnapshotMergeContext, PointCardSnapshotItem, ShopServiceData, ShopServiceType } from './types';
|
|
7
|
+
import type { OrderAmountSnapshot, AddProductBookingInput, AddProductToOrderOptions, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, OrderCartIntentCommitContext, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions, SalesNote, SalesNotesMutationSnapshot, SetSalesNoteInput, PickupReferenceMode, PointCardSnapshotMergeContext, PointCardSnapshotItem, ShopServiceData, ShopServiceType } from './types';
|
|
8
8
|
import type { ICustomer } from '../AccountList/types';
|
|
9
9
|
import type { Discount } from '../Discount/types';
|
|
10
10
|
import { UnavailableReason } from '../Rules/types';
|
|
@@ -67,6 +67,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
67
67
|
* orderModule.updateOtherParams({ cacheId: 'cache-2', channel: 'pos' });
|
|
68
68
|
*/
|
|
69
69
|
updateOtherParams(params: Record<string, any>): void;
|
|
70
|
+
/** Internal intent boundary shared with asynchronous scanner/detail flows. */
|
|
71
|
+
createCartIntentCommitGuard(action: OrderCartIntentCommitContext['action'], tempOrder?: OrderTempOrder | null): () => void;
|
|
70
72
|
/** PC/H5 属于在线店铺;其它或缺失平台统一沿用 POS 行为。 */
|
|
71
73
|
isOnlineStorePlatform(): boolean;
|
|
72
74
|
/**
|
|
@@ -501,6 +503,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
501
503
|
private hasSameEntitlementMergePriceConfig;
|
|
502
504
|
private getBundleRuntimeIdentity;
|
|
503
505
|
private preservePersistedBundlePriceFields;
|
|
506
|
+
private isRestrictedCartProductUpdate;
|
|
504
507
|
private applyOrderProductUpdateToTempOrder;
|
|
505
508
|
updateOrderProduct(params: UpdateOrderProductParams): Promise<OrderProduct[]>;
|
|
506
509
|
updateOrderProducts(paramsList: UpdateOrderProductParams[]): Promise<OrderProduct[]>;
|
|
@@ -588,7 +591,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
588
591
|
generateIdempotencyToken(): string;
|
|
589
592
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
590
593
|
createOrder(params: CommitOrderParams['query']): {
|
|
591
|
-
type: "
|
|
594
|
+
type: "virtual" | "appointment_booking";
|
|
592
595
|
platform: string;
|
|
593
596
|
sales_channel: string;
|
|
594
597
|
order_sales_channel: string;
|