@pisell/pisellos 2.2.314 → 2.2.316
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -1
- package/dist/model/strategy/adapter/itemRule/adapter.d.ts +3 -1
- package/dist/model/strategy/adapter/itemRule/adapter.js +74 -7
- package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +3 -1
- package/dist/model/strategy/adapter/itemRule/evaluator.js +13 -0
- package/dist/model/strategy/adapter/itemRule/type.d.ts +40 -1
- package/dist/model/strategy/adapter/itemRule/type.js +10 -0
- package/dist/model/strategy/adapter/promotion/evaluator.js +89 -104
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +28 -4
- package/dist/modules/BookingContext/utils/productExtend.d.ts +7 -0
- package/dist/modules/BookingContext/utils/productExtend.js +62 -18
- package/dist/modules/BookingContext/utils/resources.js +1 -1
- package/dist/modules/BusinessAvailability/index.d.ts +30 -0
- package/dist/modules/BusinessAvailability/index.js +204 -0
- package/dist/modules/Cart/index.js +4 -3
- package/dist/modules/Cart/types.d.ts +2 -0
- package/dist/modules/Cart/utils/cartProduct.d.ts +3 -1
- package/dist/modules/Cart/utils/cartProduct.js +59 -32
- package/dist/modules/FulfillmentTiming/index.d.ts +11 -0
- package/dist/modules/FulfillmentTiming/index.js +407 -0
- package/dist/modules/FulfillmentTiming/types.d.ts +67 -0
- package/dist/modules/FulfillmentTiming/types.js +1 -0
- package/dist/modules/Holder/utils.d.ts +2 -0
- package/dist/modules/Holder/utils.js +32 -2
- package/dist/modules/OpenData/contactInfo.d.ts +20 -0
- package/dist/modules/OpenData/contactInfo.js +70 -0
- package/dist/modules/OpenData/index.d.ts +1 -0
- package/dist/modules/OpenData/index.js +1 -0
- package/dist/modules/OpenData/types.d.ts +23 -0
- package/dist/modules/Order/holderRelations.d.ts +14 -0
- package/dist/modules/Order/holderRelations.js +154 -0
- package/dist/modules/Order/index.d.ts +16 -4
- package/dist/modules/Order/index.js +926 -511
- package/dist/modules/Order/localEftposState.d.ts +13 -0
- package/dist/modules/Order/localEftposState.js +39 -0
- package/dist/modules/Order/pickupTiming.d.ts +46 -0
- package/dist/modules/Order/pickupTiming.js +53 -0
- package/dist/modules/Order/types.d.ts +49 -3
- package/dist/modules/Order/types.js +2 -0
- package/dist/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
- package/dist/modules/Order/utils/discountProductLineIdentity.js +142 -7
- package/dist/modules/Order/utils/orderCollectionIdentity.js +24 -10
- package/dist/modules/Order/utils.d.ts +2 -1
- package/dist/modules/Order/utils.js +61 -17
- package/dist/modules/Payment/index.js +9 -10
- package/dist/modules/Product/types.d.ts +11 -0
- package/dist/modules/ProductList/index.js +1 -1
- package/dist/modules/ResourcePlanner/planner.d.ts +2 -0
- package/dist/modules/ResourcePlanner/planner.js +332 -23
- package/dist/modules/ResourcePlanner/types.d.ts +29 -0
- package/dist/modules/Rules/index.js +62 -61
- package/dist/modules/Schedule/index.d.ts +8 -0
- package/dist/modules/Schedule/index.js +141 -39
- package/dist/modules/index.d.ts +1 -0
- package/dist/modules/index.js +1 -0
- package/dist/plugins/request.d.ts +7 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.js +1557 -1322
- package/dist/server/modules/form/index.d.ts +19 -0
- package/dist/server/modules/form/index.js +205 -0
- package/dist/server/modules/form/types.d.ts +13 -0
- package/dist/server/modules/form/types.js +3 -0
- package/dist/server/modules/index.d.ts +3 -0
- package/dist/server/modules/index.js +4 -0
- package/dist/server/modules/order/index.d.ts +19 -0
- package/dist/server/modules/order/index.js +1071 -774
- package/dist/server/modules/order/types.d.ts +4 -0
- package/dist/server/modules/products/index.d.ts +28 -7
- package/dist/server/modules/products/index.js +1297 -770
- package/dist/server/modules/products/replication.d.ts +8 -0
- package/dist/server/modules/products/replication.js +69 -0
- package/dist/server/modules/products/types.d.ts +12 -1
- package/dist/server/modules/products/types.js +4 -0
- package/dist/server/test.json +1 -1
- package/dist/server/utils/small-ticket.d.ts +1 -85
- package/dist/server/utils/small-ticket.js +2 -2542
- package/dist/shared/payment/loadPaymentMethods.d.ts +9 -0
- package/dist/shared/payment/loadPaymentMethods.js +66 -0
- package/dist/shared/receipt/customerInvoiceLanguages.d.ts +8 -0
- package/dist/shared/receipt/customerInvoiceLanguages.js +60 -0
- package/dist/shared/receipt/loadCustomerInvoiceLayout.d.ts +27 -0
- package/dist/shared/receipt/loadCustomerInvoiceLayout.js +184 -0
- package/dist/shared/receipt/small-ticket.d.ts +96 -0
- package/dist/shared/receipt/small-ticket.js +2763 -0
- package/dist/shared/receipt/templateVisibility.d.ts +26 -0
- package/dist/shared/receipt/templateVisibility.js +68 -0
- package/dist/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
- package/dist/shared/sales/loadSalesOrderSnapshot.js +21 -0
- package/dist/solution/BaseSales/fulfillmentItemRules.d.ts +27 -0
- package/dist/solution/BaseSales/fulfillmentItemRules.js +750 -0
- package/dist/solution/BaseSales/index.d.ts +43 -16
- package/dist/solution/BaseSales/index.js +2028 -1247
- package/dist/solution/BaseSales/pickupTiming.d.ts +47 -0
- package/dist/solution/BaseSales/pickupTiming.js +616 -0
- package/dist/solution/BaseSales/types.d.ts +12 -0
- package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
- package/dist/solution/BaseSales/utils/parseSalesResponse.js +10 -3
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +14 -4
- package/dist/solution/BookingByStep/index.d.ts +4 -2
- package/dist/solution/BookingByStep/index.js +8 -3
- package/dist/solution/BookingTicket/index.d.ts +23 -3
- package/dist/solution/BookingTicket/index.js +867 -507
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +0 -1
- package/dist/solution/BookingTicket/utils/addProductDecision.js +1 -1
- package/dist/solution/BookingTicket/utils/cartView.js +3 -1
- package/dist/solution/OrderInvoicePreview/index.d.ts +66 -0
- package/dist/solution/OrderInvoicePreview/index.js +340 -0
- package/dist/solution/RegisterAndLogin/config.js +54 -11
- package/dist/solution/RegisterAndLogin/index.d.ts +2 -0
- package/dist/solution/RegisterAndLogin/index.js +1 -1
- package/dist/solution/RegisterAndLogin/utils.d.ts +12 -4
- package/dist/solution/RegisterAndLogin/utils.js +36 -16
- package/dist/solution/ScanOrder/index.js +65 -31
- package/dist/solution/ScanOrder/types.d.ts +3 -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 +36 -4
- package/dist/solution/UnifiedBookingSales/index.js +1715 -906
- package/dist/solution/UnifiedBookingSales/types.d.ts +16 -2
- package/dist/solution/VenueBooking/index.d.ts +15 -2
- package/dist/solution/VenueBooking/index.js +1062 -785
- package/dist/solution/VenueBooking/types.d.ts +2 -1
- package/dist/solution/VenueBooking/types.js +1 -0
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
- package/dist/solution/VenueBooking/utils/dateSummary.js +7 -4
- package/dist/solution/VenueBooking/utils/smartPricing.d.ts +71 -0
- package/dist/solution/VenueBooking/utils/smartPricing.js +273 -0
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +1 -0
- package/dist/solution/VenueBooking/utils/timeSlot.js +6 -3
- 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/model/strategy/adapter/itemRule/adapter.d.ts +3 -1
- package/lib/model/strategy/adapter/itemRule/adapter.js +54 -4
- package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +3 -1
- package/lib/model/strategy/adapter/itemRule/evaluator.js +9 -0
- package/lib/model/strategy/adapter/itemRule/type.d.ts +40 -1
- package/lib/model/strategy/adapter/itemRule/type.js +10 -0
- package/lib/model/strategy/adapter/promotion/evaluator.js +9 -14
- package/lib/model/strategy/adapter/promotion/index.js +46 -1
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +17 -1
- package/lib/modules/BookingContext/utils/productExtend.d.ts +7 -0
- package/lib/modules/BookingContext/utils/productExtend.js +45 -2
- package/lib/modules/BookingContext/utils/resources.js +1 -1
- package/lib/modules/BusinessAvailability/index.d.ts +30 -0
- package/lib/modules/BusinessAvailability/index.js +146 -0
- package/lib/modules/Cart/index.js +4 -2
- package/lib/modules/Cart/types.d.ts +2 -0
- package/lib/modules/Cart/utils/cartProduct.d.ts +3 -1
- package/lib/modules/Cart/utils/cartProduct.js +39 -20
- package/lib/modules/FulfillmentTiming/index.d.ts +11 -0
- package/lib/modules/FulfillmentTiming/index.js +359 -0
- package/lib/modules/FulfillmentTiming/types.d.ts +67 -0
- package/lib/modules/FulfillmentTiming/types.js +5 -0
- package/lib/modules/Holder/utils.d.ts +2 -0
- package/lib/modules/Holder/utils.js +27 -1
- package/lib/modules/OpenData/contactInfo.d.ts +20 -0
- package/lib/modules/OpenData/contactInfo.js +56 -0
- package/lib/modules/OpenData/index.d.ts +1 -0
- package/lib/modules/OpenData/index.js +12 -0
- package/lib/modules/OpenData/types.d.ts +23 -0
- package/lib/modules/Order/holderRelations.d.ts +14 -0
- package/lib/modules/Order/holderRelations.js +98 -0
- package/lib/modules/Order/index.d.ts +16 -4
- package/lib/modules/Order/index.js +284 -50
- package/lib/modules/Order/localEftposState.d.ts +13 -0
- package/lib/modules/Order/localEftposState.js +44 -0
- package/lib/modules/Order/pickupTiming.d.ts +46 -0
- package/lib/modules/Order/pickupTiming.js +61 -0
- package/lib/modules/Order/types.d.ts +49 -3
- package/lib/modules/Order/types.js +1 -0
- package/lib/modules/Order/utils/discountProductLineIdentity.d.ts +1 -1
- package/lib/modules/Order/utils/discountProductLineIdentity.js +51 -2
- package/lib/modules/Order/utils/orderCollectionIdentity.js +5 -0
- package/lib/modules/Order/utils.d.ts +2 -1
- package/lib/modules/Order/utils.js +49 -11
- package/lib/modules/Payment/index.js +3 -4
- package/lib/modules/Product/types.d.ts +11 -0
- package/lib/modules/ProductList/index.js +1 -1
- package/lib/modules/ResourcePlanner/planner.d.ts +2 -0
- package/lib/modules/ResourcePlanner/planner.js +252 -8
- package/lib/modules/ResourcePlanner/types.d.ts +29 -0
- package/lib/modules/Rules/index.js +2 -1
- package/lib/modules/Schedule/index.d.ts +8 -0
- package/lib/modules/Schedule/index.js +68 -12
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/index.js +11 -0
- package/lib/plugins/request.d.ts +7 -0
- package/lib/server/index.d.ts +1 -0
- package/lib/server/index.js +166 -39
- package/lib/server/modules/form/index.d.ts +19 -0
- package/lib/server/modules/form/index.js +73 -0
- package/lib/server/modules/form/types.d.ts +13 -0
- package/lib/server/modules/form/types.js +9 -0
- package/lib/server/modules/index.d.ts +3 -0
- package/lib/server/modules/index.js +15 -1
- package/lib/server/modules/order/index.d.ts +19 -0
- package/lib/server/modules/order/index.js +160 -7
- package/lib/server/modules/order/types.d.ts +4 -0
- package/lib/server/modules/products/index.d.ts +28 -7
- package/lib/server/modules/products/index.js +226 -63
- package/lib/server/modules/products/replication.d.ts +8 -0
- package/lib/server/modules/products/replication.js +30 -0
- package/lib/server/modules/products/types.d.ts +12 -1
- package/lib/server/modules/products/types.js +3 -0
- package/lib/server/test.json +1 -1
- package/lib/server/utils/small-ticket.d.ts +1 -85
- package/lib/server/utils/small-ticket.js +9 -2305
- package/lib/shared/payment/loadPaymentMethods.d.ts +9 -0
- package/lib/shared/payment/loadPaymentMethods.js +40 -0
- package/lib/shared/receipt/customerInvoiceLanguages.d.ts +8 -0
- package/lib/shared/receipt/customerInvoiceLanguages.js +58 -0
- package/lib/shared/receipt/loadCustomerInvoiceLayout.d.ts +27 -0
- package/lib/shared/receipt/loadCustomerInvoiceLayout.js +124 -0
- package/lib/shared/receipt/small-ticket.d.ts +96 -0
- package/lib/shared/receipt/small-ticket.js +2555 -0
- package/lib/shared/receipt/templateVisibility.d.ts +26 -0
- package/lib/shared/receipt/templateVisibility.js +67 -0
- package/lib/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
- package/lib/shared/sales/loadSalesOrderSnapshot.js +22 -0
- package/lib/solution/BaseSales/fulfillmentItemRules.d.ts +27 -0
- package/lib/solution/BaseSales/fulfillmentItemRules.js +259 -0
- package/lib/solution/BaseSales/index.d.ts +43 -16
- package/lib/solution/BaseSales/index.js +401 -33
- package/lib/solution/BaseSales/pickupTiming.d.ts +47 -0
- package/lib/solution/BaseSales/pickupTiming.js +290 -0
- package/lib/solution/BaseSales/types.d.ts +12 -0
- package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +7 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +16 -8
- package/lib/solution/BookingByStep/index.d.ts +4 -2
- package/lib/solution/BookingByStep/index.js +7 -3
- package/lib/solution/BookingTicket/index.d.ts +23 -3
- package/lib/solution/BookingTicket/index.js +197 -9
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +0 -1
- package/lib/solution/BookingTicket/utils/addProductDecision.js +1 -1
- package/lib/solution/BookingTicket/utils/cartView.js +3 -1
- package/lib/solution/OrderInvoicePreview/index.d.ts +66 -0
- package/lib/solution/OrderInvoicePreview/index.js +246 -0
- package/lib/solution/RegisterAndLogin/config.js +57 -11
- package/lib/solution/RegisterAndLogin/index.d.ts +2 -0
- package/lib/solution/RegisterAndLogin/index.js +9 -1
- package/lib/solution/RegisterAndLogin/utils.d.ts +12 -4
- package/lib/solution/RegisterAndLogin/utils.js +24 -17
- package/lib/solution/ScanOrder/index.js +59 -20
- package/lib/solution/ScanOrder/types.d.ts +3 -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 +36 -4
- package/lib/solution/UnifiedBookingSales/index.js +562 -75
- package/lib/solution/UnifiedBookingSales/types.d.ts +16 -2
- package/lib/solution/VenueBooking/index.d.ts +15 -2
- package/lib/solution/VenueBooking/index.js +243 -96
- package/lib/solution/VenueBooking/types.d.ts +2 -1
- package/lib/solution/VenueBooking/types.js +1 -0
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +1 -0
- package/lib/solution/VenueBooking/utils/dateSummary.js +7 -4
- package/lib/solution/VenueBooking/utils/smartPricing.d.ts +71 -0
- package/lib/solution/VenueBooking/utils/smartPricing.js +224 -0
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +1 -0
- package/lib/solution/VenueBooking/utils/timeSlot.js +5 -2
- package/lib/solution/index.d.ts +1 -0
- package/lib/solution/index.js +11 -0
- package/package.json +1 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Local reconciliation state; never part of a cloud checkout payload. */
|
|
2
|
+
export declare const LOCAL_EFTPOS_REFRESH_REQUIRED = "_local_eftpos_refresh_required";
|
|
3
|
+
export declare const LOCAL_EFTPOS_FINALIZED = "_local_eftpos_finalized";
|
|
4
|
+
export declare const PAYMENT_REFRESH_MESSAGE = "\u8BA2\u5355\u9700\u8981\u5237\u65B0\uFF0C\u8BF7\u8054\u7F51\u5237\u65B0\u8BA2\u5355\u540E\u518D\u4ED8\u6B3E";
|
|
5
|
+
export interface LocalEftposFinalization {
|
|
6
|
+
saleId: string | number;
|
|
7
|
+
paymentNumber: string;
|
|
8
|
+
result: 'failed' | 'not_started';
|
|
9
|
+
failedTransactionNumbers: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function requiresLocalPaymentRefresh(order: any): boolean;
|
|
12
|
+
export declare function isLocalFinalizedPayment(payment: any): boolean;
|
|
13
|
+
export declare function stripLocalEftposState<T extends Record<string, any>>(order: T): T;
|
|
@@ -0,0 +1,39 @@
|
|
|
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 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
|
+
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
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
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); }
|
|
7
|
+
/** Local reconciliation state; never part of a cloud checkout payload. */
|
|
8
|
+
export var LOCAL_EFTPOS_REFRESH_REQUIRED = '_local_eftpos_refresh_required';
|
|
9
|
+
export var LOCAL_EFTPOS_FINALIZED = '_local_eftpos_finalized';
|
|
10
|
+
export var PAYMENT_REFRESH_MESSAGE = '订单需要刷新,请联网刷新订单后再付款';
|
|
11
|
+
export function requiresLocalPaymentRefresh(order) {
|
|
12
|
+
var _order$metadata;
|
|
13
|
+
return (order === null || order === void 0 || (_order$metadata = order.metadata) === null || _order$metadata === void 0 ? void 0 : _order$metadata[LOCAL_EFTPOS_REFRESH_REQUIRED]) === true;
|
|
14
|
+
}
|
|
15
|
+
export function isLocalFinalizedPayment(payment) {
|
|
16
|
+
var _payment$metadata;
|
|
17
|
+
return (payment === null || payment === void 0 ? void 0 : payment.status) === 'voided' && (payment === null || payment === void 0 || (_payment$metadata = payment.metadata) === null || _payment$metadata === void 0 ? void 0 : _payment$metadata[LOCAL_EFTPOS_FINALIZED]) === true;
|
|
18
|
+
}
|
|
19
|
+
export function stripLocalEftposState(order) {
|
|
20
|
+
var result = _objectSpread({}, order);
|
|
21
|
+
if (order.metadata) {
|
|
22
|
+
result.metadata = _objectSpread({}, order.metadata);
|
|
23
|
+
delete result.metadata[LOCAL_EFTPOS_REFRESH_REQUIRED];
|
|
24
|
+
}
|
|
25
|
+
if (Array.isArray(order.payments)) {
|
|
26
|
+
result.payments = order.payments.filter(function (payment) {
|
|
27
|
+
return !isLocalFinalizedPayment(payment);
|
|
28
|
+
}).map(function (payment) {
|
|
29
|
+
var _payment$metadata2;
|
|
30
|
+
if (!((_payment$metadata2 = payment.metadata) !== null && _payment$metadata2 !== void 0 && _payment$metadata2[LOCAL_EFTPOS_FINALIZED])) return payment;
|
|
31
|
+
var metadata = _objectSpread({}, payment.metadata);
|
|
32
|
+
delete metadata[LOCAL_EFTPOS_FINALIZED];
|
|
33
|
+
return _objectSpread(_objectSpread({}, payment), {}, {
|
|
34
|
+
metadata: metadata
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type PickupTimingSelectionMode = 'asap' | 'scheduled';
|
|
2
|
+
export type PickupTimingSource = 'asap' | 'schedule' | 'pos_manual';
|
|
3
|
+
export interface PickupTimingBookingInput {
|
|
4
|
+
mode: PickupTimingSelectionMode;
|
|
5
|
+
source: PickupTimingSource;
|
|
6
|
+
/** Store-local calendar date and minute; the caller validates availability. */
|
|
7
|
+
date: string;
|
|
8
|
+
time: string;
|
|
9
|
+
/** Absolute timestamp disambiguates a repeated local minute at a DST change. */
|
|
10
|
+
instant?: string;
|
|
11
|
+
timezone?: string;
|
|
12
|
+
frozen?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface PickupTimingBookingMetadata {
|
|
15
|
+
unique_identification_number: string;
|
|
16
|
+
is_fulfillment_timing: true;
|
|
17
|
+
fulfillment_timing: {
|
|
18
|
+
method: 'pick_up';
|
|
19
|
+
mode: PickupTimingSelectionMode;
|
|
20
|
+
source: PickupTimingSource;
|
|
21
|
+
instant?: string;
|
|
22
|
+
timezone?: string;
|
|
23
|
+
frozen?: boolean;
|
|
24
|
+
};
|
|
25
|
+
[key: string]: any;
|
|
26
|
+
}
|
|
27
|
+
export interface PickupTimingBooking {
|
|
28
|
+
schedule_id: number | string;
|
|
29
|
+
start_date: string;
|
|
30
|
+
end_date: string;
|
|
31
|
+
start_time: string;
|
|
32
|
+
end_time: string;
|
|
33
|
+
select_date: string;
|
|
34
|
+
duration: 0;
|
|
35
|
+
is_all: 0;
|
|
36
|
+
sub_type: 'minutes';
|
|
37
|
+
like_status: string;
|
|
38
|
+
resources: [];
|
|
39
|
+
metadata: PickupTimingBookingMetadata;
|
|
40
|
+
schedule_event_id?: number | string;
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
}
|
|
43
|
+
/** The explicit marker is the only authority; unlinked ordinary bookings remain ordinary. */
|
|
44
|
+
export declare function isFulfillmentTimingBooking(booking: unknown): boolean;
|
|
45
|
+
/** Update an independent pickup appointment without changing its persisted row identity. */
|
|
46
|
+
export declare function buildPickupTimingBooking(input: PickupTimingBookingInput, existing?: Record<string, any> | null): PickupTimingBooking;
|
|
@@ -0,0 +1,53 @@
|
|
|
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 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
|
+
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
|
+
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; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
+
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); }
|
|
7
|
+
import { createUuidV4 } from "./utils/orderCollectionIdentity";
|
|
8
|
+
/** The explicit marker is the only authority; unlinked ordinary bookings remain ordinary. */
|
|
9
|
+
export function isFulfillmentTimingBooking(booking) {
|
|
10
|
+
var _metadata;
|
|
11
|
+
return (booking === null || booking === void 0 || (_metadata = booking.metadata) === null || _metadata === void 0 ? void 0 : _metadata.is_fulfillment_timing) === true;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Update an independent pickup appointment without changing its persisted row identity. */
|
|
15
|
+
export function buildPickupTimingBooking(input, existing) {
|
|
16
|
+
var booking = _objectSpread({}, existing || {});
|
|
17
|
+
var metadata = _objectSpread({}, booking.metadata || {});
|
|
18
|
+
// A fulfillment appointment never becomes a product/resource/holder purchase line.
|
|
19
|
+
for (var _i = 0, _arr = ['product_uid', 'product', 'holder', 'holder_id', 'collect_pax', 'capacity']; _i < _arr.length; _i++) {
|
|
20
|
+
var _key = _arr[_i];
|
|
21
|
+
delete booking[_key];
|
|
22
|
+
delete metadata[_key];
|
|
23
|
+
}
|
|
24
|
+
delete metadata.booking_uid;
|
|
25
|
+
return _objectSpread(_objectSpread({}, booking), {}, {
|
|
26
|
+
schedule_id: booking.schedule_id || 0,
|
|
27
|
+
start_date: input.date,
|
|
28
|
+
end_date: input.date,
|
|
29
|
+
start_time: input.time,
|
|
30
|
+
end_time: input.time,
|
|
31
|
+
select_date: input.date,
|
|
32
|
+
duration: 0,
|
|
33
|
+
is_all: 0,
|
|
34
|
+
sub_type: 'minutes',
|
|
35
|
+
like_status: booking.like_status || 'common',
|
|
36
|
+
resources: [],
|
|
37
|
+
metadata: _objectSpread(_objectSpread({}, metadata), {}, {
|
|
38
|
+
unique_identification_number: String(metadata.unique_identification_number || createUuidV4()),
|
|
39
|
+
is_fulfillment_timing: true,
|
|
40
|
+
fulfillment_timing: _objectSpread(_objectSpread(_objectSpread({
|
|
41
|
+
method: 'pick_up',
|
|
42
|
+
mode: input.mode,
|
|
43
|
+
source: input.source
|
|
44
|
+
}, input.instant !== undefined ? {
|
|
45
|
+
instant: input.instant
|
|
46
|
+
} : {}), input.timezone !== undefined ? {
|
|
47
|
+
timezone: input.timezone
|
|
48
|
+
} : {}), input.frozen !== undefined ? {
|
|
49
|
+
frozen: input.frozen
|
|
50
|
+
} : {})
|
|
51
|
+
})
|
|
52
|
+
});
|
|
53
|
+
}
|
|
@@ -7,9 +7,10 @@ import type { SubmitPayloadEnhancer } from './utils';
|
|
|
7
7
|
import type { PaymentItem } from '../Payment/types';
|
|
8
8
|
import type { ICustomer } from '../AccountList/types';
|
|
9
9
|
import type { OrderProductDiscountItem } from '../../server/modules/order/types';
|
|
10
|
+
import type { PickupTimingBooking, PickupTimingBookingInput } from './pickupTiming';
|
|
10
11
|
export type { OrderProductDiscountItem } from '../../server/modules/order/types';
|
|
11
12
|
export type PickupReferenceMode = 'counter_pickup' | 'table_service';
|
|
12
|
-
export type ShopServiceType = 'dine_in' | 'takeaway';
|
|
13
|
+
export type ShopServiceType = 'dine_in' | 'takeaway' | 'pick_up' | 'delivery';
|
|
13
14
|
export interface ShopServiceData {
|
|
14
15
|
pickup_reference_mode?: PickupReferenceMode;
|
|
15
16
|
service_type?: ShopServiceType | '';
|
|
@@ -212,6 +213,7 @@ export interface VirtualCurrencySnapshotItem {
|
|
|
212
213
|
id: number | string;
|
|
213
214
|
tag: 'virtual_currency';
|
|
214
215
|
product_id?: number | string;
|
|
216
|
+
code?: string;
|
|
215
217
|
product_name: string;
|
|
216
218
|
par_value: string;
|
|
217
219
|
used_par_value: string;
|
|
@@ -241,6 +243,11 @@ export interface OrderProduct extends OrderProductIdentity {
|
|
|
241
243
|
product_cover?: string;
|
|
242
244
|
metadata: Record<string, any>;
|
|
243
245
|
note?: string;
|
|
246
|
+
/** 仅作按行更新输入;正式数据保存于订单顶层。 */
|
|
247
|
+
_extend?: {
|
|
248
|
+
holder_relations?: OrderHolderRelation[];
|
|
249
|
+
[key: string]: any;
|
|
250
|
+
};
|
|
244
251
|
}
|
|
245
252
|
export interface OrderSummary {
|
|
246
253
|
product_quantity: number;
|
|
@@ -338,6 +345,17 @@ export interface SalesNotesMutationSnapshot {
|
|
|
338
345
|
}
|
|
339
346
|
export type SalesNoteProtocolRelation = SalesNoteRelation;
|
|
340
347
|
export type SalesNoteProtocol = SalesNote;
|
|
348
|
+
/** 后端关系及 metadata 均为开放对象,未知字段必须往返保留。 */
|
|
349
|
+
export interface OrderHolderRelation {
|
|
350
|
+
/** 关系自身的 UUID;新选择/旧草稿可缺省,入单与提交时由 OS 补齐。 */
|
|
351
|
+
uuid?: string;
|
|
352
|
+
relation_model: string;
|
|
353
|
+
relation_uuid: string;
|
|
354
|
+
holder_type: 'form' | 'customer';
|
|
355
|
+
holder_id: number;
|
|
356
|
+
metadata?: Record<string, any>;
|
|
357
|
+
[key: string]: any;
|
|
358
|
+
}
|
|
341
359
|
export interface OrderTempOrder {
|
|
342
360
|
order_id: number | null;
|
|
343
361
|
external_sale_number: string;
|
|
@@ -377,6 +395,7 @@ export interface OrderTempOrder {
|
|
|
377
395
|
created_at: string | undefined;
|
|
378
396
|
request_unique_idempotency_token?: string;
|
|
379
397
|
products: OrderProduct[];
|
|
398
|
+
holder_relations?: OrderHolderRelation[];
|
|
380
399
|
notes: SalesNote[];
|
|
381
400
|
bookings: any[];
|
|
382
401
|
payments: any[];
|
|
@@ -396,7 +415,7 @@ export interface OrderTempOrder {
|
|
|
396
415
|
[key: string]: any;
|
|
397
416
|
};
|
|
398
417
|
}
|
|
399
|
-
export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num'> {
|
|
418
|
+
export interface OrderSubmitProduct extends Omit<OrderProduct, 'unique_identification_number' | 'num' | '_extend'> {
|
|
400
419
|
product_quantity: number;
|
|
401
420
|
payment_price: string;
|
|
402
421
|
product_sku: OrderProductSku;
|
|
@@ -439,16 +458,29 @@ export type AddProductBookingInput = Record<string, any>;
|
|
|
439
458
|
*/
|
|
440
459
|
export interface AddProductToOrderOptions {
|
|
441
460
|
insertAfterProductUid?: string;
|
|
461
|
+
/** 新增商品行插入 products 首位,优先于 insertAfterProductUid。 */
|
|
462
|
+
insertAtStart?: boolean;
|
|
442
463
|
/** 跳过同商品/规格匹配,始终新增购物车行。 */
|
|
443
464
|
disableMerge?: boolean;
|
|
444
465
|
/** 商品行 UID 落定后,由 OrderModule 原子绑定到该行的 Sales Notes 草稿。 */
|
|
445
466
|
salesNotes?: SalesNoteDraftInput[];
|
|
467
|
+
/**
|
|
468
|
+
* 自动预约加购的同步提交门禁;抛错时不发布本次新增。
|
|
469
|
+
* 带门禁时先在私有草稿中准备全部商品/booking,异步等待后及原子发布前重新调用。
|
|
470
|
+
* 门禁须校验当前订单身份/版本和真实时间;发布前不会因本次拆行改变订单版本。
|
|
471
|
+
* 不传时保留原有人工加购行为。
|
|
472
|
+
*/
|
|
473
|
+
availabilityCommitGuard?: () => void;
|
|
474
|
+
/** 发布后的订单/业务归属检查;只用于阻止旧异步收尾写入新单,不再校验截止或 revision。 */
|
|
475
|
+
availabilityCommitTargetGuard?: () => boolean;
|
|
446
476
|
}
|
|
447
477
|
/**
|
|
448
478
|
* 删除商品后的可选位置保持策略。
|
|
449
479
|
* 预约合并行减量时仍删除最新真实行,再把剩余代表行移动到被删除代表行原位置。
|
|
450
480
|
*/
|
|
451
481
|
export interface RemoveProductsFromOrderOptions {
|
|
482
|
+
/** 自动购物车写入的订单归属检查;失效时不再变更或发布异步收尾结果。 */
|
|
483
|
+
isCurrentOrder?: () => boolean;
|
|
452
484
|
preserveDisplayPosition?: {
|
|
453
485
|
remainingProductUid: string;
|
|
454
486
|
anchorProductUid: string;
|
|
@@ -516,7 +548,15 @@ export type OrderProductMergeDecisionResult = boolean | {
|
|
|
516
548
|
reason?: string;
|
|
517
549
|
[key: string]: any;
|
|
518
550
|
};
|
|
551
|
+
export interface OrderCartIntentCommitContext {
|
|
552
|
+
action: 'add_product' | 'update_product' | 'increase_quantity' | 'scan_promotion';
|
|
553
|
+
tempOrder: OrderTempOrder | null;
|
|
554
|
+
}
|
|
519
555
|
export interface OrderHooksConfig {
|
|
556
|
+
/** Optional customer-order guard; called synchronously before the first cart write. */
|
|
557
|
+
beforeCartIntentCommit?: (context: OrderCartIntentCommitContext) => void;
|
|
558
|
+
/** Captures tenant/business runtime identity for asynchronous cart intents. */
|
|
559
|
+
getCartIntentScope?: () => unknown;
|
|
520
560
|
onBeforeMergeProductToOrder?: (context: OrderProductMergeDecisionContext) => OrderProductMergeDecisionResult | Promise<OrderProductMergeDecisionResult>;
|
|
521
561
|
}
|
|
522
562
|
/**
|
|
@@ -584,6 +624,7 @@ export interface SubmitSalesOrderParams {
|
|
|
584
624
|
schedule_date: string;
|
|
585
625
|
created_at?: string | undefined;
|
|
586
626
|
products: OrderSubmitProduct[];
|
|
627
|
+
holder_relations?: OrderHolderRelation[];
|
|
587
628
|
bookings: OrderSubmitBooking[];
|
|
588
629
|
payments: any[];
|
|
589
630
|
vouchers: any[];
|
|
@@ -863,6 +904,9 @@ export interface OrderModuleAPI {
|
|
|
863
904
|
updateTempOrderCustomer: (customer: UpdateTempOrderCustomerInput) => OrderSnapshot['customer'];
|
|
864
905
|
updateTempOrderPickupReferenceMode: (mode: PickupReferenceMode) => ShopServiceData;
|
|
865
906
|
updateTempOrderServiceType: (serviceType: ShopServiceType) => ShopServiceData;
|
|
907
|
+
getPickupTimingBooking: () => PickupTimingBooking | null;
|
|
908
|
+
setPickupTimingBooking: (input: PickupTimingBookingInput) => PickupTimingBooking;
|
|
909
|
+
clearPickupTimingBooking: () => void;
|
|
866
910
|
updateTempOrderBuzzer: (buzzer: string) => string;
|
|
867
911
|
updateTempOrderContactsInfo: (contactsInfo: Record<string, any> | null) => Record<string, any> | null;
|
|
868
912
|
addProductToOrder: (product: Partial<OrderProduct> & OrderProductIdentity, booking?: AddProductBookingInput, options?: AddProductToOrderOptions) => Promise<OrderProduct[]>;
|
|
@@ -875,7 +919,9 @@ export interface OrderModuleAPI {
|
|
|
875
919
|
updateOrderProduct: (params: UpdateOrderProductParams) => Promise<OrderProduct[]>;
|
|
876
920
|
/** 批量更新购物车行,末尾仅触发一次促销重算与 summary 刷新 */
|
|
877
921
|
updateOrderProducts: (paramsList: UpdateOrderProductParams[]) => Promise<OrderProduct[]>;
|
|
878
|
-
updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams
|
|
922
|
+
updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams, options?: {
|
|
923
|
+
isCurrentOrder?: () => boolean;
|
|
924
|
+
}) => Promise<OrderProduct[]>;
|
|
879
925
|
updateOrderBooking: (params: UpdateOrderBookingParams) => any[];
|
|
880
926
|
removeProductFromOrder: (identity: OrderProductIdentity, options?: RemoveProductsFromOrderOptions) => Promise<OrderProduct[]>;
|
|
881
927
|
/** 批量删除购物车行,末尾仅触发一次促销重算与 summary 刷新 */
|
|
@@ -31,7 +31,7 @@ export declare const DISCOUNT_SPLIT_ORIGIN_UID_KEY = "discountSplitOriginUid";
|
|
|
31
31
|
* 没有 UID 的裸商品不会被补写 UID。这是为了兼容 Rules/mock 的历史协议形状;
|
|
32
32
|
* 正常 Order 写路径会在 normalize 阶段提前创建 UID。
|
|
33
33
|
*/
|
|
34
|
-
export declare function ensureUniqueProductLineUids(tempOrder: OrderTempOrder): void;
|
|
34
|
+
export declare function ensureUniqueProductLineUids(tempOrder: OrderTempOrder, discounts?: Array<Record<string, any>>): void;
|
|
35
35
|
/**
|
|
36
36
|
* 把券移除后已经恢复原价的同源折扣拆分行重新合并。
|
|
37
37
|
*
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
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."); }
|
|
3
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
4
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
5
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
6
|
+
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."); }
|
|
7
|
+
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; } }
|
|
8
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
1
9
|
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; } } }; }
|
|
2
10
|
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); }
|
|
3
11
|
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; }
|
|
@@ -10,6 +18,7 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
10
18
|
import { cloneDeep } from 'lodash-es';
|
|
11
19
|
import { buildProductLineFingerprint, getSafeProductNum } from "../../../solution/ScanOrder/utils";
|
|
12
20
|
import { createUuidV4 } from "./orderCollectionIdentity";
|
|
21
|
+
import { getProductHolderRelations } from "../holderRelations";
|
|
13
22
|
|
|
14
23
|
/**
|
|
15
24
|
* 商品券拆行的身份与回并工具。
|
|
@@ -80,15 +89,20 @@ function ensureProductsByUid(tempOrder) {
|
|
|
80
89
|
* 正常 Order 写路径会在 normalize 阶段提前创建 UID。
|
|
81
90
|
*/
|
|
82
91
|
export function ensureUniqueProductLineUids(tempOrder) {
|
|
92
|
+
var discounts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
83
93
|
// usedUids 只描述本次 Rules 返回的商品集合,不能直接依赖 productsByUid:
|
|
84
94
|
// productsByUid 可能还保留已删除行的历史 runtime,历史 UID 不应导致当前行被改号。
|
|
85
95
|
var usedUids = new Set();
|
|
86
96
|
var productsByUid = ensureProductsByUid(tempOrder);
|
|
97
|
+
var splitGroups = new Map();
|
|
87
98
|
tempOrder.products = (tempOrder.products || []).map(function (product) {
|
|
88
99
|
var sourceUid = getProductLineUid(product);
|
|
89
100
|
// 单测 mock 或兼容旧 Rules 时可能返回没有 UID 的裸商品。
|
|
90
101
|
// 这里不主动补 UID,避免一个“校验重复”的工具意外改变旧协议对象形状。
|
|
91
102
|
if (!sourceUid) return product;
|
|
103
|
+
var group = splitGroups.get(sourceUid) || [];
|
|
104
|
+
group.push(product);
|
|
105
|
+
splitGroups.set(sourceUid, group);
|
|
92
106
|
|
|
93
107
|
// 实际场景:可乐 ×5 首次进入 Rules 时只有一行。
|
|
94
108
|
// 使用三张券后 Rules 可能返回「可乐 ×2 + 三条可乐 ×1」,但四条都复制原 UID。
|
|
@@ -122,6 +136,127 @@ export function ensureUniqueProductLineUids(tempOrder) {
|
|
|
122
136
|
usedUids.add(splitUid);
|
|
123
137
|
return product;
|
|
124
138
|
});
|
|
139
|
+
|
|
140
|
+
// 仅按本次券上的明确 Holder 分配迁移。数组顺序不能代表券对应的人。
|
|
141
|
+
// 未能明确分配时保留原 UID,不把整组关系复制给每一个拆分行。
|
|
142
|
+
var _iterator = _createForOfIteratorHelper(splitGroups),
|
|
143
|
+
_step;
|
|
144
|
+
try {
|
|
145
|
+
var _loop = function _loop() {
|
|
146
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
|
147
|
+
sourceUid = _step$value[0],
|
|
148
|
+
products = _step$value[1];
|
|
149
|
+
if (products.length < 2) return 0; // continue
|
|
150
|
+
var relations = getProductHolderRelations(tempOrder, {
|
|
151
|
+
metadata: {
|
|
152
|
+
unique_identification_number: sourceUid
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
if (!relations.length || relations.some(function (relation) {
|
|
156
|
+
return relation.holder_type !== 'form';
|
|
157
|
+
})) return 0; // continue
|
|
158
|
+
var assignments = new Map();
|
|
159
|
+
var remaining = _toConsumableArray(relations);
|
|
160
|
+
var ambiguous = false;
|
|
161
|
+
var _iterator2 = _createForOfIteratorHelper(products),
|
|
162
|
+
_step2;
|
|
163
|
+
try {
|
|
164
|
+
var _loop2 = function _loop2() {
|
|
165
|
+
var product = _step2.value;
|
|
166
|
+
var holderIds = new Set();
|
|
167
|
+
var _iterator4 = _createForOfIteratorHelper(product.discount_list || []),
|
|
168
|
+
_step4;
|
|
169
|
+
try {
|
|
170
|
+
var _loop3 = function _loop3() {
|
|
171
|
+
var _discount$holder;
|
|
172
|
+
var item = _step4.value;
|
|
173
|
+
var discount = discounts.find(function (candidate) {
|
|
174
|
+
var _item$discount;
|
|
175
|
+
return String(candidate.id) === String((_item$discount = item.discount) === null || _item$discount === void 0 ? void 0 : _item$discount.resource_id);
|
|
176
|
+
});
|
|
177
|
+
if ((discount === null || discount === void 0 || (_discount$holder = discount.holder) === null || _discount$holder === void 0 ? void 0 : _discount$holder.holder_type) !== 'form') return 1; // continue
|
|
178
|
+
var value = discount.holder.holder_id;
|
|
179
|
+
(Array.isArray(value) ? value : [value]).forEach(function (id) {
|
|
180
|
+
var recordId = id && _typeof(id) === 'object' ? id.form_record_id : id;
|
|
181
|
+
if (recordId !== undefined && recordId !== null && recordId !== '') holderIds.add(String(recordId));
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
185
|
+
if (_loop3()) continue;
|
|
186
|
+
}
|
|
187
|
+
} catch (err) {
|
|
188
|
+
_iterator4.e(err);
|
|
189
|
+
} finally {
|
|
190
|
+
_iterator4.f();
|
|
191
|
+
}
|
|
192
|
+
if (!holderIds.size) return 0; // continue
|
|
193
|
+
var assigned = remaining.filter(function (relation) {
|
|
194
|
+
return holderIds.has(String(relation.holder_id));
|
|
195
|
+
});
|
|
196
|
+
if (assigned.length !== Number(product.num)) {
|
|
197
|
+
ambiguous = true;
|
|
198
|
+
return 1; // break
|
|
199
|
+
}
|
|
200
|
+
assignments.set(product, assigned);
|
|
201
|
+
remaining = remaining.filter(function (relation) {
|
|
202
|
+
return !assigned.includes(relation);
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
_ret2;
|
|
206
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
207
|
+
_ret2 = _loop2();
|
|
208
|
+
if (_ret2 === 0) continue;
|
|
209
|
+
if (_ret2 === 1) break;
|
|
210
|
+
}
|
|
211
|
+
} catch (err) {
|
|
212
|
+
_iterator2.e(err);
|
|
213
|
+
} finally {
|
|
214
|
+
_iterator2.f();
|
|
215
|
+
}
|
|
216
|
+
var unassigned = products.filter(function (product) {
|
|
217
|
+
return !assignments.has(product);
|
|
218
|
+
});
|
|
219
|
+
if (ambiguous || unassigned.length > 1) return 0; // continue
|
|
220
|
+
if (unassigned.length === 1) {
|
|
221
|
+
if (remaining.length !== Number(unassigned[0].num)) return 0; // continue
|
|
222
|
+
assignments.set(unassigned[0], remaining);
|
|
223
|
+
} else if (remaining.length) return 0; // continue
|
|
224
|
+
var _iterator3 = _createForOfIteratorHelper(assignments),
|
|
225
|
+
_step3;
|
|
226
|
+
try {
|
|
227
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
228
|
+
var _step3$value = _slicedToArray(_step3.value, 2),
|
|
229
|
+
product = _step3$value[0],
|
|
230
|
+
assigned = _step3$value[1];
|
|
231
|
+
var _iterator5 = _createForOfIteratorHelper(assigned),
|
|
232
|
+
_step5;
|
|
233
|
+
try {
|
|
234
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
235
|
+
var relation = _step5.value;
|
|
236
|
+
relation.relation_uuid = String(getProductLineUid(product));
|
|
237
|
+
}
|
|
238
|
+
} catch (err) {
|
|
239
|
+
_iterator5.e(err);
|
|
240
|
+
} finally {
|
|
241
|
+
_iterator5.f();
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
} catch (err) {
|
|
245
|
+
_iterator3.e(err);
|
|
246
|
+
} finally {
|
|
247
|
+
_iterator3.f();
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
_ret;
|
|
251
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
252
|
+
_ret = _loop();
|
|
253
|
+
if (_ret === 0) continue;
|
|
254
|
+
}
|
|
255
|
+
} catch (err) {
|
|
256
|
+
_iterator.e(err);
|
|
257
|
+
} finally {
|
|
258
|
+
_iterator.f();
|
|
259
|
+
}
|
|
125
260
|
}
|
|
126
261
|
|
|
127
262
|
/**
|
|
@@ -140,12 +275,12 @@ export function consolidateDiscountFreeProductLines(tempOrder) {
|
|
|
140
275
|
// 清除客户/商品券后,四行都恢复为无折扣状态,应在本轮重算中立即回并为「可乐 ×5」。
|
|
141
276
|
var consolidatedProducts = [];
|
|
142
277
|
var productIndexByKey = new Map();
|
|
143
|
-
var
|
|
144
|
-
|
|
278
|
+
var _iterator6 = _createForOfIteratorHelper(tempOrder.products || []),
|
|
279
|
+
_step6;
|
|
145
280
|
try {
|
|
146
|
-
for (
|
|
281
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
147
282
|
var _product$booking_uid, _product$metadata4, _booking_id, _product$metadata5, _product$order_detail, _holder_id, _product$metadata6, _product$metadata7, _product$metadata8, _product$product_sku2, _product$metadata9, _tempOrder$_extend, _product$selling_pric, _product$original_pri, _custom_price, _product$is_charge_ta, _product$gift_card, _product$bundle_edit, _product$metadata$pri, _product$metadata10, _product$metadata$sou, _product$metadata11, _product$metadata$mai, _product$metadata12, _product$metadata$mai2, _product$metadata13, _product$product_vari;
|
|
148
|
-
var product =
|
|
283
|
+
var product = _step6.value;
|
|
149
284
|
var productBundle = Array.isArray(product.product_bundle) ? product.product_bundle : [];
|
|
150
285
|
var hasDiscount = (product.discount_list || []).length > 0 || productBundle.some(function (bundle) {
|
|
151
286
|
return ((bundle === null || bundle === void 0 ? void 0 : bundle.discount_list) || []).length > 0;
|
|
@@ -161,7 +296,7 @@ export function consolidateDiscountFreeProductLines(tempOrder) {
|
|
|
161
296
|
// - 手动改价/备注:用户显式表达了不同价格或不同制作要求;
|
|
162
297
|
// - 称重商品:每次称重的净重和金额属于独立交易事实;
|
|
163
298
|
// - 预约/holder/历史订单行:分别关联预约、持有人或后端 order_detail。
|
|
164
|
-
var hasMergeBoundary = hasDiscount || Boolean(((_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7._giftInfo) || product._giftInfo) || Boolean((_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8._promotion) || isManualProductDiscountLine(product) || hasProductLineNote(product) || Number(((_product$product_sku2 = product.product_sku) === null || _product$product_sku2 === void 0 ? void 0 : _product$product_sku2.open_sold_weight) || 0) === 1 || ((_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.is_edit_for_runtime) === true || bookingId !== undefined && bookingId !== null && bookingId !== 0 && bookingId !== '0' || bookingUid !== undefined && bookingUid !== null && String(bookingUid) !== '' || holderId !== undefined && holderId !== null && String(holderId) !== '' || orderDetailId !== undefined && orderDetailId !== null && orderDetailId !== '';
|
|
299
|
+
var hasMergeBoundary = hasDiscount || Boolean(((_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7._giftInfo) || product._giftInfo) || Boolean((_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8._promotion) || isManualProductDiscountLine(product) || hasProductLineNote(product) || Number(((_product$product_sku2 = product.product_sku) === null || _product$product_sku2 === void 0 ? void 0 : _product$product_sku2.open_sold_weight) || 0) === 1 || ((_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.is_edit_for_runtime) === true || bookingId !== undefined && bookingId !== null && bookingId !== 0 && bookingId !== '0' || bookingUid !== undefined && bookingUid !== null && String(bookingUid) !== '' || getProductHolderRelations(tempOrder, product).length > 0 || holderId !== undefined && holderId !== null && String(holderId) !== '' || orderDetailId !== undefined && orderDetailId !== null && orderDetailId !== '';
|
|
165
300
|
if (hasMergeBoundary) {
|
|
166
301
|
consolidatedProducts.push(product);
|
|
167
302
|
continue;
|
|
@@ -219,9 +354,9 @@ export function consolidateDiscountFreeProductLines(tempOrder) {
|
|
|
219
354
|
// 保留历史索引比立即清理更安全;当前购物车身份始终以 tempOrder.products 为准。
|
|
220
355
|
}
|
|
221
356
|
} catch (err) {
|
|
222
|
-
|
|
357
|
+
_iterator6.e(err);
|
|
223
358
|
} finally {
|
|
224
|
-
|
|
359
|
+
_iterator6.f();
|
|
225
360
|
}
|
|
226
361
|
tempOrder.products = consolidatedProducts;
|
|
227
362
|
}
|
|
@@ -367,12 +367,26 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
|
|
|
367
367
|
_iterator4.f();
|
|
368
368
|
}
|
|
369
369
|
if (remap.scope !== 'linked-owner') {
|
|
370
|
-
var _iterator5 = _createForOfIteratorHelper(order.
|
|
370
|
+
var _iterator5 = _createForOfIteratorHelper(order.holder_relations || []),
|
|
371
371
|
_step5;
|
|
372
372
|
try {
|
|
373
373
|
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
374
|
+
var relation = _step5.value;
|
|
375
|
+
if (relation.relation_model === 'order_detail' && String(relation.relation_uuid) === remap.from) {
|
|
376
|
+
relation.relation_uuid = remap.to;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
} catch (err) {
|
|
380
|
+
_iterator5.e(err);
|
|
381
|
+
} finally {
|
|
382
|
+
_iterator5.f();
|
|
383
|
+
}
|
|
384
|
+
var _iterator6 = _createForOfIteratorHelper(order.products || []),
|
|
385
|
+
_step6;
|
|
386
|
+
try {
|
|
387
|
+
for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
|
|
374
388
|
var _product$metadata, _product$metadata2;
|
|
375
|
-
var product =
|
|
389
|
+
var product = _step6.value;
|
|
376
390
|
if (String((product === null || product === void 0 || (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.parent_unique_identification_number) || '') === remap.from) {
|
|
377
391
|
product.metadata = _objectSpread(_objectSpread({}, product.metadata || {}), {}, {
|
|
378
392
|
parent_unique_identification_number: remap.to
|
|
@@ -394,9 +408,9 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
|
|
|
394
408
|
}
|
|
395
409
|
}
|
|
396
410
|
} catch (err) {
|
|
397
|
-
|
|
411
|
+
_iterator6.e(err);
|
|
398
412
|
} finally {
|
|
399
|
-
|
|
413
|
+
_iterator6.f();
|
|
400
414
|
}
|
|
401
415
|
}
|
|
402
416
|
var productsByUid = (_order$_extend = order._extend) === null || _order$_extend === void 0 ? void 0 : _order$_extend.productsByUid;
|
|
@@ -429,12 +443,12 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
|
|
|
429
443
|
}
|
|
430
444
|
}
|
|
431
445
|
if (remap.kind === 'booking') {
|
|
432
|
-
var
|
|
433
|
-
|
|
446
|
+
var _iterator7 = _createForOfIteratorHelper(order.products || []),
|
|
447
|
+
_step7;
|
|
434
448
|
try {
|
|
435
|
-
for (
|
|
449
|
+
for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
|
|
436
450
|
var _product$metadata3;
|
|
437
|
-
var _product =
|
|
451
|
+
var _product = _step7.value;
|
|
438
452
|
if (remap.scope === 'linked-owner' && (linkedOwnerIsAmbiguous || getOrderCollectionUid('product', _product) !== remap.referenceOwnerUid)) {
|
|
439
453
|
continue;
|
|
440
454
|
}
|
|
@@ -448,9 +462,9 @@ export function applyOrderCollectionUidRemaps(sourceOrder, uidRemaps) {
|
|
|
448
462
|
}
|
|
449
463
|
}
|
|
450
464
|
} catch (err) {
|
|
451
|
-
|
|
465
|
+
_iterator7.e(err);
|
|
452
466
|
} finally {
|
|
453
|
-
|
|
467
|
+
_iterator7.f();
|
|
454
468
|
}
|
|
455
469
|
}
|
|
456
470
|
},
|
|
@@ -173,7 +173,7 @@ export declare function resolveManualOverrideLineOriginalPrice(params: {
|
|
|
173
173
|
* // => -4
|
|
174
174
|
*/
|
|
175
175
|
export declare function resolveEffectivePerUnitDiscount(product: Record<string, any>): number;
|
|
176
|
-
export declare function createDefaultOrderRulesHooks(getBookings?: () => OrderTempOrder['bookings']): RulesParamsHooks;
|
|
176
|
+
export declare function createDefaultOrderRulesHooks(getBookings?: () => OrderTempOrder['bookings'], getHolderRelations?: () => OrderTempOrder['holder_relations']): RulesParamsHooks;
|
|
177
177
|
/**
|
|
178
178
|
* 通过 session 类商品的开始时间结束时间生成商品的时长
|
|
179
179
|
* @param {CartItem} cartItem
|
|
@@ -213,6 +213,7 @@ export declare function normalizeBookingSubType(booking: Record<string, any>): s
|
|
|
213
213
|
export declare function normalizeSubmitBooking<T extends {
|
|
214
214
|
metadata?: Record<string, any>;
|
|
215
215
|
}>(booking: T): T;
|
|
216
|
+
export declare function resolveTableOccupancyDuration(tempOrder: OrderTempOrder): number;
|
|
216
217
|
/** 提交用人数:有限且为正则向下取整,否则为 1 */
|
|
217
218
|
export declare function normalizeSubmitCollectPaxValue(value: unknown): number;
|
|
218
219
|
/** 从临时订单 metadata 解析合成 booking 的 collect_pax */
|