@pisell/pisellos 0.10.59 → 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/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 +2 -2
- package/dist/modules/Order/index.js +92 -47
- package/dist/modules/Order/types.d.ts +19 -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/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.js +97 -27
- 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/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 +2 -2
- package/lib/modules/Order/index.js +44 -12
- package/lib/modules/Order/types.d.ts +19 -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/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.js +39 -2
- 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/package.json +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type { OrderProduct } from '../../Order/types';
|
|
1
|
+
import type { OrderHolderRelation, OrderProduct } from '../../Order/types';
|
|
2
2
|
export interface BuildNormalProductCacheItemFromOrderLineInput {
|
|
3
3
|
/** tempOrder.products 中的一行(普通商品,无关联 booking) */
|
|
4
4
|
product: OrderProduct;
|
|
5
5
|
/** 商品 catalog / 详情,用于 variant / option / bundle 模板字段 */
|
|
6
6
|
sourceProduct?: Record<string, any> | null;
|
|
7
|
+
/** 整单关系集合,按商品行 UID 回填。 */
|
|
8
|
+
holder_relations?: OrderHolderRelation[];
|
|
7
9
|
}
|
|
8
10
|
export declare function buildNormalProductCacheItemFromOrderLine(input: BuildNormalProductCacheItemFromOrderLineInput): Record<string, any>;
|
|
@@ -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
|
+
}
|
|
@@ -609,7 +609,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
609
609
|
generateIdempotencyToken(): string;
|
|
610
610
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
611
611
|
createOrder(params: CommitOrderParams['query']): {
|
|
612
|
-
type: "
|
|
612
|
+
type: "virtual" | "appointment_booking";
|
|
613
613
|
platform: string;
|
|
614
614
|
sales_channel: string;
|
|
615
615
|
order_sales_channel: string;
|
|
@@ -687,6 +687,6 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
687
687
|
getOrderInfo(order_id: number): Promise<any>;
|
|
688
688
|
getVouchers(): any[];
|
|
689
689
|
}
|
|
690
|
-
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';
|
|
691
691
|
export { isFulfillmentTimingBooking } from './pickupTiming';
|
|
692
692
|
export type { PickupTimingBooking, PickupTimingBookingInput, PickupTimingBookingMetadata, PickupTimingSelectionMode, PickupTimingSource, } from './pickupTiming';
|