@pisell/pisellos 0.10.58 → 0.10.60
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 +1 -0
- package/dist/index.js +1 -0
- package/dist/inventory/index.d.ts +92 -0
- package/dist/inventory/index.js +500 -0
- package/dist/model/strategy/adapter/promotion/index.js +0 -9
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +25 -2
- package/dist/modules/Order/holderRelations.d.ts +14 -0
- package/dist/modules/Order/holderRelations.js +154 -0
- package/dist/modules/Order/index.d.ts +21 -4
- package/dist/modules/Order/index.js +1453 -1060
- package/dist/modules/Order/types.d.ts +24 -1
- 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 +1 -1
- package/dist/modules/Order/utils.js +35 -9
- package/dist/modules/ProductList/index.d.ts +1 -3
- package/dist/modules/ProductList/index.js +120 -192
- package/dist/modules/ProductList/types.d.ts +0 -8
- package/dist/modules/ProductList/types.js +0 -2
- package/dist/server/index.js +18 -12
- package/dist/server/modules/order/index.d.ts +4 -0
- package/dist/server/modules/order/index.js +255 -190
- package/dist/server/modules/order/types.d.ts +3 -0
- package/dist/shared/receipt/small-ticket.js +17 -0
- package/dist/shared/sales/loadSalesOrderSnapshot.js +1 -1
- package/dist/solution/BaseSales/index.d.ts +8 -0
- package/dist/solution/BaseSales/index.js +1478 -1233
- package/dist/solution/BaseSales/types.d.ts +2 -1
- package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
- package/dist/solution/BaseSales/utils/parseSalesResponse.js +7 -3
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +12 -3
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +1 -13
- package/dist/solution/BookingTicket/index.js +7 -4
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +6 -2
- package/dist/solution/UnifiedBookingSales/index.d.ts +1 -7
- package/dist/solution/UnifiedBookingSales/index.js +446 -586
- package/lib/index.d.ts +1 -0
- package/lib/index.js +12 -0
- package/lib/inventory/index.d.ts +92 -0
- package/lib/inventory/index.js +280 -0
- 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 +16 -1
- package/lib/modules/Order/holderRelations.d.ts +14 -0
- package/lib/modules/Order/holderRelations.js +98 -0
- package/lib/modules/Order/index.d.ts +21 -4
- package/lib/modules/Order/index.js +155 -31
- package/lib/modules/Order/types.d.ts +24 -1
- 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 +1 -1
- package/lib/modules/Order/utils.js +27 -6
- package/lib/modules/ProductList/index.d.ts +1 -3
- package/lib/modules/ProductList/index.js +22 -31
- package/lib/modules/ProductList/types.d.ts +0 -8
- package/lib/modules/ProductList/types.js +0 -1
- package/lib/server/index.js +6 -0
- package/lib/server/modules/order/index.d.ts +4 -0
- package/lib/server/modules/order/index.js +46 -4
- package/lib/server/modules/order/types.d.ts +3 -0
- package/lib/shared/receipt/small-ticket.js +15 -0
- package/lib/shared/sales/loadSalesOrderSnapshot.js +1 -1
- package/lib/solution/BaseSales/index.d.ts +8 -0
- package/lib/solution/BaseSales/index.js +121 -9
- package/lib/solution/BaseSales/types.d.ts +2 -1
- package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +3 -1
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +4 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -0
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +1 -13
- package/lib/solution/BookingTicket/index.js +4 -1
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +7 -1
- package/lib/solution/UnifiedBookingSales/index.d.ts +1 -7
- package/lib/solution/UnifiedBookingSales/index.js +12 -80
- package/package.json +1 -1
|
@@ -7,13 +7,15 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
|
|
|
7
7
|
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); }
|
|
8
8
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
9
9
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
10
|
+
import { cloneDeep } from 'lodash-es';
|
|
11
|
+
import { getProductHolderRelations } from "../../Order/holderRelations";
|
|
10
12
|
import { getProductSkuOptions } from "../../Order/utils";
|
|
11
13
|
import { isEntitlementPass } from "../../Discount/entitlementPass";
|
|
12
14
|
import { buildProductOptionStringFromOrderLine } from "./orderLineDisplay";
|
|
13
15
|
/**
|
|
14
16
|
* 从已加车的普通商品 order line 反查 SkuDetailModal edit 所需的 cacheItem。
|
|
15
17
|
*
|
|
16
|
-
* 与 `buildCacheItemFromOrderLine`(预约行 + booking
|
|
18
|
+
* 与 `buildCacheItemFromOrderLine`(预约行 + booking)并列;Holder 从订单关系回填,不生成预约字段。
|
|
17
19
|
*/
|
|
18
20
|
/**
|
|
19
21
|
* 解析 v2 主商品 source 价(不含 option、不含 bundle),供 SkuDetailModal / transform 使用。
|
|
@@ -85,7 +87,7 @@ function mapOrderBundleToOtherBundle(bundle) {
|
|
|
85
87
|
});
|
|
86
88
|
}
|
|
87
89
|
export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
88
|
-
var _product$product_id, _product$selling_pric2, _product$original_pri, _product$metadata, _product$metadata2, _product$metadata3, _product$product_vari, _originExtend$other, _product$num, _product$product_vari2, _product$num2, _title, _product$note, _originExtend$price, _originExtend$total, _originExtend$origin_, _product$metadata4, _originExtend$priceOv, _product$metadata5, _ref7, _title2, _ref8, _cover, _price3, _product$order_detail, _product$product_sku;
|
|
90
|
+
var _product$product_id, _product$selling_pric2, _product$original_pri, _product$metadata, _product$metadata2, _product$metadata3, _product$product_vari, _originExtend$other, _product$num, _product$product_vari2, _product$num2, _title, _product$note, _originExtend$price, _originExtend$total, _originExtend$origin_, _product$metadata4, _originExtend$priceOv, _product$metadata5, _product$metadata6, _ref7, _title2, _ref8, _cover, _price3, _product$order_detail, _product$product_sku;
|
|
89
91
|
var product = input.product,
|
|
90
92
|
sourceProduct = input.sourceProduct;
|
|
91
93
|
var resolvedId = (_product$product_id = product.product_id) !== null && _product$product_id !== void 0 ? _product$product_id : sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.id;
|
|
@@ -94,6 +96,23 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
|
94
96
|
var original = Number((_product$original_pri = product.original_price) !== null && _product$original_pri !== void 0 ? _product$original_pri : selling);
|
|
95
97
|
var uid = (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.unique_identification_number;
|
|
96
98
|
var originExtend = (_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 || (_product$metadata2 = _product$metadata2.origin) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2._extend;
|
|
99
|
+
var holderRelations = cloneDeep(getProductHolderRelations(input, product));
|
|
100
|
+
var formRelations = holderRelations.filter(function (relation) {
|
|
101
|
+
return relation.holder_type === 'form';
|
|
102
|
+
});
|
|
103
|
+
var holderIds = formRelations.map(function (relation) {
|
|
104
|
+
return relation.holder_id;
|
|
105
|
+
});
|
|
106
|
+
var holderNames = formRelations.map(function (relation) {
|
|
107
|
+
var _relation$metadata;
|
|
108
|
+
return (_relation$metadata = relation.metadata) === null || _relation$metadata === void 0 ? void 0 : _relation$metadata.name;
|
|
109
|
+
}).filter(function (name) {
|
|
110
|
+
return typeof name === 'string' && name.length > 0;
|
|
111
|
+
});
|
|
112
|
+
var holder = formRelations.length > 0 ? _objectSpread(_objectSpread({}, formRelations[0].metadata || {}), {}, {
|
|
113
|
+
form_record: holderIds,
|
|
114
|
+
name: holderNames.join(',')
|
|
115
|
+
}) : null;
|
|
97
116
|
var shouldPreserveEntitlementPriceOverride = hasEntitlementPassDiscount(product) && ((originExtend === null || originExtend === void 0 ? void 0 : originExtend.priceOverride) !== undefined || ((_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.price_override) != null);
|
|
98
117
|
var hasPriceOverride = (originExtend === null || originExtend === void 0 ? void 0 : originExtend.priceOverride) !== undefined || shouldPreserveEntitlementPriceOverride;
|
|
99
118
|
var option = getProductSkuOptions(product);
|
|
@@ -125,6 +144,9 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
|
125
144
|
skuValue: JSON.parse(JSON.stringify(skuValue)),
|
|
126
145
|
_skuValue: JSON.parse(JSON.stringify(skuValue)),
|
|
127
146
|
isNormalProduct: true,
|
|
147
|
+
holder_relations: holderRelations,
|
|
148
|
+
holder: holder,
|
|
149
|
+
holder_id: holderIds,
|
|
128
150
|
metadata: {
|
|
129
151
|
product_add_schedule_time: (_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.product_add_schedule_time
|
|
130
152
|
}
|
|
@@ -140,6 +162,7 @@ export function buildNormalProductCacheItemFromOrderLine(input) {
|
|
|
140
162
|
extend._skuValue = JSON.parse(JSON.stringify(extend.skuValue));
|
|
141
163
|
}
|
|
142
164
|
return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, sourceProduct || {}), {}, {
|
|
165
|
+
holder_config: (sourceProduct === null || sourceProduct === void 0 ? void 0 : sourceProduct.holder_config) !== undefined ? sourceProduct.holder_config : (_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.holder_config,
|
|
143
166
|
id: resolvedId,
|
|
144
167
|
product_id: resolvedId,
|
|
145
168
|
_id: uid,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { OrderHolderRelation, OrderTempOrder } from './types';
|
|
2
|
+
/** 在原订单上补齐关系身份,让缓存、提交和重试共用同一个 UUID。 */
|
|
3
|
+
export declare function ensureHolderRelationUuids(order: {
|
|
4
|
+
holder_relations?: OrderHolderRelation[];
|
|
5
|
+
}): void;
|
|
6
|
+
export declare function hasProductBooking(product: Record<string, any>): boolean;
|
|
7
|
+
export declare function getProductHolderRelations(order: {
|
|
8
|
+
holder_relations?: OrderHolderRelation[];
|
|
9
|
+
}, product: Record<string, any>): OrderHolderRelation[];
|
|
10
|
+
export declare function replaceProductHolderRelations(order: OrderTempOrder, product: Record<string, any>, patch: OrderHolderRelation[] | undefined): void;
|
|
11
|
+
/** 只删除明确被用户删除的行,不从稀疏远端快照推断删除。 */
|
|
12
|
+
export declare function removeProductHolderRelations(order: OrderTempOrder, products: Array<Record<string, any>>): void;
|
|
13
|
+
/** 仅兼容尚无新字段的旧测试草稿;显式 [] 永远不恢复旧 product 数据。 */
|
|
14
|
+
export declare function restoreLegacyHolderRelations(order: Record<string, any>): OrderHolderRelation[] | undefined;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
3
|
+
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; }
|
|
4
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
5
|
+
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); }
|
|
6
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
7
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
9
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
10
|
+
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); }
|
|
11
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
import { createUuidV4 } from "./utils/orderCollectionIdentity";
|
|
15
|
+
function getHolderRelationUuid(relation) {
|
|
16
|
+
return typeof (relation === null || relation === void 0 ? void 0 : relation.uuid) === 'string' && relation.uuid.trim() ? relation.uuid : undefined;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** 在原订单上补齐关系身份,让缓存、提交和重试共用同一个 UUID。 */
|
|
20
|
+
export function ensureHolderRelationUuids(order) {
|
|
21
|
+
if (!Array.isArray(order.holder_relations)) return;
|
|
22
|
+
var _iterator = _createForOfIteratorHelper(order.holder_relations),
|
|
23
|
+
_step;
|
|
24
|
+
try {
|
|
25
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
26
|
+
var relation = _step.value;
|
|
27
|
+
if (relation && _typeof(relation) === 'object' && !getHolderRelationUuid(relation)) {
|
|
28
|
+
relation.uuid = createUuidV4();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} catch (err) {
|
|
32
|
+
_iterator.e(err);
|
|
33
|
+
} finally {
|
|
34
|
+
_iterator.f();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function hasProductBooking(product) {
|
|
38
|
+
var _product$metadata, _product$metadata2;
|
|
39
|
+
var bookingIds = [product.booking_id, (_product$metadata = product.metadata) === null || _product$metadata === void 0 ? void 0 : _product$metadata.booking_id, product.schedule_event_id];
|
|
40
|
+
return Boolean(product.booking_uid || ((_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2.booking_uid)) || bookingIds.some(function (id) {
|
|
41
|
+
return id !== undefined && id !== null && String(id) !== '' && String(id) !== '0';
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function getProductHolderRelations(order, product) {
|
|
45
|
+
var _product$metadata$uni, _product$metadata3;
|
|
46
|
+
var uid = (_product$metadata$uni = (_product$metadata3 = product.metadata) === null || _product$metadata3 === void 0 ? void 0 : _product$metadata3.unique_identification_number) !== null && _product$metadata$uni !== void 0 ? _product$metadata$uni : product.unique_identification_number;
|
|
47
|
+
if (uid === undefined || uid === null || uid === '') return [];
|
|
48
|
+
return (order.holder_relations || []).filter(function (relation) {
|
|
49
|
+
return relation.relation_model === 'order_detail' && String(relation.relation_uuid) === String(uid);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export function replaceProductHolderRelations(order, product, patch) {
|
|
53
|
+
var _product$metadata$uni2, _product$metadata4;
|
|
54
|
+
if (patch === undefined || hasProductBooking(product)) return;
|
|
55
|
+
var uid = (_product$metadata$uni2 = (_product$metadata4 = product.metadata) === null || _product$metadata4 === void 0 ? void 0 : _product$metadata4.unique_identification_number) !== null && _product$metadata$uni2 !== void 0 ? _product$metadata$uni2 : product.unique_identification_number;
|
|
56
|
+
if (uid === undefined || uid === null || uid === '') return;
|
|
57
|
+
var existing = getProductHolderRelations(order, product);
|
|
58
|
+
var next = new Map();
|
|
59
|
+
var _iterator2 = _createForOfIteratorHelper(patch),
|
|
60
|
+
_step2;
|
|
61
|
+
try {
|
|
62
|
+
var _loop = function _loop() {
|
|
63
|
+
var relation = _step2.value;
|
|
64
|
+
var key = "".concat(relation.holder_type, ":").concat(relation.holder_id);
|
|
65
|
+
var previous = existing.find(function (item) {
|
|
66
|
+
return item.holder_type === relation.holder_type && String(item.holder_id) === String(relation.holder_id);
|
|
67
|
+
});
|
|
68
|
+
next.set(key, _objectSpread(_objectSpread(_objectSpread({}, previous), relation), {}, {
|
|
69
|
+
uuid: getHolderRelationUuid(previous) || getHolderRelationUuid(relation) || createUuidV4(),
|
|
70
|
+
relation_model: 'order_detail',
|
|
71
|
+
relation_uuid: String(uid)
|
|
72
|
+
}, previous !== null && previous !== void 0 && previous.metadata || relation.metadata ? {
|
|
73
|
+
metadata: _objectSpread(_objectSpread({}, previous === null || previous === void 0 ? void 0 : previous.metadata), relation.metadata)
|
|
74
|
+
} : {}));
|
|
75
|
+
};
|
|
76
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
77
|
+
_loop();
|
|
78
|
+
}
|
|
79
|
+
} catch (err) {
|
|
80
|
+
_iterator2.e(err);
|
|
81
|
+
} finally {
|
|
82
|
+
_iterator2.f();
|
|
83
|
+
}
|
|
84
|
+
order.holder_relations = [].concat(_toConsumableArray((order.holder_relations || []).filter(function (relation) {
|
|
85
|
+
return relation.relation_model !== 'order_detail' || String(relation.relation_uuid) !== String(uid);
|
|
86
|
+
})), _toConsumableArray(next.values()));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** 只删除明确被用户删除的行,不从稀疏远端快照推断删除。 */
|
|
90
|
+
export function removeProductHolderRelations(order, products) {
|
|
91
|
+
if (!Array.isArray(order.holder_relations)) return;
|
|
92
|
+
var removedUids = new Set(products.map(function (product) {
|
|
93
|
+
var _ref, _product$metadata$uni3, _product$metadata5;
|
|
94
|
+
return String((_ref = (_product$metadata$uni3 = (_product$metadata5 = product.metadata) === null || _product$metadata5 === void 0 ? void 0 : _product$metadata5.unique_identification_number) !== null && _product$metadata$uni3 !== void 0 ? _product$metadata$uni3 : product.unique_identification_number) !== null && _ref !== void 0 ? _ref : '');
|
|
95
|
+
}));
|
|
96
|
+
order.holder_relations = order.holder_relations.filter(function (relation) {
|
|
97
|
+
return relation.relation_model !== 'order_detail' || !removedUids.has(String(relation.relation_uuid));
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** 仅兼容尚无新字段的旧测试草稿;显式 [] 永远不恢复旧 product 数据。 */
|
|
102
|
+
export function restoreLegacyHolderRelations(order) {
|
|
103
|
+
if (Object.prototype.hasOwnProperty.call(order, 'holder_relations')) {
|
|
104
|
+
return Array.isArray(order.holder_relations) ? order.holder_relations : undefined;
|
|
105
|
+
}
|
|
106
|
+
var relations = [];
|
|
107
|
+
var bookingProductUids = new Set((order.bookings || []).map(function (booking) {
|
|
108
|
+
var _ref2, _booking$product_uid, _booking$metadata;
|
|
109
|
+
return String((_ref2 = (_booking$product_uid = booking.product_uid) !== null && _booking$product_uid !== void 0 ? _booking$product_uid : (_booking$metadata = booking.metadata) === null || _booking$metadata === void 0 ? void 0 : _booking$metadata.product_uid) !== null && _ref2 !== void 0 ? _ref2 : '');
|
|
110
|
+
}));
|
|
111
|
+
var _iterator3 = _createForOfIteratorHelper(order.products || []),
|
|
112
|
+
_step3;
|
|
113
|
+
try {
|
|
114
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
115
|
+
var _product$metadata$uni4, _product$metadata6, _product$metadata7, _product$metadata$hol, _product$metadata8;
|
|
116
|
+
var product = _step3.value;
|
|
117
|
+
if (hasProductBooking(product)) continue;
|
|
118
|
+
var uid = (_product$metadata$uni4 = (_product$metadata6 = product.metadata) === null || _product$metadata6 === void 0 ? void 0 : _product$metadata6.unique_identification_number) !== null && _product$metadata$uni4 !== void 0 ? _product$metadata$uni4 : product.unique_identification_number;
|
|
119
|
+
if (uid === undefined || uid === null || uid === '' || bookingProductUids.has(String(uid))) continue;
|
|
120
|
+
var holder = ((_product$metadata7 = product.metadata) === null || _product$metadata7 === void 0 ? void 0 : _product$metadata7.holder) || {};
|
|
121
|
+
var rawIds = (_product$metadata$hol = (_product$metadata8 = product.metadata) === null || _product$metadata8 === void 0 ? void 0 : _product$metadata8.holder_id) !== null && _product$metadata$hol !== void 0 ? _product$metadata$hol : holder.form_record;
|
|
122
|
+
var ids = (Array.isArray(rawIds) ? rawIds : [rawIds]).filter(function (id) {
|
|
123
|
+
return id !== undefined && id !== null && id !== '' && Number.isInteger(Number(id)) && Number(id) >= 0;
|
|
124
|
+
});
|
|
125
|
+
var _iterator4 = _createForOfIteratorHelper(ids),
|
|
126
|
+
_step4;
|
|
127
|
+
try {
|
|
128
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
129
|
+
var id = _step4.value;
|
|
130
|
+
var metadata = _objectSpread(_objectSpread({}, holder), {}, {
|
|
131
|
+
form_record: [Number(id)]
|
|
132
|
+
});
|
|
133
|
+
if (ids.length !== 1) delete metadata.name;
|
|
134
|
+
relations.push({
|
|
135
|
+
relation_model: 'order_detail',
|
|
136
|
+
relation_uuid: String(uid),
|
|
137
|
+
holder_type: 'form',
|
|
138
|
+
holder_id: Number(id),
|
|
139
|
+
metadata: metadata
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
} catch (err) {
|
|
143
|
+
_iterator4.e(err);
|
|
144
|
+
} finally {
|
|
145
|
+
_iterator4.f();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
} catch (err) {
|
|
149
|
+
_iterator3.e(err);
|
|
150
|
+
} finally {
|
|
151
|
+
_iterator3.f();
|
|
152
|
+
}
|
|
153
|
+
return relations.length ? relations : undefined;
|
|
154
|
+
}
|
|
@@ -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, OrderCartIntentCommitContext, 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, OrderHooksConfig, 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';
|
|
@@ -29,6 +29,12 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
29
29
|
private rulesHooksOverride?;
|
|
30
30
|
private moduleHooksOverride?;
|
|
31
31
|
private orderHooks?;
|
|
32
|
+
private cartCommandQueue;
|
|
33
|
+
private queueCartCommand;
|
|
34
|
+
/** Use the exact Order normalizers/merge rules on a private draft, not a second projection. */
|
|
35
|
+
private beginCartMutation;
|
|
36
|
+
/** Serializes checkout preparation with local cart commands; hydration remains outside this guard. */
|
|
37
|
+
prepareCheckout<T>(prepare: (items: OrderProduct[]) => Promise<T>): Promise<T>;
|
|
32
38
|
private otherParams?;
|
|
33
39
|
/** 评估器引用;由 SalesSdkProvider 注入,未注入时 applyPromotion 静默跳过 */
|
|
34
40
|
private promotionEvaluator;
|
|
@@ -66,7 +72,11 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
66
72
|
* @example
|
|
67
73
|
* orderModule.updateOtherParams({ cacheId: 'cache-2', channel: 'pos' });
|
|
68
74
|
*/
|
|
69
|
-
updateOtherParams(params: Record<string, any
|
|
75
|
+
updateOtherParams(params: Record<string, any>, options?: {
|
|
76
|
+
hooks?: OrderHooksConfig;
|
|
77
|
+
changedParams?: Record<string, any>;
|
|
78
|
+
cover?: boolean;
|
|
79
|
+
}): void;
|
|
70
80
|
/** Internal intent boundary shared with asynchronous scanner/detail flows. */
|
|
71
81
|
createCartIntentCommitGuard(action: OrderCartIntentCommitContext['action'], tempOrder?: OrderTempOrder | null): () => void;
|
|
72
82
|
/** PC/H5 属于在线店铺;其它或缺失平台统一沿用 POS 行为。 */
|
|
@@ -481,6 +491,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
481
491
|
* // → tempOrder.products 新增 3 行,每行 num=1,bookings 3 条
|
|
482
492
|
*/
|
|
483
493
|
addProductToOrder(product: Partial<OrderProduct> & OrderProductIdentity, booking?: AddProductBookingInput, options?: AddProductToOrderOptions): Promise<OrderProduct[]>;
|
|
494
|
+
private addProductToOrderDraft;
|
|
484
495
|
/**
|
|
485
496
|
* 批量添加商品行,所有行追加完成后只触发一次促销、折扣、summary 重算与持久化。
|
|
486
497
|
*
|
|
@@ -496,6 +507,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
496
507
|
}>, options?: {
|
|
497
508
|
skipEditDiscountConfigRefresh?: boolean;
|
|
498
509
|
}): Promise<OrderProduct[]>;
|
|
510
|
+
private addProductsToOrderDraft;
|
|
499
511
|
private getFullCoveragePassDiscounts;
|
|
500
512
|
private hasEntitlementPassDiscount;
|
|
501
513
|
private hasGoodPassDiscount;
|
|
@@ -507,8 +519,11 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
507
519
|
private isRestrictedCartProductUpdate;
|
|
508
520
|
private applyOrderProductUpdateToTempOrder;
|
|
509
521
|
updateOrderProduct(params: UpdateOrderProductParams): Promise<OrderProduct[]>;
|
|
522
|
+
private updateOrderProductDraft;
|
|
510
523
|
updateOrderProducts(paramsList: UpdateOrderProductParams[]): Promise<OrderProduct[]>;
|
|
524
|
+
private updateOrderProductsDraft;
|
|
511
525
|
updateOrderProductQuantity(params: UpdateOrderProductQuantityParams): Promise<OrderProduct[]>;
|
|
526
|
+
private updateOrderProductQuantityDraft;
|
|
512
527
|
updateOrderBooking(params: UpdateOrderBookingParams): any[];
|
|
513
528
|
/**
|
|
514
529
|
* 商品行写路径收尾:促销 → 折扣 → 清洗 → summary → 持久化。
|
|
@@ -525,12 +540,14 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
525
540
|
* await order.removeProductsFromOrder([identityA, identityB]);
|
|
526
541
|
*/
|
|
527
542
|
removeProductsFromOrder(identities: OrderProductIdentity[], options?: RemoveProductsFromOrderOptions): Promise<OrderProduct[]>;
|
|
543
|
+
private removeProductsFromOrderDraft;
|
|
528
544
|
removeProductFromOrder(identity: OrderProductIdentity, options?: RemoveProductsFromOrderOptions): Promise<OrderProduct[]>;
|
|
529
545
|
/**
|
|
530
546
|
* 仅清空购物车行(products / bookings),不重置整单。
|
|
531
547
|
* 普通整单 note 保持不变;以商品行为主体的 Sales Notes 同步删除。
|
|
532
548
|
*/
|
|
533
549
|
clearOrderCartLines(): Promise<OrderTempOrder>;
|
|
550
|
+
private clearOrderCartLinesDraft;
|
|
534
551
|
/**
|
|
535
552
|
* 切换购物车结算单位时清理所有会影响新币种的订单状态,但保留当前客户。
|
|
536
553
|
*/
|
|
@@ -592,7 +609,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
592
609
|
generateIdempotencyToken(): string;
|
|
593
610
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
594
611
|
createOrder(params: CommitOrderParams['query']): {
|
|
595
|
-
type: "
|
|
612
|
+
type: "virtual" | "appointment_booking";
|
|
596
613
|
platform: string;
|
|
597
614
|
sales_channel: string;
|
|
598
615
|
order_sales_channel: string;
|
|
@@ -670,6 +687,6 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
670
687
|
getOrderInfo(order_id: number): Promise<any>;
|
|
671
688
|
getVouchers(): any[];
|
|
672
689
|
}
|
|
673
|
-
export type { AddProductToOrderOptions, OrderMetaList, PointCardSnapshotItem, VirtualCurrencySnapshotItem, RemoveProductsFromOrderOptions, SalesNote, SalesNoteDraftInput, SalesNoteLocalizedSelection, SalesNoteLocalizedText, SalesNoteRelation, SalesNoteTextInput, SetSalesNoteInput, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';
|
|
690
|
+
export type { OrderHolderRelation, AddProductToOrderOptions, OrderMetaList, PointCardSnapshotItem, VirtualCurrencySnapshotItem, RemoveProductsFromOrderOptions, SalesNote, SalesNoteDraftInput, SalesNoteLocalizedSelection, SalesNoteLocalizedText, SalesNoteRelation, SalesNoteTextInput, SetSalesNoteInput, UpdateOrderBookingParams, UpdateOrderProductParams, UpdateOrderProductQuantityParams, } from './types';
|
|
674
691
|
export { isFulfillmentTimingBooking } from './pickupTiming';
|
|
675
692
|
export type { PickupTimingBooking, PickupTimingBookingInput, PickupTimingBookingMetadata, PickupTimingSelectionMode, PickupTimingSource, } from './pickupTiming';
|