@pisell/pisellos 2.3.42 → 2.3.44
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/Discount/index.d.ts +1 -0
- package/dist/modules/Discount/index.js +40 -11
- package/dist/modules/Discount/types.d.ts +1 -0
- package/dist/modules/Holder/index.d.ts +48 -0
- package/dist/modules/Holder/index.js +640 -0
- package/dist/modules/Holder/types.d.ts +123 -0
- package/dist/modules/Holder/types.js +1 -0
- package/dist/modules/Holder/utils.d.ts +13 -0
- package/dist/modules/Holder/utils.js +34 -0
- package/dist/modules/OpenData/index.js +2 -2
- package/dist/modules/Order/index.d.ts +5 -2
- package/dist/modules/Order/index.js +127 -53
- package/dist/modules/Order/types.d.ts +11 -0
- package/dist/modules/Order/utils.d.ts +10 -0
- package/dist/modules/Order/utils.js +35 -3
- package/dist/modules/Payment/walletpass.d.ts +10 -3
- package/dist/modules/Payment/walletpass.js +425 -282
- package/dist/modules/Product/types.d.ts +1 -0
- package/dist/modules/ProductList/index.js +33 -14
- package/dist/modules/Quotation/index.d.ts +1 -1
- package/dist/modules/Quotation/index.js +2 -2
- package/dist/modules/ResourcePlanner/index.d.ts +24 -0
- package/dist/modules/ResourcePlanner/index.js +181 -0
- package/dist/modules/ResourcePlanner/planner.d.ts +14 -0
- package/dist/modules/ResourcePlanner/planner.js +1069 -0
- package/dist/modules/ResourcePlanner/types.d.ts +227 -0
- package/dist/modules/ResourcePlanner/types.js +1 -0
- package/dist/modules/Rules/index.d.ts +2 -0
- package/dist/modules/Rules/index.js +106 -68
- package/dist/modules/SalesSummary/index.js +12 -13
- package/dist/modules/ScanOrderLogger/index.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/index.js +15 -2
- package/dist/modules/ScanOrderLogger/providers/feishu.js +45 -27
- package/dist/modules/ScanOrderLogger/types.d.ts +1 -0
- package/dist/modules/Schedule/index.d.ts +3 -1
- package/dist/modules/Schedule/index.js +21 -16
- package/dist/modules/Summary/utils.js +38 -13
- package/dist/modules/index.d.ts +2 -0
- package/dist/modules/index.js +3 -1
- package/dist/plugins/window.d.ts +1 -0
- package/dist/server/index.d.ts +14 -0
- package/dist/server/index.js +772 -657
- package/dist/solution/BaseSales/index.d.ts +7 -0
- package/dist/solution/BaseSales/index.js +70 -45
- package/dist/solution/BaseSales/types.d.ts +3 -1
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +6 -3
- package/dist/solution/BookingByStep/index.d.ts +17 -2
- package/dist/solution/BookingByStep/index.js +294 -215
- package/dist/solution/BookingByStep/types.d.ts +2 -1
- package/dist/solution/BookingByStep/types.js +3 -1
- package/dist/solution/BookingByStep/utils/capacity.js +17 -1
- package/dist/solution/BookingByStep/utils/timeslots.d.ts +3 -1
- package/dist/solution/BookingByStep/utils/timeslots.js +19 -12
- package/dist/solution/BookingTicket/index.js +8 -5
- package/dist/solution/BookingTicket/types.d.ts +1 -0
- package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +3 -3
- package/dist/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +10 -2
- package/dist/solution/ScanOrder/index.d.ts +26 -14
- package/dist/solution/ScanOrder/index.js +1142 -739
- package/dist/solution/ScanOrder/types.d.ts +21 -1
- package/dist/solution/ScanOrder/utils.d.ts +8 -0
- package/dist/solution/ScanOrder/utils.js +66 -25
- package/dist/solution/ShopDiscount/index.d.ts +1 -0
- package/dist/solution/ShopDiscount/index.js +125 -87
- package/dist/solution/UnifiedBookingSales/index.d.ts +183 -0
- package/dist/solution/UnifiedBookingSales/index.js +1891 -0
- package/dist/solution/UnifiedBookingSales/types.d.ts +143 -0
- package/dist/solution/UnifiedBookingSales/types.js +11 -0
- package/dist/solution/VenueBooking/index.d.ts +40 -11
- package/dist/solution/VenueBooking/index.js +1167 -841
- package/dist/solution/VenueBooking/types.d.ts +3 -0
- package/dist/solution/VenueBooking/utils/resource.js +1 -0
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -4
- package/dist/solution/VenueBooking/utils/slotMerge.js +10 -5
- package/dist/solution/index.d.ts +1 -0
- package/dist/solution/index.js +2 -1
- package/dist/types/index.d.ts +1 -0
- package/lib/modules/Discount/index.d.ts +1 -0
- package/lib/modules/Discount/index.js +9 -0
- package/lib/modules/Discount/types.d.ts +1 -0
- package/lib/modules/Holder/index.d.ts +48 -0
- package/lib/modules/Holder/index.js +402 -0
- package/lib/modules/Holder/types.d.ts +123 -0
- package/lib/modules/Holder/types.js +17 -0
- package/lib/modules/Holder/utils.d.ts +13 -0
- package/lib/modules/Holder/utils.js +71 -0
- package/lib/modules/OpenData/index.js +1 -1
- package/lib/modules/Order/index.d.ts +5 -2
- package/lib/modules/Order/index.js +72 -17
- package/lib/modules/Order/types.d.ts +11 -0
- package/lib/modules/Order/utils.d.ts +10 -0
- package/lib/modules/Order/utils.js +36 -5
- package/lib/modules/Payment/walletpass.d.ts +10 -3
- package/lib/modules/Payment/walletpass.js +218 -56
- package/lib/modules/Product/types.d.ts +1 -0
- package/lib/modules/ProductList/index.js +40 -31
- package/lib/modules/Quotation/index.d.ts +1 -1
- package/lib/modules/Quotation/index.js +2 -2
- package/lib/modules/ResourcePlanner/index.d.ts +24 -0
- package/lib/modules/ResourcePlanner/index.js +148 -0
- package/lib/modules/ResourcePlanner/planner.d.ts +14 -0
- package/lib/modules/ResourcePlanner/planner.js +933 -0
- package/lib/modules/ResourcePlanner/types.d.ts +227 -0
- package/lib/modules/ResourcePlanner/types.js +17 -0
- package/lib/modules/Rules/index.d.ts +2 -0
- package/lib/modules/Rules/index.js +41 -19
- package/lib/modules/SalesSummary/index.js +6 -7
- package/lib/modules/ScanOrderLogger/index.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/index.js +13 -1
- package/lib/modules/ScanOrderLogger/providers/feishu.js +15 -6
- package/lib/modules/ScanOrderLogger/types.d.ts +1 -0
- package/lib/modules/Schedule/index.d.ts +3 -1
- package/lib/modules/Schedule/index.js +10 -8
- package/lib/modules/Summary/utils.js +21 -1
- package/lib/modules/index.d.ts +2 -0
- package/lib/modules/index.js +5 -1
- package/lib/plugins/window.d.ts +1 -0
- package/lib/server/index.d.ts +14 -0
- package/lib/server/index.js +65 -5
- package/lib/solution/BaseSales/index.d.ts +7 -0
- package/lib/solution/BaseSales/index.js +25 -8
- package/lib/solution/BaseSales/types.d.ts +3 -1
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +3 -2
- package/lib/solution/BookingByStep/index.d.ts +17 -2
- package/lib/solution/BookingByStep/index.js +60 -18
- package/lib/solution/BookingByStep/types.d.ts +2 -1
- package/lib/solution/BookingByStep/types.js +5 -0
- package/lib/solution/BookingByStep/utils/capacity.js +20 -1
- package/lib/solution/BookingByStep/utils/timeslots.d.ts +3 -1
- package/lib/solution/BookingByStep/utils/timeslots.js +19 -11
- package/lib/solution/BookingTicket/index.js +11 -2
- package/lib/solution/BookingTicket/types.d.ts +1 -0
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +2 -2
- package/lib/solution/BookingTicket/utils/scan/handleScan.d.ts +3 -1
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +2 -2
- package/lib/solution/ScanOrder/index.d.ts +26 -14
- package/lib/solution/ScanOrder/index.js +449 -182
- package/lib/solution/ScanOrder/types.d.ts +21 -1
- package/lib/solution/ScanOrder/utils.d.ts +8 -0
- package/lib/solution/ScanOrder/utils.js +31 -0
- package/lib/solution/ShopDiscount/index.d.ts +1 -0
- package/lib/solution/ShopDiscount/index.js +14 -0
- package/lib/solution/UnifiedBookingSales/index.d.ts +183 -0
- package/lib/solution/UnifiedBookingSales/index.js +1084 -0
- package/lib/solution/UnifiedBookingSales/types.d.ts +143 -0
- package/lib/solution/UnifiedBookingSales/types.js +33 -0
- package/lib/solution/VenueBooking/index.d.ts +40 -11
- package/lib/solution/VenueBooking/index.js +322 -110
- package/lib/solution/VenueBooking/types.d.ts +3 -0
- package/lib/solution/VenueBooking/utils/resource.js +1 -0
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -4
- package/lib/solution/VenueBooking/utils/slotMerge.js +6 -4
- package/lib/solution/index.d.ts +1 -0
- package/lib/solution/index.js +3 -1
- package/lib/types/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
export type ResourcePlannerMode = 'appointment' | 'scan_order' | 'venue_grid';
|
|
2
|
+
export type ResourcePlannerProductKind = 'normal' | 'duration' | 'session' | 'venue_slot';
|
|
3
|
+
export type ResourcePlannerResourceType = 'single' | 'multiple' | 'capacity';
|
|
4
|
+
export type ResourcePlannerStatus = 'available' | 'limited' | 'full' | 'conflict' | 'unavailable' | 'past';
|
|
5
|
+
export interface ResourcePlannerTimeRange {
|
|
6
|
+
start_at: string;
|
|
7
|
+
end_at: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ResourcePlannerEvent extends ResourcePlannerTimeRange {
|
|
10
|
+
resourceId?: number | string;
|
|
11
|
+
resource_id?: number | string;
|
|
12
|
+
pax?: number;
|
|
13
|
+
product_uid?: string;
|
|
14
|
+
source?: 'remote' | 'cart' | 'selection';
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
}
|
|
17
|
+
export interface ResourcePlannerResourceRequirement {
|
|
18
|
+
formId?: number | string;
|
|
19
|
+
resourceIds?: Array<number | string>;
|
|
20
|
+
resourceType?: ResourcePlannerResourceType;
|
|
21
|
+
capacityRequired?: number;
|
|
22
|
+
required?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ResourcePlannerProduct {
|
|
25
|
+
id: number | string;
|
|
26
|
+
title?: string;
|
|
27
|
+
kind: ResourcePlannerProductKind;
|
|
28
|
+
durationMinutes?: number;
|
|
29
|
+
schedule?: ResourcePlannerTimeRange[];
|
|
30
|
+
resourceRequirements?: ResourcePlannerResourceRequirement[];
|
|
31
|
+
capacityRequired?: number;
|
|
32
|
+
quantity?: number;
|
|
33
|
+
price?: string | number | null;
|
|
34
|
+
raw?: Record<string, any>;
|
|
35
|
+
}
|
|
36
|
+
export interface ResourcePlannerResource {
|
|
37
|
+
id: number | string;
|
|
38
|
+
formId?: number | string;
|
|
39
|
+
name?: string;
|
|
40
|
+
resourceType: ResourcePlannerResourceType;
|
|
41
|
+
capacity: number;
|
|
42
|
+
times: Array<ResourcePlannerTimeRange & {
|
|
43
|
+
event_list?: ResourcePlannerEvent[];
|
|
44
|
+
[key: string]: any;
|
|
45
|
+
}>;
|
|
46
|
+
childResourceIds?: Array<number | string>;
|
|
47
|
+
raw?: Record<string, any>;
|
|
48
|
+
}
|
|
49
|
+
export interface ResourcePlannerContextInput {
|
|
50
|
+
products?: ResourcePlannerProduct[];
|
|
51
|
+
resources?: ResourcePlannerResource[];
|
|
52
|
+
externalEvents?: ResourcePlannerEvent[];
|
|
53
|
+
slotDurationMinutes?: number;
|
|
54
|
+
businessStartTime?: string;
|
|
55
|
+
businessEndTime?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface ResourcePlannerQuery {
|
|
58
|
+
mode?: ResourcePlannerMode;
|
|
59
|
+
productIds?: Array<number | string>;
|
|
60
|
+
date?: string;
|
|
61
|
+
dateRange?: {
|
|
62
|
+
start: string;
|
|
63
|
+
end: string;
|
|
64
|
+
};
|
|
65
|
+
startTime?: string;
|
|
66
|
+
endTime?: string;
|
|
67
|
+
resourceIds?: Array<number | string>;
|
|
68
|
+
serviceObjectIds?: Array<number | string>;
|
|
69
|
+
holderIds?: Array<number | string>;
|
|
70
|
+
pax?: number;
|
|
71
|
+
slotDurationMinutes?: number;
|
|
72
|
+
}
|
|
73
|
+
export interface ResourcePlannerSelection {
|
|
74
|
+
productIds: Array<number | string>;
|
|
75
|
+
date?: string;
|
|
76
|
+
startTime?: string;
|
|
77
|
+
endTime?: string;
|
|
78
|
+
resourceIds: Array<number | string>;
|
|
79
|
+
assignments: ResourcePlannerAssignment[];
|
|
80
|
+
mode?: ResourcePlannerMode;
|
|
81
|
+
}
|
|
82
|
+
export interface ResourcePlannerSelectionPatch extends Partial<ResourcePlannerSelection> {
|
|
83
|
+
replaceAssignments?: boolean;
|
|
84
|
+
}
|
|
85
|
+
export interface ResourcePlannerDemandInterval {
|
|
86
|
+
id: string;
|
|
87
|
+
productId: number | string;
|
|
88
|
+
source: Extract<ResourcePlannerProductKind, 'duration' | 'session' | 'venue_slot'>;
|
|
89
|
+
date: string;
|
|
90
|
+
start_at: string;
|
|
91
|
+
end_at: string;
|
|
92
|
+
durationMinutes: number;
|
|
93
|
+
quantity: number;
|
|
94
|
+
capacityRequired: number;
|
|
95
|
+
resourceRequirements: ResourcePlannerResourceRequirement[];
|
|
96
|
+
}
|
|
97
|
+
export interface ResourcePlannerConflict {
|
|
98
|
+
type: 'outside_resource_time' | 'remote_event_overlap' | 'cart_overlap' | 'capacity_full' | 'missing_time' | 'missing_resource' | 'missing_assignment' | 'past';
|
|
99
|
+
message: string;
|
|
100
|
+
event?: ResourcePlannerEvent;
|
|
101
|
+
resourceId?: number | string;
|
|
102
|
+
productId?: number | string;
|
|
103
|
+
}
|
|
104
|
+
export interface ResourcePlannerAvailabilityCell {
|
|
105
|
+
key: string;
|
|
106
|
+
productId: number | string;
|
|
107
|
+
resourceId?: number | string;
|
|
108
|
+
date?: string;
|
|
109
|
+
start_at: string;
|
|
110
|
+
end_at: string;
|
|
111
|
+
startTime?: string;
|
|
112
|
+
endTime?: string;
|
|
113
|
+
durationMinutes?: number;
|
|
114
|
+
cellType: 'availability_range' | 'fixed_interval' | 'unavailable';
|
|
115
|
+
status: ResourcePlannerStatus;
|
|
116
|
+
remainingCapacity?: number;
|
|
117
|
+
maxCapacity?: number;
|
|
118
|
+
reasonCodes: string[];
|
|
119
|
+
conflicts: ResourcePlannerConflict[];
|
|
120
|
+
}
|
|
121
|
+
export interface ResourcePlannerProductOption {
|
|
122
|
+
productId: number | string;
|
|
123
|
+
title?: string;
|
|
124
|
+
status: ResourcePlannerStatus;
|
|
125
|
+
reasonCodes: string[];
|
|
126
|
+
}
|
|
127
|
+
export interface ResourcePlannerResourceOption {
|
|
128
|
+
resourceId: number | string;
|
|
129
|
+
resourceName?: string;
|
|
130
|
+
resourceFormId?: number | string;
|
|
131
|
+
resourceType: ResourcePlannerResourceType;
|
|
132
|
+
status: ResourcePlannerStatus;
|
|
133
|
+
remainingCapacity?: number;
|
|
134
|
+
maxCapacity?: number;
|
|
135
|
+
reasonCodes: string[];
|
|
136
|
+
}
|
|
137
|
+
export interface ResourcePlannerDateSummary {
|
|
138
|
+
date: string;
|
|
139
|
+
status: ResourcePlannerStatus;
|
|
140
|
+
availableCount: number;
|
|
141
|
+
totalCount: number;
|
|
142
|
+
}
|
|
143
|
+
export interface ResourcePlannerTimeSlot {
|
|
144
|
+
startTime: string;
|
|
145
|
+
endTime: string;
|
|
146
|
+
status: ResourcePlannerStatus;
|
|
147
|
+
resourceId: number | string;
|
|
148
|
+
productId?: number | string;
|
|
149
|
+
remainingCapacity?: number;
|
|
150
|
+
maxCapacity?: number;
|
|
151
|
+
reasonCodes: string[];
|
|
152
|
+
}
|
|
153
|
+
export interface ResourcePlannerTimeGridRow {
|
|
154
|
+
resourceId: number | string;
|
|
155
|
+
resourceName?: string;
|
|
156
|
+
resourceFormId?: number | string;
|
|
157
|
+
slots: ResourcePlannerTimeSlot[];
|
|
158
|
+
}
|
|
159
|
+
export interface ResourcePlannerTimeGrid {
|
|
160
|
+
date?: string;
|
|
161
|
+
timeLabels: string[];
|
|
162
|
+
resources: ResourcePlannerTimeGridRow[];
|
|
163
|
+
}
|
|
164
|
+
export interface ResourcePlannerProjection {
|
|
165
|
+
query: ResourcePlannerQuery;
|
|
166
|
+
demandIntervals: ResourcePlannerDemandInterval[];
|
|
167
|
+
productOptions: ResourcePlannerProductOption[];
|
|
168
|
+
resourceOptions: ResourcePlannerResourceOption[];
|
|
169
|
+
dateSummary: ResourcePlannerDateSummary[];
|
|
170
|
+
timeGrid: ResourcePlannerTimeGrid;
|
|
171
|
+
cells: ResourcePlannerAvailabilityCell[];
|
|
172
|
+
}
|
|
173
|
+
export interface ResourcePlannerAssignment {
|
|
174
|
+
productId: number | string;
|
|
175
|
+
resourceId: number | string;
|
|
176
|
+
start_at: string;
|
|
177
|
+
end_at: string;
|
|
178
|
+
capacityRequired?: number;
|
|
179
|
+
}
|
|
180
|
+
export interface ResourcePlannerAssignableSlotResource {
|
|
181
|
+
resourceId: number | string;
|
|
182
|
+
resourceName?: string;
|
|
183
|
+
resourceFormId?: number | string;
|
|
184
|
+
resourceType?: ResourcePlannerResourceType;
|
|
185
|
+
capacityRequired?: number;
|
|
186
|
+
remainingCapacity?: number;
|
|
187
|
+
maxCapacity?: number;
|
|
188
|
+
}
|
|
189
|
+
export interface ResourcePlannerAssignableSlot {
|
|
190
|
+
key: string;
|
|
191
|
+
productId: number | string;
|
|
192
|
+
date: string;
|
|
193
|
+
start_at: string;
|
|
194
|
+
end_at: string;
|
|
195
|
+
startTime: string;
|
|
196
|
+
endTime: string;
|
|
197
|
+
durationMinutes: number;
|
|
198
|
+
status: ResourcePlannerStatus;
|
|
199
|
+
resources: ResourcePlannerAssignableSlotResource[];
|
|
200
|
+
assignments: ResourcePlannerAssignment[];
|
|
201
|
+
conflicts: ResourcePlannerConflict[];
|
|
202
|
+
}
|
|
203
|
+
export interface ResourcePlannerAssignableSlotResult {
|
|
204
|
+
projection: ResourcePlannerProjection;
|
|
205
|
+
slots: ResourcePlannerAssignableSlot[];
|
|
206
|
+
conflicts: ResourcePlannerConflict[];
|
|
207
|
+
}
|
|
208
|
+
export interface ResourcePlannerAssignmentResult {
|
|
209
|
+
assignments: ResourcePlannerAssignment[];
|
|
210
|
+
conflicts: ResourcePlannerConflict[];
|
|
211
|
+
}
|
|
212
|
+
export interface ResourcePlannerValidationResult {
|
|
213
|
+
ok: boolean;
|
|
214
|
+
conflicts: ResourcePlannerConflict[];
|
|
215
|
+
}
|
|
216
|
+
export interface ResourcePlannerSnapshot {
|
|
217
|
+
context: Required<ResourcePlannerContextInput>;
|
|
218
|
+
selection: ResourcePlannerSelection;
|
|
219
|
+
projection: ResourcePlannerProjection | null;
|
|
220
|
+
version: number;
|
|
221
|
+
}
|
|
222
|
+
export interface ResourcePlannerState {
|
|
223
|
+
context: Required<ResourcePlannerContextInput>;
|
|
224
|
+
selection: ResourcePlannerSelection;
|
|
225
|
+
projection: ResourcePlannerProjection | null;
|
|
226
|
+
version: number;
|
|
227
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/modules/ResourcePlanner/types.ts
|
|
16
|
+
var types_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -27,6 +27,8 @@ export declare class RulesModule extends BaseModule implements Module, RulesModu
|
|
|
27
27
|
}): {
|
|
28
28
|
isAvailable: boolean;
|
|
29
29
|
discountList: Discount[];
|
|
30
|
+
/** 完整规则计算后的列表;调用方可用于保留暂时无适用商品的扫码卡券。 */
|
|
31
|
+
evaluatedDiscountList?: Discount[];
|
|
30
32
|
productList: any[];
|
|
31
33
|
unavailableReason?: UnavailableReason;
|
|
32
34
|
};
|
|
@@ -94,7 +94,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
94
94
|
productList
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
if (productList.every((item) => {
|
|
97
|
+
if (productList.length > 0 && productList.every((item) => {
|
|
98
98
|
var _a;
|
|
99
99
|
const product = this.hooks.getProduct(item);
|
|
100
100
|
return product.booking_id && (((_a = product.discount_list) == null ? void 0 : _a.length) || product.total == 0);
|
|
@@ -152,6 +152,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
152
152
|
return {
|
|
153
153
|
isAvailable: hasApplicableDiscount,
|
|
154
154
|
discountList: hasApplicableDiscount ? result.discountList : oldDiscountList,
|
|
155
|
+
evaluatedDiscountList: result.discountList,
|
|
155
156
|
productList: hasApplicableDiscount ? result.productList : productList,
|
|
156
157
|
unavailableReason
|
|
157
158
|
};
|
|
@@ -181,9 +182,13 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
181
182
|
getUnavailableReason(discountList, productList) {
|
|
182
183
|
var _a;
|
|
183
184
|
for (const discount of discountList) {
|
|
184
|
-
|
|
185
|
+
const bookingTimes = productList.length ? productList.map((item) => {
|
|
185
186
|
const product = this.hooks.getProduct(item);
|
|
186
|
-
|
|
187
|
+
return ((product == null ? void 0 : product.startDate) || (0, import_dayjs.default)()).format(
|
|
188
|
+
"YYYY-MM-DD HH:mm:ss"
|
|
189
|
+
);
|
|
190
|
+
}) : [(0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss")];
|
|
191
|
+
for (const bookingTime of bookingTimes) {
|
|
187
192
|
const filteredList = (0, import_utils.filterDiscountListByBookingTime)([discount], bookingTime);
|
|
188
193
|
if (filteredList.length === 0) {
|
|
189
194
|
return import_types.UnavailableReason.TimeLimit;
|
|
@@ -300,7 +305,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
300
305
|
_id: product._id,
|
|
301
306
|
parentId: product._id,
|
|
302
307
|
quantity: product.quantity,
|
|
303
|
-
num: product.num
|
|
308
|
+
num: product.num,
|
|
309
|
+
booking_id: product.booking_id
|
|
304
310
|
});
|
|
305
311
|
if (product.bundle && Array.isArray(product.bundle) && product.bundle.length > 0) {
|
|
306
312
|
product.bundle.forEach((bundleItem, bundleIndex) => {
|
|
@@ -321,7 +327,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
321
327
|
origin_total: new import_decimal.default(bundleItem.price || 0).mul(bundleItem.num || 1).toNumber(),
|
|
322
328
|
original_price: bundleItem.original_price,
|
|
323
329
|
// 继承主商品属性
|
|
324
|
-
booking_id:
|
|
330
|
+
booking_id: bundleItem.booking_id,
|
|
325
331
|
discount_list: bundleItem.discount_list || []
|
|
326
332
|
});
|
|
327
333
|
});
|
|
@@ -683,7 +689,8 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
683
689
|
discount_product_id: discount.product_id
|
|
684
690
|
},
|
|
685
691
|
metadata: {
|
|
686
|
-
num
|
|
692
|
+
num,
|
|
693
|
+
discount_rule_uncheck_flag: discount == null ? void 0 : discount.discount_rule_uncheck_flag
|
|
687
694
|
}
|
|
688
695
|
};
|
|
689
696
|
applicableProducts.push(productData);
|
|
@@ -1131,6 +1138,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1131
1138
|
config: selectedDiscount2 == null ? void 0 : selectedDiscount2.config,
|
|
1132
1139
|
metadata: {
|
|
1133
1140
|
num: 1,
|
|
1141
|
+
discount_rule_uncheck_flag: selectedDiscount2 == null ? void 0 : selectedDiscount2.discount_rule_uncheck_flag,
|
|
1134
1142
|
// 🔥 order_level 分摊差值
|
|
1135
1143
|
...productDiscountDifference !== void 0 && { product_discount_difference: productDiscountDifference },
|
|
1136
1144
|
/** 仅主商品上的优惠金额(不含 option) */
|
|
@@ -1211,6 +1219,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1211
1219
|
metadata: {
|
|
1212
1220
|
// 🔥 使用拆分后的唯一 _id
|
|
1213
1221
|
custom_product_bundle_map_id: uniqueId,
|
|
1222
|
+
discount_rule_uncheck_flag: selectedDiscount2 == null ? void 0 : selectedDiscount2.discount_rule_uncheck_flag,
|
|
1214
1223
|
num: 1
|
|
1215
1224
|
},
|
|
1216
1225
|
_num: 1,
|
|
@@ -1240,7 +1249,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1240
1249
|
_id: `${flatItem._id}_split_rest`,
|
|
1241
1250
|
num: normalNum,
|
|
1242
1251
|
quantity: normalNum,
|
|
1243
|
-
discount_list:
|
|
1252
|
+
discount_list: this.filterDiscountListByType(flatItem.discount_list, "promotion"),
|
|
1244
1253
|
processed: true
|
|
1245
1254
|
});
|
|
1246
1255
|
}
|
|
@@ -1289,6 +1298,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1289
1298
|
metadata: {
|
|
1290
1299
|
// 🔥 使用唯一的 _id
|
|
1291
1300
|
custom_product_bundle_map_id: uniqueId,
|
|
1301
|
+
discount_rule_uncheck_flag: selectedDiscount2 == null ? void 0 : selectedDiscount2.discount_rule_uncheck_flag,
|
|
1292
1302
|
num: product.num || 1,
|
|
1293
1303
|
// 🔥 order_level 分摊差值
|
|
1294
1304
|
...productDiscountDifference !== void 0 && { product_discount_difference: productDiscountDifference }
|
|
@@ -1303,7 +1313,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1303
1313
|
...flatItem,
|
|
1304
1314
|
total: targetProductTotal,
|
|
1305
1315
|
price: new import_decimal.default(productOriginTotal || 0).minus(fixedAmountPerItem).toNumber(),
|
|
1306
|
-
discount_list: [discountDetail],
|
|
1316
|
+
discount_list: this.filterDiscountListByType(flatItem.discount_list, "promotion").concat([discountDetail]),
|
|
1307
1317
|
processed: true
|
|
1308
1318
|
});
|
|
1309
1319
|
}
|
|
@@ -1724,7 +1734,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1724
1734
|
* @returns 是否可用
|
|
1725
1735
|
*/
|
|
1726
1736
|
checkPackageSubItemUsageRules(discount, flatItem) {
|
|
1727
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
1737
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1728
1738
|
const limitedData = discount.limited_relation_product_data;
|
|
1729
1739
|
const usageRules = limitedData == null ? void 0 : limitedData.package_sub_item_usage_rules;
|
|
1730
1740
|
const rules = ["original_price", ...(usageRules == null ? void 0 : usageRules.rules) || []];
|
|
@@ -1736,6 +1746,7 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1736
1746
|
const { type: scopeType, exclude_bundle_product_ids = [], include_bundle_product_ids = [], filter = 0 } = packageScope || {};
|
|
1737
1747
|
const isMainProduct = flatItem.type === "main";
|
|
1738
1748
|
const isBundleItem = flatItem.type === "bundle";
|
|
1749
|
+
const bundleMainProductId = (_a = flatItem.product) == null ? void 0 : _a.product_id;
|
|
1739
1750
|
if (isMainProduct) {
|
|
1740
1751
|
return true;
|
|
1741
1752
|
}
|
|
@@ -1744,9 +1755,9 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1744
1755
|
return true;
|
|
1745
1756
|
}
|
|
1746
1757
|
if (isBundleItem) {
|
|
1747
|
-
const priceType = (
|
|
1748
|
-
const priceTypeExt = (
|
|
1749
|
-
const mainProductId = ((
|
|
1758
|
+
const priceType = (_b = flatItem.bundleItem) == null ? void 0 : _b.price_type;
|
|
1759
|
+
const priceTypeExt = (_c = flatItem.bundleItem) == null ? void 0 : _c.price_type_ext;
|
|
1760
|
+
const mainProductId = ((_e = (_d = flatItem == null ? void 0 : flatItem.originProduct) == null ? void 0 : _d._productOrigin) == null ? void 0 : _e.id) || ((_f = flatItem == null ? void 0 : flatItem.parentProduct) == null ? void 0 : _f.id) || 0;
|
|
1750
1761
|
const isOriginalPrice = priceType === "markup" && priceTypeExt === "product_price";
|
|
1751
1762
|
const isMarkupPrice = priceType === "markup" && (priceTypeExt === "" || !priceTypeExt);
|
|
1752
1763
|
if (rules.length > 0) {
|
|
@@ -1758,11 +1769,11 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1758
1769
|
if (!filter) {
|
|
1759
1770
|
isScopeValid = true;
|
|
1760
1771
|
} else {
|
|
1761
|
-
isScopeValid = !exclude_bundle_product_ids.includes(Number(
|
|
1772
|
+
isScopeValid = !exclude_bundle_product_ids.includes(Number(bundleMainProductId));
|
|
1762
1773
|
}
|
|
1763
1774
|
}
|
|
1764
1775
|
if (scopeType === "specific_packages" || scopeType === "products") {
|
|
1765
|
-
isScopeValid = include_bundle_product_ids.includes(Number(
|
|
1776
|
+
isScopeValid = include_bundle_product_ids.includes(Number(bundleMainProductId));
|
|
1766
1777
|
}
|
|
1767
1778
|
if (isPriceValid && isScopeValid) {
|
|
1768
1779
|
return true;
|
|
@@ -1778,15 +1789,26 @@ var RulesModule = class extends import_BaseModule.BaseModule {
|
|
|
1778
1789
|
return false;
|
|
1779
1790
|
}
|
|
1780
1791
|
if (isBundleItem) {
|
|
1781
|
-
const priceType = (
|
|
1782
|
-
const priceTypeExt = (
|
|
1792
|
+
const priceType = (_g = flatItem.bundleItem) == null ? void 0 : _g.price_type;
|
|
1793
|
+
const priceTypeExt = (_h = flatItem.bundleItem) == null ? void 0 : _h.price_type_ext;
|
|
1783
1794
|
const isOriginalPrice = priceType === "markup" && priceTypeExt === "product_price";
|
|
1784
1795
|
const isMarkupPrice = priceType === "markup" && (priceTypeExt === "" || !priceTypeExt);
|
|
1785
1796
|
if (rules.length > 0) {
|
|
1786
|
-
|
|
1787
|
-
|
|
1797
|
+
const _isOriginalPrice = isOriginalPrice && rules.includes("original_price");
|
|
1798
|
+
const _isMarkupPrice = isMarkupPrice && rules.includes("markup_price");
|
|
1799
|
+
const isPriceValid = _isOriginalPrice || _isMarkupPrice;
|
|
1800
|
+
let isScopeValid = false;
|
|
1801
|
+
if (scopeType === "all_packages" || scopeType === "product_all") {
|
|
1802
|
+
if (!filter) {
|
|
1803
|
+
isScopeValid = true;
|
|
1804
|
+
} else {
|
|
1805
|
+
isScopeValid = !exclude_bundle_product_ids.includes(Number(bundleMainProductId));
|
|
1806
|
+
}
|
|
1788
1807
|
}
|
|
1789
|
-
if (
|
|
1808
|
+
if (scopeType === "specific_packages" || scopeType === "products") {
|
|
1809
|
+
isScopeValid = include_bundle_product_ids.includes(Number(bundleMainProductId));
|
|
1810
|
+
}
|
|
1811
|
+
if (isPriceValid && isScopeValid) {
|
|
1790
1812
|
return true;
|
|
1791
1813
|
}
|
|
1792
1814
|
return false;
|
|
@@ -53,9 +53,6 @@ var SalesSummaryModule = class extends import_BaseModule.BaseModule {
|
|
|
53
53
|
this.store.surchargeList = ((_a = options.initialState) == null ? void 0 : _a.surchargeList) || [];
|
|
54
54
|
this.store.summary = ((_b = options.initialState) == null ? void 0 : _b.summary) || (0, import_utils.createEmptySalesSummary)();
|
|
55
55
|
this.surchargeListModuleName = ((_c = this.otherParams) == null ? void 0 : _c.surchargeListModuleName) || "surchargeList";
|
|
56
|
-
if (!this.appPlugin) {
|
|
57
|
-
throw new Error("SalesSummaryModule 需要 app 插件支持");
|
|
58
|
-
}
|
|
59
56
|
if (!this.request) {
|
|
60
57
|
throw new Error("SalesSummaryModule 需要 request 插件支持");
|
|
61
58
|
}
|
|
@@ -109,12 +106,14 @@ var SalesSummaryModule = class extends import_BaseModule.BaseModule {
|
|
|
109
106
|
}
|
|
110
107
|
}
|
|
111
108
|
getAppData(key) {
|
|
112
|
-
var _a, _b, _c, _d, _e, _f;
|
|
113
|
-
const getData = (_b = (_a = this.appPlugin).getData) == null ? void 0 : _b.call(_a);
|
|
109
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
110
|
+
const getData = (_b = (_a = this.appPlugin) == null ? void 0 : _a.getData) == null ? void 0 : _b.call(_a);
|
|
114
111
|
if (typeof getData === "function")
|
|
115
112
|
return getData(key);
|
|
116
|
-
const app = this.appPlugin.getApp();
|
|
117
|
-
|
|
113
|
+
const app = (_d = (_c = this.appPlugin) == null ? void 0 : _c.getApp) == null ? void 0 : _d.call(_c);
|
|
114
|
+
if (!app)
|
|
115
|
+
return void 0;
|
|
116
|
+
const coreData = (_h = (_f = (_e = app == null ? void 0 : app.models) == null ? void 0 : _e.getStore) == null ? void 0 : (_g = _f.call(_e)).getDataByModel) == null ? void 0 : _h.call(_g, "core", "core");
|
|
118
117
|
return coreData == null ? void 0 : coreData[key];
|
|
119
118
|
}
|
|
120
119
|
getTaxConfig() {
|
|
@@ -11,10 +11,12 @@ export declare class ScanOrderLoggerModule extends BaseModule implements Module,
|
|
|
11
11
|
protected defaultName: string;
|
|
12
12
|
protected defaultVersion: string;
|
|
13
13
|
private store;
|
|
14
|
+
private window?;
|
|
14
15
|
initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
|
|
15
16
|
setContext(context: ScanOrderLoggerContext): void;
|
|
16
17
|
setProvider(provider: ScanOrderLoggerProviderType): void;
|
|
17
18
|
setProviderConfig(providerConfig: ScanOrderLoggerProviderConfig): void;
|
|
19
|
+
private getCurrentHost;
|
|
18
20
|
private buildRecord;
|
|
19
21
|
addLog(params: ScanOrderLogInput): Promise<void>;
|
|
20
22
|
}
|
|
@@ -60,6 +60,7 @@ var ScanOrderLoggerModule = class extends import_BaseModule.BaseModule {
|
|
|
60
60
|
var _a, _b, _c;
|
|
61
61
|
this.core = core;
|
|
62
62
|
this.store = options.store;
|
|
63
|
+
this.window = core.getPlugin("window") || void 0;
|
|
63
64
|
const provider = ((_a = options.otherParams) == null ? void 0 : _a.provider) || "feishu";
|
|
64
65
|
const providerConfig = ((_b = options.otherParams) == null ? void 0 : _b.providerConfig) || {};
|
|
65
66
|
const context = ((_c = options.otherParams) == null ? void 0 : _c.context) || {};
|
|
@@ -101,14 +102,25 @@ var ScanOrderLoggerModule = class extends import_BaseModule.BaseModule {
|
|
|
101
102
|
}
|
|
102
103
|
};
|
|
103
104
|
}
|
|
105
|
+
getCurrentHost() {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
const host = (_b = (_a = this.window) == null ? void 0 : _a.location) == null ? void 0 : _b.host;
|
|
108
|
+
if (typeof host === "string" && host.length > 0)
|
|
109
|
+
return host;
|
|
110
|
+
return void 0;
|
|
111
|
+
}
|
|
104
112
|
buildRecord(params) {
|
|
113
|
+
const host = this.getCurrentHost();
|
|
105
114
|
return {
|
|
106
115
|
level: params.level || "info",
|
|
107
116
|
title: params.title,
|
|
108
117
|
timestamp: params.timestamp || (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss"),
|
|
109
118
|
payload: params.payload || {},
|
|
110
119
|
extra: params.extra || {},
|
|
111
|
-
context:
|
|
120
|
+
context: {
|
|
121
|
+
...this.store.context || {},
|
|
122
|
+
...host ? { host } : {}
|
|
123
|
+
}
|
|
112
124
|
};
|
|
113
125
|
}
|
|
114
126
|
async addLog(params) {
|
|
@@ -112,20 +112,29 @@ async function flushQueue() {
|
|
|
112
112
|
}
|
|
113
113
|
var feishuLoggerProvider = {
|
|
114
114
|
async send(payload) {
|
|
115
|
-
var _a, _b, _c, _d;
|
|
115
|
+
var _a, _b, _c, _d, _e, _f;
|
|
116
116
|
cachedProviderConfig = payload.providerConfig;
|
|
117
117
|
const webhook = (_b = (_a = payload.providerConfig) == null ? void 0 : _a.feishu) == null ? void 0 : _b.webhook;
|
|
118
|
+
const errorHook = (_d = (_c = payload.providerConfig) == null ? void 0 : _c.feishu) == null ? void 0 : _d.errorHook;
|
|
119
|
+
if (typeof fetch !== "function") {
|
|
120
|
+
console.warn("[ScanOrderLogger] 当前环境不支持 fetch,跳过 Feishu 日志上报");
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (payload.record.level === "error" && isWebhookUsable(errorHook)) {
|
|
124
|
+
try {
|
|
125
|
+
await postToFeishu(errorHook, buildFeishuBody([payload.record]));
|
|
126
|
+
} catch (error) {
|
|
127
|
+
console.warn("[ScanOrderLogger] Feishu errorHook 上报失败", error);
|
|
128
|
+
}
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
118
131
|
if (!webhook) {
|
|
119
132
|
console.warn("[ScanOrderLogger] Feishu webhook 未配置,跳过日志上报");
|
|
120
133
|
return;
|
|
121
134
|
}
|
|
122
135
|
if (!isWebhookUsable(webhook))
|
|
123
136
|
return;
|
|
124
|
-
|
|
125
|
-
console.warn("[ScanOrderLogger] 当前环境不支持 fetch,跳过 Feishu 日志上报");
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
const throttleMs = ((_d = (_c = payload.providerConfig) == null ? void 0 : _c.feishu) == null ? void 0 : _d.throttleMs) ?? DEFAULT_THROTTLE_MS;
|
|
137
|
+
const throttleMs = ((_f = (_e = payload.providerConfig) == null ? void 0 : _e.feishu) == null ? void 0 : _f.throttleMs) ?? DEFAULT_THROTTLE_MS;
|
|
129
138
|
if (throttleMs <= 0) {
|
|
130
139
|
try {
|
|
131
140
|
await postToFeishu(webhook, buildFeishuBody([payload.record]));
|
|
@@ -2,6 +2,7 @@ export type ScanOrderLogLevel = 'info' | 'warning' | 'error' | 'debug';
|
|
|
2
2
|
export type ScanOrderLoggerProviderType = 'feishu' | 'grafana';
|
|
3
3
|
export interface ScanOrderLoggerProviderFeishuConfig {
|
|
4
4
|
webhook?: string;
|
|
5
|
+
errorHook?: string;
|
|
5
6
|
/**
|
|
6
7
|
* 节流窗口毫秒数,默认 3000ms
|
|
7
8
|
* - >0:首条日志进入队列并启动定时器,窗口结束后合并成一条 Feishu post 统一发送
|
|
@@ -24,7 +24,9 @@ export declare class ScheduleModule extends BaseModule implements Module, Schedu
|
|
|
24
24
|
*
|
|
25
25
|
* @memberof ScheduleModule
|
|
26
26
|
*/
|
|
27
|
-
loadAllSchedule(
|
|
27
|
+
loadAllSchedule(options?: {
|
|
28
|
+
useCache?: boolean;
|
|
29
|
+
}): Promise<void>;
|
|
28
30
|
setScheduleList(list: ScheduleItem[]): void;
|
|
29
31
|
private syncScheduleMap;
|
|
30
32
|
getScheduleList(): ScheduleItem[];
|
|
@@ -95,12 +95,12 @@ var ScheduleModule = class extends import_BaseModule.BaseModule {
|
|
|
95
95
|
*
|
|
96
96
|
* @memberof ScheduleModule
|
|
97
97
|
*/
|
|
98
|
-
async loadAllSchedule() {
|
|
98
|
+
async loadAllSchedule(options = {}) {
|
|
99
99
|
var _a;
|
|
100
100
|
const scheduleList = await this.request.get(
|
|
101
101
|
`/schedule`,
|
|
102
102
|
{ num: 999 },
|
|
103
|
-
{ useCache: true }
|
|
103
|
+
{ useCache: options.useCache ?? true }
|
|
104
104
|
);
|
|
105
105
|
this.setScheduleList(((_a = scheduleList.data) == null ? void 0 : _a.list) || []);
|
|
106
106
|
}
|
|
@@ -126,7 +126,6 @@ var ScheduleModule = class extends import_BaseModule.BaseModule {
|
|
|
126
126
|
custom_page_id,
|
|
127
127
|
channel
|
|
128
128
|
}) {
|
|
129
|
-
var _a, _b, _c;
|
|
130
129
|
if ((0, import_dayjs.default)(startDate).isBefore((0, import_dayjs.default)(), "day")) {
|
|
131
130
|
startDate = (0, import_dayjs.default)().format("YYYY-MM-DD");
|
|
132
131
|
}
|
|
@@ -144,17 +143,20 @@ var ScheduleModule = class extends import_BaseModule.BaseModule {
|
|
|
144
143
|
channel
|
|
145
144
|
}
|
|
146
145
|
);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
const responseData = res.data || {};
|
|
147
|
+
const dateList = Array.isArray(responseData.date_list) ? responseData.date_list : [];
|
|
148
|
+
const otherProductIds = Array.isArray(responseData.other_product_ids) ? responseData.other_product_ids : [];
|
|
149
|
+
this.setAvailabilityScheduleDateList(dateList);
|
|
150
|
+
this.setOtherProductsIds(otherProductIds);
|
|
151
|
+
if (!dateList.length && !otherProductIds.length || (0, import_dayjs.default)(endDate).isBefore((0, import_dayjs.default)(), "day")) {
|
|
150
152
|
return dates;
|
|
151
153
|
}
|
|
152
|
-
if (
|
|
154
|
+
if (otherProductIds.length) {
|
|
153
155
|
dates.forEach((n) => {
|
|
154
156
|
n.status = "available";
|
|
155
157
|
});
|
|
156
158
|
} else {
|
|
157
|
-
|
|
159
|
+
dateList.forEach((n) => {
|
|
158
160
|
const index = dates.findIndex((m) => m.date === n.date);
|
|
159
161
|
if (index !== -1) {
|
|
160
162
|
dates[index].status = "available";
|
|
@@ -437,11 +437,31 @@ var getBundleItemIsDiscountPrice = (item) => {
|
|
|
437
437
|
var getBundleItemIsMarkupOrDiscountPrice = (item) => {
|
|
438
438
|
return getBundleItemIsMarkupPrice(item) || getBundleItemIsDiscountPrice(item);
|
|
439
439
|
};
|
|
440
|
+
var getDiscountAmount = (discounts) => {
|
|
441
|
+
return (discounts || []).reduce((total, discount) => {
|
|
442
|
+
return total.add(new import_decimal.default(discount.amount || 0));
|
|
443
|
+
}, new import_decimal.default(0)).toNumber();
|
|
444
|
+
};
|
|
440
445
|
var getMainProductTotal = (item) => {
|
|
441
|
-
var _a, _b;
|
|
446
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
442
447
|
let total = new import_decimal.default(
|
|
443
448
|
(item == null ? void 0 : item.main_product_selling_price) ?? ((_a = item == null ? void 0 : item.metadata) == null ? void 0 : _a.main_product_selling_price) ?? ((_b = item == null ? void 0 : item.metadata) == null ? void 0 : _b.main_product_original_price) ?? 0
|
|
444
449
|
);
|
|
450
|
+
const hasMainProductPrice = (item == null ? void 0 : item.main_product_selling_price) != null || ((_c = item == null ? void 0 : item.metadata) == null ? void 0 : _c.main_product_selling_price) != null || ((_d = item == null ? void 0 : item.metadata) == null ? void 0 : _d.main_product_original_price) != null;
|
|
451
|
+
if (!hasMainProductPrice) {
|
|
452
|
+
total = new import_decimal.default((item == null ? void 0 : item.main_product_selling_price) ?? ((_e = item == null ? void 0 : item.metadata) == null ? void 0 : _e.main_product_selling_price) ?? item.price ?? 0);
|
|
453
|
+
const discount = ((_g = (_f = item == null ? void 0 : item._origin) == null ? void 0 : _f.product) == null ? void 0 : _g.discount_list) || ((_j = (_i = (_h = item == null ? void 0 : item._originData) == null ? void 0 : _h.product) == null ? void 0 : _i.discount_list) == null ? void 0 : _j.filter((item2) => {
|
|
454
|
+
var _a2;
|
|
455
|
+
return !((_a2 = item2 == null ? void 0 : item2.metadata) == null ? void 0 : _a2.custom_product_bundle_map_id);
|
|
456
|
+
})) || [];
|
|
457
|
+
const mainProductDiscountAmount = getDiscountAmount(discount);
|
|
458
|
+
total = total.minus(mainProductDiscountAmount);
|
|
459
|
+
if ((item == null ? void 0 : item.option) && Array.isArray(item == null ? void 0 : item.option)) {
|
|
460
|
+
total = total.add(item == null ? void 0 : item.option.reduce((t, option) => {
|
|
461
|
+
return t.add(new import_decimal.default(option.price || 0).mul(option.num || 1));
|
|
462
|
+
}, new import_decimal.default(0)));
|
|
463
|
+
}
|
|
464
|
+
}
|
|
445
465
|
for (let bundleItem of (item == null ? void 0 : item.bundle) || []) {
|
|
446
466
|
if (getBundleItemIsMarkupOrDiscountPrice(bundleItem)) {
|
|
447
467
|
const bundleItemTotal = new import_decimal.default(bundleItem.bundle_selling_price ?? bundleItem.price ?? 0);
|