@pisell/pisellos 2.3.74 → 2.3.76
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/core/index.js +6 -10
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/strategy-example.js +5 -19
- package/dist/modules/Cart/index.js +0 -3
- package/dist/modules/Cart/utils/cartProduct.js +0 -1
- package/dist/modules/Date/index.js +1 -5
- package/dist/modules/Discount/index.js +2 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +75 -91
- package/dist/modules/Order/types.d.ts +3 -1
- package/dist/modules/Payment/index.js +97 -162
- package/dist/modules/Rules/index.js +1 -4
- package/dist/modules/Schedule/index.js +0 -1
- package/dist/modules/Schedule/utils.js +0 -1
- package/dist/modules/Step/index.js +0 -1
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.js +97 -129
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/order/index.js +2 -4
- package/dist/server/modules/products/index.js +24 -42
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +3 -4
- package/dist/server/modules/schedule/index.js +27 -35
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BaseSales/index.js +100 -72
- package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
- package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
- package/dist/solution/BookingByStep/index.js +7 -59
- package/dist/solution/BookingByStep/utils/capacity.js +1 -11
- package/dist/solution/BookingByStep/utils/resources.js +1 -3
- package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
- package/dist/solution/BookingTicket/index.js +0 -2
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
- package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
- package/dist/solution/BuyTickets/index.js +9 -12
- package/dist/solution/Checkout/index.js +177 -252
- package/dist/solution/Checkout/utils/index.js +4 -16
- package/dist/solution/RegisterAndLogin/index.js +30 -76
- package/dist/solution/ScanOrder/index.js +50 -60
- package/dist/solution/ShopDiscount/index.js +2 -7
- package/dist/solution/VenueBooking/index.js +45 -55
- package/dist/utils/task.js +15 -18
- package/dist/utils/watch.js +0 -1
- package/lib/apis/picoding.js +2 -0
- package/lib/core/index.js +134 -134
- package/lib/effects/index.js +46 -57
- package/lib/index.js +82 -49
- package/lib/model/index.js +14 -21
- package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
- package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
- package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
- package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
- package/lib/model/strategy/adapter/index.js +100 -64
- package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
- package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
- package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
- package/lib/model/strategy/adapter/itemRule/index.js +83 -57
- package/lib/model/strategy/adapter/itemRule/type.js +97 -36
- package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
- package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
- package/lib/model/strategy/adapter/promotion/examples.js +222 -234
- package/lib/model/strategy/adapter/promotion/index.js +1 -0
- package/lib/model/strategy/adapter/promotion/type.js +243 -36
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
- package/lib/model/strategy/adapter/walletPass/example.js +217 -190
- package/lib/model/strategy/adapter/walletPass/index.js +75 -51
- package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
- package/lib/model/strategy/adapter/walletPass/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
- package/lib/model/strategy/engine.js +270 -168
- package/lib/model/strategy/index.js +49 -34
- package/lib/model/strategy/strategy-example.js +243 -239
- package/lib/model/strategy/type.js +100 -40
- package/lib/modules/Account/index.js +39 -53
- package/lib/modules/Account/types.js +20 -33
- package/lib/modules/AccountList/index.js +116 -154
- package/lib/modules/AccountList/types.js +30 -31
- package/lib/modules/AccountList/utils.js +18 -30
- package/lib/modules/BaseModule.js +23 -42
- package/lib/modules/BookingContext/index.js +158 -136
- package/lib/modules/BookingContext/types.js +46 -32
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
- package/lib/modules/BookingContext/utils/flexible.js +38 -55
- package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
- package/lib/modules/BookingContext/utils/index.js +124 -41
- package/lib/modules/BookingContext/utils/noResource.js +58 -70
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
- package/lib/modules/BookingContext/utils/productExtend.js +202 -155
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
- package/lib/modules/BookingContext/utils/resources.js +209 -167
- package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
- package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
- package/lib/modules/Cart/index.js +170 -124
- package/lib/modules/Cart/types.js +46 -51
- package/lib/modules/Cart/utils/cartAccount.js +40 -39
- package/lib/modules/Cart/utils/cartDate.js +56 -61
- package/lib/modules/Cart/utils/cartDiscount.js +28 -33
- package/lib/modules/Cart/utils/cartNote.js +27 -32
- package/lib/modules/Cart/utils/cartProduct.js +321 -251
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +70 -78
- package/lib/modules/Cart/utils/changePrice.js +22 -50
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +235 -172
- package/lib/modules/Customer/types.js +38 -35
- package/lib/modules/Date/index.js +116 -115
- package/lib/modules/Date/types.js +16 -28
- package/lib/modules/Date/utils.js +174 -123
- package/lib/modules/Discount/index.js +122 -127
- package/lib/modules/Discount/types.js +9 -31
- package/lib/modules/Guests/index.js +30 -56
- package/lib/modules/Guests/types.js +23 -33
- package/lib/modules/Holder/index.js +209 -189
- package/lib/modules/Holder/types.js +4 -16
- package/lib/modules/Holder/utils.js +20 -49
- package/lib/modules/OpenData/index.js +70 -76
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +1733 -2121
- package/lib/modules/Order/payment-utils.js +77 -120
- package/lib/modules/Order/types.d.ts +3 -1
- package/lib/modules/Order/types.js +88 -35
- package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
- package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
- package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
- package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
- package/lib/modules/Order/utils.js +814 -647
- package/lib/modules/Payment/cash.js +20 -33
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
- package/lib/modules/Payment/eftpos.js +16 -30
- package/lib/modules/Payment/index.js +532 -399
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +230 -108
- package/lib/modules/Payment/utils.js +52 -51
- package/lib/modules/Payment/walletpass.js +485 -660
- package/lib/modules/Product/index.js +51 -46
- package/lib/modules/Product/types.js +4 -16
- package/lib/modules/Product/utils.js +32 -33
- package/lib/modules/ProductList/index.js +113 -123
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +81 -118
- package/lib/modules/Quotation/types.js +4 -16
- package/lib/modules/Resource/index.js +27 -59
- package/lib/modules/Resource/types.js +22 -32
- package/lib/modules/Resource/utils.js +30 -38
- package/lib/modules/ResourcePlanner/index.js +25 -23
- package/lib/modules/ResourcePlanner/localClock.js +54 -119
- package/lib/modules/ResourcePlanner/planner.js +589 -770
- package/lib/modules/ResourcePlanner/types.js +10 -29
- package/lib/modules/Rules/index.js +1218 -959
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +85 -90
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +355 -430
- package/lib/modules/ScanOrderLogger/index.js +59 -79
- package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
- package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
- package/lib/modules/ScanOrderLogger/types.js +4 -16
- package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
- package/lib/modules/Schedule/index.js +100 -114
- package/lib/modules/Schedule/type.js +4 -16
- package/lib/modules/Schedule/types.js +4 -16
- package/lib/modules/Schedule/utils.js +433 -291
- package/lib/modules/Step/index.js +40 -52
- package/lib/modules/Step/tyeps.js +4 -16
- package/lib/modules/Summary/index.js +66 -71
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +773 -418
- package/lib/modules/SurchargeList/index.js +46 -60
- package/lib/modules/SurchargeList/types.js +4 -16
- package/lib/modules/index.js +245 -63
- package/lib/plugins/app.js +4 -16
- package/lib/plugins/index.js +36 -25
- package/lib/plugins/request.js +137 -126
- package/lib/plugins/shopStore.js +4 -16
- package/lib/plugins/user.js +4 -16
- package/lib/plugins/window.js +171 -179
- package/lib/server/index.js +3050 -2665
- package/lib/server/modules/floor-plan/index.js +118 -134
- package/lib/server/modules/floor-plan/types.js +15 -30
- package/lib/server/modules/index.js +106 -68
- package/lib/server/modules/menu/index.js +142 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +784 -1002
- package/lib/server/modules/order/types.js +122 -33
- package/lib/server/modules/order/utils/filterBookings.js +219 -194
- package/lib/server/modules/order/utils/filterOrders.js +118 -92
- package/lib/server/modules/payment/index.js +59 -83
- package/lib/server/modules/payment/types.js +4 -16
- package/lib/server/modules/products/index.js +583 -471
- package/lib/server/modules/products/types.js +44 -34
- package/lib/server/modules/quotation/index.js +137 -172
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +220 -186
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +135 -123
- package/lib/server/modules/schedule/types.js +14 -21
- package/lib/server/modules/schedule/utils.js +334 -163
- package/lib/server/types.js +4 -16
- package/lib/server/utils/index.js +25 -23
- package/lib/server/utils/product.js +196 -139
- package/lib/server/utils/schedule.js +34 -41
- package/lib/server/utils/small-ticket.js +479 -456
- package/lib/server/utils/time.js +40 -49
- package/lib/solution/BaseSales/index.js +1220 -1412
- package/lib/solution/BaseSales/types.js +42 -38
- package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
- package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
- package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
- package/lib/solution/BaseSales/utils.js +158 -143
- package/lib/solution/BookingByStep/index.js +1527 -1340
- package/lib/solution/BookingByStep/types.js +40 -99
- package/lib/solution/BookingByStep/utils/capacity.js +192 -160
- package/lib/solution/BookingByStep/utils/products.js +42 -52
- package/lib/solution/BookingByStep/utils/resources.js +527 -330
- package/lib/solution/BookingByStep/utils/stock.js +65 -44
- package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
- package/lib/solution/BookingTicket/index.js +607 -522
- package/lib/solution/BookingTicket/types.js +99 -77
- package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
- package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
- package/lib/solution/BookingTicket/utils/cartView.js +114 -99
- package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
- package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
- package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
- package/lib/solution/BuyTickets/index.js +67 -70
- package/lib/solution/BuyTickets/types.js +22 -38
- package/lib/solution/Checkout/index.js +1451 -1158
- package/lib/solution/Checkout/types.js +91 -61
- package/lib/solution/Checkout/utils/index.js +228 -156
- package/lib/solution/PlaceOrder/index.js +55 -0
- package/lib/solution/RegisterAndLogin/config.js +493 -460
- package/lib/solution/RegisterAndLogin/index.js +633 -630
- package/lib/solution/RegisterAndLogin/types.js +189 -76
- package/lib/solution/RegisterAndLogin/utils.js +183 -125
- package/lib/solution/Sales/index.js +328 -324
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +832 -864
- package/lib/solution/ScanOrder/types.js +33 -34
- package/lib/solution/ScanOrder/utils.js +409 -374
- package/lib/solution/ShopDiscount/index.js +226 -232
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +300 -172
- package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
- package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
- package/lib/solution/UnifiedBookingSales/types.js +10 -32
- package/lib/solution/VenueBooking/index.js +811 -879
- package/lib/solution/VenueBooking/types.js +19 -39
- package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
- package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +124 -41
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/payment-number.js +26 -46
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,44 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(types_exports, {
|
|
22
|
-
DEFAULT_SLOT_CONFIG: () => DEFAULT_SLOT_CONFIG,
|
|
23
|
-
VenueBookingHooks: () => VenueBookingHooks
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
24
5
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return
|
|
33
|
-
}
|
|
34
|
-
|
|
6
|
+
exports.VenueBookingHooks = exports.DEFAULT_SLOT_CONFIG = void 0;
|
|
7
|
+
let VenueBookingHooks = exports.VenueBookingHooks = /*#__PURE__*/function (VenueBookingHooks) {
|
|
8
|
+
VenueBookingHooks["onInited"] = "venueBooking:onInited";
|
|
9
|
+
VenueBookingHooks["onDestroy"] = "venueBooking:onDestroy";
|
|
10
|
+
VenueBookingHooks["onRetryInit"] = "venueBooking:onRetryInit";
|
|
11
|
+
VenueBookingHooks["onRefresh"] = "venueBooking:onRefresh";
|
|
12
|
+
VenueBookingHooks["onCartValidationChanged"] = "venueBooking:onCartValidationChanged";
|
|
13
|
+
return VenueBookingHooks;
|
|
14
|
+
}({}); // ─── 场地预定核心类型 ───
|
|
15
|
+
const DEFAULT_SLOT_CONFIG = exports.DEFAULT_SLOT_CONFIG = {
|
|
35
16
|
slotDurationMinutes: 30,
|
|
36
|
-
businessStartTime:
|
|
37
|
-
businessEndTime:
|
|
17
|
+
businessStartTime: '09:00',
|
|
18
|
+
businessEndTime: '23:00',
|
|
38
19
|
fewLeftThreshold: 0.8
|
|
39
20
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
});
|
|
21
|
+
|
|
22
|
+
// ─── 时段选择 & 合并 ───
|
|
23
|
+
|
|
24
|
+
// ─── Store 状态 ───
|
|
@@ -1,39 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
__export(dateSummary_exports, {
|
|
32
|
-
buildDateRangeSummary: () => buildDateRangeSummary
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
33
5
|
});
|
|
34
|
-
|
|
35
|
-
var
|
|
36
|
-
var
|
|
6
|
+
exports.buildDateRangeSummary = buildDateRangeSummary;
|
|
7
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
8
|
+
var _timeSlot = require("./timeSlot");
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
10
|
function buildDateRangeSummary(params) {
|
|
38
11
|
const {
|
|
39
12
|
startDate,
|
|
@@ -45,19 +18,22 @@ function buildDateRangeSummary(params) {
|
|
|
45
18
|
resolveConfig
|
|
46
19
|
} = params;
|
|
47
20
|
const result = [];
|
|
48
|
-
const productIds = quotationModule ? [...new Set([...resourceProductMap.values()].flat().map(
|
|
49
|
-
let cursor = (0,
|
|
50
|
-
const end = (0,
|
|
21
|
+
const productIds = quotationModule ? [...new Set([...resourceProductMap.values()].flat().map(m => m.productId))] : [];
|
|
22
|
+
let cursor = (0, _dayjs.default)(startDate);
|
|
23
|
+
const end = (0, _dayjs.default)(endDate);
|
|
51
24
|
while (!cursor.isAfter(end)) {
|
|
52
|
-
const date = cursor.format(
|
|
53
|
-
const effectiveConfig =
|
|
25
|
+
const date = cursor.format('YYYY-MM-DD');
|
|
26
|
+
const effectiveConfig = resolveConfig?.(date) || config;
|
|
54
27
|
let quotationPriceMap;
|
|
55
28
|
if (quotationModule && productIds.length) {
|
|
56
|
-
const timeLabels = (0,
|
|
57
|
-
const timePoints = timeLabels.map(
|
|
58
|
-
quotationPriceMap = quotationModule.buildProductPriceMap({
|
|
29
|
+
const timeLabels = (0, _timeSlot.generateTimeLabels)(effectiveConfig);
|
|
30
|
+
const timePoints = timeLabels.map(label => `${date} ${label}`);
|
|
31
|
+
quotationPriceMap = quotationModule.buildProductPriceMap({
|
|
32
|
+
productIds,
|
|
33
|
+
timePoints
|
|
34
|
+
});
|
|
59
35
|
}
|
|
60
|
-
const grid = (0,
|
|
36
|
+
const grid = (0, _timeSlot.buildTimeSlotGrid)({
|
|
61
37
|
date,
|
|
62
38
|
config: effectiveConfig,
|
|
63
39
|
rawResources,
|
|
@@ -69,10 +45,9 @@ function buildDateRangeSummary(params) {
|
|
|
69
45
|
let lowestPrice = null;
|
|
70
46
|
for (const resource of grid.resources) {
|
|
71
47
|
for (const slot of resource.slots) {
|
|
72
|
-
if (slot.status ===
|
|
73
|
-
continue;
|
|
48
|
+
if (slot.status === 'past' || slot.status === 'unavailable') continue;
|
|
74
49
|
totalSlots++;
|
|
75
|
-
if (slot.status ===
|
|
50
|
+
if (slot.status === 'available' || slot.status === 'partially_occupied') {
|
|
76
51
|
availableSlots++;
|
|
77
52
|
if (slot.price !== null) {
|
|
78
53
|
const priceNum = Number(slot.price);
|
|
@@ -85,13 +60,13 @@ function buildDateRangeSummary(params) {
|
|
|
85
60
|
}
|
|
86
61
|
let status;
|
|
87
62
|
if (totalSlots === 0) {
|
|
88
|
-
status =
|
|
63
|
+
status = 'unavailable';
|
|
89
64
|
} else if (availableSlots === 0) {
|
|
90
|
-
status =
|
|
65
|
+
status = 'sold_out';
|
|
91
66
|
} else if ((totalSlots - availableSlots) / totalSlots >= effectiveConfig.fewLeftThreshold) {
|
|
92
|
-
status =
|
|
67
|
+
status = 'few_left';
|
|
93
68
|
} else {
|
|
94
|
-
status =
|
|
69
|
+
status = 'available';
|
|
95
70
|
}
|
|
96
71
|
result.push({
|
|
97
72
|
date,
|
|
@@ -100,11 +75,7 @@ function buildDateRangeSummary(params) {
|
|
|
100
75
|
totalSlots,
|
|
101
76
|
availableSlots
|
|
102
77
|
});
|
|
103
|
-
cursor = cursor.add(1,
|
|
78
|
+
cursor = cursor.add(1, 'day');
|
|
104
79
|
}
|
|
105
80
|
return result;
|
|
106
|
-
}
|
|
107
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
108
|
-
0 && (module.exports = {
|
|
109
|
-
buildDateRangeSummary
|
|
110
|
-
});
|
|
81
|
+
}
|
|
@@ -1,69 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(resource_exports, {
|
|
22
|
-
buildResourceProductMap: () => buildResourceProductMap,
|
|
23
|
-
extractResourceIds: () => extractResourceIds
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
24
5
|
});
|
|
25
|
-
|
|
6
|
+
exports.buildResourceProductMap = buildResourceProductMap;
|
|
7
|
+
exports.extractResourceIds = extractResourceIds;
|
|
8
|
+
/**
|
|
9
|
+
* 从商品列表里抽取所有 resource_id:
|
|
10
|
+
* - 商品绑定的 default_resource / optional_resource
|
|
11
|
+
* - 以及这些资源上声明的 combined_resource.resource_ids(若可从 product_resource 读取)
|
|
12
|
+
* 用于一次性拉到子资源数据,判定组合资源的可用性。
|
|
13
|
+
*/
|
|
26
14
|
function extractResourceIds(products) {
|
|
27
|
-
|
|
28
|
-
const ids = /* @__PURE__ */ new Set();
|
|
15
|
+
const ids = new Set();
|
|
29
16
|
for (const product of products) {
|
|
30
|
-
const resources =
|
|
31
|
-
if (!Array.isArray(resources))
|
|
32
|
-
continue;
|
|
17
|
+
const resources = product.product_resource?.resources;
|
|
18
|
+
if (!Array.isArray(resources)) continue;
|
|
33
19
|
for (const resource of resources) {
|
|
34
|
-
if (resource.status !== 1)
|
|
35
|
-
continue;
|
|
20
|
+
if (resource.status !== 1) continue;
|
|
36
21
|
const defaultRes = resource.default_resource || [];
|
|
37
22
|
const optionalRes = resource.optional_resource || [];
|
|
38
23
|
for (const id of [...defaultRes, ...optionalRes]) {
|
|
39
|
-
if (typeof id ===
|
|
40
|
-
ids.add(id);
|
|
24
|
+
if (typeof id === 'number' && id > 0) ids.add(id);
|
|
41
25
|
}
|
|
42
26
|
const combined = resource.combined_resource;
|
|
43
27
|
if (combined && combined.status === 1 && Array.isArray(combined.resource_ids)) {
|
|
44
28
|
for (const id of combined.resource_ids) {
|
|
45
|
-
if (typeof id ===
|
|
46
|
-
ids.add(id);
|
|
29
|
+
if (typeof id === 'number' && id > 0) ids.add(id);
|
|
47
30
|
}
|
|
48
31
|
}
|
|
49
32
|
}
|
|
50
33
|
}
|
|
51
34
|
return Array.from(ids);
|
|
52
35
|
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 每个 resourceId 可以被多个商品共享(同一场地关联多种运动商品)。
|
|
39
|
+
* Map 的 value 改为 ResourceProductMapping[],按商品出现顺序保留。
|
|
40
|
+
*/
|
|
53
41
|
function buildResourceProductMap(products) {
|
|
54
|
-
|
|
55
|
-
const map = /* @__PURE__ */ new Map();
|
|
42
|
+
const map = new Map();
|
|
56
43
|
for (const product of products) {
|
|
57
|
-
const resources =
|
|
58
|
-
if (!Array.isArray(resources))
|
|
59
|
-
continue;
|
|
44
|
+
const resources = product.product_resource?.resources;
|
|
45
|
+
if (!Array.isArray(resources)) continue;
|
|
60
46
|
for (const resource of resources) {
|
|
61
|
-
if (resource.status !== 1)
|
|
62
|
-
|
|
63
|
-
const allResourceIds = [
|
|
64
|
-
...resource.default_resource || [],
|
|
65
|
-
...resource.optional_resource || []
|
|
66
|
-
];
|
|
47
|
+
if (resource.status !== 1) continue;
|
|
48
|
+
const allResourceIds = [...(resource.default_resource || []), ...(resource.optional_resource || [])];
|
|
67
49
|
for (const resId of allResourceIds) {
|
|
68
50
|
const existing = map.get(resId);
|
|
69
51
|
const mapping = {
|
|
@@ -72,21 +54,16 @@ function buildResourceProductMap(products) {
|
|
|
72
54
|
formName: resource.title,
|
|
73
55
|
resourceName: resource.title,
|
|
74
56
|
formId: resource.id,
|
|
75
|
-
price: product.price ||
|
|
76
|
-
resourceType: resource.type ||
|
|
57
|
+
price: product.price || '0.00',
|
|
58
|
+
resourceType: resource.type || 'single'
|
|
77
59
|
};
|
|
78
60
|
if (!existing) {
|
|
79
61
|
map.set(resId, [mapping]);
|
|
80
|
-
} else if (!existing.some(
|
|
62
|
+
} else if (!existing.some(m => m.productId === mapping.productId)) {
|
|
81
63
|
existing.push(mapping);
|
|
82
64
|
}
|
|
83
65
|
}
|
|
84
66
|
}
|
|
85
67
|
}
|
|
86
68
|
return map;
|
|
87
|
-
}
|
|
88
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
89
|
-
0 && (module.exports = {
|
|
90
|
-
buildResourceProductMap,
|
|
91
|
-
extractResourceIds
|
|
92
|
-
});
|
|
69
|
+
}
|
|
@@ -1,62 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
__export(slotMerge_exports, {
|
|
32
|
-
buildPriceBreakdown: () => buildPriceBreakdown,
|
|
33
|
-
buildVenueBookingEntry: () => buildVenueBookingEntry,
|
|
34
|
-
buildVenueIdentityKey: () => buildVenueIdentityKey,
|
|
35
|
-
buildVenueResourceMetadata: () => buildVenueResourceMetadata,
|
|
36
|
-
expandMergedSlotToIndividual: () => expandMergedSlotToIndividual,
|
|
37
|
-
mergeConsecutiveSlots: () => mergeConsecutiveSlots
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
38
5
|
});
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
6
|
+
exports.buildPriceBreakdown = buildPriceBreakdown;
|
|
7
|
+
exports.buildVenueBookingEntry = buildVenueBookingEntry;
|
|
8
|
+
exports.buildVenueIdentityKey = buildVenueIdentityKey;
|
|
9
|
+
exports.buildVenueResourceMetadata = buildVenueResourceMetadata;
|
|
10
|
+
exports.expandMergedSlotToIndividual = expandMergedSlotToIndividual;
|
|
11
|
+
exports.mergeConsecutiveSlots = mergeConsecutiveSlots;
|
|
12
|
+
var _decimal = _interopRequireDefault(require("decimal.js"));
|
|
13
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
14
|
+
var _utils = require("../../../modules/Order/utils");
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
16
|
function buildVenueIdentityKey(resourceId, groupIndex) {
|
|
44
|
-
return `venue:${resourceId}:${groupIndex}:${(0,
|
|
17
|
+
return `venue:${resourceId}:${groupIndex}:${(0, _utils.createUuidV4)()}`;
|
|
45
18
|
}
|
|
46
19
|
function mergeConsecutiveSlots(slots) {
|
|
47
|
-
if (!slots.length)
|
|
48
|
-
return [];
|
|
20
|
+
if (!slots.length) return [];
|
|
49
21
|
const sorted = [...slots].sort((a, b) => a.startTime.localeCompare(b.startTime));
|
|
50
22
|
const groups = [];
|
|
51
23
|
let currentSlots = [sorted[0]];
|
|
52
24
|
let currentStart = sorted[0].startTime;
|
|
53
25
|
let currentEnd = sorted[0].endTime;
|
|
54
|
-
let totalPrice = new
|
|
26
|
+
let totalPrice = new _decimal.default(sorted[0].price || '0');
|
|
55
27
|
for (let i = 1; i < sorted.length; i++) {
|
|
56
28
|
const slot = sorted[i];
|
|
57
29
|
if (slot.startTime === currentEnd) {
|
|
58
30
|
currentEnd = slot.endTime;
|
|
59
|
-
totalPrice = totalPrice.add(new
|
|
31
|
+
totalPrice = totalPrice.add(new _decimal.default(slot.price || '0'));
|
|
60
32
|
currentSlots.push(slot);
|
|
61
33
|
} else {
|
|
62
34
|
groups.push({
|
|
@@ -69,7 +41,7 @@ function mergeConsecutiveSlots(slots) {
|
|
|
69
41
|
currentSlots = [slot];
|
|
70
42
|
currentStart = slot.startTime;
|
|
71
43
|
currentEnd = slot.endTime;
|
|
72
|
-
totalPrice = new
|
|
44
|
+
totalPrice = new _decimal.default(slot.price || '0');
|
|
73
45
|
}
|
|
74
46
|
}
|
|
75
47
|
groups.push({
|
|
@@ -82,15 +54,21 @@ function mergeConsecutiveSlots(slots) {
|
|
|
82
54
|
return groups;
|
|
83
55
|
}
|
|
84
56
|
function buildPriceBreakdown(params) {
|
|
85
|
-
const {
|
|
86
|
-
|
|
87
|
-
|
|
57
|
+
const {
|
|
58
|
+
group,
|
|
59
|
+
productId,
|
|
60
|
+
quotation
|
|
61
|
+
} = params;
|
|
62
|
+
if (!group.slots.length) return [];
|
|
88
63
|
const entries = [];
|
|
89
64
|
for (const slot of group.slots) {
|
|
90
|
-
const unitPrice = Number(slot.price ||
|
|
91
|
-
const shelfId = quotation ? quotation.getQuotationShelfId({
|
|
92
|
-
|
|
93
|
-
|
|
65
|
+
const unitPrice = Number(slot.price || '0');
|
|
66
|
+
const shelfId = quotation ? quotation.getQuotationShelfId({
|
|
67
|
+
productId,
|
|
68
|
+
datetime: slot.startTime
|
|
69
|
+
}) : 0;
|
|
70
|
+
const startHm = (0, _dayjs.default)(slot.startTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
|
|
71
|
+
const endHm = (0, _dayjs.default)(slot.endTime, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DD HH:mm');
|
|
94
72
|
const last = entries[entries.length - 1];
|
|
95
73
|
if (last && last.unit_price === unitPrice && last.quotation_shelf_id === shelfId && last.end_time === startHm) {
|
|
96
74
|
last.end_time = endHm;
|
|
@@ -108,36 +86,50 @@ function buildPriceBreakdown(params) {
|
|
|
108
86
|
return entries;
|
|
109
87
|
}
|
|
110
88
|
function buildVenueResourceMetadata(params) {
|
|
111
|
-
const {
|
|
112
|
-
|
|
89
|
+
const {
|
|
90
|
+
mapping,
|
|
91
|
+
rawResource
|
|
92
|
+
} = params;
|
|
93
|
+
const combined = rawResource?.combined_resource;
|
|
113
94
|
const isCombined = !!(combined && combined.status === 1 && Array.isArray(combined.resource_ids));
|
|
114
95
|
return {
|
|
115
96
|
form_name: mapping.formName ?? mapping.resourceName,
|
|
116
|
-
resource_name:
|
|
97
|
+
resource_name: rawResource?.main_field ?? mapping.resourceName,
|
|
117
98
|
combined_resource: isCombined ? combined : null
|
|
118
99
|
};
|
|
119
100
|
}
|
|
120
101
|
function buildVenueBookingEntry(params) {
|
|
121
|
-
const {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
102
|
+
const {
|
|
103
|
+
group,
|
|
104
|
+
resourceId,
|
|
105
|
+
mapping,
|
|
106
|
+
rawResource,
|
|
107
|
+
bookingUuid,
|
|
108
|
+
productUid,
|
|
109
|
+
childResources
|
|
110
|
+
} = params;
|
|
111
|
+
const startMoment = (0, _dayjs.default)(group.startTime, 'YYYY-MM-DD HH:mm');
|
|
112
|
+
const endMoment = (0, _dayjs.default)(group.endTime, 'YYYY-MM-DD HH:mm');
|
|
113
|
+
const duration = endMoment.diff(startMoment, 'minute');
|
|
125
114
|
const resourceEntry = {
|
|
126
|
-
relation_type:
|
|
127
|
-
like_status:
|
|
115
|
+
relation_type: 'form',
|
|
116
|
+
like_status: 'common',
|
|
128
117
|
id: resourceId,
|
|
129
118
|
main_field: mapping.resourceName,
|
|
130
|
-
form_id:
|
|
119
|
+
form_id: rawResource?.form_id ?? mapping.formId,
|
|
131
120
|
relation_id: resourceId,
|
|
132
121
|
capacity: 1,
|
|
133
|
-
metadata: buildVenueResourceMetadata({
|
|
122
|
+
metadata: buildVenueResourceMetadata({
|
|
123
|
+
mapping,
|
|
124
|
+
rawResource
|
|
125
|
+
})
|
|
134
126
|
};
|
|
135
127
|
if (childResources && childResources.length) {
|
|
136
|
-
resourceEntry.children = childResources.map(
|
|
137
|
-
relation_type:
|
|
138
|
-
like_status:
|
|
128
|
+
resourceEntry.children = childResources.map(child => ({
|
|
129
|
+
relation_type: 'form',
|
|
130
|
+
like_status: 'common',
|
|
139
131
|
id: child.resourceId,
|
|
140
|
-
main_field: child.main_field ||
|
|
132
|
+
main_field: child.main_field || '',
|
|
141
133
|
form_id: child.form_id ?? child.formId,
|
|
142
134
|
relation_id: child.resourceId,
|
|
143
135
|
capacity: child.capacity ?? 1,
|
|
@@ -146,15 +138,15 @@ function buildVenueBookingEntry(params) {
|
|
|
146
138
|
}
|
|
147
139
|
return {
|
|
148
140
|
schedule_event_id: null,
|
|
149
|
-
appointment_status:
|
|
150
|
-
start_date: startMoment.format(
|
|
151
|
-
start_time: startMoment.format(
|
|
152
|
-
end_date: endMoment.format(
|
|
153
|
-
end_time: endMoment.format(
|
|
154
|
-
select_date: startMoment.format(
|
|
141
|
+
appointment_status: 'new',
|
|
142
|
+
start_date: startMoment.format('YYYY-MM-DD'),
|
|
143
|
+
start_time: startMoment.format('HH:mm'),
|
|
144
|
+
end_date: endMoment.format('YYYY-MM-DD'),
|
|
145
|
+
end_time: endMoment.format('HH:mm'),
|
|
146
|
+
select_date: startMoment.format('YYYY-MM-DD'),
|
|
155
147
|
duration,
|
|
156
|
-
sub_type:
|
|
157
|
-
like_status:
|
|
148
|
+
sub_type: 'minutes',
|
|
149
|
+
like_status: 'common',
|
|
158
150
|
number: 1,
|
|
159
151
|
is_all: false,
|
|
160
152
|
schedule_id: 0,
|
|
@@ -171,67 +163,62 @@ function buildVenueBookingEntry(params) {
|
|
|
171
163
|
}
|
|
172
164
|
};
|
|
173
165
|
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* 从一条已合并的订单商品还原出独立的时段列表。
|
|
169
|
+
* 优先使用 metadata.price_breakdown 还原每个时段的精确价格,
|
|
170
|
+
* 回退到按 selling_price / slot_count 均分。
|
|
171
|
+
*/
|
|
174
172
|
function expandMergedSlotToIndividual(product, slotDurationMinutes) {
|
|
175
173
|
const meta = product.metadata || {};
|
|
176
174
|
const resourceId = meta.resource_id;
|
|
177
|
-
if (resourceId == null)
|
|
178
|
-
return [];
|
|
175
|
+
if (resourceId == null) return [];
|
|
179
176
|
const startTime = meta.start_time;
|
|
180
177
|
const endTime = meta.end_time;
|
|
181
|
-
if (!startTime || !endTime)
|
|
182
|
-
return [];
|
|
178
|
+
if (!startTime || !endTime) return [];
|
|
183
179
|
const productId = Number(product.product_id);
|
|
184
180
|
const breakdown = meta.price_breakdown;
|
|
185
181
|
const result = [];
|
|
186
|
-
let cursor = (0,
|
|
187
|
-
const end = (0,
|
|
188
|
-
if (breakdown
|
|
189
|
-
const priceMap =
|
|
182
|
+
let cursor = (0, _dayjs.default)(startTime, 'YYYY-MM-DD HH:mm');
|
|
183
|
+
const end = (0, _dayjs.default)(endTime, 'YYYY-MM-DD HH:mm');
|
|
184
|
+
if (breakdown?.length) {
|
|
185
|
+
const priceMap = new Map();
|
|
190
186
|
for (const entry of breakdown) {
|
|
191
|
-
let entryCursor = (0,
|
|
192
|
-
const entryEnd = (0,
|
|
187
|
+
let entryCursor = (0, _dayjs.default)(entry.start_time, 'YYYY-MM-DD HH:mm');
|
|
188
|
+
const entryEnd = (0, _dayjs.default)(entry.end_time, 'YYYY-MM-DD HH:mm');
|
|
193
189
|
while (entryCursor.isBefore(entryEnd)) {
|
|
194
|
-
priceMap.set(entryCursor.format(
|
|
195
|
-
entryCursor = entryCursor.add(slotDurationMinutes,
|
|
190
|
+
priceMap.set(entryCursor.format('HH:mm'), entry.unit_price);
|
|
191
|
+
entryCursor = entryCursor.add(slotDurationMinutes, 'minute');
|
|
196
192
|
}
|
|
197
193
|
}
|
|
198
194
|
while (cursor.isBefore(end)) {
|
|
199
|
-
const slotEnd = cursor.add(slotDurationMinutes,
|
|
200
|
-
const hm = cursor.format(
|
|
195
|
+
const slotEnd = cursor.add(slotDurationMinutes, 'minute');
|
|
196
|
+
const hm = cursor.format('HH:mm');
|
|
201
197
|
const price = priceMap.get(hm) ?? 0;
|
|
202
198
|
result.push({
|
|
203
199
|
resourceId,
|
|
204
200
|
productId,
|
|
205
|
-
startTime: cursor.format(
|
|
206
|
-
endTime: slotEnd.format(
|
|
207
|
-
price: new
|
|
201
|
+
startTime: cursor.format('YYYY-MM-DD HH:mm'),
|
|
202
|
+
endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
|
|
203
|
+
price: new _decimal.default(price).toFixed(2)
|
|
208
204
|
});
|
|
209
205
|
cursor = slotEnd;
|
|
210
206
|
}
|
|
211
207
|
} else {
|
|
212
208
|
const slotCount = meta.slot_count || 1;
|
|
213
|
-
const totalPrice = new
|
|
209
|
+
const totalPrice = new _decimal.default(product.selling_price || '0');
|
|
214
210
|
const perSlotPrice = slotCount > 0 ? totalPrice.div(slotCount).toFixed(2) : totalPrice.toFixed(2);
|
|
215
211
|
while (cursor.isBefore(end)) {
|
|
216
|
-
const slotEnd = cursor.add(slotDurationMinutes,
|
|
212
|
+
const slotEnd = cursor.add(slotDurationMinutes, 'minute');
|
|
217
213
|
result.push({
|
|
218
214
|
resourceId,
|
|
219
215
|
productId,
|
|
220
|
-
startTime: cursor.format(
|
|
221
|
-
endTime: slotEnd.format(
|
|
216
|
+
startTime: cursor.format('YYYY-MM-DD HH:mm'),
|
|
217
|
+
endTime: slotEnd.format('YYYY-MM-DD HH:mm'),
|
|
222
218
|
price: perSlotPrice
|
|
223
219
|
});
|
|
224
220
|
cursor = slotEnd;
|
|
225
221
|
}
|
|
226
222
|
}
|
|
227
223
|
return result;
|
|
228
|
-
}
|
|
229
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
230
|
-
0 && (module.exports = {
|
|
231
|
-
buildPriceBreakdown,
|
|
232
|
-
buildVenueBookingEntry,
|
|
233
|
-
buildVenueIdentityKey,
|
|
234
|
-
buildVenueResourceMetadata,
|
|
235
|
-
expandMergedSlotToIndividual,
|
|
236
|
-
mergeConsecutiveSlots
|
|
237
|
-
});
|
|
224
|
+
}
|