@pisell/pisellos 2.3.164 → 2.3.166
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/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/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 +9 -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 +1 -1
- package/dist/modules/Order/index.js +89 -44
- 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/modules/Rules/index.js +62 -61
- 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/server/modules/products/index.js +3 -2
- package/dist/shared/receipt/small-ticket.js +17 -6
- package/dist/shared/sales/loadSalesOrderSnapshot.js +1 -1
- package/dist/solution/BaseSales/index.d.ts +4 -0
- package/dist/solution/BaseSales/index.js +1116 -935
- 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 +14 -4
- package/dist/solution/BookingTicket/index.d.ts +15 -1
- package/dist/solution/BookingTicket/index.js +784 -501
- package/dist/solution/UnifiedBookingSales/index.js +1 -1
- package/lib/model/strategy/adapter/promotion/evaluator.js +9 -14
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +3 -1
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +17 -1
- 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 +9 -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 +1 -1
- 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/modules/Rules/index.js +2 -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/server/modules/products/index.js +2 -1
- package/lib/shared/receipt/small-ticket.js +15 -7
- package/lib/shared/sales/loadSalesOrderSnapshot.js +1 -1
- package/lib/solution/BaseSales/index.d.ts +4 -0
- package/lib/solution/BaseSales/index.js +68 -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 +16 -8
- package/lib/solution/BookingTicket/index.d.ts +15 -1
- package/lib/solution/BookingTicket/index.js +132 -3
- package/lib/solution/UnifiedBookingSales/index.js +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var _excluded = ["custom_product_bundle_map_id"],
|
|
2
2
|
_excluded2 = ["unique_identification_number"],
|
|
3
|
-
_excluded3 = ["num", "surcharge_fee", "discount_amount", "discount_type", "discountway", "product_discount_reason", "discount_per", "production_code"],
|
|
3
|
+
_excluded3 = ["num", "_extend", "surcharge_fee", "discount_amount", "discount_type", "discountway", "product_discount_reason", "discount_per", "production_code"],
|
|
4
4
|
_excluded4 = ["_extend", "relation_id", "table_form_id", "resource_id", "summary", "lastOrderInfo", "paid_amount", "shop_id", "shop_note", "shop_service_type", "start_time", "customer", "discount_list", "order_meta_list", "tax_fee", "total_amount", "total_refund_amount", "create_date", "holder_id", "payment_status", "notes"],
|
|
5
5
|
_excluded5 = ["collect_pax", "table_occupancy_duration", "cart_settlement_key", "cart_settlement_snapshot", "legal_currency_snapshot"];
|
|
6
6
|
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; }
|
|
@@ -22,6 +22,7 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
|
|
|
22
22
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
23
23
|
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; }
|
|
24
24
|
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); }
|
|
25
|
+
import { cloneDeep } from 'lodash-es';
|
|
25
26
|
import dayjs from "dayjs";
|
|
26
27
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
27
28
|
import Decimal from 'decimal.js';
|
|
@@ -32,6 +33,7 @@ import { buildProductLineFingerprint, createEmptySummary } from "../../solution/
|
|
|
32
33
|
import { createUuidV4 } from "./utils/orderCollectionIdentity";
|
|
33
34
|
import { encodeSalesNotes } from "./salesNotes";
|
|
34
35
|
import { isFulfillmentTimingBooking } from "./pickupTiming";
|
|
36
|
+
import { ensureHolderRelationUuids, getProductHolderRelations, hasProductBooking, removeProductHolderRelations } from "./holderRelations";
|
|
35
37
|
dayjs.extend(customParseFormat);
|
|
36
38
|
var POINT_CARD_SNAPSHOT_TAG = 'point_card';
|
|
37
39
|
var VIRTUAL_CURRENCY_SNAPSHOT_TAG = 'virtual_currency';
|
|
@@ -796,7 +798,7 @@ export function resolveEffectivePerUnitDiscount(product) {
|
|
|
796
798
|
if (!Number.isFinite(originalPrice) || !Number.isFinite(finalPrice)) return fromList;
|
|
797
799
|
return fromList + (originalPrice - finalPrice);
|
|
798
800
|
}
|
|
799
|
-
export function createDefaultOrderRulesHooks(getBookings) {
|
|
801
|
+
export function createDefaultOrderRulesHooks(getBookings, getHolderRelations) {
|
|
800
802
|
var getProductStartDate = function getProductStartDate(product) {
|
|
801
803
|
var _ref17, _product$metadata$uni, _product$metadata2, _ref18, _product$booking_uid, _product$metadata3, _product$metadata4, _product$metadata5, _product$metadata6;
|
|
802
804
|
var productUid = String((_ref17 = (_product$metadata$uni = (_product$metadata2 = product.metadata) === null || _product$metadata2 === void 0 ? void 0 : _product$metadata2.unique_identification_number) !== null && _product$metadata$uni !== void 0 ? _product$metadata$uni : product.unique_identification_number) !== null && _ref17 !== void 0 ? _ref17 : '');
|
|
@@ -919,7 +921,13 @@ export function createDefaultOrderRulesHooks(getBookings) {
|
|
|
919
921
|
// 勿写死 false:否则 Rules 不会走 total≠origin_total 的手动价推断,
|
|
920
922
|
// 无券时会把 bundle 价还原成 original_price(手动改价套餐会从 20 回到 30)。
|
|
921
923
|
isManualDiscount: resolveRulesManualDiscountFlag(metadataAny),
|
|
922
|
-
holder_id: (_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.holder_id
|
|
924
|
+
holder_id: hasProductBooking(product) || !getHolderRelations ? (_product$metadata9 = product.metadata) === null || _product$metadata9 === void 0 ? void 0 : _product$metadata9.holder_id : getProductHolderRelations({
|
|
925
|
+
holder_relations: getHolderRelations()
|
|
926
|
+
}, product).filter(function (relation) {
|
|
927
|
+
return relation.holder_type === 'form';
|
|
928
|
+
}).map(function (relation) {
|
|
929
|
+
return relation.holder_id;
|
|
930
|
+
}),
|
|
923
931
|
startDate: getProductStartDate(product),
|
|
924
932
|
main_product_selling_price: metadataAny.main_product_selling_price !== undefined ? new Decimal(Number(metadataAny.main_product_selling_price) || 0).minus(optionSellingSum).toDecimalPlaces(2).toString() : undefined,
|
|
925
933
|
inPromotion: ((_metadataAny$_promoti = metadataAny._promotion) === null || _metadataAny$_promoti === void 0 ? void 0 : _metadataAny$_promoti.inPromotion) === true,
|
|
@@ -1216,6 +1224,7 @@ function normalizeSubmitProduct(product) {
|
|
|
1216
1224
|
_runtimeUid = _ref37.unique_identification_number,
|
|
1217
1225
|
submitProduct = _objectWithoutProperties(_ref37, _excluded2);
|
|
1218
1226
|
var num = submitProduct.num,
|
|
1227
|
+
_productExtend = submitProduct._extend,
|
|
1219
1228
|
_productSurchargeFee = submitProduct.surcharge_fee,
|
|
1220
1229
|
_deprecatedDiscountAmount = submitProduct.discount_amount,
|
|
1221
1230
|
_deprecatedDiscountType = submitProduct.discount_type,
|
|
@@ -1406,6 +1415,7 @@ export function createDefaultTempOrder(params) {
|
|
|
1406
1415
|
request_unique_idempotency_token: '',
|
|
1407
1416
|
vouchers: [],
|
|
1408
1417
|
products: [],
|
|
1418
|
+
holder_relations: [],
|
|
1409
1419
|
notes: [],
|
|
1410
1420
|
bookings: [],
|
|
1411
1421
|
payments: [],
|
|
@@ -1482,6 +1492,7 @@ export function buildSubmitPayload(params) {
|
|
|
1482
1492
|
type = params.type,
|
|
1483
1493
|
summary = params.summary,
|
|
1484
1494
|
enhance = params.enhance;
|
|
1495
|
+
ensureHolderRelationUuids(tempOrder);
|
|
1485
1496
|
var scheduleDate = tempOrder.schedule_date || tempOrder.created_at || formatDateTime(now);
|
|
1486
1497
|
var bookingUuid = createUuidV4();
|
|
1487
1498
|
var virtualSettlementMode = ((_tempOrder$metadata2 = tempOrder.metadata) === null || _tempOrder$metadata2 === void 0 || (_tempOrder$metadata2 = _tempOrder$metadata2.currency_settlement_config) === null || _tempOrder$metadata2 === void 0 ? void 0 : _tempOrder$metadata2.settlement_type) === 'virtual_currency';
|
|
@@ -1518,7 +1529,9 @@ export function buildSubmitPayload(params) {
|
|
|
1518
1529
|
tempOrderBusinessCode: tempOrder.business_code,
|
|
1519
1530
|
bookings: tempOrder.bookings
|
|
1520
1531
|
});
|
|
1521
|
-
var payload = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, tempOrderRest),
|
|
1532
|
+
var payload = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, tempOrderRest), tempOrder.holder_relations !== undefined ? {
|
|
1533
|
+
holder_relations: cloneDeep(tempOrder.holder_relations)
|
|
1534
|
+
} : {}), {}, {
|
|
1522
1535
|
customer_id: (_tempOrder$customer_i = tempOrder.customer_id) !== null && _tempOrder$customer_i !== void 0 ? _tempOrder$customer_i : 1,
|
|
1523
1536
|
customer_name: tempOrder.customer_name || 'Walk-In',
|
|
1524
1537
|
country_calling_code: String((_tempOrder$country_ca = tempOrder.country_calling_code) !== null && _tempOrder$country_ca !== void 0 ? _tempOrder$country_ca : ''),
|
|
@@ -1705,21 +1718,32 @@ export function hasAssignedHolderId(value) {
|
|
|
1705
1718
|
* clearTempOrderHolderAssignments(tempOrder);
|
|
1706
1719
|
*/
|
|
1707
1720
|
export function clearTempOrderHolderAssignments(tempOrder) {
|
|
1708
|
-
var _tempOrder$_extend2;
|
|
1709
|
-
var
|
|
1721
|
+
var _tempOrder$holder_rel, _tempOrder$holder_rel2, _tempOrder$_extend2;
|
|
1722
|
+
var previousRelationCount = ((_tempOrder$holder_rel = tempOrder.holder_relations) === null || _tempOrder$holder_rel === void 0 ? void 0 : _tempOrder$holder_rel.length) || 0;
|
|
1723
|
+
removeProductHolderRelations(tempOrder, (tempOrder.products || []).filter(function (product) {
|
|
1724
|
+
return !hasProductBooking(product);
|
|
1725
|
+
}));
|
|
1726
|
+
var changed = previousRelationCount !== (((_tempOrder$holder_rel2 = tempOrder.holder_relations) === null || _tempOrder$holder_rel2 === void 0 ? void 0 : _tempOrder$holder_rel2.length) || 0);
|
|
1710
1727
|
var resetHolderField = function resetHolderField(target) {
|
|
1711
1728
|
var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'holder_id';
|
|
1712
1729
|
if (!hasAssignedHolderId(target[key])) return;
|
|
1713
1730
|
target[key] = null;
|
|
1714
1731
|
changed = true;
|
|
1715
1732
|
};
|
|
1733
|
+
var clearHolder = function clearHolder(target) {
|
|
1734
|
+
resetHolderField(target);
|
|
1735
|
+
if (target.holder !== undefined && target.holder !== null) {
|
|
1736
|
+
target.holder = null;
|
|
1737
|
+
changed = true;
|
|
1738
|
+
}
|
|
1739
|
+
};
|
|
1716
1740
|
var _iterator8 = _createForOfIteratorHelper(tempOrder.products || []),
|
|
1717
1741
|
_step8;
|
|
1718
1742
|
try {
|
|
1719
1743
|
for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
|
|
1720
1744
|
var product = _step8.value;
|
|
1721
1745
|
if (product.metadata && _typeof(product.metadata) === 'object') {
|
|
1722
|
-
|
|
1746
|
+
clearHolder(product.metadata);
|
|
1723
1747
|
}
|
|
1724
1748
|
}
|
|
1725
1749
|
} catch (err) {
|
|
@@ -1752,11 +1776,13 @@ export function clearTempOrderHolderAssignments(tempOrder) {
|
|
|
1752
1776
|
var entry = _Object$values[_i4];
|
|
1753
1777
|
var origin = entry === null || entry === void 0 ? void 0 : entry.origin;
|
|
1754
1778
|
if (!origin || _typeof(origin) !== 'object') continue;
|
|
1779
|
+
clearHolder(origin);
|
|
1755
1780
|
if (origin.metadata && _typeof(origin.metadata) === 'object') {
|
|
1756
|
-
|
|
1781
|
+
clearHolder(origin.metadata);
|
|
1757
1782
|
}
|
|
1758
1783
|
if (origin._extend && _typeof(origin._extend) === 'object') {
|
|
1759
|
-
|
|
1784
|
+
clearHolder(origin._extend);
|
|
1785
|
+
delete origin._extend.holder_relations;
|
|
1760
1786
|
}
|
|
1761
1787
|
}
|
|
1762
1788
|
}
|