@pisell/pisellos 2.1.172 → 2.1.173
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/apis/picoding.d.ts +0 -0
- package/dist/apis/picoding.js +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/model/strategy/adapter/promotion/evaluator.js +26 -99
- package/dist/model/strategy/adapter/walletPass/evaluator.d.ts +0 -2
- package/dist/model/strategy/adapter/walletPass/evaluator.js +8 -61
- package/dist/model/strategy/adapter/walletPass/locales.js +3 -12
- package/dist/model/strategy/engine.d.ts +5 -18
- package/dist/model/strategy/engine.js +45 -145
- package/dist/model/strategy/type.d.ts +0 -17
- package/dist/model/strategy/type.js +0 -4
- package/dist/modules/Cart/types.d.ts +0 -2
- package/dist/modules/Cart/utils/cartProduct.js +25 -56
- package/dist/modules/Cart/utils/changePrice.js +16 -9
- package/dist/modules/Discount/index.d.ts +9 -3
- package/dist/modules/Discount/index.js +103 -11
- package/dist/modules/Discount/types.d.ts +9 -18
- package/dist/modules/OpenData/index.d.ts +24 -0
- package/dist/modules/OpenData/index.js +173 -0
- package/dist/modules/OpenData/types.d.ts +73 -0
- package/dist/modules/OpenData/types.js +1 -0
- package/dist/modules/OpenData/utils.d.ts +2 -0
- package/dist/modules/OpenData/utils.js +75 -0
- package/dist/modules/Order/index.d.ts +66 -1
- package/dist/modules/Order/index.js +906 -30
- package/dist/modules/Order/types.d.ts +174 -12
- package/dist/modules/Order/types.js +2 -0
- package/dist/modules/Order/utils.d.ts +118 -0
- package/dist/modules/Order/utils.js +586 -2
- package/dist/modules/Payment/index.d.ts +1 -2
- package/dist/modules/Payment/index.js +7 -10
- package/dist/modules/Payment/utils.js +0 -3
- package/dist/modules/Payment/walletpass.d.ts +0 -23
- package/dist/modules/Payment/walletpass.js +95 -191
- package/dist/modules/Product/utils.js +2 -2
- package/dist/modules/ProductList/index.d.ts +1 -1
- package/dist/modules/ProductList/index.js +4 -3
- package/dist/modules/Quotation/index.d.ts +48 -0
- package/dist/modules/Quotation/index.js +248 -0
- package/dist/modules/Quotation/types.d.ts +42 -0
- package/dist/modules/Quotation/types.js +1 -0
- package/dist/modules/Rules/index.d.ts +5 -9
- package/dist/modules/Rules/index.js +173 -669
- package/dist/modules/Rules/types.d.ts +0 -2
- package/dist/modules/SalesSummary/index.d.ts +63 -0
- package/dist/modules/SalesSummary/index.js +174 -0
- package/dist/modules/SalesSummary/types.d.ts +60 -0
- package/dist/modules/SalesSummary/types.js +1 -0
- package/dist/modules/SalesSummary/utils.d.ts +30 -0
- package/dist/modules/SalesSummary/utils.js +480 -0
- package/dist/modules/ScanOrderLogger/index.d.ts +23 -0
- package/dist/modules/ScanOrderLogger/index.js +174 -0
- package/dist/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/providers/feishu.js +221 -0
- package/dist/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/providers/grafana.js +50 -0
- package/dist/modules/ScanOrderLogger/types.d.ts +53 -0
- package/dist/modules/ScanOrderLogger/types.js +1 -0
- package/dist/modules/Schedule/getDateIsInSchedule.js +11 -18
- package/dist/modules/Schedule/utils.d.ts +1 -1
- package/dist/modules/Summary/types.d.ts +0 -2
- package/dist/modules/Summary/utils.d.ts +3 -9
- package/dist/modules/Summary/utils.js +67 -57
- package/dist/modules/index.d.ts +4 -0
- package/dist/modules/index.js +5 -1
- package/dist/plugins/window.d.ts +0 -2
- package/dist/solution/BookingByStep/index.d.ts +3 -4
- package/dist/solution/BookingByStep/index.js +46 -43
- package/dist/solution/BookingByStep/types.d.ts +3 -1
- package/dist/solution/BookingByStep/types.js +5 -1
- package/dist/solution/BookingByStep/utils/timeslots.d.ts +3 -1
- package/dist/solution/BookingByStep/utils/timeslots.js +19 -12
- package/dist/solution/Checkout/index.js +0 -2
- package/dist/solution/ScanOrder/index.d.ts +158 -0
- package/dist/solution/ScanOrder/index.js +3474 -0
- package/dist/solution/ScanOrder/types.d.ts +306 -0
- package/dist/solution/ScanOrder/types.js +35 -0
- package/dist/solution/ScanOrder/utils.d.ts +172 -0
- package/dist/solution/ScanOrder/utils.js +796 -0
- package/dist/solution/ShopDiscount/index.d.ts +3 -2
- package/dist/solution/ShopDiscount/index.js +60 -59
- package/dist/solution/ShopDiscount/types.d.ts +1 -1
- package/dist/solution/ShopDiscount/types.js +1 -2
- package/dist/solution/ShopDiscount/utils.js +12 -26
- package/dist/solution/VenueBooking/index.d.ts +206 -0
- package/dist/solution/VenueBooking/index.js +3519 -0
- package/dist/solution/VenueBooking/sales-section-4-annotated.json +343 -0
- package/dist/solution/VenueBooking/types.d.ts +154 -0
- package/dist/solution/VenueBooking/types.js +21 -0
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +11 -0
- package/dist/solution/VenueBooking/utils/dateSummary.js +104 -0
- package/dist/solution/VenueBooking/utils/resource.d.ts +14 -0
- package/dist/solution/VenueBooking/utils/resource.js +131 -0
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +38 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +239 -0
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
- package/dist/solution/VenueBooking/utils/timeSlot.js +453 -0
- package/dist/solution/VenueBooking/utils.d.ts +1 -0
- package/dist/solution/VenueBooking/utils.js +1 -0
- package/dist/solution/index.d.ts +2 -0
- package/dist/solution/index.js +3 -1
- package/lib/apis/picoding.d.ts +0 -0
- package/lib/apis/picoding.js +0 -0
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -3
- package/lib/model/strategy/adapter/promotion/evaluator.js +8 -57
- package/lib/model/strategy/adapter/walletPass/evaluator.d.ts +0 -2
- package/lib/model/strategy/adapter/walletPass/evaluator.js +3 -34
- package/lib/model/strategy/adapter/walletPass/locales.js +3 -12
- package/lib/model/strategy/engine.d.ts +5 -18
- package/lib/model/strategy/engine.js +21 -85
- package/lib/model/strategy/type.d.ts +0 -17
- package/lib/modules/Cart/types.d.ts +0 -2
- package/lib/modules/Cart/utils/cartProduct.js +12 -39
- package/lib/modules/Cart/utils/changePrice.js +13 -9
- package/lib/modules/Discount/index.d.ts +9 -3
- package/lib/modules/Discount/index.js +65 -4
- package/lib/modules/Discount/types.d.ts +9 -18
- package/lib/modules/OpenData/index.d.ts +24 -0
- package/lib/modules/OpenData/index.js +119 -0
- package/lib/modules/OpenData/types.d.ts +73 -0
- package/lib/modules/OpenData/types.js +17 -0
- package/lib/modules/OpenData/utils.d.ts +2 -0
- package/lib/modules/OpenData/utils.js +111 -0
- package/lib/modules/Order/index.d.ts +66 -1
- package/lib/modules/Order/index.js +515 -1
- package/lib/modules/Order/types.d.ts +174 -12
- package/lib/modules/Order/utils.d.ts +118 -0
- package/lib/modules/Order/utils.js +483 -2
- package/lib/modules/Payment/index.d.ts +1 -2
- package/lib/modules/Payment/index.js +0 -1
- package/lib/modules/Payment/utils.js +0 -3
- package/lib/modules/Payment/walletpass.d.ts +0 -23
- package/lib/modules/Payment/walletpass.js +17 -94
- package/lib/modules/Product/utils.js +2 -2
- package/lib/modules/ProductList/index.d.ts +1 -1
- package/lib/modules/ProductList/index.js +5 -4
- package/lib/modules/Quotation/index.d.ts +48 -0
- package/lib/modules/Quotation/index.js +152 -0
- package/lib/modules/Quotation/types.d.ts +42 -0
- package/lib/modules/Quotation/types.js +17 -0
- package/lib/modules/Rules/index.d.ts +5 -9
- package/lib/modules/Rules/index.js +292 -776
- package/lib/modules/Rules/types.d.ts +0 -2
- package/lib/modules/SalesSummary/index.d.ts +63 -0
- package/lib/modules/SalesSummary/index.js +105 -0
- package/lib/modules/SalesSummary/types.d.ts +60 -0
- package/lib/modules/SalesSummary/types.js +17 -0
- package/lib/modules/SalesSummary/utils.d.ts +30 -0
- package/lib/modules/SalesSummary/utils.js +420 -0
- package/lib/modules/ScanOrderLogger/index.d.ts +23 -0
- package/lib/modules/ScanOrderLogger/index.js +147 -0
- package/lib/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/providers/feishu.js +157 -0
- package/lib/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/providers/grafana.js +52 -0
- package/lib/modules/ScanOrderLogger/types.d.ts +53 -0
- package/lib/modules/ScanOrderLogger/types.js +17 -0
- package/lib/modules/Schedule/getDateIsInSchedule.js +9 -11
- package/lib/modules/Schedule/utils.d.ts +1 -1
- package/lib/modules/Summary/types.d.ts +0 -2
- package/lib/modules/Summary/utils.d.ts +3 -9
- package/lib/modules/Summary/utils.js +45 -34
- package/lib/modules/index.d.ts +4 -0
- package/lib/modules/index.js +9 -1
- package/lib/plugins/window.d.ts +0 -2
- package/lib/solution/BookingByStep/index.d.ts +3 -4
- package/lib/solution/BookingByStep/index.js +6 -4
- package/lib/solution/BookingByStep/types.d.ts +3 -1
- package/lib/solution/BookingByStep/types.js +10 -0
- package/lib/solution/BookingByStep/utils/timeslots.d.ts +3 -1
- package/lib/solution/BookingByStep/utils/timeslots.js +19 -11
- package/lib/solution/Checkout/index.js +0 -2
- package/lib/solution/ScanOrder/index.d.ts +158 -0
- package/lib/solution/ScanOrder/index.js +2135 -0
- package/lib/solution/ScanOrder/types.d.ts +306 -0
- package/lib/solution/ScanOrder/types.js +36 -0
- package/lib/solution/ScanOrder/utils.d.ts +172 -0
- package/lib/solution/ScanOrder/utils.js +658 -0
- package/lib/solution/ShopDiscount/index.d.ts +3 -2
- package/lib/solution/ShopDiscount/index.js +19 -25
- package/lib/solution/ShopDiscount/types.d.ts +1 -1
- package/lib/solution/ShopDiscount/utils.js +6 -10
- package/lib/solution/VenueBooking/index.d.ts +206 -0
- package/lib/solution/VenueBooking/index.js +1955 -0
- package/lib/solution/VenueBooking/sales-section-4-annotated.json +343 -0
- package/lib/solution/VenueBooking/types.d.ts +154 -0
- package/lib/solution/VenueBooking/types.js +44 -0
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +11 -0
- package/lib/solution/VenueBooking/utils/dateSummary.js +110 -0
- package/lib/solution/VenueBooking/utils/resource.d.ts +14 -0
- package/lib/solution/VenueBooking/utils/resource.js +92 -0
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +38 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +237 -0
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
- package/lib/solution/VenueBooking/utils/timeSlot.js +339 -0
- package/lib/solution/VenueBooking/utils.d.ts +1 -0
- package/lib/solution/VenueBooking/utils.js +69 -0
- package/lib/solution/index.d.ts +2 -0
- package/lib/solution/index.js +5 -1
- package/package.json +1 -1
|
@@ -50,7 +50,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
50
50
|
this.core = core;
|
|
51
51
|
this.hooks = options == null ? void 0 : options.hooks;
|
|
52
52
|
this.store = options == null ? void 0 : options.store;
|
|
53
|
-
this.window = core.getPlugin("window");
|
|
54
53
|
}
|
|
55
54
|
async setRulesList(rulesList) {
|
|
56
55
|
this.store.rulesList = rulesList;
|
|
@@ -72,16 +71,11 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
72
71
|
return false;
|
|
73
72
|
return (productHolderId || orderHolderId) === discount.holder.holder_id;
|
|
74
73
|
}
|
|
75
|
-
getWalletPassEvaluator() {
|
|
76
|
-
var _a, _b;
|
|
77
|
-
return (_b = (_a = this.window).getWalletPassEvaluator) == null ? void 0 : _b.call(_a);
|
|
78
|
-
}
|
|
79
74
|
// 判断discountList 是否可以对当前productList生效
|
|
80
75
|
isDiscountListAvailable({
|
|
81
76
|
oldDiscountList,
|
|
82
77
|
newDiscountList,
|
|
83
78
|
productList,
|
|
84
|
-
orderTotalAmount,
|
|
85
79
|
holders,
|
|
86
80
|
isFormSubject
|
|
87
81
|
}) {
|
|
@@ -114,7 +108,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
114
108
|
const result = this.calcDiscount({
|
|
115
109
|
discountList: mergedDiscountList,
|
|
116
110
|
productList: [...productList],
|
|
117
|
-
orderTotalAmount,
|
|
118
111
|
holders,
|
|
119
112
|
isFormSubject
|
|
120
113
|
}, {
|
|
@@ -190,8 +183,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
190
183
|
discountList,
|
|
191
184
|
productList,
|
|
192
185
|
holders,
|
|
193
|
-
isFormSubject
|
|
194
|
-
orderTotalAmount
|
|
186
|
+
isFormSubject
|
|
195
187
|
}, options) {
|
|
196
188
|
const editModeDiscount = [];
|
|
197
189
|
const addModeDiscount = [];
|
|
@@ -370,63 +362,12 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
370
362
|
}
|
|
371
363
|
return priceB.minus(priceA).toNumber();
|
|
372
364
|
});
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
if (["good_pass", "discount_card", "product_discount_card"].includes(
|
|
379
|
-
discountType
|
|
380
|
-
)) {
|
|
381
|
-
const voucher = {
|
|
382
|
-
id: discount.id,
|
|
383
|
-
amount: Number(discount.par_value || 0),
|
|
384
|
-
balance: Number(discount.balance || 0),
|
|
385
|
-
type: discountType,
|
|
386
|
-
product_id: discount.product_id,
|
|
387
|
-
unified_available_status: 1,
|
|
388
|
-
available_product_type: (_a = discount.limited_relation_product_data) == null ? void 0 : _a.type,
|
|
389
|
-
available_product_ids: (_b = discount.limited_relation_product_data) == null ? void 0 : _b.product_ids
|
|
390
|
-
};
|
|
391
|
-
const productsForEvaluate = sortedFlattenedList.map((item) => {
|
|
392
|
-
var _a2;
|
|
393
|
-
return {
|
|
394
|
-
product_id: item.id,
|
|
395
|
-
price: item.price || 0,
|
|
396
|
-
quantity: item.quantity || item.num || 1,
|
|
397
|
-
selling_price: item.price || 0,
|
|
398
|
-
product_options: item.type === "main" ? (_a2 = item.product) == null ? void 0 : _a2.options : void 0
|
|
399
|
-
};
|
|
400
|
-
});
|
|
401
|
-
const result = evaluator.checkVoucherAvailability({
|
|
402
|
-
orderTotalAmount,
|
|
403
|
-
products: productsForEvaluate,
|
|
404
|
-
vouchers: [voucher]
|
|
405
|
-
});
|
|
406
|
-
if (result.isAvailable) {
|
|
407
|
-
discount.config = {
|
|
408
|
-
...result.config,
|
|
409
|
-
isAvailable: true
|
|
410
|
-
};
|
|
411
|
-
} else {
|
|
412
|
-
discount.config = {
|
|
413
|
-
isAvailable: false
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
});
|
|
418
|
-
}
|
|
365
|
+
const isProductIncludedByLimitedData = (limitedData, productId) => {
|
|
366
|
+
const excludedIds = (limitedData == null ? void 0 : limitedData.exclude_product_ids) || [];
|
|
367
|
+
const isExcluded = (limitedData == null ? void 0 : limitedData.filter) === 1 && excludedIds.some((id) => String(id) === String(productId));
|
|
368
|
+
return !isExcluded;
|
|
369
|
+
};
|
|
419
370
|
const usedDiscounts = /* @__PURE__ */ new Map();
|
|
420
|
-
const usedProductIdCounts = /* @__PURE__ */ new Map();
|
|
421
|
-
const usedDiscountCardLimitCounts = /* @__PURE__ */ new Map();
|
|
422
|
-
editModeDiscount.forEach((discount) => {
|
|
423
|
-
var _a;
|
|
424
|
-
const discountType = discount.tag || discount.type;
|
|
425
|
-
if (["discount_card", "product_discount_card"].includes(discountType)) {
|
|
426
|
-
const currentCount = usedDiscountCardLimitCounts.get(discount.id) || 0;
|
|
427
|
-
usedDiscountCardLimitCounts.set(discount.id, currentCount + (((_a = discount.metadata) == null ? void 0 : _a.num) || 1));
|
|
428
|
-
}
|
|
429
|
-
});
|
|
430
371
|
const discountApplicability = /* @__PURE__ */ new Map();
|
|
431
372
|
const discountApplicableProducts = /* @__PURE__ */ new Map();
|
|
432
373
|
addModeDiscount.forEach((discount) => {
|
|
@@ -566,7 +507,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
566
507
|
originProduct = flatItem.originProduct;
|
|
567
508
|
} else {
|
|
568
509
|
product = {
|
|
569
|
-
startDate: (_a = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _a.startDate,
|
|
570
510
|
_id: flatItem._id,
|
|
571
511
|
id: flatItem.id,
|
|
572
512
|
price: flatItem.price,
|
|
@@ -575,12 +515,13 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
575
515
|
total: flatItem.total,
|
|
576
516
|
origin_total: flatItem.origin_total,
|
|
577
517
|
booking_id: flatItem.booking_id,
|
|
578
|
-
discount_list: flatItem.discount_list || []
|
|
518
|
+
discount_list: flatItem.discount_list || [],
|
|
519
|
+
startDate: (_a = flatItem.parentProduct) == null ? void 0 : _a.startDate
|
|
579
520
|
};
|
|
580
521
|
originProduct = flatItem.originProduct;
|
|
581
522
|
}
|
|
582
523
|
addModeDiscount.forEach((discount) => {
|
|
583
|
-
var _a2, _b, _c, _d, _e, _f, _g, _h, _i
|
|
524
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
584
525
|
const limitedData = discount == null ? void 0 : discount.limited_relation_product_data;
|
|
585
526
|
const _tempVar = (flatItem == null ? void 0 : flatItem.type) === "bundle" ? flatItem == null ? void 0 : flatItem.parentProduct : flatItem == null ? void 0 : flatItem.product;
|
|
586
527
|
const isHolderMatch = this.checkHolderMatch(
|
|
@@ -593,7 +534,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
593
534
|
);
|
|
594
535
|
let timeLimit = true;
|
|
595
536
|
timeLimit = !!(0, import_utils.filterDiscountListByBookingTime)([discount], ((product == null ? void 0 : product.startDate) || (0, import_dayjs.default)()).format("YYYY-MM-DD HH:mm:ss")).length;
|
|
596
|
-
const isLimitedProduct = (limitedData.type === "product_all"
|
|
537
|
+
const isLimitedProduct = (limitedData.type === "product_all" || limitedData.product_ids && limitedData.product_ids.includes(product.id)) && isHolderMatch;
|
|
597
538
|
const isAvailableProduct = flatItem.type === "main" ? !((product == null ? void 0 : product.booking_id) && ((_a2 = product == null ? void 0 : product.discount_list) == null ? void 0 : _a2.length) && ((_b = product == null ? void 0 : product.discount_list) == null ? void 0 : _b.every(
|
|
598
539
|
(discount2) => discount2.id && [
|
|
599
540
|
"good_pass",
|
|
@@ -602,8 +543,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
602
543
|
].includes(discount2.tag || discount2.type)
|
|
603
544
|
))) : !((flatItem == null ? void 0 : flatItem.booking_id) && !!((_d = (_c = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _c.discount_list) == null ? void 0 : _d.length) && ((_f = (_e = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _e.discount_list) == null ? void 0 : _f.every((discount2) => discount2.id)));
|
|
604
545
|
const isBundleAvailable = this.checkPackageSubItemUsageRules(discount, flatItem);
|
|
605
|
-
if (isAvailableProduct && isLimitedProduct && timeLimit && isBundleAvailable
|
|
606
|
-
(
|
|
546
|
+
if (isAvailableProduct && isLimitedProduct && timeLimit && isBundleAvailable) {
|
|
547
|
+
(_g = discountApplicability.get(discount.id)) == null ? void 0 : _g.push(product.id);
|
|
607
548
|
const applicableProducts = discountApplicableProducts.get(discount.id) || [];
|
|
608
549
|
const discountType = discount.tag || discount.type;
|
|
609
550
|
const isGoodPass = discountType === "good_pass";
|
|
@@ -613,15 +554,14 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
613
554
|
type: discountType,
|
|
614
555
|
tag: discountType,
|
|
615
556
|
discount: {
|
|
616
|
-
discount_card_type: (
|
|
557
|
+
discount_card_type: (_h = discount == null ? void 0 : discount.metadata) == null ? void 0 : _h.discount_card_type,
|
|
617
558
|
fixed_amount: product.price,
|
|
618
|
-
discount_calculation_mode: (
|
|
559
|
+
discount_calculation_mode: (_i = discount == null ? void 0 : discount.metadata) == null ? void 0 : _i.discount_calculation_mode,
|
|
619
560
|
resource_id: discount.id,
|
|
620
561
|
title: discount.format_title,
|
|
621
562
|
original_amount: product.price || product.origin_total,
|
|
622
563
|
pre_value: discount.par_value,
|
|
623
|
-
product_id: originProduct.id
|
|
624
|
-
discount_product_id: discount.product_id
|
|
564
|
+
product_id: originProduct.id
|
|
625
565
|
},
|
|
626
566
|
metadata: {
|
|
627
567
|
num,
|
|
@@ -634,102 +574,44 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
634
574
|
});
|
|
635
575
|
});
|
|
636
576
|
const processedFlatItemsMap = /* @__PURE__ */ new Map();
|
|
637
|
-
const applyDiscountToOptions = (options2, discount) => {
|
|
638
|
-
if (!(options2 == null ? void 0 : options2.length))
|
|
639
|
-
return { discountedOptions: options2, optionDiscountAmount: 0 };
|
|
640
|
-
let optionDiscountAmount = 0;
|
|
641
|
-
const discountedOptions = options2.map((option) => {
|
|
642
|
-
const rawUnit = option._original_price ?? option._original_add_price ?? option.price ?? option.add_price;
|
|
643
|
-
const baseUnitNum = Number(rawUnit ?? 0);
|
|
644
|
-
if (baseUnitNum <= 0)
|
|
645
|
-
return option;
|
|
646
|
-
const discountedPrice = (0, import_utils.getDiscountAmount)(discount, baseUnitNum, baseUnitNum);
|
|
647
|
-
const optQty = Number(option.num ?? option.quantity ?? 1);
|
|
648
|
-
optionDiscountAmount = new import_decimal.default(optionDiscountAmount).plus(new import_decimal.default(baseUnitNum).minus(discountedPrice).mul(optQty)).toNumber();
|
|
649
|
-
const { _original_add_price, ...rest } = option;
|
|
650
|
-
const tmpl = rest.price ?? rest.add_price;
|
|
651
|
-
const nextPrice = typeof tmpl === "string" ? String(discountedPrice) : discountedPrice;
|
|
652
|
-
return {
|
|
653
|
-
...rest,
|
|
654
|
-
_original_price: option._original_price ?? (_original_add_price !== void 0 ? _original_add_price : rawUnit),
|
|
655
|
-
price: nextPrice
|
|
656
|
-
};
|
|
657
|
-
});
|
|
658
|
-
return { discountedOptions, optionDiscountAmount };
|
|
659
|
-
};
|
|
660
|
-
const restoreOptionPrices = (options2) => {
|
|
661
|
-
if (!(options2 == null ? void 0 : options2.length))
|
|
662
|
-
return options2;
|
|
663
|
-
return options2.map((option) => {
|
|
664
|
-
const orig = option._original_price !== void 0 ? option._original_price : option._original_add_price;
|
|
665
|
-
if (orig !== void 0) {
|
|
666
|
-
const { _original_price, _original_add_price, ...rest } = option;
|
|
667
|
-
return { ...rest, price: orig };
|
|
668
|
-
}
|
|
669
|
-
return option;
|
|
670
|
-
});
|
|
671
|
-
};
|
|
672
|
-
const getOptionTotal = (options2) => {
|
|
673
|
-
if (!(options2 == null ? void 0 : options2.length))
|
|
674
|
-
return 0;
|
|
675
|
-
return options2.reduce((sum, opt) => {
|
|
676
|
-
const unit = Number(opt.price ?? opt.add_price ?? 0);
|
|
677
|
-
const n = Number(opt.num ?? opt.quantity ?? 1);
|
|
678
|
-
return new import_decimal.default(sum).plus(new import_decimal.default(unit).mul(n)).toNumber();
|
|
679
|
-
}, 0);
|
|
680
|
-
};
|
|
681
577
|
sortedFlattenedList.forEach((flatItem, index) => {
|
|
682
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C
|
|
578
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C;
|
|
683
579
|
let product, originProduct;
|
|
684
580
|
if (flatItem.type === "main") {
|
|
685
581
|
product = flatItem.product;
|
|
686
582
|
originProduct = flatItem.originProduct;
|
|
687
583
|
} else {
|
|
688
584
|
product = {
|
|
689
|
-
startDate: (_a = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _a.startDate,
|
|
690
585
|
_id: flatItem._id,
|
|
691
586
|
id: flatItem.id,
|
|
692
587
|
price: flatItem.price,
|
|
693
588
|
quantity: flatItem.quantity,
|
|
694
589
|
num: flatItem.num,
|
|
695
590
|
total: flatItem.total,
|
|
696
|
-
original_price: (
|
|
697
|
-
origin_total: (
|
|
591
|
+
original_price: (_a = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _a.original_price,
|
|
592
|
+
origin_total: (_b = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _b.original_price,
|
|
698
593
|
booking_id: flatItem.booking_id,
|
|
699
|
-
discount_list: ((
|
|
594
|
+
discount_list: ((_c = flatItem == null ? void 0 : flatItem.bundleItem) == null ? void 0 : _c.discount_list) || [],
|
|
595
|
+
startDate: (_d = flatItem.parentProduct) == null ? void 0 : _d.startDate
|
|
700
596
|
};
|
|
701
597
|
originProduct = flatItem.originProduct;
|
|
702
598
|
}
|
|
703
|
-
if ((product == null ? void 0 : product.booking_id) && ((_e = product.discount_list) == null ? void 0 : _e.length) && ((_f = product == null ? void 0 : product.discount_list) == null ? void 0 : _f.every(
|
|
704
|
-
(discount) => discount.id && ["good_pass", "discount_card", "product_discount_card"].includes(
|
|
705
|
-
discount.tag || discount.type
|
|
706
|
-
)
|
|
707
|
-
))) {
|
|
599
|
+
if ((product == null ? void 0 : product.booking_id) && ((_e = product.discount_list) == null ? void 0 : _e.length) && ((_f = product == null ? void 0 : product.discount_list) == null ? void 0 : _f.every((discount) => discount.id && ["good_pass", "discount_card", "product_discount_card"].includes(discount.tag || discount.type)))) {
|
|
708
600
|
if (flatItem.type === "main") {
|
|
709
601
|
processedProductsMap.set(product._id, [originProduct]);
|
|
710
602
|
} else {
|
|
711
|
-
processedFlatItemsMap.set(flatItem._id, [
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
}
|
|
716
|
-
]);
|
|
603
|
+
processedFlatItemsMap.set(flatItem._id, [{
|
|
604
|
+
...flatItem,
|
|
605
|
+
processed: true
|
|
606
|
+
}]);
|
|
717
607
|
}
|
|
718
608
|
return;
|
|
719
609
|
}
|
|
720
610
|
const applicableDiscounts = sortedDiscountList.filter((discount) => {
|
|
721
|
-
var _a2, _b2
|
|
722
|
-
|
|
723
|
-
if (["good_pass", "discount_card", "product_discount_card"].includes(
|
|
724
|
-
discountType2
|
|
725
|
-
)) {
|
|
726
|
-
if (discount.config === void 0 || !((_a2 = discount == null ? void 0 : discount.config) == null ? void 0 : _a2.isAvailable)) {
|
|
727
|
-
return false;
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
if ((Number(product.price) <= 0 || !product.price) && !((_b2 = product.discount_list) == null ? void 0 : _b2.length) && (discount.tag || discount.type) === "good_pass")
|
|
611
|
+
var _a2, _b2;
|
|
612
|
+
if ((Number(product.price) <= 0 || !product.price) && !((_a2 = product.discount_list) == null ? void 0 : _a2.length) && (discount.tag || discount.type) === "good_pass")
|
|
731
613
|
return false;
|
|
732
|
-
if ((Number(product.
|
|
614
|
+
if ((Number(product.price) <= 0 || !product.price) && !((_b2 = product.discount_list) == null ? void 0 : _b2.find((n) => {
|
|
733
615
|
var _a3;
|
|
734
616
|
return ((_a3 = n.discount) == null ? void 0 : _a3.resource_id) === discount.id;
|
|
735
617
|
})) && (discount.tag || discount.type) !== "good_pass")
|
|
@@ -737,25 +619,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
737
619
|
const targetUsedDiscounts = usedDiscounts.get(discount.id);
|
|
738
620
|
if (targetUsedDiscounts && (discount.tag || discount.type) === "good_pass")
|
|
739
621
|
return false;
|
|
740
|
-
if ((discount.tag || discount.type) === "good_pass") {
|
|
741
|
-
const maxUsagePerOrder = (_d2 = discount.config) == null ? void 0 : _d2.maxUsagePerOrder;
|
|
742
|
-
if (maxUsagePerOrder && maxUsagePerOrder > 0) {
|
|
743
|
-
const currentUsedCount = usedProductIdCounts.get(discount.product_id) || 0;
|
|
744
|
-
if (currentUsedCount >= maxUsagePerOrder) {
|
|
745
|
-
return false;
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
const discountTypeForLimit = discount.tag || discount.type;
|
|
750
|
-
if (["discount_card", "product_discount_card"].includes(discountTypeForLimit)) {
|
|
751
|
-
const applicableProductLimitConfig = ((_e2 = discount.config) == null ? void 0 : _e2.applicableProductLimit) || 0;
|
|
752
|
-
if (applicableProductLimitConfig > 0) {
|
|
753
|
-
const currentUsedLimitCount = usedDiscountCardLimitCounts.get(discount.id) || 0;
|
|
754
|
-
if (currentUsedLimitCount >= applicableProductLimitConfig) {
|
|
755
|
-
return false;
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
622
|
const limitedData = discount.limited_relation_product_data;
|
|
760
623
|
const _tempVar = (flatItem == null ? void 0 : flatItem.type) === "bundle" ? flatItem == null ? void 0 : flatItem.parentProduct : flatItem == null ? void 0 : flatItem.product;
|
|
761
624
|
const isHolderMatch = this.checkHolderMatch(
|
|
@@ -774,7 +637,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
774
637
|
return false;
|
|
775
638
|
}
|
|
776
639
|
if (limitedData.type === "product_all") {
|
|
777
|
-
if (limitedData
|
|
640
|
+
if (!isProductIncludedByLimitedData(limitedData, product.id)) {
|
|
778
641
|
return false;
|
|
779
642
|
}
|
|
780
643
|
if (!this.checkPackageSubItemUsageRules(discount, flatItem)) {
|
|
@@ -789,36 +652,21 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
789
652
|
}
|
|
790
653
|
return false;
|
|
791
654
|
});
|
|
792
|
-
const selectedDiscountCard = applicableDiscounts.find(
|
|
793
|
-
(n) => n.isScan && n.isSelected && (n.tag || n.type) !== "good_pass"
|
|
794
|
-
);
|
|
655
|
+
const selectedDiscountCard = applicableDiscounts.find((n) => n.isScan && n.isSelected && (n.tag || n.type) !== "good_pass");
|
|
795
656
|
const selectedDiscount = selectedDiscountCard || applicableDiscounts[0];
|
|
796
657
|
let isManualDiscount = false;
|
|
797
658
|
if (flatItem.type === "main") {
|
|
798
|
-
isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && (product.bundle || []).every(
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
}
|
|
803
|
-
) && (!((_g = product.discount_list) == null ? void 0 : _g.length) || ((_i = (_h = product == null ? void 0 : product.discount_list) == null ? void 0 : _h.every) == null ? void 0 : _i.call(
|
|
804
|
-
_h,
|
|
805
|
-
(item) => item.type === "product"
|
|
806
|
-
)));
|
|
807
|
-
if (product.inPromotion) {
|
|
808
|
-
isManualDiscount = false;
|
|
809
|
-
}
|
|
659
|
+
isManualDiscount = typeof product.isManualDiscount === "boolean" ? product.isManualDiscount : product.total != product.origin_total && (product.bundle || []).every((item) => {
|
|
660
|
+
var _a2;
|
|
661
|
+
return !((_a2 = item.discount_list || []) == null ? void 0 : _a2.length);
|
|
662
|
+
}) && (!((_g = product.discount_list) == null ? void 0 : _g.length) || ((_i = (_h = product == null ? void 0 : product.discount_list) == null ? void 0 : _h.every) == null ? void 0 : _i.call(_h, (item) => item.type === "product")));
|
|
810
663
|
} else {
|
|
811
664
|
const parentProduct = flatItem.parentProduct;
|
|
812
665
|
if (parentProduct) {
|
|
813
|
-
isManualDiscount = typeof parentProduct.isManualDiscount === "boolean" ? parentProduct.isManualDiscount : parentProduct.total != parentProduct.origin_total && (parentProduct.bundle || []).every(
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
}
|
|
818
|
-
) && (!((_j = parentProduct.discount_list) == null ? void 0 : _j.length) || ((_l = (_k = parentProduct == null ? void 0 : parentProduct.discount_list) == null ? void 0 : _k.every) == null ? void 0 : _l.call(
|
|
819
|
-
_k,
|
|
820
|
-
(item) => item.type === "product"
|
|
821
|
-
)));
|
|
666
|
+
isManualDiscount = typeof parentProduct.isManualDiscount === "boolean" ? parentProduct.isManualDiscount : parentProduct.total != parentProduct.origin_total && (parentProduct.bundle || []).every((item) => {
|
|
667
|
+
var _a2;
|
|
668
|
+
return !((_a2 = item.discount_list || []) == null ? void 0 : _a2.length);
|
|
669
|
+
}) && (!((_j = parentProduct.discount_list) == null ? void 0 : _j.length) || ((_l = (_k = parentProduct == null ? void 0 : parentProduct.discount_list) == null ? void 0 : _k.every) == null ? void 0 : _l.call(_k, (item) => item.type === "product")));
|
|
822
670
|
}
|
|
823
671
|
}
|
|
824
672
|
if (options == null ? void 0 : options.discountId) {
|
|
@@ -870,17 +718,17 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
870
718
|
}
|
|
871
719
|
if (applicableDiscounts.length === 0 || isManualDiscount || (0, import_lodash_es.isBoolean)(product.vouchersApplicable) && !product.vouchersApplicable) {
|
|
872
720
|
if (flatItem.type === "main") {
|
|
873
|
-
const restoredOptions = restoreOptionPrices(product.options);
|
|
874
721
|
if (product.isClient) {
|
|
875
|
-
processedProductsMap.set(
|
|
876
|
-
|
|
722
|
+
processedProductsMap.set(
|
|
723
|
+
product._id,
|
|
724
|
+
[this.hooks.setProduct(originProduct, {
|
|
877
725
|
...isManualDiscount ? {} : {
|
|
878
726
|
origin_total: (0, import_utils2.getProductOriginTotalPrice)({
|
|
879
727
|
product: {
|
|
880
728
|
original_price: product.original_price
|
|
881
729
|
},
|
|
882
730
|
bundle: product.bundle,
|
|
883
|
-
options:
|
|
731
|
+
options: product.options
|
|
884
732
|
}),
|
|
885
733
|
variant: originProduct._productInit.variant,
|
|
886
734
|
original_price: originProduct._productInit.original_price,
|
|
@@ -889,14 +737,14 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
889
737
|
price: product.price
|
|
890
738
|
},
|
|
891
739
|
bundle: product.bundle,
|
|
892
|
-
options:
|
|
740
|
+
options: product.options
|
|
893
741
|
}),
|
|
894
742
|
price: product.price,
|
|
895
|
-
options:
|
|
743
|
+
options: product.options
|
|
896
744
|
},
|
|
897
745
|
discount_list: this.filterDiscountListByType(product.discount_list, "promotion")
|
|
898
|
-
})
|
|
899
|
-
|
|
746
|
+
})]
|
|
747
|
+
);
|
|
900
748
|
} else {
|
|
901
749
|
let total = product.inPromotion ? ((_u = product == null ? void 0 : product._promotion) == null ? void 0 : _u.finalPrice) ?? product.origin_total ?? product.total : product.origin_total ?? product.total;
|
|
902
750
|
let main_product_selling_price = product.price ?? product.main_product_selling_price;
|
|
@@ -906,20 +754,19 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
906
754
|
}
|
|
907
755
|
processedProductsMap.set(
|
|
908
756
|
product._id,
|
|
909
|
-
[
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
]
|
|
757
|
+
[this.hooks.setProduct(originProduct, {
|
|
758
|
+
...isManualDiscount ? {
|
|
759
|
+
price: product.price
|
|
760
|
+
} : {
|
|
761
|
+
_id: product._id.split("___")[0] + "___" + index,
|
|
762
|
+
origin_total: product.origin_total,
|
|
763
|
+
total,
|
|
764
|
+
original_price: product.original_price,
|
|
765
|
+
price: product.price,
|
|
766
|
+
main_product_selling_price
|
|
767
|
+
},
|
|
768
|
+
discount_list: this.filterDiscountListByType(product.discount_list, "promotion")
|
|
769
|
+
})]
|
|
923
770
|
);
|
|
924
771
|
}
|
|
925
772
|
} else {
|
|
@@ -935,166 +782,104 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
935
782
|
if (applicableDiscounts.length && product.booking_id && typeof selectedDiscount.isManualSelect === "undefined" && !(options == null ? void 0 : options.scan) && !isEditModeAddNewProduct) {
|
|
936
783
|
return;
|
|
937
784
|
}
|
|
938
|
-
const
|
|
939
|
-
const isGoodPass = discountType === "good_pass";
|
|
940
|
-
const isDiscountCard = ["discount_card", "product_discount_card"].includes(discountType);
|
|
941
|
-
const applicableProductLimit = ((_w = selectedDiscount.config) == null ? void 0 : _w.applicableProductLimit) || 0;
|
|
942
|
-
const isNeedSplit = isGoodPass || isDiscountCard && applicableProductLimit > 0;
|
|
785
|
+
const isNeedSplit = (selectedDiscount.tag || selectedDiscount.type) === "good_pass";
|
|
943
786
|
const totalQuantity = product.quantity || product.num || 1;
|
|
944
|
-
const availableGoodPassCount = applicableDiscounts.filter(
|
|
945
|
-
|
|
946
|
-
).length;
|
|
947
|
-
let maxUsageLimit;
|
|
948
|
-
if (isGoodPass) {
|
|
949
|
-
maxUsageLimit = availableGoodPassCount;
|
|
950
|
-
if (selectedDiscount.config && selectedDiscount.config.maxUsagePerOrder) {
|
|
951
|
-
maxUsageLimit = Math.min(
|
|
952
|
-
availableGoodPassCount,
|
|
953
|
-
selectedDiscount.config.maxUsagePerOrder
|
|
954
|
-
);
|
|
955
|
-
}
|
|
956
|
-
} else if (isDiscountCard && applicableProductLimit > 0) {
|
|
957
|
-
const usedLimitCount = usedDiscountCardLimitCounts.get(selectedDiscount.id) || 0;
|
|
958
|
-
maxUsageLimit = Math.max(0, applicableProductLimit - usedLimitCount);
|
|
959
|
-
} else {
|
|
960
|
-
maxUsageLimit = 1;
|
|
961
|
-
}
|
|
962
|
-
const splitCount = isNeedSplit ? Math.min(product.quantity || product.num || 1, maxUsageLimit) : 1;
|
|
787
|
+
const availableGoodPassCount = applicableDiscounts.filter((item) => (item.tag || item.type) === "good_pass").length;
|
|
788
|
+
const splitCount = isNeedSplit ? Math.min(totalQuantity, availableGoodPassCount) : 1;
|
|
963
789
|
const arr = [];
|
|
964
790
|
if (flatItem.type === "main") {
|
|
965
791
|
if (splitCount < totalQuantity && isNeedSplit) {
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
this.hooks.setProduct(originProduct, {
|
|
972
|
-
discount_list: this.filterDiscountListByType(product.discount_list, "promotion"),
|
|
973
|
-
quantity: totalQuantity - splitCount,
|
|
974
|
-
_id: product._id.split("___")[0],
|
|
975
|
-
total
|
|
976
|
-
})
|
|
977
|
-
);
|
|
792
|
+
arr.push(this.hooks.setProduct(originProduct, {
|
|
793
|
+
discount_list: this.filterDiscountListByType(product.discount_list, "promotion"),
|
|
794
|
+
quantity: totalQuantity - splitCount,
|
|
795
|
+
_id: product._id.split("___")[0]
|
|
796
|
+
}));
|
|
978
797
|
}
|
|
979
798
|
for (let i = 0; i < splitCount; i++) {
|
|
980
|
-
const
|
|
981
|
-
usedDiscounts.set(
|
|
982
|
-
|
|
983
|
-
const currentCount = usedProductIdCounts.get(currentSelectedDiscount.product_id) || 0;
|
|
984
|
-
usedProductIdCounts.set(currentSelectedDiscount.product_id, currentCount + 1);
|
|
985
|
-
}
|
|
986
|
-
const currentDiscountTypeForCount = currentSelectedDiscount.tag || currentSelectedDiscount.type;
|
|
987
|
-
if (["discount_card", "product_discount_card"].includes(currentDiscountTypeForCount)) {
|
|
988
|
-
const currentLimitCount = usedDiscountCardLimitCounts.get(currentSelectedDiscount.id) || 0;
|
|
989
|
-
usedDiscountCardLimitCounts.set(currentSelectedDiscount.id, currentLimitCount + 1);
|
|
990
|
-
}
|
|
991
|
-
const appliedProducts = appliedDiscountProducts.get(currentSelectedDiscount.id) || [];
|
|
799
|
+
const selectedDiscount2 = selectedDiscountCard || applicableDiscounts[i];
|
|
800
|
+
usedDiscounts.set(selectedDiscount2.id, true);
|
|
801
|
+
const appliedProducts = appliedDiscountProducts.get(selectedDiscount2.id) || [];
|
|
992
802
|
let productOriginTotal = product.origin_total || product.total || 0;
|
|
993
803
|
if (this.filterDiscountListByType(product.discount_list, "promotion").length && product.origin_total) {
|
|
994
804
|
productOriginTotal = product.origin_total;
|
|
995
805
|
}
|
|
996
|
-
if (Number(((
|
|
806
|
+
if (Number(((_w = originProduct == null ? void 0 : originProduct._productInit) == null ? void 0 : _w.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
|
|
997
807
|
productOriginTotal = product.total;
|
|
998
808
|
}
|
|
999
|
-
const isOrderLevel = (0, import_utils.isOrderLevelFixedAmountDiscount)(
|
|
1000
|
-
const orderLevelAllocation = isOrderLevel ? orderLevelDiscountAllocations.get(
|
|
809
|
+
const isOrderLevel = (0, import_utils.isOrderLevelFixedAmountDiscount)(selectedDiscount2);
|
|
810
|
+
const orderLevelAllocation = isOrderLevel ? orderLevelDiscountAllocations.get(selectedDiscount2.id) : null;
|
|
1001
811
|
const productAllocation = orderLevelAllocation == null ? void 0 : orderLevelAllocation.get(flatItem._id);
|
|
1002
|
-
|
|
1003
|
-
let mainProductSellingPrice;
|
|
812
|
+
let targetProductTotal;
|
|
1004
813
|
let amount;
|
|
1005
814
|
let productDiscountDifference;
|
|
1006
|
-
let discountedOptions = product.options;
|
|
1007
|
-
let optionDiscountAmount = 0;
|
|
1008
815
|
if (isOrderLevel && productAllocation) {
|
|
1009
816
|
amount = productAllocation.discountAmount;
|
|
1010
817
|
productDiscountDifference = productAllocation.difference;
|
|
1011
|
-
|
|
818
|
+
targetProductTotal = Math.max(new import_decimal.default(product.price).minus(amount).toNumber(), 0);
|
|
1012
819
|
} else {
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
product.price,
|
|
1016
|
-
product.price
|
|
1017
|
-
);
|
|
1018
|
-
amount = new import_decimal.default(product.price).minus(new import_decimal.default(mainProductSellingPrice)).toNumber();
|
|
1019
|
-
}
|
|
1020
|
-
if (isDeductOptionPrice && ((_z = product.options) == null ? void 0 : _z.length)) {
|
|
1021
|
-
const optionResult = applyDiscountToOptions(
|
|
1022
|
-
product.options,
|
|
1023
|
-
currentSelectedDiscount
|
|
1024
|
-
);
|
|
1025
|
-
discountedOptions = optionResult.discountedOptions;
|
|
1026
|
-
optionDiscountAmount = optionResult.optionDiscountAmount;
|
|
820
|
+
targetProductTotal = (0, import_utils.getDiscountAmount)(selectedDiscount2, product.price, product.price);
|
|
821
|
+
amount = new import_decimal.default(product.price).minus(new import_decimal.default(targetProductTotal)).toNumber();
|
|
1027
822
|
}
|
|
1028
|
-
const
|
|
1029
|
-
const
|
|
1030
|
-
const total = new import_decimal.default(mainProductSellingPrice).plus(optionsLineTotal).toNumber();
|
|
1031
|
-
const mainProductDiscountAmount = amount;
|
|
1032
|
-
const lineDiscountAmount = new import_decimal.default(mainProductDiscountAmount).plus(optionDiscountAmount).toNumber();
|
|
1033
|
-
const currentDiscountType = currentSelectedDiscount.tag === "product_discount_card" ? "discount_card" : currentSelectedDiscount.tag;
|
|
1034
|
-
const discountType2 = selectedDiscount.tag || selectedDiscount.type;
|
|
1035
|
-
const currentIsGoodPass = currentDiscountType === "good_pass";
|
|
823
|
+
const discountType = selectedDiscount2.tag || selectedDiscount2.type;
|
|
824
|
+
const isGoodPass = discountType === "good_pass";
|
|
1036
825
|
const discountDetail = {
|
|
1037
|
-
amount
|
|
1038
|
-
type:
|
|
826
|
+
amount,
|
|
827
|
+
type: selectedDiscount2.tag === "product_discount_card" ? "discount_card" : discountType,
|
|
1039
828
|
discount: {
|
|
1040
|
-
discount_card_type: (
|
|
1041
|
-
fixed_amount:
|
|
1042
|
-
discount_calculation_mode: (
|
|
1043
|
-
resource_id:
|
|
1044
|
-
title:
|
|
829
|
+
discount_card_type: (_x = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _x.discount_card_type,
|
|
830
|
+
fixed_amount: amount,
|
|
831
|
+
discount_calculation_mode: (_y = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _y.discount_calculation_mode,
|
|
832
|
+
resource_id: selectedDiscount2.id,
|
|
833
|
+
title: selectedDiscount2.format_title,
|
|
1045
834
|
original_amount: product.price,
|
|
1046
835
|
product_id: originProduct.id,
|
|
1047
|
-
percent:
|
|
1048
|
-
discount_product_id: currentSelectedDiscount.product_id
|
|
836
|
+
percent: selectedDiscount2.par_value
|
|
1049
837
|
},
|
|
1050
|
-
// 前端使用的num
|
|
1051
|
-
_num:
|
|
1052
|
-
config: currentSelectedDiscount == null ? void 0 : currentSelectedDiscount.config,
|
|
838
|
+
// 前端使用的num数量,为了计算优惠金额
|
|
839
|
+
_num: isGoodPass ? 1 : product.num,
|
|
1053
840
|
metadata: {
|
|
1054
841
|
num: 1,
|
|
1055
|
-
discount_rule_uncheck_flag:
|
|
842
|
+
discount_rule_uncheck_flag: selectedDiscount2 == null ? void 0 : selectedDiscount2.discount_rule_uncheck_flag,
|
|
1056
843
|
// 🔥 order_level 分摊差值
|
|
1057
|
-
...productDiscountDifference !== void 0 && { product_discount_difference: productDiscountDifference }
|
|
1058
|
-
/** 仅主商品上的优惠金额(不含 option) */
|
|
1059
|
-
mainProductDiscountAmount,
|
|
1060
|
-
optionDiscountAmount
|
|
844
|
+
...productDiscountDifference !== void 0 && { product_discount_difference: productDiscountDifference }
|
|
1061
845
|
}
|
|
1062
846
|
};
|
|
1063
847
|
appliedProducts.push(discountDetail);
|
|
1064
|
-
appliedDiscountProducts.set(
|
|
848
|
+
appliedDiscountProducts.set(selectedDiscount2.id, appliedProducts);
|
|
849
|
+
let total = targetProductTotal;
|
|
850
|
+
if (product.options) {
|
|
851
|
+
total = product.options.reduce((accumulator, currentValue) => {
|
|
852
|
+
const currentPrice = new import_decimal.default(currentValue.price || 0);
|
|
853
|
+
const currentNum = new import_decimal.default(currentValue.num || 0);
|
|
854
|
+
return accumulator.add(currentPrice.mul(currentNum));
|
|
855
|
+
}, new import_decimal.default(total)).toNumber();
|
|
856
|
+
}
|
|
1065
857
|
if (product.isClient) {
|
|
1066
|
-
arr.push(
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
total,
|
|
1082
|
-
options: discountedOptions
|
|
1083
|
-
})
|
|
1084
|
-
);
|
|
858
|
+
arr.push(this.hooks.setProduct(originProduct, {
|
|
859
|
+
discount_list: [discountDetail],
|
|
860
|
+
price: selectedDiscount2.tag === "good_pass" ? 0 : product.price,
|
|
861
|
+
quantity: isNeedSplit ? 1 : product.quantity,
|
|
862
|
+
origin_total: (0, import_utils2.getProductOriginTotalPrice)({
|
|
863
|
+
product: {
|
|
864
|
+
original_price: product.original_price
|
|
865
|
+
},
|
|
866
|
+
bundle: product.bundle,
|
|
867
|
+
options: product.options
|
|
868
|
+
}),
|
|
869
|
+
variant: originProduct._productInit.variant,
|
|
870
|
+
original_price: new import_decimal.default(product.price || 0).toNumber(),
|
|
871
|
+
total
|
|
872
|
+
}));
|
|
1085
873
|
} else {
|
|
1086
|
-
arr.push(
|
|
1087
|
-
this.
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
options: discountedOptions
|
|
1096
|
-
})
|
|
1097
|
-
);
|
|
874
|
+
arr.push(this.hooks.setProduct(originProduct, {
|
|
875
|
+
discount_list: this.filterDiscountListByType(product.discount_list, "promotion").concat([discountDetail]),
|
|
876
|
+
_id: product._id.split("___")[0] + "___" + selectedDiscount2.id + index,
|
|
877
|
+
price: selectedDiscount2.tag === "good_pass" ? 0 : product.price,
|
|
878
|
+
quantity: isNeedSplit ? 1 : product.quantity,
|
|
879
|
+
total,
|
|
880
|
+
origin_total: productOriginTotal,
|
|
881
|
+
main_product_selling_price: targetProductTotal
|
|
882
|
+
}));
|
|
1098
883
|
}
|
|
1099
884
|
}
|
|
1100
885
|
processedProductsMap.set(product._id, arr);
|
|
@@ -1104,298 +889,62 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1104
889
|
const discountNum = splitCount;
|
|
1105
890
|
const normalNum = totalQuantity - discountNum;
|
|
1106
891
|
for (let i = 0; i < discountNum; i++) {
|
|
1107
|
-
const
|
|
1108
|
-
usedDiscounts.set(
|
|
1109
|
-
if ((currentBundleDiscount.tag || currentBundleDiscount.type) === "good_pass") {
|
|
1110
|
-
const currentCount = usedProductIdCounts.get(currentBundleDiscount.product_id) || 0;
|
|
1111
|
-
usedProductIdCounts.set(currentBundleDiscount.product_id, currentCount + 1);
|
|
1112
|
-
}
|
|
1113
|
-
const bundleDiscountTypeForCount = currentBundleDiscount.tag || currentBundleDiscount.type;
|
|
1114
|
-
if (["discount_card", "product_discount_card"].includes(bundleDiscountTypeForCount)) {
|
|
1115
|
-
const currentBundleLimitCount = usedDiscountCardLimitCounts.get(currentBundleDiscount.id) || 0;
|
|
1116
|
-
usedDiscountCardLimitCounts.set(currentBundleDiscount.id, currentBundleLimitCount + 1);
|
|
1117
|
-
}
|
|
892
|
+
const selectedDiscount2 = applicableDiscounts[i];
|
|
893
|
+
usedDiscounts.set(selectedDiscount2.id, true);
|
|
1118
894
|
const uniqueId = `${flatItem._id}_split_${i}`;
|
|
1119
|
-
const discountedPrice = (0, import_utils.getDiscountAmount)(
|
|
1120
|
-
currentBundleDiscount,
|
|
1121
|
-
product.origin_total,
|
|
1122
|
-
product.origin_total
|
|
1123
|
-
);
|
|
1124
|
-
const bundleDiscountAmount = new import_decimal.default(product.origin_total || 0).minus(discountedPrice).toNumber();
|
|
1125
|
-
const bundleDiscountType = currentBundleDiscount.tag === "product_discount_card" ? "discount_card" : currentBundleDiscount.tag;
|
|
1126
895
|
const discountDetail = {
|
|
1127
|
-
amount:
|
|
1128
|
-
type:
|
|
896
|
+
amount: product.origin_total,
|
|
897
|
+
type: "good_pass",
|
|
1129
898
|
discount: {
|
|
1130
|
-
|
|
1131
|
-
discount_calculation_mode: (
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
title: currentBundleDiscount.format_title,
|
|
899
|
+
fixed_amount: product.origin_total,
|
|
900
|
+
discount_calculation_mode: (_z = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _z.discount_calculation_mode,
|
|
901
|
+
resource_id: selectedDiscount2.id,
|
|
902
|
+
title: selectedDiscount2.format_title,
|
|
1135
903
|
original_amount: product.origin_total,
|
|
1136
|
-
product_id: product.id
|
|
1137
|
-
percent: currentBundleDiscount.par_value,
|
|
1138
|
-
discount_product_id: currentBundleDiscount.product_id
|
|
904
|
+
product_id: product.id
|
|
1139
905
|
},
|
|
1140
906
|
metadata: {
|
|
1141
907
|
// 🔥 使用拆分后的唯一 _id
|
|
1142
908
|
custom_product_bundle_map_id: uniqueId,
|
|
1143
|
-
discount_rule_uncheck_flag:
|
|
909
|
+
discount_rule_uncheck_flag: selectedDiscount2 == null ? void 0 : selectedDiscount2.discount_rule_uncheck_flag,
|
|
1144
910
|
num: 1
|
|
1145
911
|
},
|
|
1146
|
-
_num: 1
|
|
1147
|
-
config: currentBundleDiscount == null ? void 0 : currentBundleDiscount.config
|
|
912
|
+
_num: 1
|
|
1148
913
|
};
|
|
1149
|
-
const appliedProducts = appliedDiscountProducts.get(
|
|
914
|
+
const appliedProducts = appliedDiscountProducts.get(selectedDiscount2.id) || [];
|
|
1150
915
|
appliedProducts.push(discountDetail);
|
|
1151
|
-
appliedDiscountProducts.set(
|
|
916
|
+
appliedDiscountProducts.set(selectedDiscount2.id, appliedProducts);
|
|
1152
917
|
processedItems.push({
|
|
1153
918
|
...flatItem,
|
|
1154
919
|
// 🔥 使用唯一的 _id
|
|
1155
920
|
_id: uniqueId,
|
|
1156
921
|
num: 1,
|
|
1157
922
|
quantity: 1,
|
|
1158
|
-
price:
|
|
1159
|
-
//
|
|
1160
|
-
total:
|
|
923
|
+
price: 0,
|
|
924
|
+
// 商品券价格为0
|
|
925
|
+
total: 0,
|
|
1161
926
|
discount_list: this.filterDiscountListByType(flatItem.discount_list, "promotion").concat([discountDetail]),
|
|
1162
927
|
processed: true,
|
|
1163
|
-
_discountId:
|
|
928
|
+
_discountId: selectedDiscount2.id
|
|
1164
929
|
});
|
|
1165
930
|
}
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
}
|
|
1176
|
-
}
|
|
1177
|
-
if ((Number(product.total) <= 0 || !product.total) && !((_b2 = product.discount_list) == null ? void 0 : _b2.find(
|
|
1178
|
-
(n) => {
|
|
1179
|
-
var _a3;
|
|
1180
|
-
return ((_a3 = n.discount) == null ? void 0 : _a3.resource_id) === nextDiscount.id;
|
|
1181
|
-
}
|
|
1182
|
-
)) && nextDiscountType !== "good_pass")
|
|
1183
|
-
return false;
|
|
1184
|
-
if (usedDiscounts.get(nextDiscount.id) && nextDiscountType === "good_pass")
|
|
1185
|
-
return false;
|
|
1186
|
-
if (nextDiscountType === "good_pass") {
|
|
1187
|
-
const maxUsagePerOrder = (_c2 = nextDiscount.config) == null ? void 0 : _c2.maxUsagePerOrder;
|
|
1188
|
-
if (maxUsagePerOrder && maxUsagePerOrder > 0) {
|
|
1189
|
-
const currentUsedCount = usedProductIdCounts.get(nextDiscount.product_id) || 0;
|
|
1190
|
-
if (currentUsedCount >= maxUsagePerOrder) {
|
|
1191
|
-
return false;
|
|
1192
|
-
}
|
|
1193
|
-
}
|
|
1194
|
-
}
|
|
1195
|
-
if (["discount_card", "product_discount_card"].includes(nextDiscountType)) {
|
|
1196
|
-
const limitConfig = ((_d2 = nextDiscount.config) == null ? void 0 : _d2.applicableProductLimit) || 0;
|
|
1197
|
-
if (limitConfig > 0) {
|
|
1198
|
-
const currentUsedLimitCount = usedDiscountCardLimitCounts.get(nextDiscount.id) || 0;
|
|
1199
|
-
if (currentUsedLimitCount >= limitConfig) {
|
|
1200
|
-
return false;
|
|
1201
|
-
}
|
|
1202
|
-
}
|
|
1203
|
-
}
|
|
1204
|
-
const limitedData = nextDiscount.limited_relation_product_data;
|
|
1205
|
-
if (limitedData.type === "product_all") {
|
|
1206
|
-
if (limitedData.filter === 1 && limitedData.exclude_product_ids.includes(product.id)) {
|
|
1207
|
-
return false;
|
|
1208
|
-
}
|
|
1209
|
-
if (!this.checkPackageSubItemUsageRules(nextDiscount, flatItem)) {
|
|
1210
|
-
return false;
|
|
1211
|
-
}
|
|
1212
|
-
return true;
|
|
1213
|
-
} else if (limitedData.product_ids && limitedData.product_ids.includes(product.id)) {
|
|
1214
|
-
if (!this.checkPackageSubItemUsageRules(nextDiscount, flatItem)) {
|
|
1215
|
-
return false;
|
|
1216
|
-
}
|
|
1217
|
-
return true;
|
|
1218
|
-
}
|
|
1219
|
-
return false;
|
|
931
|
+
if (normalNum > 0) {
|
|
932
|
+
processedItems.push({
|
|
933
|
+
...flatItem,
|
|
934
|
+
// 🔥 为剩余商品生成唯一的 _id
|
|
935
|
+
_id: `${flatItem._id}_split_rest`,
|
|
936
|
+
num: normalNum,
|
|
937
|
+
quantity: normalNum,
|
|
938
|
+
discount_list: this.filterDiscountListByType(flatItem.discount_list, "promotion"),
|
|
939
|
+
processed: true
|
|
1220
940
|
});
|
|
1221
|
-
if (nextApplicableDiscounts.length === 0) {
|
|
1222
|
-
processedItems.push({
|
|
1223
|
-
...flatItem,
|
|
1224
|
-
_id: `${flatItem._id}_split_rest`,
|
|
1225
|
-
num: remainingNum,
|
|
1226
|
-
quantity: remainingNum,
|
|
1227
|
-
discount_list: [],
|
|
1228
|
-
processed: true
|
|
1229
|
-
});
|
|
1230
|
-
break;
|
|
1231
|
-
}
|
|
1232
|
-
const nextSelectedDiscountCard = nextApplicableDiscounts.find(
|
|
1233
|
-
(n) => n.isScan && n.isSelected && (n.tag || n.type) !== "good_pass"
|
|
1234
|
-
);
|
|
1235
|
-
const nextSelectedDiscount = nextSelectedDiscountCard || nextApplicableDiscounts[0];
|
|
1236
|
-
const nextDiscType = nextSelectedDiscount.tag || nextSelectedDiscount.type;
|
|
1237
|
-
const nextIsGoodPass = nextDiscType === "good_pass";
|
|
1238
|
-
const nextIsDiscountCard = ["discount_card", "product_discount_card"].includes(nextDiscType);
|
|
1239
|
-
const nextApplicableProductLimit = ((_F = nextSelectedDiscount.config) == null ? void 0 : _F.applicableProductLimit) || 0;
|
|
1240
|
-
const nextIsNeedSplit = nextIsGoodPass || nextIsDiscountCard && nextApplicableProductLimit > 0;
|
|
1241
|
-
if (!nextIsNeedSplit) {
|
|
1242
|
-
const nextBundleDiscount = nextSelectedDiscountCard || nextApplicableDiscounts[0];
|
|
1243
|
-
usedDiscounts.set(nextBundleDiscount.id, true);
|
|
1244
|
-
if ((nextBundleDiscount.tag || nextBundleDiscount.type) === "good_pass") {
|
|
1245
|
-
const curCount = usedProductIdCounts.get(nextBundleDiscount.product_id) || 0;
|
|
1246
|
-
usedProductIdCounts.set(nextBundleDiscount.product_id, curCount + 1);
|
|
1247
|
-
}
|
|
1248
|
-
const nextNoSplitType = nextBundleDiscount.tag || nextBundleDiscount.type;
|
|
1249
|
-
if (["discount_card", "product_discount_card"].includes(nextNoSplitType)) {
|
|
1250
|
-
const curCount = usedDiscountCardLimitCounts.get(nextBundleDiscount.id) || 0;
|
|
1251
|
-
usedDiscountCardLimitCounts.set(nextBundleDiscount.id, curCount + remainingNum);
|
|
1252
|
-
}
|
|
1253
|
-
const nextOriginTotal = product.original_price || product.price || 0;
|
|
1254
|
-
const nextTargetTotal = (0, import_utils.getDiscountAmount)(nextBundleDiscount, nextOriginTotal, nextOriginTotal);
|
|
1255
|
-
const nextDiscountAmount = new import_decimal.default(nextOriginTotal).minus(nextTargetTotal).toNumber();
|
|
1256
|
-
const nextUniqueId = `${flatItem._id}_split_${continueSplitIndex}`;
|
|
1257
|
-
const nextBundleDiscType = nextBundleDiscount.tag === "product_discount_card" ? "discount_card" : nextBundleDiscount.tag;
|
|
1258
|
-
const nextDiscountDetail = {
|
|
1259
|
-
amount: nextDiscountAmount * remainingNum,
|
|
1260
|
-
type: nextBundleDiscType,
|
|
1261
|
-
discount: {
|
|
1262
|
-
discount_card_type: (_G = nextBundleDiscount == null ? void 0 : nextBundleDiscount.metadata) == null ? void 0 : _G.discount_card_type,
|
|
1263
|
-
fixed_amount: nextDiscountAmount,
|
|
1264
|
-
resource_id: nextBundleDiscount.id,
|
|
1265
|
-
title: nextBundleDiscount.format_title,
|
|
1266
|
-
original_amount: product.original_price,
|
|
1267
|
-
product_id: product.id,
|
|
1268
|
-
percent: nextBundleDiscount.par_value,
|
|
1269
|
-
discount_product_id: nextBundleDiscount.product_id
|
|
1270
|
-
},
|
|
1271
|
-
metadata: {
|
|
1272
|
-
custom_product_bundle_map_id: nextUniqueId,
|
|
1273
|
-
num: remainingNum
|
|
1274
|
-
},
|
|
1275
|
-
config: nextBundleDiscount == null ? void 0 : nextBundleDiscount.config,
|
|
1276
|
-
_num: remainingNum * (((_H = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _H.num) || 1)
|
|
1277
|
-
};
|
|
1278
|
-
const nextAppliedProducts = appliedDiscountProducts.get(nextBundleDiscount.id) || [];
|
|
1279
|
-
nextAppliedProducts.push(nextDiscountDetail);
|
|
1280
|
-
appliedDiscountProducts.set(nextBundleDiscount.id, nextAppliedProducts);
|
|
1281
|
-
processedItems.push({
|
|
1282
|
-
...flatItem,
|
|
1283
|
-
_id: nextUniqueId,
|
|
1284
|
-
num: remainingNum,
|
|
1285
|
-
quantity: remainingNum,
|
|
1286
|
-
total: nextTargetTotal,
|
|
1287
|
-
price: new import_decimal.default(nextOriginTotal || 0).minus(nextDiscountDetail.discount.fixed_amount).toNumber(),
|
|
1288
|
-
discount_list: [nextDiscountDetail],
|
|
1289
|
-
processed: true
|
|
1290
|
-
});
|
|
1291
|
-
remainingNum = 0;
|
|
1292
|
-
break;
|
|
1293
|
-
}
|
|
1294
|
-
let nextMaxUsageLimit;
|
|
1295
|
-
if (nextIsGoodPass) {
|
|
1296
|
-
const nextGoodPassCount = nextApplicableDiscounts.filter(
|
|
1297
|
-
(item) => (item.tag || item.type) === "good_pass"
|
|
1298
|
-
).length;
|
|
1299
|
-
nextMaxUsageLimit = nextGoodPassCount;
|
|
1300
|
-
if ((_I = nextSelectedDiscount.config) == null ? void 0 : _I.maxUsagePerOrder) {
|
|
1301
|
-
const usedCount = usedProductIdCounts.get(nextSelectedDiscount.product_id) || 0;
|
|
1302
|
-
nextMaxUsageLimit = Math.min(
|
|
1303
|
-
nextGoodPassCount,
|
|
1304
|
-
Math.max(0, nextSelectedDiscount.config.maxUsagePerOrder - usedCount)
|
|
1305
|
-
);
|
|
1306
|
-
}
|
|
1307
|
-
} else if (nextIsDiscountCard && nextApplicableProductLimit > 0) {
|
|
1308
|
-
const usedLimitCount = usedDiscountCardLimitCounts.get(nextSelectedDiscount.id) || 0;
|
|
1309
|
-
nextMaxUsageLimit = Math.max(0, nextApplicableProductLimit - usedLimitCount);
|
|
1310
|
-
} else {
|
|
1311
|
-
nextMaxUsageLimit = 1;
|
|
1312
|
-
}
|
|
1313
|
-
const nextSplitCount = Math.min(remainingNum, nextMaxUsageLimit);
|
|
1314
|
-
if (nextSplitCount === 0) {
|
|
1315
|
-
processedItems.push({
|
|
1316
|
-
...flatItem,
|
|
1317
|
-
_id: `${flatItem._id}_split_rest`,
|
|
1318
|
-
num: remainingNum,
|
|
1319
|
-
quantity: remainingNum,
|
|
1320
|
-
discount_list: this.filterDiscountListByType(flatItem.discount_list, "promotion"),
|
|
1321
|
-
processed: true
|
|
1322
|
-
});
|
|
1323
|
-
break;
|
|
1324
|
-
}
|
|
1325
|
-
for (let j = 0; j < nextSplitCount; j++) {
|
|
1326
|
-
const nextBundleDiscount = nextIsGoodPass ? nextSelectedDiscountCard || nextApplicableDiscounts[j] : nextSelectedDiscountCard || nextApplicableDiscounts[0];
|
|
1327
|
-
usedDiscounts.set(nextBundleDiscount.id, true);
|
|
1328
|
-
if ((nextBundleDiscount.tag || nextBundleDiscount.type) === "good_pass") {
|
|
1329
|
-
const curCount = usedProductIdCounts.get(nextBundleDiscount.product_id) || 0;
|
|
1330
|
-
usedProductIdCounts.set(nextBundleDiscount.product_id, curCount + 1);
|
|
1331
|
-
}
|
|
1332
|
-
const nextBundleDiscTypeForCount = nextBundleDiscount.tag || nextBundleDiscount.type;
|
|
1333
|
-
if (["discount_card", "product_discount_card"].includes(nextBundleDiscTypeForCount)) {
|
|
1334
|
-
const curLimitCount = usedDiscountCardLimitCounts.get(nextBundleDiscount.id) || 0;
|
|
1335
|
-
usedDiscountCardLimitCounts.set(nextBundleDiscount.id, curLimitCount + 1);
|
|
1336
|
-
}
|
|
1337
|
-
const nextUniqueId = `${flatItem._id}_split_${continueSplitIndex}`;
|
|
1338
|
-
const nextDiscountedPrice = (0, import_utils.getDiscountAmount)(
|
|
1339
|
-
nextBundleDiscount,
|
|
1340
|
-
product.origin_total,
|
|
1341
|
-
product.origin_total
|
|
1342
|
-
);
|
|
1343
|
-
const nextBundleDiscAmount = new import_decimal.default(product.origin_total || 0).minus(nextDiscountedPrice).toNumber();
|
|
1344
|
-
const nextBundleDiscTypeStr = nextBundleDiscount.tag === "product_discount_card" ? "discount_card" : nextBundleDiscount.tag;
|
|
1345
|
-
const nextDiscountDetail = {
|
|
1346
|
-
amount: nextBundleDiscAmount,
|
|
1347
|
-
type: nextBundleDiscTypeStr,
|
|
1348
|
-
discount: {
|
|
1349
|
-
discount_card_type: (_J = nextBundleDiscount == null ? void 0 : nextBundleDiscount.metadata) == null ? void 0 : _J.discount_card_type,
|
|
1350
|
-
fixed_amount: nextBundleDiscAmount,
|
|
1351
|
-
resource_id: nextBundleDiscount.id,
|
|
1352
|
-
title: nextBundleDiscount.format_title,
|
|
1353
|
-
original_amount: product.origin_total,
|
|
1354
|
-
product_id: product.id,
|
|
1355
|
-
percent: nextBundleDiscount.par_value,
|
|
1356
|
-
discount_product_id: nextBundleDiscount.product_id
|
|
1357
|
-
},
|
|
1358
|
-
metadata: {
|
|
1359
|
-
custom_product_bundle_map_id: nextUniqueId,
|
|
1360
|
-
num: 1
|
|
1361
|
-
},
|
|
1362
|
-
_num: 1,
|
|
1363
|
-
config: nextBundleDiscount == null ? void 0 : nextBundleDiscount.config
|
|
1364
|
-
};
|
|
1365
|
-
const nextAppliedProducts = appliedDiscountProducts.get(nextBundleDiscount.id) || [];
|
|
1366
|
-
nextAppliedProducts.push(nextDiscountDetail);
|
|
1367
|
-
appliedDiscountProducts.set(nextBundleDiscount.id, nextAppliedProducts);
|
|
1368
|
-
processedItems.push({
|
|
1369
|
-
...flatItem,
|
|
1370
|
-
_id: nextUniqueId,
|
|
1371
|
-
num: 1,
|
|
1372
|
-
quantity: 1,
|
|
1373
|
-
price: nextDiscountedPrice,
|
|
1374
|
-
total: nextDiscountedPrice,
|
|
1375
|
-
discount_list: [nextDiscountDetail],
|
|
1376
|
-
processed: true,
|
|
1377
|
-
_discountId: nextBundleDiscount.id
|
|
1378
|
-
});
|
|
1379
|
-
continueSplitIndex++;
|
|
1380
|
-
}
|
|
1381
|
-
remainingNum -= nextSplitCount;
|
|
1382
941
|
}
|
|
1383
942
|
} else {
|
|
1384
|
-
const
|
|
1385
|
-
usedDiscounts.set(
|
|
1386
|
-
if ((currentBundleDiscount.tag || currentBundleDiscount.type) === "good_pass") {
|
|
1387
|
-
const currentCount = usedProductIdCounts.get(currentBundleDiscount.product_id) || 0;
|
|
1388
|
-
usedProductIdCounts.set(currentBundleDiscount.product_id, currentCount + 1);
|
|
1389
|
-
}
|
|
1390
|
-
const noSplitDiscountType = currentBundleDiscount.tag || currentBundleDiscount.type;
|
|
1391
|
-
if (["discount_card", "product_discount_card"].includes(noSplitDiscountType)) {
|
|
1392
|
-
const bundleQuantity = product.num || 1;
|
|
1393
|
-
const currentNoSplitCount = usedDiscountCardLimitCounts.get(currentBundleDiscount.id) || 0;
|
|
1394
|
-
usedDiscountCardLimitCounts.set(currentBundleDiscount.id, currentNoSplitCount + bundleQuantity);
|
|
1395
|
-
}
|
|
943
|
+
const selectedDiscount2 = selectedDiscountCard || applicableDiscounts[0];
|
|
944
|
+
usedDiscounts.set(selectedDiscount2.id, true);
|
|
1396
945
|
const productOriginTotal = product.original_price || product.price || 0;
|
|
1397
|
-
const isOrderLevel = (0, import_utils.isOrderLevelFixedAmountDiscount)(
|
|
1398
|
-
const orderLevelAllocation = isOrderLevel ? orderLevelDiscountAllocations.get(
|
|
946
|
+
const isOrderLevel = (0, import_utils.isOrderLevelFixedAmountDiscount)(selectedDiscount2);
|
|
947
|
+
const orderLevelAllocation = isOrderLevel ? orderLevelDiscountAllocations.get(selectedDiscount2.id) : null;
|
|
1399
948
|
const productAllocation = orderLevelAllocation == null ? void 0 : orderLevelAllocation.get(flatItem._id);
|
|
1400
949
|
let targetProductTotal;
|
|
1401
950
|
let fixedAmountPerItem;
|
|
@@ -1406,42 +955,39 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1406
955
|
targetProductTotal = Math.max(new import_decimal.default(productOriginTotal).minus(fixedAmountPerItem).toNumber(), 0);
|
|
1407
956
|
} else {
|
|
1408
957
|
targetProductTotal = (0, import_utils.getDiscountAmount)(
|
|
1409
|
-
|
|
958
|
+
selectedDiscount2,
|
|
1410
959
|
productOriginTotal,
|
|
1411
960
|
productOriginTotal
|
|
1412
961
|
);
|
|
1413
962
|
fixedAmountPerItem = new import_decimal.default(productOriginTotal).minus(targetProductTotal).toNumber();
|
|
1414
963
|
}
|
|
1415
|
-
const bundleActualDiscountAmount = new import_decimal.default(productOriginTotal).minus(targetProductTotal).toNumber();
|
|
1416
964
|
const uniqueId = flatItem._id;
|
|
1417
965
|
const discountDetail = {
|
|
1418
|
-
amount:
|
|
1419
|
-
type:
|
|
966
|
+
amount: fixedAmountPerItem * (product.num || 1),
|
|
967
|
+
type: selectedDiscount2.tag === "product_discount_card" ? "discount_card" : selectedDiscount2.tag,
|
|
1420
968
|
discount: {
|
|
1421
|
-
discount_card_type: (
|
|
1422
|
-
fixed_amount:
|
|
1423
|
-
discount_calculation_mode: (
|
|
1424
|
-
resource_id:
|
|
1425
|
-
title:
|
|
969
|
+
discount_card_type: (_A = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _A.discount_card_type,
|
|
970
|
+
fixed_amount: fixedAmountPerItem,
|
|
971
|
+
discount_calculation_mode: (_B = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _B.discount_calculation_mode,
|
|
972
|
+
resource_id: selectedDiscount2.id,
|
|
973
|
+
title: selectedDiscount2.format_title,
|
|
1426
974
|
original_amount: product.original_price,
|
|
1427
975
|
product_id: product.id,
|
|
1428
|
-
percent:
|
|
1429
|
-
discount_product_id: currentBundleDiscount.product_id
|
|
976
|
+
percent: selectedDiscount2.par_value
|
|
1430
977
|
},
|
|
1431
978
|
metadata: {
|
|
1432
979
|
// 🔥 使用唯一的 _id
|
|
1433
980
|
custom_product_bundle_map_id: uniqueId,
|
|
1434
|
-
discount_rule_uncheck_flag:
|
|
981
|
+
discount_rule_uncheck_flag: selectedDiscount2 == null ? void 0 : selectedDiscount2.discount_rule_uncheck_flag,
|
|
1435
982
|
num: product.num || 1,
|
|
1436
983
|
// 🔥 order_level 分摊差值
|
|
1437
984
|
...productDiscountDifference !== void 0 && { product_discount_difference: productDiscountDifference }
|
|
1438
985
|
},
|
|
1439
|
-
|
|
1440
|
-
_num: (product.num || 1) * (((_M = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _M.num) || 1)
|
|
986
|
+
_num: (product.num || 1) * (((_C = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _C.num) || 1)
|
|
1441
987
|
};
|
|
1442
|
-
const appliedProducts = appliedDiscountProducts.get(
|
|
988
|
+
const appliedProducts = appliedDiscountProducts.get(selectedDiscount2.id) || [];
|
|
1443
989
|
appliedProducts.push(discountDetail);
|
|
1444
|
-
appliedDiscountProducts.set(
|
|
990
|
+
appliedDiscountProducts.set(selectedDiscount2.id, appliedProducts);
|
|
1445
991
|
processedItems.push({
|
|
1446
992
|
...flatItem,
|
|
1447
993
|
total: targetProductTotal,
|
|
@@ -1460,7 +1006,6 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1460
1006
|
const mainProductArr = processedProductsMap2.get(product._id);
|
|
1461
1007
|
if (!mainProductArr || mainProductArr.length === 0) {
|
|
1462
1008
|
const getDefaultProduct = () => {
|
|
1463
|
-
const restoredOptions = restoreOptionPrices(product.options);
|
|
1464
1009
|
if (product.isClient) {
|
|
1465
1010
|
return this.hooks.setProduct(originProduct, {
|
|
1466
1011
|
discount_list: this.filterDiscountListByType(product.discount_list, "promotion"),
|
|
@@ -1470,7 +1015,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1470
1015
|
original_price: product.original_price
|
|
1471
1016
|
},
|
|
1472
1017
|
bundle: product.bundle,
|
|
1473
|
-
options:
|
|
1018
|
+
options: product.options
|
|
1474
1019
|
}),
|
|
1475
1020
|
variant: originProduct._productInit.variant,
|
|
1476
1021
|
original_price: originProduct._productInit.original_price,
|
|
@@ -1479,17 +1024,15 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1479
1024
|
price: product.price
|
|
1480
1025
|
},
|
|
1481
1026
|
bundle: product.bundle,
|
|
1482
|
-
options:
|
|
1483
|
-
})
|
|
1484
|
-
options: restoredOptions
|
|
1027
|
+
options: product.options
|
|
1028
|
+
})
|
|
1485
1029
|
});
|
|
1486
1030
|
} else {
|
|
1487
1031
|
return this.hooks.setProduct(originProduct, {
|
|
1488
1032
|
discount_list: this.filterDiscountListByType(product.discount_list, "promotion"),
|
|
1489
1033
|
total: product.total,
|
|
1490
1034
|
origin_total: product.origin_total,
|
|
1491
|
-
price: product.price
|
|
1492
|
-
options: restoreOptionPrices(product.options)
|
|
1035
|
+
price: product.price
|
|
1493
1036
|
});
|
|
1494
1037
|
}
|
|
1495
1038
|
};
|
|
@@ -1529,92 +1072,80 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1529
1072
|
const mainProduct = mainProductArr[0];
|
|
1530
1073
|
const mainProductData = this.hooks.getProduct(mainProduct);
|
|
1531
1074
|
const newBundleWithDiscount = [];
|
|
1532
|
-
(product.bundle || []).forEach(
|
|
1533
|
-
(
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
metadata:
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1075
|
+
(product.bundle || []).forEach((bundleItem, bundleIndex) => {
|
|
1076
|
+
const processedItems = bundleProcessingInfo.get(bundleIndex) || [bundleItem];
|
|
1077
|
+
if (processedItems.length > 1) {
|
|
1078
|
+
processedItems.forEach((item) => {
|
|
1079
|
+
const updatedDiscountList2 = (item.discount_list || []).map((discount) => {
|
|
1080
|
+
var _a;
|
|
1081
|
+
return {
|
|
1082
|
+
...discount,
|
|
1083
|
+
metadata: {
|
|
1084
|
+
...discount.metadata,
|
|
1085
|
+
num: item.num,
|
|
1086
|
+
custom_product_bundle_map_id: (_a = item.metadata) == null ? void 0 : _a.custom_product_bundle_map_id
|
|
1087
|
+
}
|
|
1088
|
+
// num: item.num, // 使用拆分后的 num
|
|
1089
|
+
};
|
|
1090
|
+
});
|
|
1091
|
+
newBundleWithDiscount.push({
|
|
1092
|
+
...bundleItem,
|
|
1093
|
+
_id: item._id,
|
|
1094
|
+
product_id: bundleItem.product_id,
|
|
1095
|
+
price: item.price,
|
|
1096
|
+
num: item.num,
|
|
1097
|
+
discount_list: updatedDiscountList2
|
|
1098
|
+
});
|
|
1099
|
+
});
|
|
1100
|
+
} else {
|
|
1101
|
+
const item = processedItems[0];
|
|
1102
|
+
if (item.processed) {
|
|
1103
|
+
const updatedDiscountList2 = (item.discount_list || []).map((discount) => {
|
|
1104
|
+
var _a;
|
|
1105
|
+
return {
|
|
1106
|
+
...discount,
|
|
1107
|
+
metadata: {
|
|
1108
|
+
...discount.metadata,
|
|
1109
|
+
num: item.num,
|
|
1110
|
+
custom_product_bundle_map_id: (_a = item.metadata) == null ? void 0 : _a.custom_product_bundle_map_id
|
|
1111
|
+
}
|
|
1112
|
+
// num: item.num, // 使用当前的 num
|
|
1113
|
+
};
|
|
1114
|
+
});
|
|
1115
|
+
newBundleWithDiscount.push({
|
|
1116
|
+
...bundleItem,
|
|
1117
|
+
_id: item._id,
|
|
1118
|
+
product_id: bundleItem.product_id,
|
|
1119
|
+
price: item.price,
|
|
1120
|
+
num: item.num,
|
|
1121
|
+
discount_list: updatedDiscountList2
|
|
1560
1122
|
});
|
|
1561
1123
|
} else {
|
|
1562
|
-
|
|
1563
|
-
if (item.processed) {
|
|
1564
|
-
const updatedDiscountList2 = (item.discount_list || []).map((discount) => {
|
|
1565
|
-
var _a;
|
|
1566
|
-
return {
|
|
1567
|
-
...discount,
|
|
1568
|
-
metadata: {
|
|
1569
|
-
...discount.metadata,
|
|
1570
|
-
num: item.num,
|
|
1571
|
-
custom_product_bundle_map_id: (_a = item.metadata) == null ? void 0 : _a.custom_product_bundle_map_id
|
|
1572
|
-
}
|
|
1573
|
-
// num: item.num, // 使用当前的 num
|
|
1574
|
-
};
|
|
1575
|
-
});
|
|
1576
|
-
newBundleWithDiscount.push({
|
|
1577
|
-
...bundleItem,
|
|
1578
|
-
_id: item._id,
|
|
1579
|
-
product_id: bundleItem.product_id,
|
|
1580
|
-
price: item.price,
|
|
1581
|
-
num: item.num,
|
|
1582
|
-
quantity: item.num,
|
|
1583
|
-
discount_list: updatedDiscountList2
|
|
1584
|
-
});
|
|
1585
|
-
} else {
|
|
1586
|
-
newBundleWithDiscount.push(item);
|
|
1587
|
-
}
|
|
1124
|
+
newBundleWithDiscount.push(item);
|
|
1588
1125
|
}
|
|
1589
1126
|
}
|
|
1590
|
-
);
|
|
1127
|
+
});
|
|
1591
1128
|
let newTotalWithDiscount = Number(mainProductData.price || 0);
|
|
1592
|
-
let newOriginTotalWithDiscount = Number(
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
var _a, _b;
|
|
1598
|
-
if ((_a = discount == null ? void 0 : discount.metadata) == null ? void 0 : _a.custom_product_bundle_map_id) {
|
|
1599
|
-
return discount;
|
|
1600
|
-
}
|
|
1601
|
-
return {
|
|
1602
|
-
...discount,
|
|
1603
|
-
// num: 1,
|
|
1604
|
-
metadata: {
|
|
1605
|
-
...discount.metadata,
|
|
1606
|
-
custom_product_bundle_map_id: (_b = discount == null ? void 0 : discount.metadata) == null ? void 0 : _b.custom_product_bundle_map_id,
|
|
1607
|
-
num: 1
|
|
1608
|
-
}
|
|
1609
|
-
};
|
|
1129
|
+
let newOriginTotalWithDiscount = Number(mainProductData.original_price || mainProductData.price || 0);
|
|
1130
|
+
const updatedMainDiscountList = mainProductData.discount_list.map((discount) => {
|
|
1131
|
+
var _a, _b;
|
|
1132
|
+
if ((_a = discount == null ? void 0 : discount.metadata) == null ? void 0 : _a.custom_product_bundle_map_id) {
|
|
1133
|
+
return discount;
|
|
1610
1134
|
}
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1135
|
+
return {
|
|
1136
|
+
...discount,
|
|
1137
|
+
// num: 1,
|
|
1138
|
+
metadata: {
|
|
1139
|
+
...discount.metadata,
|
|
1140
|
+
custom_product_bundle_map_id: (_b = discount == null ? void 0 : discount.metadata) == null ? void 0 : _b.custom_product_bundle_map_id,
|
|
1141
|
+
num: 1
|
|
1142
|
+
}
|
|
1143
|
+
};
|
|
1144
|
+
});
|
|
1145
|
+
const mainDiscountList = updatedMainDiscountList.filter((item) => {
|
|
1146
|
+
var _a;
|
|
1147
|
+
return !((_a = item == null ? void 0 : item.metadata) == null ? void 0 : _a.custom_product_bundle_map_id);
|
|
1148
|
+
});
|
|
1618
1149
|
if (mainDiscountList && mainDiscountList.length > 0) {
|
|
1619
1150
|
const allDiscountAmount = (0, import_utils.getDiscountListAmountTotal)(mainDiscountList);
|
|
1620
1151
|
newTotalWithDiscount = new import_decimal.default(mainProductData.price || 0).minus(allDiscountAmount).toNumber() ?? newTotalWithDiscount;
|
|
@@ -1644,24 +1175,20 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1644
1175
|
quantity: 1,
|
|
1645
1176
|
discount_list: updatedMainDiscountList,
|
|
1646
1177
|
bundle: newBundleWithDiscount,
|
|
1647
|
-
total: newTotalWithDiscount,
|
|
1648
|
-
origin_total: newOriginTotalWithDiscount
|
|
1178
|
+
total: new import_decimal.default(newTotalWithDiscount).toDecimalPlaces(2, import_decimal.default.ROUND_HALF_UP).toNumber(),
|
|
1179
|
+
origin_total: new import_decimal.default(newOriginTotalWithDiscount).toDecimalPlaces(2, import_decimal.default.ROUND_HALF_UP).toNumber()
|
|
1649
1180
|
})
|
|
1650
1181
|
);
|
|
1651
1182
|
if (mainProductQuantity > 1) {
|
|
1652
1183
|
const newBundleOriginal = [];
|
|
1653
|
-
(product.bundle || []).forEach(
|
|
1654
|
-
(
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
}
|
|
1660
|
-
);
|
|
1184
|
+
(product.bundle || []).forEach((bundleItem, bundleIndex) => {
|
|
1185
|
+
newBundleOriginal.push({
|
|
1186
|
+
...bundleItem,
|
|
1187
|
+
discount_list: []
|
|
1188
|
+
});
|
|
1189
|
+
});
|
|
1661
1190
|
let newTotalOriginal = Number(mainProductData.price || 0);
|
|
1662
|
-
let newOriginTotalOriginal = Number(
|
|
1663
|
-
mainProductData.original_price || mainProductData.price || 0
|
|
1664
|
-
);
|
|
1191
|
+
let newOriginTotalOriginal = Number(mainProductData.original_price || mainProductData.price || 0);
|
|
1665
1192
|
const updatedMainDiscountListOriginal = mainProductData.discount_list.map((discount) => {
|
|
1666
1193
|
var _a, _b;
|
|
1667
1194
|
if ((_a = discount == null ? void 0 : discount.metadata) == null ? void 0 : _a.custom_product_bundle_map_id) {
|
|
@@ -1677,16 +1204,12 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1677
1204
|
// num: mainProductQuantity - 1,
|
|
1678
1205
|
};
|
|
1679
1206
|
});
|
|
1680
|
-
const mainDiscountListOriginal = updatedMainDiscountListOriginal.filter(
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
}
|
|
1685
|
-
);
|
|
1207
|
+
const mainDiscountListOriginal = updatedMainDiscountListOriginal.filter((item) => {
|
|
1208
|
+
var _a;
|
|
1209
|
+
return !((_a = item == null ? void 0 : item.metadata) == null ? void 0 : _a.custom_product_bundle_map_id);
|
|
1210
|
+
});
|
|
1686
1211
|
if (mainDiscountListOriginal && mainDiscountListOriginal.length > 0) {
|
|
1687
|
-
const allDiscountAmount = (0, import_utils.getDiscountListAmount)(
|
|
1688
|
-
mainDiscountListOriginal
|
|
1689
|
-
);
|
|
1212
|
+
const allDiscountAmount = (0, import_utils.getDiscountListAmount)(mainDiscountListOriginal);
|
|
1690
1213
|
newTotalOriginal = new import_decimal.default(mainProductData.price || 0).minus(allDiscountAmount).toNumber() ?? newTotalOriginal;
|
|
1691
1214
|
newOriginTotalOriginal = mainProductData.origin_total ?? newOriginTotalOriginal;
|
|
1692
1215
|
}
|
|
@@ -1723,59 +1246,48 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1723
1246
|
const mainProductData = this.hooks.getProduct(mainProduct);
|
|
1724
1247
|
const newBundle = [];
|
|
1725
1248
|
if (product.bundle && Array.isArray(product.bundle)) {
|
|
1726
|
-
product.bundle.forEach(
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
metadata
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
};
|
|
1745
|
-
});
|
|
1746
|
-
newBundle.push({
|
|
1747
|
-
...bundleItem,
|
|
1748
|
-
_id: item._id,
|
|
1749
|
-
product_id: bundleItem.product_id,
|
|
1750
|
-
price: item.price,
|
|
1751
|
-
num: item.num,
|
|
1752
|
-
quantity: item.num,
|
|
1753
|
-
discount_list: updatedDiscountList2,
|
|
1754
|
-
bundle_selling_price: bundleItem.bundle_selling_price !== void 0 ? item.price : void 0
|
|
1755
|
-
});
|
|
1249
|
+
product.bundle.forEach((bundleItem, bundleIndex) => {
|
|
1250
|
+
const bundleItemId = `${product._id}_bundle_${bundleIndex}`;
|
|
1251
|
+
const processedBundleItems = processedFlatItemsMap2.get(bundleItemId);
|
|
1252
|
+
if (!processedBundleItems || processedBundleItems.length === 0) {
|
|
1253
|
+
newBundle.push(bundleItem);
|
|
1254
|
+
} else {
|
|
1255
|
+
processedBundleItems.forEach((item) => {
|
|
1256
|
+
const updatedDiscountList2 = (item.discount_list || []).map((discount) => {
|
|
1257
|
+
var _a2;
|
|
1258
|
+
return {
|
|
1259
|
+
...discount,
|
|
1260
|
+
metadata: {
|
|
1261
|
+
...discount.metadata,
|
|
1262
|
+
num: item.num,
|
|
1263
|
+
custom_product_bundle_map_id: (_a2 = discount == null ? void 0 : discount.metadata) == null ? void 0 : _a2.custom_product_bundle_map_id
|
|
1264
|
+
}
|
|
1265
|
+
// num: item.num, // 使用拆分后的 num
|
|
1266
|
+
};
|
|
1756
1267
|
});
|
|
1757
|
-
|
|
1268
|
+
newBundle.push({
|
|
1269
|
+
...bundleItem,
|
|
1270
|
+
_id: item._id,
|
|
1271
|
+
product_id: bundleItem.product_id,
|
|
1272
|
+
price: item.price,
|
|
1273
|
+
num: item.num,
|
|
1274
|
+
discount_list: updatedDiscountList2
|
|
1275
|
+
});
|
|
1276
|
+
});
|
|
1758
1277
|
}
|
|
1759
|
-
);
|
|
1278
|
+
});
|
|
1760
1279
|
}
|
|
1761
1280
|
let newTotal = Number(mainProductData.price || 0);
|
|
1762
|
-
let newOriginTotal = Number(
|
|
1763
|
-
|
|
1764
|
-
);
|
|
1765
|
-
const isManualDiscount = typeof mainProductData.isManualDiscount === "boolean" ? mainProductData.isManualDiscount : mainProductData.total != mainProductData.origin_total && (!((_a = mainProductData.discount_list) == null ? void 0 : _a.length) || ((_c = (_b = mainProductData == null ? void 0 : mainProductData.discount_list) == null ? void 0 : _b.every) == null ? void 0 : _c.call(
|
|
1766
|
-
_b,
|
|
1767
|
-
(item) => item.type === "product"
|
|
1768
|
-
)));
|
|
1281
|
+
let newOriginTotal = Number(mainProductData.original_price || mainProductData.price || 0);
|
|
1282
|
+
const isManualDiscount = typeof mainProductData.isManualDiscount === "boolean" ? mainProductData.isManualDiscount : mainProductData.total != mainProductData.origin_total && (!((_a = mainProductData.discount_list) == null ? void 0 : _a.length) || ((_c = (_b = mainProductData == null ? void 0 : mainProductData.discount_list) == null ? void 0 : _b.every) == null ? void 0 : _c.call(_b, (item) => item.type === "product")));
|
|
1769
1283
|
if (isManualDiscount) {
|
|
1770
1284
|
newTotal = mainProductData.total ?? newTotal;
|
|
1771
1285
|
newOriginTotal = mainProductData.origin_total ?? newOriginTotal;
|
|
1772
1286
|
} else {
|
|
1773
|
-
const mainDiscountList = mainProductData.discount_list.filter(
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
}
|
|
1778
|
-
);
|
|
1287
|
+
const mainDiscountList = mainProductData.discount_list.filter((item) => {
|
|
1288
|
+
var _a2;
|
|
1289
|
+
return !((_a2 = item == null ? void 0 : item.metadata) == null ? void 0 : _a2.custom_product_bundle_map_id);
|
|
1290
|
+
});
|
|
1779
1291
|
if (mainDiscountList && mainDiscountList.length > 0) {
|
|
1780
1292
|
const allDiscountAmount = (0, import_utils.getDiscountListAmount)(mainDiscountList);
|
|
1781
1293
|
newTotal = new import_decimal.default(mainProductData.price || 0).minus(allDiscountAmount).toNumber() ?? newTotal;
|
|
@@ -1783,8 +1295,10 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1783
1295
|
}
|
|
1784
1296
|
if (newBundle.length > 0) {
|
|
1785
1297
|
newBundle.forEach((item) => {
|
|
1786
|
-
var _a2, _b2, _c2;
|
|
1787
1298
|
newTotal += Number(item.price) * Number(item.num);
|
|
1299
|
+
});
|
|
1300
|
+
newBundle.forEach((item) => {
|
|
1301
|
+
var _a2, _b2, _c2;
|
|
1788
1302
|
const originalPrice = ((_c2 = (_b2 = (_a2 = item.discount_list) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.discount) == null ? void 0 : _c2.original_amount) || item.price;
|
|
1789
1303
|
newOriginTotal += Number(originalPrice) * Number(item.num);
|
|
1790
1304
|
});
|
|
@@ -1797,6 +1311,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1797
1311
|
return accumulator.add(currentPrice.mul(currentNum));
|
|
1798
1312
|
}, new import_decimal.default(newTotal)).toNumber();
|
|
1799
1313
|
}
|
|
1314
|
+
newTotal = new import_decimal.default(newTotal).toDecimalPlaces(2, import_decimal.default.ROUND_HALF_UP).toNumber();
|
|
1315
|
+
newOriginTotal = new import_decimal.default(newOriginTotal).toDecimalPlaces(2, import_decimal.default.ROUND_HALF_UP).toNumber();
|
|
1800
1316
|
result.push(
|
|
1801
1317
|
this.hooks.setProduct(mainProduct, {
|
|
1802
1318
|
...mainProductData,
|