@pisell/pisellos 2.2.175 → 2.2.176
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/BookingContext/index.d.ts +37 -0
- package/dist/modules/BookingContext/index.js +436 -0
- package/dist/modules/BookingContext/types.d.ts +102 -0
- package/dist/modules/BookingContext/types.js +51 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +193 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +137 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
- package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +215 -0
- package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/dist/modules/BookingContext/utils/flexible.js +56 -0
- package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
- package/dist/modules/BookingContext/utils/index.d.ts +11 -0
- package/dist/modules/BookingContext/utils/index.js +11 -0
- package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/dist/modules/BookingContext/utils/noResource.js +77 -0
- package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/dist/modules/BookingContext/utils/productExtend.js +339 -0
- package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
- package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
- package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
- package/dist/modules/BookingContext/utils/resources.js +486 -0
- package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
- package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
- package/dist/modules/Customer/index.d.ts +6 -0
- package/dist/modules/Customer/index.js +129 -83
- package/dist/modules/Customer/types.d.ts +2 -0
- package/dist/modules/Discount/index.d.ts +2 -4
- package/dist/modules/Discount/index.js +8 -93
- package/dist/modules/Discount/types.d.ts +1 -7
- package/dist/modules/Order/index.d.ts +84 -17
- package/dist/modules/Order/index.js +1239 -495
- package/dist/modules/Order/types.d.ts +198 -18
- package/dist/modules/Order/types.js +31 -0
- package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/dist/modules/Order/utils/manualProductDiscount.js +212 -0
- package/dist/modules/Order/utils.d.ts +50 -1
- package/dist/modules/Order/utils.js +261 -31
- package/dist/modules/Quotation/index.d.ts +0 -1
- package/dist/modules/Quotation/index.js +23 -21
- package/dist/modules/Rules/index.d.ts +4 -0
- package/dist/modules/Rules/index.js +26 -10
- package/dist/modules/SalesSummary/index.js +4 -2
- package/dist/modules/SalesSummary/utils.js +3 -3
- package/dist/modules/Schedule/index.js +6 -2
- package/dist/modules/index.d.ts +1 -0
- package/dist/modules/index.js +2 -1
- package/dist/server/index.js +87 -29
- package/dist/server/modules/order/utils/filterOrders.js +20 -6
- package/dist/server/modules/products/index.d.ts +1 -1
- package/dist/server/modules/products/index.js +130 -113
- package/dist/server/modules/schedule/index.js +13 -6
- package/dist/solution/BaseSales/index.d.ts +89 -7
- package/dist/solution/BaseSales/index.js +1484 -365
- package/dist/solution/BaseSales/types.d.ts +67 -1
- package/dist/solution/BaseSales/types.js +3 -1
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +275 -0
- package/dist/solution/BaseSales/utils/cartPromotion.js +1258 -0
- package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/dist/solution/BaseSales/utils/quotationPrice.js +237 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +68 -16
- package/dist/solution/BaseSales/utils.js +46 -8
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +133 -1
- package/dist/solution/BookingTicket/index.js +780 -175
- package/dist/solution/BookingTicket/types.d.ts +2 -0
- package/dist/solution/BookingTicket/types.js +3 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
- package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
- package/dist/solution/BookingTicket/utils/cartView.js +4 -2
- package/dist/solution/ScanOrder/index.d.ts +9 -3
- package/dist/solution/ScanOrder/index.js +231 -128
- package/dist/solution/ScanOrder/utils.js +46 -8
- package/dist/solution/ShopDiscount/index.d.ts +0 -1
- package/dist/solution/ShopDiscount/index.js +18 -23
- package/dist/solution/VenueBooking/index.d.ts +5 -9
- package/dist/solution/VenueBooking/index.js +103 -55
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/lib/model/strategy/adapter/promotion/index.js +0 -49
- package/lib/modules/BookingContext/index.d.ts +37 -0
- package/lib/modules/BookingContext/index.js +297 -0
- package/lib/modules/BookingContext/types.d.ts +102 -0
- package/lib/modules/BookingContext/types.js +34 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +207 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +141 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +75 -0
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +198 -0
- package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
- package/lib/modules/BookingContext/utils/flexible.js +80 -0
- package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
- package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
- package/lib/modules/BookingContext/utils/index.d.ts +11 -0
- package/lib/modules/BookingContext/utils/index.js +43 -0
- package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
- package/lib/modules/BookingContext/utils/noResource.js +90 -0
- package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
- package/lib/modules/BookingContext/utils/productExtend.js +283 -0
- package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
- package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
- package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
- package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
- package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
- package/lib/modules/BookingContext/utils/resources.js +377 -0
- package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
- package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
- package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
- package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
- package/lib/modules/Customer/index.d.ts +6 -0
- package/lib/modules/Customer/index.js +26 -11
- package/lib/modules/Customer/types.d.ts +2 -0
- package/lib/modules/Discount/index.d.ts +2 -4
- package/lib/modules/Discount/index.js +8 -63
- package/lib/modules/Discount/types.d.ts +1 -7
- package/lib/modules/Order/index.d.ts +84 -17
- package/lib/modules/Order/index.js +588 -145
- package/lib/modules/Order/types.d.ts +198 -18
- package/lib/modules/Order/types.js +1 -0
- package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
- package/lib/modules/Order/utils/manualProductDiscount.js +207 -0
- package/lib/modules/Order/utils.d.ts +50 -1
- package/lib/modules/Order/utils.js +229 -21
- package/lib/modules/Quotation/index.d.ts +0 -1
- package/lib/modules/Quotation/index.js +18 -15
- package/lib/modules/Rules/index.d.ts +4 -0
- package/lib/modules/Rules/index.js +22 -14
- package/lib/modules/SalesSummary/index.js +4 -2
- package/lib/modules/SalesSummary/utils.js +3 -3
- package/lib/modules/Schedule/index.js +3 -1
- package/lib/modules/index.d.ts +1 -0
- package/lib/modules/index.js +3 -1
- package/lib/server/index.js +41 -4
- package/lib/server/modules/order/utils/filterOrders.js +12 -4
- package/lib/server/modules/products/index.d.ts +1 -1
- package/lib/server/modules/products/index.js +30 -20
- package/lib/server/modules/schedule/index.js +2 -1
- package/lib/solution/BaseSales/index.d.ts +89 -7
- package/lib/solution/BaseSales/index.js +736 -22
- package/lib/solution/BaseSales/types.d.ts +67 -1
- package/lib/solution/BaseSales/types.js +3 -1
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +275 -0
- package/lib/solution/BaseSales/utils/cartPromotion.js +836 -0
- package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
- package/lib/solution/BaseSales/utils/quotationPrice.js +277 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +71 -12
- package/lib/solution/BaseSales/utils.js +46 -6
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +133 -1
- package/lib/solution/BookingTicket/index.js +352 -8
- package/lib/solution/BookingTicket/types.d.ts +2 -0
- package/lib/solution/BookingTicket/types.js +6 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +113 -0
- package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
- package/lib/solution/BookingTicket/utils/cartView.js +4 -2
- package/lib/solution/ScanOrder/index.d.ts +9 -3
- package/lib/solution/ScanOrder/index.js +147 -66
- package/lib/solution/ScanOrder/utils.js +46 -6
- package/lib/solution/ShopDiscount/index.d.ts +0 -1
- package/lib/solution/ShopDiscount/index.js +2 -4
- package/lib/solution/VenueBooking/index.d.ts +5 -9
- package/lib/solution/VenueBooking/index.js +50 -14
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
- package/package.json +2 -2
|
@@ -159,6 +159,14 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
159
159
|
filterDiscountListByType(discountList, type) {
|
|
160
160
|
return (discountList || []).filter((item) => item.type === type || item.tag === type);
|
|
161
161
|
}
|
|
162
|
+
/** 剔除指定 type/tag 的折扣项,保留手动改价(type=product) / 券等 */
|
|
163
|
+
excludeDiscountListByType(discountList, type) {
|
|
164
|
+
return (discountList || []).filter((item) => item.type !== type && item.tag !== type);
|
|
165
|
+
}
|
|
166
|
+
/** 手动改价场景:去掉 promotion,保留 type=product 等行内折扣 */
|
|
167
|
+
resolveDiscountListForManualOverride(discountList) {
|
|
168
|
+
return this.excludeDiscountListByType(discountList, "promotion");
|
|
169
|
+
}
|
|
162
170
|
// 获取券不可用的原因
|
|
163
171
|
getUnavailableReason(discountList, productList) {
|
|
164
172
|
var _a;
|
|
@@ -673,7 +681,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
673
681
|
}, 0);
|
|
674
682
|
};
|
|
675
683
|
sortedFlattenedList.forEach((flatItem, index) => {
|
|
676
|
-
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, _D, _E, _F;
|
|
684
|
+
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, _D, _E, _F, _G;
|
|
677
685
|
let product, originProduct;
|
|
678
686
|
if (flatItem.type === "main") {
|
|
679
687
|
product = flatItem.product;
|
|
@@ -896,7 +904,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
896
904
|
price: product.price,
|
|
897
905
|
options: restoredOptions
|
|
898
906
|
},
|
|
899
|
-
discount_list: this.filterDiscountListByType(product.discount_list, "promotion")
|
|
907
|
+
discount_list: isManualDiscount ? this.resolveDiscountListForManualOverride(product.discount_list) : this.filterDiscountListByType(product.discount_list, "promotion")
|
|
900
908
|
})
|
|
901
909
|
]);
|
|
902
910
|
} else {
|
|
@@ -918,14 +926,14 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
918
926
|
main_product_selling_price,
|
|
919
927
|
options: restoredOptions
|
|
920
928
|
},
|
|
921
|
-
discount_list: this.filterDiscountListByType(product.discount_list, "promotion")
|
|
929
|
+
discount_list: isManualDiscount ? this.resolveDiscountListForManualOverride(product.discount_list) : this.filterDiscountListByType(product.discount_list, "promotion")
|
|
922
930
|
})
|
|
923
931
|
]);
|
|
924
932
|
}
|
|
925
933
|
} else {
|
|
926
934
|
processedFlatItemsMap.set(flatItem._id, [{
|
|
927
935
|
...flatItem,
|
|
928
|
-
discount_list: this.
|
|
936
|
+
discount_list: isManualDiscount ? this.resolveDiscountListForManualOverride(((_v = flatItem.bundleItem) == null ? void 0 : _v.discount_list) || []) : this.filterDiscountListByType(((_w = flatItem.bundleItem) == null ? void 0 : _w.discount_list) || [], "promotion"),
|
|
929
937
|
price: isManualDiscount ? flatItem.bundleItem.price : flatItem.bundleItem.original_price,
|
|
930
938
|
processed: true
|
|
931
939
|
}]);
|
|
@@ -976,13 +984,13 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
976
984
|
if (this.filterDiscountListByType(product.discount_list, "promotion").length && product.origin_total) {
|
|
977
985
|
productOriginTotal = product.origin_total;
|
|
978
986
|
}
|
|
979
|
-
if (Number(((
|
|
987
|
+
if (Number(((_x = originProduct == null ? void 0 : originProduct._productInit) == null ? void 0 : _x.original_price) || 0) > 0 && product.origin_total && product.total && product.origin_total !== product.total) {
|
|
980
988
|
productOriginTotal = product.total;
|
|
981
989
|
}
|
|
982
990
|
const isOrderLevel = (0, import_utils3.isOrderLevelFixedAmountDiscount)(selectedDiscount2);
|
|
983
991
|
const orderLevelAllocation = isOrderLevel ? orderLevelDiscountAllocations.get(selectedDiscount2.id) : null;
|
|
984
992
|
const productAllocation = orderLevelAllocation == null ? void 0 : orderLevelAllocation.get(flatItem._id);
|
|
985
|
-
const isDeductOptionPrice = !!((
|
|
993
|
+
const isDeductOptionPrice = !!((_y = selectedDiscount2.config) == null ? void 0 : _y.deductOptionPrice);
|
|
986
994
|
let mainProductSellingPrice;
|
|
987
995
|
let amount;
|
|
988
996
|
let productDiscountDifference;
|
|
@@ -1000,7 +1008,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1000
1008
|
);
|
|
1001
1009
|
amount = new import_decimal.default(product.price).minus(new import_decimal.default(mainProductSellingPrice)).toNumber();
|
|
1002
1010
|
}
|
|
1003
|
-
if (isDeductOptionPrice && ((
|
|
1011
|
+
if (isDeductOptionPrice && ((_z = product.options) == null ? void 0 : _z.length)) {
|
|
1004
1012
|
const optionResult = applyDiscountToOptions(
|
|
1005
1013
|
product.options,
|
|
1006
1014
|
selectedDiscount2
|
|
@@ -1008,7 +1016,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1008
1016
|
discountedOptions = optionResult.discountedOptions;
|
|
1009
1017
|
optionDiscountAmount = optionResult.optionDiscountAmount;
|
|
1010
1018
|
}
|
|
1011
|
-
const optionsForLineTotal = isDeductOptionPrice && ((
|
|
1019
|
+
const optionsForLineTotal = isDeductOptionPrice && ((_A = product.options) == null ? void 0 : _A.length) ? discountedOptions : product.options;
|
|
1012
1020
|
const optionsLineTotal = getOptionTotal(optionsForLineTotal || []);
|
|
1013
1021
|
const total = new import_decimal.default(mainProductSellingPrice).plus(optionsLineTotal).toNumber();
|
|
1014
1022
|
const mainProductDiscountAmount = amount;
|
|
@@ -1019,9 +1027,9 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1019
1027
|
amount: lineDiscountAmount,
|
|
1020
1028
|
type: selectedDiscount2.tag === "product_discount_card" ? "discount_card" : discountType,
|
|
1021
1029
|
discount: {
|
|
1022
|
-
discount_card_type: (
|
|
1030
|
+
discount_card_type: (_B = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _B.discount_card_type,
|
|
1023
1031
|
fixed_amount: lineDiscountAmount,
|
|
1024
|
-
discount_calculation_mode: (
|
|
1032
|
+
discount_calculation_mode: (_C = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _C.discount_calculation_mode,
|
|
1025
1033
|
resource_id: selectedDiscount2.id,
|
|
1026
1034
|
title: selectedDiscount2.format_title,
|
|
1027
1035
|
original_amount: product.price,
|
|
@@ -1103,7 +1111,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1103
1111
|
type: "good_pass",
|
|
1104
1112
|
discount: {
|
|
1105
1113
|
fixed_amount: product.origin_total,
|
|
1106
|
-
discount_calculation_mode: (
|
|
1114
|
+
discount_calculation_mode: (_D = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _D.discount_calculation_mode,
|
|
1107
1115
|
resource_id: selectedDiscount2.id,
|
|
1108
1116
|
title: selectedDiscount2.format_title,
|
|
1109
1117
|
original_amount: product.origin_total,
|
|
@@ -1177,9 +1185,9 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1177
1185
|
amount: fixedAmountPerItem * (product.num || 1),
|
|
1178
1186
|
type: selectedDiscount2.tag === "product_discount_card" ? "discount_card" : selectedDiscount2.tag,
|
|
1179
1187
|
discount: {
|
|
1180
|
-
discount_card_type: (
|
|
1188
|
+
discount_card_type: (_E = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _E.discount_card_type,
|
|
1181
1189
|
fixed_amount: fixedAmountPerItem,
|
|
1182
|
-
discount_calculation_mode: (
|
|
1190
|
+
discount_calculation_mode: (_F = selectedDiscount2 == null ? void 0 : selectedDiscount2.metadata) == null ? void 0 : _F.discount_calculation_mode,
|
|
1183
1191
|
resource_id: selectedDiscount2.id,
|
|
1184
1192
|
title: selectedDiscount2.format_title,
|
|
1185
1193
|
original_amount: product.original_price,
|
|
@@ -1195,7 +1203,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1195
1203
|
...productDiscountDifference !== void 0 && { product_discount_difference: productDiscountDifference }
|
|
1196
1204
|
},
|
|
1197
1205
|
config: selectedDiscount2 == null ? void 0 : selectedDiscount2.config,
|
|
1198
|
-
_num: (product.num || 1) * (((
|
|
1206
|
+
_num: (product.num || 1) * (((_G = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _G.num) || 1)
|
|
1199
1207
|
};
|
|
1200
1208
|
const appliedProducts = appliedDiscountProducts.get(selectedDiscount2.id) || [];
|
|
1201
1209
|
appliedProducts.push(discountDetail);
|
|
@@ -30,7 +30,8 @@ __reExport(SalesSummary_exports, require("./types"), module.exports);
|
|
|
30
30
|
var salesSummaryDataKeys = {
|
|
31
31
|
isPriceIncludeTax: "is_price_include_tax",
|
|
32
32
|
taxRate: "tax_rate",
|
|
33
|
-
taxTitle: "tax_title"
|
|
33
|
+
taxTitle: "tax_title",
|
|
34
|
+
taxCountryCode: "tax_country_code"
|
|
34
35
|
};
|
|
35
36
|
var SalesSummaryModule = class extends import_BaseModule.BaseModule {
|
|
36
37
|
constructor(name, version) {
|
|
@@ -84,7 +85,8 @@ var SalesSummaryModule = class extends import_BaseModule.BaseModule {
|
|
|
84
85
|
return {
|
|
85
86
|
isPriceIncludeTax: this.getAppData(salesSummaryDataKeys.isPriceIncludeTax),
|
|
86
87
|
taxRate: this.getAppData(salesSummaryDataKeys.taxRate),
|
|
87
|
-
taxTitle: this.getAppData(salesSummaryDataKeys.taxTitle)
|
|
88
|
+
taxTitle: this.getAppData(salesSummaryDataKeys.taxTitle),
|
|
89
|
+
taxCountryCode: this.getAppData(salesSummaryDataKeys.taxCountryCode)
|
|
88
90
|
};
|
|
89
91
|
}
|
|
90
92
|
async getSummary(params) {
|
|
@@ -393,8 +393,8 @@ function calculateSalesSummary(params) {
|
|
|
393
393
|
);
|
|
394
394
|
}
|
|
395
395
|
const shopDiscountAmount = import_decimal.default.max(new import_decimal.default(Number(shopDiscount) || 0), 0);
|
|
396
|
-
const
|
|
397
|
-
const totalAmount = isPriceIncludeTax === 1 ?
|
|
396
|
+
const preTaxExpectAmount = import_decimal.default.max(0, productAmount.plus(surchargeAmount).minus(shopDiscountAmount));
|
|
397
|
+
const totalAmount = isPriceIncludeTax === 1 ? preTaxExpectAmount : preTaxExpectAmount.plus(productTaxFee);
|
|
398
398
|
const deposit = calculateProductsDeposit(products);
|
|
399
399
|
return {
|
|
400
400
|
product_quantity: productQuantity,
|
|
@@ -412,7 +412,7 @@ function calculateSalesSummary(params) {
|
|
|
412
412
|
),
|
|
413
413
|
deposit_amount: deposit ? deposit.total : "0.00",
|
|
414
414
|
deposit,
|
|
415
|
-
expect_amount: toFixed2(
|
|
415
|
+
expect_amount: toFixed2(totalAmount),
|
|
416
416
|
total_amount: toFixed2(totalAmount),
|
|
417
417
|
total_refund_amount: "0.00",
|
|
418
418
|
customer_paid_amount: "0.00",
|
|
@@ -135,7 +135,9 @@ var ScheduleModule = class extends import_BaseModule.BaseModule {
|
|
|
135
135
|
return dates;
|
|
136
136
|
}
|
|
137
137
|
getScheduleListByIds(ids) {
|
|
138
|
-
|
|
138
|
+
const idSet = new Set(ids.map((id) => String(id)));
|
|
139
|
+
const list = this.store.scheduleList.filter((n) => idSet.has(String(n.id)));
|
|
140
|
+
return list;
|
|
139
141
|
}
|
|
140
142
|
setAvailabilityScheduleDateList(list) {
|
|
141
143
|
this.store.availabilityDateList = list;
|
package/lib/modules/index.d.ts
CHANGED
package/lib/modules/index.js
CHANGED
|
@@ -34,6 +34,7 @@ __reExport(modules_exports, require("./Schedule"), module.exports);
|
|
|
34
34
|
__reExport(modules_exports, require("./Quotation"), module.exports);
|
|
35
35
|
__reExport(modules_exports, require("./ScanOrderLogger"), module.exports);
|
|
36
36
|
__reExport(modules_exports, require("./OpenData"), module.exports);
|
|
37
|
+
__reExport(modules_exports, require("./BookingContext"), module.exports);
|
|
37
38
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
39
|
0 && (module.exports = {
|
|
39
40
|
...require("./Product"),
|
|
@@ -53,5 +54,6 @@ __reExport(modules_exports, require("./OpenData"), module.exports);
|
|
|
53
54
|
...require("./Schedule"),
|
|
54
55
|
...require("./Quotation"),
|
|
55
56
|
...require("./ScanOrderLogger"),
|
|
56
|
-
...require("./OpenData")
|
|
57
|
+
...require("./OpenData"),
|
|
58
|
+
...require("./BookingContext")
|
|
57
59
|
});
|
package/lib/server/index.js
CHANGED
|
@@ -149,10 +149,11 @@ var Server = class {
|
|
|
149
149
|
*/
|
|
150
150
|
this.handleProductQuery = async ({ url, method, data, config }) => {
|
|
151
151
|
console.log("[Server] handleProductQuery:", url, method, data, config);
|
|
152
|
-
const { menu_list_ids, schedule_datetime, schedule_date, customer_id } = data;
|
|
152
|
+
const { menu_list_ids, schedule_datetime, schedule_date, customer_id, ids } = data;
|
|
153
153
|
const { callback, subscriberId } = config || {};
|
|
154
154
|
this.logInfo("handleProductQuery: 开始处理商品查询请求", {
|
|
155
155
|
menu_list_ids,
|
|
156
|
+
ids,
|
|
156
157
|
schedule_datetime,
|
|
157
158
|
schedule_date,
|
|
158
159
|
customer_id
|
|
@@ -160,14 +161,14 @@ var Server = class {
|
|
|
160
161
|
if (subscriberId && typeof callback === "function") {
|
|
161
162
|
this.productQuerySubscribers.set(subscriberId, {
|
|
162
163
|
callback,
|
|
163
|
-
context: { menu_list_ids, schedule_date, schedule_datetime, customer_id }
|
|
164
|
+
context: { menu_list_ids, ids, schedule_date, schedule_datetime, customer_id }
|
|
164
165
|
});
|
|
165
166
|
this.logInfo("handleProductQuery: 已注册订阅者", {
|
|
166
167
|
subscriberId,
|
|
167
168
|
totalSubscribers: this.productQuerySubscribers.size
|
|
168
169
|
});
|
|
169
170
|
}
|
|
170
|
-
return this.computeProductQueryResult({ menu_list_ids, schedule_date, schedule_datetime, customer_id });
|
|
171
|
+
return this.computeProductQueryResult({ menu_list_ids, ids, schedule_date, schedule_datetime, customer_id });
|
|
171
172
|
};
|
|
172
173
|
/**
|
|
173
174
|
* 按商品 id 查询单条(GET /shop/product/query/:productId)
|
|
@@ -931,6 +932,8 @@ var Server = class {
|
|
|
931
932
|
return;
|
|
932
933
|
}
|
|
933
934
|
try {
|
|
935
|
+
await this.schedule.loadAllSchedule();
|
|
936
|
+
this.products.clearPriceCache();
|
|
934
937
|
await this.products.setupQuotationPriceBridge({
|
|
935
938
|
scheduleModule: this.schedule,
|
|
936
939
|
channel: (_a = this.core.context) == null ? void 0 : _a.channel
|
|
@@ -2049,9 +2052,11 @@ var Server = class {
|
|
|
2049
2052
|
*/
|
|
2050
2053
|
async computeProductQueryResult(context, options) {
|
|
2051
2054
|
const tTotal = performance.now();
|
|
2052
|
-
const { menu_list_ids, schedule_date, schedule_datetime, customer_id, product_id } = context;
|
|
2055
|
+
const { menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, product_id } = context;
|
|
2056
|
+
const queryIds = Array.isArray(ids) ? ids.map((id) => Number(id)).filter((id) => Number.isFinite(id)) : [];
|
|
2053
2057
|
this.logInfo("computeProductQueryResult 开始", {
|
|
2054
2058
|
menuListIdsCount: (menu_list_ids == null ? void 0 : menu_list_ids.length) ?? 0,
|
|
2059
|
+
ids: queryIds,
|
|
2055
2060
|
schedule_datetime,
|
|
2056
2061
|
schedule_date,
|
|
2057
2062
|
customer_id,
|
|
@@ -2062,6 +2067,38 @@ var Server = class {
|
|
|
2062
2067
|
this.logError("computeProductQueryResult: Products 模块未注册");
|
|
2063
2068
|
return { message: "Products 模块未注册", data: { list: [], count: 0 } };
|
|
2064
2069
|
}
|
|
2070
|
+
if (queryIds.length > 0) {
|
|
2071
|
+
const uniqueIds = Array.from(new Set(queryIds));
|
|
2072
|
+
const tPrice2 = performance.now();
|
|
2073
|
+
const productsWithPrice = await this.products.getProductsWithPrice(schedule_date, {
|
|
2074
|
+
scheduleModule: this.getSchedule(),
|
|
2075
|
+
schedule_datetime,
|
|
2076
|
+
customer_id
|
|
2077
|
+
}, {
|
|
2078
|
+
changedIds: options == null ? void 0 : options.changedIds,
|
|
2079
|
+
productIds: uniqueIds
|
|
2080
|
+
});
|
|
2081
|
+
(0, import_product.perfMark)("computeQuery.getProductsWithPrice(ids)", performance.now() - tPrice2, {
|
|
2082
|
+
count: productsWithPrice.length,
|
|
2083
|
+
ids: uniqueIds
|
|
2084
|
+
});
|
|
2085
|
+
const filteredProducts2 = productsWithPrice.filter((p) => uniqueIds.includes(Number(p == null ? void 0 : p.id))).filter((p) => ((p == null ? void 0 : p.status) || "published") === "published");
|
|
2086
|
+
(0, import_product.perfMark)("computeProductQueryResult", performance.now() - tTotal, {
|
|
2087
|
+
mode: "ids",
|
|
2088
|
+
ids: uniqueIds,
|
|
2089
|
+
count: filteredProducts2.length
|
|
2090
|
+
});
|
|
2091
|
+
this.logInfo("computeProductQueryResult 完成(ids)", {
|
|
2092
|
+
ids: uniqueIds,
|
|
2093
|
+
count: filteredProducts2.length
|
|
2094
|
+
});
|
|
2095
|
+
return {
|
|
2096
|
+
code: 200,
|
|
2097
|
+
data: { list: filteredProducts2, count: filteredProducts2.length },
|
|
2098
|
+
message: "",
|
|
2099
|
+
status: true
|
|
2100
|
+
};
|
|
2101
|
+
}
|
|
2065
2102
|
if (product_id != null && Number.isFinite(Number(product_id))) {
|
|
2066
2103
|
const pid = Number(product_id);
|
|
2067
2104
|
const tPrice2 = performance.now();
|
|
@@ -33,6 +33,13 @@ __export(filterOrders_exports, {
|
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(filterOrders_exports);
|
|
35
35
|
var import_dayjs = __toESM(require("dayjs"));
|
|
36
|
+
function getOrderPaymentCodes(order) {
|
|
37
|
+
const payments = order.payments;
|
|
38
|
+
if (!Array.isArray(payments) || payments.length === 0) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
return payments.map((item) => item == null ? void 0 : item.code).filter((code) => typeof code === "string" && code.length > 0);
|
|
42
|
+
}
|
|
36
43
|
function filterOrders(orders, filters) {
|
|
37
44
|
const safeFilters = filters || {};
|
|
38
45
|
if (!orders || !Array.isArray(orders)) {
|
|
@@ -133,26 +140,27 @@ function filterOrders(orders, filters) {
|
|
|
133
140
|
}
|
|
134
141
|
}
|
|
135
142
|
if (safeFilters.payment_methods && safeFilters.payment_methods.length > 0) {
|
|
136
|
-
|
|
143
|
+
const orderPaymentCodes = getOrderPaymentCodes(order);
|
|
144
|
+
if (orderPaymentCodes.length === 0) {
|
|
137
145
|
rejected.push({
|
|
138
146
|
order_id: order.order_id,
|
|
139
147
|
order_number: order.order_number,
|
|
140
148
|
reason: {
|
|
141
149
|
field: "payment_methods",
|
|
142
|
-
actual: order.
|
|
150
|
+
actual: order.payments,
|
|
143
151
|
expected: safeFilters.payment_methods
|
|
144
152
|
}
|
|
145
153
|
});
|
|
146
154
|
return false;
|
|
147
155
|
}
|
|
148
|
-
const hasMatch =
|
|
156
|
+
const hasMatch = orderPaymentCodes.some((code) => safeFilters.payment_methods.includes(code));
|
|
149
157
|
if (!hasMatch) {
|
|
150
158
|
rejected.push({
|
|
151
159
|
order_id: order.order_id,
|
|
152
160
|
order_number: order.order_number,
|
|
153
161
|
reason: {
|
|
154
162
|
field: "payment_methods",
|
|
155
|
-
actual:
|
|
163
|
+
actual: orderPaymentCodes,
|
|
156
164
|
expected: safeFilters.payment_methods
|
|
157
165
|
}
|
|
158
166
|
});
|
|
@@ -21,7 +21,7 @@ export declare class ProductsModule extends BaseModule implements Module {
|
|
|
21
21
|
private isPriceFormatterRegistered;
|
|
22
22
|
private quotationPriceBridge?;
|
|
23
23
|
private quotationBridgeChannel?;
|
|
24
|
-
private
|
|
24
|
+
private quotationBridgeLoadedKey?;
|
|
25
25
|
private quotationBridgeRefreshPromise?;
|
|
26
26
|
private quotationBridgeRefreshKey?;
|
|
27
27
|
private productDataSource;
|
|
@@ -44,6 +44,7 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
44
44
|
this.formatters = [];
|
|
45
45
|
// 是否已注册内置价格格式化器
|
|
46
46
|
this.isPriceFormatterRegistered = false;
|
|
47
|
+
this.quotationBridgeLoadedKey = "";
|
|
47
48
|
this.pendingSyncMessages = [];
|
|
48
49
|
}
|
|
49
50
|
async initialize(core, options) {
|
|
@@ -177,7 +178,7 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
177
178
|
* Server 层负责传入完整 schedule 模块,Products 只负责把报价单计算结果转成价格响应形状。
|
|
178
179
|
*/
|
|
179
180
|
async setupQuotationPriceBridge(params) {
|
|
180
|
-
var _a
|
|
181
|
+
var _a;
|
|
181
182
|
if (!this.core) {
|
|
182
183
|
this.logWarning("setupQuotationPriceBridge: core 尚未初始化");
|
|
183
184
|
return;
|
|
@@ -190,15 +191,25 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
190
191
|
this.quotationPriceBridge = quotation;
|
|
191
192
|
}
|
|
192
193
|
if (params.scheduleModule) {
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
scheduleList.map((schedule) => [schedule.id, schedule])
|
|
196
|
-
);
|
|
194
|
+
const scheduleCache = /* @__PURE__ */ new Map();
|
|
195
|
+
let hasLoadedScheduleList = false;
|
|
197
196
|
this.quotationPriceBridge.setScheduleResolver((id) => {
|
|
198
|
-
var _a2,
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
197
|
+
var _a2, _b, _c, _d, _e, _f;
|
|
198
|
+
const scheduleId = String(id);
|
|
199
|
+
if (scheduleCache.has(scheduleId))
|
|
200
|
+
return scheduleCache.get(scheduleId);
|
|
201
|
+
if (!hasLoadedScheduleList) {
|
|
202
|
+
const scheduleList = ((_b = (_a2 = params.scheduleModule).getScheduleList) == null ? void 0 : _b.call(_a2)) || [];
|
|
203
|
+
for (const schedule of scheduleList) {
|
|
204
|
+
scheduleCache.set(String(schedule.id), schedule);
|
|
205
|
+
}
|
|
206
|
+
hasLoadedScheduleList = true;
|
|
207
|
+
}
|
|
208
|
+
if (scheduleCache.has(scheduleId))
|
|
209
|
+
return scheduleCache.get(scheduleId);
|
|
210
|
+
const schedules = ((_d = (_c = params.scheduleModule).getScheduleListByIds) == null ? void 0 : _d.call(_c, [id])) || ((_f = (_e = params.scheduleModule).getScheduleByIds) == null ? void 0 : _f.call(_e, [id])) || [];
|
|
211
|
+
if (schedules[0])
|
|
212
|
+
scheduleCache.set(scheduleId, schedules[0]);
|
|
202
213
|
return schedules[0];
|
|
203
214
|
});
|
|
204
215
|
}
|
|
@@ -210,8 +221,7 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
210
221
|
async refreshQuotationPriceBridge(params) {
|
|
211
222
|
if (!this.quotationPriceBridge)
|
|
212
223
|
return;
|
|
213
|
-
const
|
|
214
|
-
const refreshKey = this.getQuotationBridgeScopeKey(customerId);
|
|
224
|
+
const refreshKey = this.getQuotationBridgeScopeKey();
|
|
215
225
|
if (this.quotationBridgeRefreshPromise && this.quotationBridgeRefreshKey === refreshKey) {
|
|
216
226
|
await this.quotationBridgeRefreshPromise;
|
|
217
227
|
return;
|
|
@@ -221,10 +231,9 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
221
231
|
}
|
|
222
232
|
this.quotationBridgeRefreshKey = refreshKey;
|
|
223
233
|
this.quotationBridgeRefreshPromise = this.quotationPriceBridge.loadQuotations({
|
|
224
|
-
channel: this.quotationBridgeChannel
|
|
225
|
-
customer_id: customerId
|
|
234
|
+
channel: this.quotationBridgeChannel
|
|
226
235
|
}).then(() => {
|
|
227
|
-
this.
|
|
236
|
+
this.quotationBridgeLoadedKey = refreshKey;
|
|
228
237
|
}).finally(() => {
|
|
229
238
|
this.quotationBridgeRefreshPromise = void 0;
|
|
230
239
|
this.quotationBridgeRefreshKey = void 0;
|
|
@@ -243,12 +252,12 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
243
252
|
if (this.quotationBridgeRefreshPromise) {
|
|
244
253
|
await this.quotationBridgeRefreshPromise;
|
|
245
254
|
}
|
|
246
|
-
if (this.getQuotationBridgeScopeKey(
|
|
255
|
+
if (this.getQuotationBridgeScopeKey() !== this.quotationBridgeLoadedKey) {
|
|
247
256
|
await this.refreshQuotationPriceBridge({ customer_id: customerId });
|
|
248
257
|
}
|
|
249
258
|
}
|
|
250
|
-
getQuotationBridgeScopeKey(
|
|
251
|
-
return
|
|
259
|
+
getQuotationBridgeScopeKey() {
|
|
260
|
+
return this.quotationBridgeChannel || "";
|
|
252
261
|
}
|
|
253
262
|
buildPriceDataFromQuotation(product, datetime, customerId) {
|
|
254
263
|
var _a;
|
|
@@ -258,10 +267,11 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
258
267
|
customer_id: customerId
|
|
259
268
|
});
|
|
260
269
|
const productPrice = quotedPrice ?? product.price;
|
|
270
|
+
const productBasePrice = quotedPrice ?? product.base_price ?? product.price ?? 0;
|
|
261
271
|
return {
|
|
262
272
|
id: product.id,
|
|
263
273
|
price: String(productPrice ?? 0),
|
|
264
|
-
base_price: String(
|
|
274
|
+
base_price: String(productBasePrice),
|
|
265
275
|
variant: this.buildVariantPriceData(product, datetime, customerId),
|
|
266
276
|
bundle_group: this.buildBundleGroupPriceData(product, datetime, customerId)
|
|
267
277
|
};
|
|
@@ -278,7 +288,7 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
278
288
|
customer_id: customerId
|
|
279
289
|
});
|
|
280
290
|
const price = quotedPrice ?? variant.price ?? product.price ?? 0;
|
|
281
|
-
const basePrice = variant.base_price ?? variant.price ?? product.base_price ?? product.price ?? 0;
|
|
291
|
+
const basePrice = quotedPrice ?? variant.base_price ?? variant.price ?? product.base_price ?? product.price ?? 0;
|
|
282
292
|
return {
|
|
283
293
|
id: Number(variant.id),
|
|
284
294
|
product_id: Number(variant.product_id ?? product.id),
|
|
@@ -303,7 +313,7 @@ var ProductsModule = class extends import_BaseModule.BaseModule {
|
|
|
303
313
|
customer_id: customerId
|
|
304
314
|
});
|
|
305
315
|
const price = quotedPrice ?? item.price ?? 0;
|
|
306
|
-
const basePrice = item.base_price ?? item.price ?? 0;
|
|
316
|
+
const basePrice = quotedPrice ?? item.base_price ?? item.price ?? 0;
|
|
307
317
|
return {
|
|
308
318
|
id: Number(item.id),
|
|
309
319
|
product_id: Number(item.product_id ?? product.id),
|
|
@@ -183,8 +183,9 @@ var ScheduleModuleEx = class extends import_BaseModule.BaseModule {
|
|
|
183
183
|
return [];
|
|
184
184
|
}
|
|
185
185
|
const result = [];
|
|
186
|
+
const scheduleList = this.store.scheduleList || [];
|
|
186
187
|
for (const id of ids) {
|
|
187
|
-
const schedule = this.store.map.get(id);
|
|
188
|
+
const schedule = this.store.map.get(id) || scheduleList.find((item) => String(item.id) === String(id));
|
|
188
189
|
if (schedule) {
|
|
189
190
|
result.push(schedule);
|
|
190
191
|
}
|