@sellout/models 0.0.160 → 0.0.162
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/graphql/mutations/createSeason.mutation.js +1 -0
- package/.dist/graphql/mutations/createSeason.mutation.js.map +1 -1
- package/.dist/graphql/mutations/publishSeason.mutation.js +1 -0
- package/.dist/graphql/mutations/publishSeason.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateSeason.mutation.js +1 -0
- package/.dist/graphql/mutations/updateSeason.mutation.js.map +1 -1
- package/.dist/graphql/queries/publicSeason.query.js +7 -0
- package/.dist/graphql/queries/publicSeason.query.js.map +1 -1
- package/.dist/interfaces/ICreateOrderParams.d.ts +2 -4
- package/.dist/interfaces/IFee.d.ts +2 -1
- package/.dist/interfaces/IFee.js +1 -0
- package/.dist/interfaces/IFee.js.map +1 -1
- package/.dist/interfaces/IOrderTicket.d.ts +2 -4
- package/.dist/interfaces/ISeason.d.ts +1 -0
- package/.dist/interfaces/ITeiMemberInfo.d.ts +6 -0
- package/.dist/interfaces/ITeiMemberInfo.js +3 -0
- package/.dist/interfaces/ITeiMemberInfo.js.map +1 -0
- package/.dist/interfaces/ITicketType.d.ts +2 -4
- package/.dist/schemas/Order.d.ts +17 -15
- package/.dist/schemas/Order.js +19 -15
- package/.dist/schemas/Order.js.map +1 -1
- package/.dist/schemas/Season.d.ts +5 -0
- package/.dist/schemas/Season.js +5 -1
- package/.dist/schemas/Season.js.map +1 -1
- package/.dist/sellout-proto.js +312 -158
- package/.dist/utils/PaymentUtil.d.ts +4 -3
- package/.dist/utils/PaymentUtil.js +63 -29
- package/.dist/utils/PaymentUtil.js.map +1 -1
- package/.dist/utils/SeasonUtil.d.ts +2 -0
- package/.dist/utils/SeasonUtil.js +75 -0
- package/.dist/utils/SeasonUtil.js.map +1 -1
- package/package.json +3 -3
- package/src/graphql/mutations/createSeason.mutation.ts +1 -0
- package/src/graphql/mutations/publishSeason.mutation.ts +1 -0
- package/src/graphql/mutations/updateSeason.mutation.ts +1 -0
- package/src/graphql/queries/publicSeason.query.ts +7 -0
- package/src/interfaces/ICreateOrderParams.ts +2 -4
- package/src/interfaces/IFee.ts +1 -0
- package/src/interfaces/IOrderTicket.ts +2 -5
- package/src/interfaces/ISeason.ts +1 -0
- package/src/interfaces/ITeiMemberInfo.ts +6 -0
- package/src/interfaces/ITicketType.ts +2 -4
- package/src/proto/order.proto +9 -8
- package/src/proto/season.proto +1 -0
- package/src/schemas/Order.ts +31 -26
- package/src/schemas/Season.ts +5 -1
- package/src/utils/EventUtil.ts +1 -1
- package/src/utils/PaymentUtil.ts +130 -83
- package/src/utils/SeasonUtil.ts +84 -0
package/src/schemas/Order.ts
CHANGED
|
@@ -41,12 +41,29 @@ const Scan = {
|
|
|
41
41
|
type: String,
|
|
42
42
|
required: false,
|
|
43
43
|
default: '',
|
|
44
|
-
},startsAt:{
|
|
44
|
+
}, startsAt: {
|
|
45
45
|
type: Number,
|
|
46
46
|
required: false,
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
|
-
|
|
49
|
+
const TeiMemberInfoInput = {
|
|
50
|
+
firstName: {
|
|
51
|
+
type: String,
|
|
52
|
+
required: false
|
|
53
|
+
},
|
|
54
|
+
lastName: {
|
|
55
|
+
type: String,
|
|
56
|
+
required: false
|
|
57
|
+
},
|
|
58
|
+
email: {
|
|
59
|
+
type: String,
|
|
60
|
+
required: false
|
|
61
|
+
},
|
|
62
|
+
phoneNumber: {
|
|
63
|
+
type: String,
|
|
64
|
+
required: false
|
|
65
|
+
}
|
|
66
|
+
}
|
|
50
67
|
const OrderTicket = {
|
|
51
68
|
_id: {
|
|
52
69
|
type: String,
|
|
@@ -95,39 +112,25 @@ const OrderTicket = {
|
|
|
95
112
|
required: false,
|
|
96
113
|
default: null,
|
|
97
114
|
},
|
|
98
|
-
values:{
|
|
115
|
+
values: {
|
|
99
116
|
type: String,
|
|
100
117
|
required: false,
|
|
101
|
-
},description:{
|
|
118
|
+
}, description: {
|
|
102
119
|
type: String,
|
|
103
120
|
required: false
|
|
104
|
-
},dayIds:[
|
|
121
|
+
}, dayIds: [
|
|
105
122
|
{
|
|
106
123
|
type: String,
|
|
107
124
|
required: false
|
|
108
125
|
}
|
|
109
|
-
],teiMemberId:{
|
|
126
|
+
], teiMemberId: {
|
|
110
127
|
type: String,
|
|
111
128
|
required: false
|
|
112
|
-
},isMemberIdValid:{
|
|
129
|
+
}, isMemberIdValid: {
|
|
113
130
|
type: Boolean,
|
|
114
131
|
required: false
|
|
115
|
-
}, firstName :{
|
|
116
|
-
type: String,
|
|
117
|
-
required: false
|
|
118
132
|
},
|
|
119
|
-
|
|
120
|
-
type: String,
|
|
121
|
-
required: false
|
|
122
|
-
},
|
|
123
|
-
email:{
|
|
124
|
-
type: String,
|
|
125
|
-
required: false
|
|
126
|
-
},
|
|
127
|
-
phoneNumber:{
|
|
128
|
-
type: String,
|
|
129
|
-
required: false
|
|
130
|
-
}
|
|
133
|
+
teiMemberInfo: TeiMemberInfoInput
|
|
131
134
|
};
|
|
132
135
|
|
|
133
136
|
const OrderUpgrade = {
|
|
@@ -195,6 +198,8 @@ const OrderCustomField = {
|
|
|
195
198
|
},
|
|
196
199
|
};
|
|
197
200
|
|
|
201
|
+
|
|
202
|
+
|
|
198
203
|
const Payment = {
|
|
199
204
|
_id: {
|
|
200
205
|
type: String,
|
|
@@ -349,15 +354,15 @@ export default {
|
|
|
349
354
|
address: Address,
|
|
350
355
|
customFields: [OrderCustomField],
|
|
351
356
|
payments: [Payment],
|
|
352
|
-
seasonId:{
|
|
357
|
+
seasonId: {
|
|
353
358
|
type: String,
|
|
354
359
|
required: false,
|
|
355
|
-
},hidden:{
|
|
360
|
+
}, hidden: {
|
|
356
361
|
type: Boolean,
|
|
357
362
|
required: false,
|
|
358
|
-
},printed:{
|
|
363
|
+
}, printed: {
|
|
359
364
|
type: Boolean,
|
|
360
365
|
required: false,
|
|
361
|
-
default:false
|
|
366
|
+
default: false
|
|
362
367
|
}
|
|
363
368
|
};
|
package/src/schemas/Season.ts
CHANGED
package/src/utils/EventUtil.ts
CHANGED
|
@@ -14,7 +14,7 @@ import IEventPromotion from "../interfaces/IEventPromotion";
|
|
|
14
14
|
import { EventPromotionTypeEnum } from "../interfaces/IEventPromotion";
|
|
15
15
|
import { DropDownEnum } from "../enums/DropDownEnum";
|
|
16
16
|
import { SendQRCodeEnum } from "../interfaces/IEvent";
|
|
17
|
-
import IEventSchedule from "
|
|
17
|
+
import IEventSchedule from "../interfaces/IEventSchedule";
|
|
18
18
|
|
|
19
19
|
export default {
|
|
20
20
|
/****************************************************************************************
|
package/src/utils/PaymentUtil.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import FeeUtil from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import FeeUtil from "./FeeUtil";
|
|
2
|
+
import {
|
|
3
|
+
ICreateOrderTicketParams,
|
|
4
|
+
ICreateOrderUpgradeParams,
|
|
5
|
+
} from "../interfaces/ICreateOrderParams";
|
|
6
|
+
import IFee, {
|
|
7
|
+
FeeAppliedToEnum,
|
|
8
|
+
FeeFiltersEnum,
|
|
9
|
+
FeeTypeEnum,
|
|
10
|
+
} from "../interfaces/IFee";
|
|
11
|
+
import { PaymentMethodTypeEnum } from "../enums/PaymentMethodTypeEnum";
|
|
8
12
|
|
|
9
13
|
interface IPaymentCalculatorParams {
|
|
10
14
|
tickets: ICreateOrderTicketParams[];
|
|
11
15
|
upgrades: ICreateOrderUpgradeParams[];
|
|
12
16
|
fees: IFee[];
|
|
13
|
-
paymentMethodType: PaymentMethodTypeEnum
|
|
17
|
+
paymentMethodType: PaymentMethodTypeEnum;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
// interface IOrderItems {
|
|
@@ -23,13 +27,12 @@ class PaymentUtil {
|
|
|
23
27
|
// calculateOrderItemPrices(params: IPaymentCalculatorParams): IOrderItems {
|
|
24
28
|
|
|
25
29
|
// let {
|
|
26
|
-
// tickets = [],
|
|
30
|
+
// tickets = [],
|
|
27
31
|
// upgrades = [],
|
|
28
32
|
// fees = [],
|
|
29
33
|
// paymentMethodType,
|
|
30
34
|
// } = params;
|
|
31
35
|
|
|
32
|
-
|
|
33
36
|
// // Filter fees
|
|
34
37
|
// fees = fees.filter((fee: IFee) => {
|
|
35
38
|
// // Ignore card reader fees for non card reader payemnts
|
|
@@ -77,7 +80,7 @@ class PaymentUtil {
|
|
|
77
80
|
// const maxFee = fee.maxAppliedToPrice || Infinity;
|
|
78
81
|
|
|
79
82
|
// if (minFee <= price && price <= maxFee) {
|
|
80
|
-
|
|
83
|
+
// console.log(fee);
|
|
81
84
|
// if (fee.type === FeeTypeEnum.Flat) {
|
|
82
85
|
// return price - fee.value;
|
|
83
86
|
// } if (fee.type === FeeTypeEnum.Percent) {
|
|
@@ -85,7 +88,6 @@ class PaymentUtil {
|
|
|
85
88
|
// }
|
|
86
89
|
// }
|
|
87
90
|
|
|
88
|
-
|
|
89
91
|
// // if(fee.type === FeeTypeEnum.Percent) {
|
|
90
92
|
// // return price * (1 - fee.value / 100);
|
|
91
93
|
// // }
|
|
@@ -111,15 +113,13 @@ class PaymentUtil {
|
|
|
111
113
|
|
|
112
114
|
// tickets = tickets.map((ticket: ICreateOrderTicketParams): ICreateOrderTicketParams => {
|
|
113
115
|
// const price = Math.floor(calculateTicketPrice(ticket));
|
|
114
|
-
|
|
116
|
+
// console.log(`Ticket Price: `, price);
|
|
115
117
|
// return {
|
|
116
118
|
// ...ticket,
|
|
117
119
|
// price,
|
|
118
120
|
// }
|
|
119
121
|
// });
|
|
120
122
|
|
|
121
|
-
|
|
122
|
-
|
|
123
123
|
// // upgrades = upgrades.map((upgrade: ICreateOrderUpgradeParams): ICreateOrderUpgradeParams => {
|
|
124
124
|
// // return {
|
|
125
125
|
// // ...upgrade,
|
|
@@ -133,12 +133,7 @@ class PaymentUtil {
|
|
|
133
133
|
// };
|
|
134
134
|
// },
|
|
135
135
|
calculatePaymentTotal(params: IPaymentCalculatorParams): number {
|
|
136
|
-
let {
|
|
137
|
-
tickets = [],
|
|
138
|
-
upgrades = [],
|
|
139
|
-
fees = [],
|
|
140
|
-
paymentMethodType,
|
|
141
|
-
} = params;
|
|
136
|
+
let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
|
|
142
137
|
|
|
143
138
|
// No items, total is always 0
|
|
144
139
|
if (!tickets.length && !upgrades.length) return 0;
|
|
@@ -146,45 +141,73 @@ class PaymentUtil {
|
|
|
146
141
|
// Filter fees
|
|
147
142
|
fees = fees.filter((fee: IFee) => {
|
|
148
143
|
// Ignore card reader fees for non card reader payemnts
|
|
149
|
-
if (
|
|
144
|
+
if (
|
|
145
|
+
fee.filters &&
|
|
146
|
+
fee.filters.includes(FeeFiltersEnum.CardReader) &&
|
|
147
|
+
paymentMethodType !== PaymentMethodTypeEnum.CardReader
|
|
148
|
+
) {
|
|
150
149
|
return false;
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
// Ignore card entry fees for non card entry payemnts
|
|
154
|
-
if (
|
|
153
|
+
if (
|
|
154
|
+
fee.filters &&
|
|
155
|
+
fee.filters.includes(FeeFiltersEnum.CardEntry) &&
|
|
156
|
+
paymentMethodType !== PaymentMethodTypeEnum.CardEntry
|
|
157
|
+
) {
|
|
155
158
|
return false;
|
|
156
159
|
}
|
|
157
160
|
|
|
158
161
|
return true;
|
|
159
162
|
});
|
|
160
163
|
|
|
161
|
-
|
|
164
|
+
fees = fees.filter(
|
|
165
|
+
(fee: IFee) =>
|
|
166
|
+
fee.filters && fee.filters[0] !== FeeFiltersEnum.GuestTicket
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
const ticketFees = fees
|
|
170
|
+
.filter((f) => f.appliedTo === FeeAppliedToEnum.Ticket)
|
|
162
171
|
.sort(({ type }) => {
|
|
163
172
|
if (type === FeeTypeEnum.Flat) return -1;
|
|
164
173
|
else return 1;
|
|
165
|
-
})
|
|
166
|
-
const upgradeFees = fees.filter(
|
|
174
|
+
});
|
|
175
|
+
const upgradeFees = fees.filter(
|
|
176
|
+
(f) => f.appliedTo === FeeAppliedToEnum.Upgrade
|
|
177
|
+
);
|
|
167
178
|
// Orders mattes here. Flat type fees must be applied before Percent type fees
|
|
168
|
-
const orderFees = fees
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
179
|
+
const orderFees = fees
|
|
180
|
+
.filter(
|
|
181
|
+
(f) => f.appliedTo === FeeAppliedToEnum.Order && f.name != "Sales tax"
|
|
182
|
+
)
|
|
183
|
+
.sort(({ type }) => {
|
|
184
|
+
if (type === "Flat") return -1;
|
|
185
|
+
else return 1;
|
|
186
|
+
});
|
|
187
|
+
const salesTax = fees.filter((f) => f.name == "Sales tax");
|
|
173
188
|
|
|
174
|
-
function applyTicketFee(
|
|
189
|
+
function applyTicketFee(
|
|
190
|
+
ticket: ICreateOrderTicketParams,
|
|
191
|
+
fee: IFee
|
|
192
|
+
): number {
|
|
175
193
|
// Ignore seated fees if not seated
|
|
176
|
-
if (
|
|
194
|
+
if (
|
|
195
|
+
fee.filters &&
|
|
196
|
+
fee.filters.includes(FeeFiltersEnum.Seated) &&
|
|
197
|
+
!ticket.seat
|
|
198
|
+
) {
|
|
177
199
|
return 0;
|
|
178
200
|
}
|
|
179
|
-
|
|
201
|
+
|
|
180
202
|
const minFee = fee.minAppliedToPrice || 0;
|
|
181
203
|
const maxFee = fee.maxAppliedToPrice || Infinity;
|
|
182
204
|
|
|
183
205
|
if (minFee <= ticket.price && ticket.price <= maxFee) {
|
|
184
206
|
if (fee.type === FeeTypeEnum.Flat) {
|
|
185
207
|
return fee.value;
|
|
186
|
-
}
|
|
187
|
-
|
|
208
|
+
}
|
|
209
|
+
if (fee.type === FeeTypeEnum.Percent) {
|
|
210
|
+
return (ticket.price * fee.value) / 100;
|
|
188
211
|
}
|
|
189
212
|
} else {
|
|
190
213
|
return 0;
|
|
@@ -193,15 +216,19 @@ class PaymentUtil {
|
|
|
193
216
|
return 0;
|
|
194
217
|
}
|
|
195
218
|
|
|
196
|
-
function applyUpgradeFee(
|
|
219
|
+
function applyUpgradeFee(
|
|
220
|
+
upgrade: ICreateOrderUpgradeParams,
|
|
221
|
+
fee: IFee
|
|
222
|
+
): number {
|
|
197
223
|
const minFee = fee.minAppliedToPrice || 0;
|
|
198
224
|
const maxFee = fee.maxAppliedToPrice || Infinity;
|
|
199
225
|
|
|
200
226
|
if (minFee <= upgrade.price && upgrade.price <= maxFee) {
|
|
201
227
|
if (fee.type === FeeTypeEnum.Flat) {
|
|
202
228
|
return upgrade.price + fee.value;
|
|
203
|
-
}
|
|
204
|
-
|
|
229
|
+
}
|
|
230
|
+
if (fee.type === FeeTypeEnum.Percent) {
|
|
231
|
+
return (upgrade.price * fee.value) / 100;
|
|
205
232
|
}
|
|
206
233
|
} else {
|
|
207
234
|
return 0;
|
|
@@ -213,36 +240,59 @@ class PaymentUtil {
|
|
|
213
240
|
function applyOrderFee(orderSubtotal, fee) {
|
|
214
241
|
if (fee.type === FeeTypeEnum.Flat) {
|
|
215
242
|
return orderSubtotal + fee.value;
|
|
216
|
-
}
|
|
217
|
-
|
|
243
|
+
}
|
|
244
|
+
if (fee.type === FeeTypeEnum.Percent) {
|
|
245
|
+
return orderSubtotal / (1 - fee.value / 100);
|
|
218
246
|
}
|
|
219
247
|
}
|
|
220
248
|
|
|
221
249
|
const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
|
|
222
250
|
|
|
223
251
|
const ticketTaxFeeTotal = tickets.reduce((cur, ticket) => {
|
|
224
|
-
return
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
252
|
+
return (
|
|
253
|
+
cur +
|
|
254
|
+
salesTax.reduce((cur, fee) => {
|
|
255
|
+
const value = cur + applyTicketFee(ticket, fee);
|
|
256
|
+
return value;
|
|
257
|
+
}, 0)
|
|
258
|
+
);
|
|
228
259
|
}, 0);
|
|
229
260
|
const ticketFeeTotal = tickets.reduce((cur, ticket) => {
|
|
230
|
-
return
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
261
|
+
return (
|
|
262
|
+
cur +
|
|
263
|
+
ticketFees.reduce((cur, fee) => {
|
|
264
|
+
const value = cur + applyTicketFee(ticket, fee);
|
|
265
|
+
return value;
|
|
266
|
+
}, 0)
|
|
267
|
+
);
|
|
234
268
|
}, 0);
|
|
235
269
|
|
|
236
|
-
const upgradeTotal = upgrades.reduce(
|
|
270
|
+
const upgradeTotal = upgrades.reduce(
|
|
271
|
+
(cur, upgrade) => cur + upgrade.price,
|
|
272
|
+
0
|
|
273
|
+
);
|
|
237
274
|
|
|
238
275
|
const upgradeTaxFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
239
|
-
return
|
|
276
|
+
return (
|
|
277
|
+
cur +
|
|
278
|
+
salesTax.reduce((curr, fee) => curr + applyUpgradeFee(upgrade, fee), 0)
|
|
279
|
+
);
|
|
240
280
|
}, 0);
|
|
241
281
|
|
|
242
282
|
const upgradeFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
243
|
-
return
|
|
283
|
+
return (
|
|
284
|
+
cur +
|
|
285
|
+
upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
|
|
286
|
+
);
|
|
244
287
|
}, 0);
|
|
245
|
-
const orderSubtotal = Math.round(
|
|
288
|
+
const orderSubtotal = Math.round(
|
|
289
|
+
ticketTotal +
|
|
290
|
+
ticketTaxFeeTotal +
|
|
291
|
+
ticketFeeTotal +
|
|
292
|
+
upgradeTaxFeeTotal +
|
|
293
|
+
upgradeTotal +
|
|
294
|
+
upgradeFeeTotal
|
|
295
|
+
);
|
|
246
296
|
|
|
247
297
|
// console.log(`Order SubTotal:`, orderSubtotal);
|
|
248
298
|
|
|
@@ -262,37 +312,32 @@ class PaymentUtil {
|
|
|
262
312
|
// fees
|
|
263
313
|
} = params;
|
|
264
314
|
|
|
265
|
-
if(paymentMethodType === PaymentMethodTypeEnum.None) return 0;
|
|
315
|
+
if (paymentMethodType === PaymentMethodTypeEnum.None) return 0;
|
|
266
316
|
|
|
267
|
-
const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price
|
|
268
|
-
const upgradeTotal = upgrades.reduce(
|
|
317
|
+
const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0); // + (ticket.price * tax/100)
|
|
318
|
+
const upgradeTotal = upgrades.reduce(
|
|
319
|
+
(cur, upgrade) => cur + upgrade.price,
|
|
320
|
+
0
|
|
321
|
+
); // + (upgrade.price * tax/100)
|
|
269
322
|
return ticketTotal + upgradeTotal;
|
|
270
323
|
}
|
|
271
324
|
calculateFee(params: IPaymentCalculatorParams): number {
|
|
272
|
-
let {
|
|
273
|
-
fees
|
|
274
|
-
|
|
275
|
-
const salesTax = fees.filter(f => f.name == 'Sales tax');
|
|
276
|
-
const tax = salesTax.length > 0 ? salesTax[0].value : 0
|
|
325
|
+
let { fees } = params;
|
|
326
|
+
const salesTax = fees.filter((f) => f.name == "Sales tax");
|
|
327
|
+
const tax = salesTax.length > 0 ? salesTax[0].value : 0;
|
|
277
328
|
const total = this.calculatePaymentTotal(params);
|
|
278
329
|
let subtotal = this.calculatePaymentSubtotal(params);
|
|
279
|
-
subtotal = subtotal + (subtotal*tax/100
|
|
330
|
+
subtotal = subtotal + (subtotal * tax) / 100;
|
|
280
331
|
return Math.round(total - subtotal);
|
|
281
332
|
}
|
|
282
333
|
|
|
283
334
|
calculateFeeWithoutTax(params: IPaymentCalculatorParams): number {
|
|
284
|
-
|
|
285
335
|
const total = this.calculatePaymentTotal(params);
|
|
286
336
|
let subtotal = this.calculatePaymentSubtotal(params);
|
|
287
337
|
return Math.round(total - subtotal);
|
|
288
338
|
}
|
|
289
339
|
calculateOrganizationFee(params: IPaymentCalculatorParams): number {
|
|
290
|
-
let {
|
|
291
|
-
tickets = [],
|
|
292
|
-
upgrades = [],
|
|
293
|
-
fees = [],
|
|
294
|
-
paymentMethodType,
|
|
295
|
-
} = params;
|
|
340
|
+
let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
|
|
296
341
|
|
|
297
342
|
fees = FeeUtil.promoterFees(fees);
|
|
298
343
|
return this.calculateFee({
|
|
@@ -303,14 +348,8 @@ class PaymentUtil {
|
|
|
303
348
|
});
|
|
304
349
|
}
|
|
305
350
|
|
|
306
|
-
|
|
307
351
|
calculateTaxFee(params: IPaymentCalculatorParams): number {
|
|
308
|
-
let {
|
|
309
|
-
tickets = [],
|
|
310
|
-
upgrades = [],
|
|
311
|
-
fees = [],
|
|
312
|
-
paymentMethodType,
|
|
313
|
-
} = params;
|
|
352
|
+
let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
|
|
314
353
|
|
|
315
354
|
fees = FeeUtil.taxFees(fees);
|
|
316
355
|
return this.calculateFeeWithoutTax({
|
|
@@ -321,12 +360,7 @@ class PaymentUtil {
|
|
|
321
360
|
});
|
|
322
361
|
}
|
|
323
362
|
calculatePlatformFee(params: IPaymentCalculatorParams): number {
|
|
324
|
-
let {
|
|
325
|
-
tickets = [],
|
|
326
|
-
upgrades = [],
|
|
327
|
-
fees = [],
|
|
328
|
-
paymentMethodType,
|
|
329
|
-
} = params;
|
|
363
|
+
let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
|
|
330
364
|
|
|
331
365
|
fees = FeeUtil.selloutFees(fees);
|
|
332
366
|
|
|
@@ -348,7 +382,7 @@ class PaymentUtil {
|
|
|
348
382
|
const total = this.calculatePaymentTotal(params);
|
|
349
383
|
const subtotal = this.calculatePaymentSubtotal(params);
|
|
350
384
|
const organizationFee = this.calculateOrganizationFee(params);
|
|
351
|
-
return total - subtotal
|
|
385
|
+
return total - subtotal - organizationFee;
|
|
352
386
|
}
|
|
353
387
|
// calculateTaxFee(params: IPaymentCalculatorParams): number {
|
|
354
388
|
// const organizationFee = this.calculateTaxFee(params);
|
|
@@ -356,6 +390,19 @@ class PaymentUtil {
|
|
|
356
390
|
// return organizationFee;
|
|
357
391
|
// }
|
|
358
392
|
|
|
393
|
+
calculateGuestFee(tickets: any, event: any): number {
|
|
394
|
+
let guestTicketFees = event?.fees.filter(
|
|
395
|
+
(fee: IFee) =>
|
|
396
|
+
fee.filters && fee.filters[0] === FeeFiltersEnum.GuestTicket
|
|
397
|
+
);
|
|
398
|
+
let guestFeesValue = guestTicketFees && guestTicketFees[0]?.value;
|
|
399
|
+
let guestMembers = tickets.filter((a) => !a.isMemberIdValid).length;
|
|
400
|
+
|
|
401
|
+
let guestFees = (guestFeesValue as number) * guestMembers;
|
|
402
|
+
return guestTicketFees.length > 0 && event.organization.isTegIntegration
|
|
403
|
+
? guestFees
|
|
404
|
+
: 0;
|
|
405
|
+
}
|
|
359
406
|
}
|
|
360
407
|
|
|
361
408
|
export default new PaymentUtil();
|
package/src/utils/SeasonUtil.ts
CHANGED
|
@@ -6,6 +6,9 @@ import * as Time from "@sellout/utils/.dist/time";
|
|
|
6
6
|
import ISeason from "../interfaces/ISeason";
|
|
7
7
|
import ITicketType from "../interfaces/ITicketType";
|
|
8
8
|
import ISeasonCustomField from "../interfaces/ISeasonCustomField";
|
|
9
|
+
import IOrderCustomField from "../interfaces/IOrderCustomField";
|
|
10
|
+
import { CustomFieldTypeEnum } from "../enums/CustomFieldTypeEnum";
|
|
11
|
+
import { DropDownEnum } from "../enums/DropDownEnum";
|
|
9
12
|
|
|
10
13
|
export default {
|
|
11
14
|
/****************************************************************************************
|
|
@@ -373,4 +376,85 @@ export default {
|
|
|
373
376
|
.unknown(true);
|
|
374
377
|
return customFieldSchema.validate(customField);
|
|
375
378
|
},
|
|
379
|
+
customFieldsAreValid(
|
|
380
|
+
seasonCustomFields: ISeasonCustomField[],
|
|
381
|
+
orderCustomFields: IOrderCustomField[]
|
|
382
|
+
): boolean {
|
|
383
|
+
const activeFields =
|
|
384
|
+
seasonCustomFields?.filter(
|
|
385
|
+
(seasonCustomField) => seasonCustomField.active
|
|
386
|
+
) ?? [];
|
|
387
|
+
|
|
388
|
+
const validFields =
|
|
389
|
+
activeFields?.filter((eventCustomField) => {
|
|
390
|
+
const { _id, minLength, maxLength, minValue, maxValue, required } =
|
|
391
|
+
eventCustomField;
|
|
392
|
+
|
|
393
|
+
const orderCustomField = orderCustomFields?.find(
|
|
394
|
+
(orderCustomField) => orderCustomField.customFieldId === _id
|
|
395
|
+
);
|
|
396
|
+
|
|
397
|
+
// Field is not required and orderCustomField not empty
|
|
398
|
+
if (!required && !orderCustomField) return true;
|
|
399
|
+
|
|
400
|
+
// Field has not been filled out
|
|
401
|
+
if (!orderCustomField) return false;
|
|
402
|
+
|
|
403
|
+
let { value } = orderCustomField;
|
|
404
|
+
|
|
405
|
+
if (
|
|
406
|
+
!required &&
|
|
407
|
+
(value === undefined ||
|
|
408
|
+
value === "NaN" ||
|
|
409
|
+
value === "" ||
|
|
410
|
+
value === DropDownEnum.Select)
|
|
411
|
+
) {
|
|
412
|
+
return true;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
if (eventCustomField?.type === CustomFieldTypeEnum.Text) {
|
|
416
|
+
value = <string>value;
|
|
417
|
+
if (value) {
|
|
418
|
+
if (minLength === 0 && maxLength === 0 && value.length > 0) {
|
|
419
|
+
return true;
|
|
420
|
+
} else if (minLength === 0 && value.length <= maxLength) {
|
|
421
|
+
return true;
|
|
422
|
+
} else if (maxLength === 0 && minLength <= value.length) {
|
|
423
|
+
return true;
|
|
424
|
+
} else if (minLength <= value.length && value.length <= maxLength) {
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
return false;
|
|
429
|
+
} else if (eventCustomField.type === CustomFieldTypeEnum.Dropdown) {
|
|
430
|
+
value = <string>value;
|
|
431
|
+
if (value !== "" && value !== DropDownEnum.Select) {
|
|
432
|
+
return true;
|
|
433
|
+
}
|
|
434
|
+
return false;
|
|
435
|
+
} else if (eventCustomField.type === CustomFieldTypeEnum.Address) {
|
|
436
|
+
value = <string>value;
|
|
437
|
+
if (value !== "") {
|
|
438
|
+
return true;
|
|
439
|
+
}
|
|
440
|
+
return false;
|
|
441
|
+
} else {
|
|
442
|
+
value = <number>value;
|
|
443
|
+
if (value) {
|
|
444
|
+
if (minValue === 0 && maxValue === 0 && value > 0) {
|
|
445
|
+
return true;
|
|
446
|
+
} else if (minValue === 0 && value <= maxValue) {
|
|
447
|
+
return true;
|
|
448
|
+
} else if (maxValue === 0 && minValue <= value) {
|
|
449
|
+
return true;
|
|
450
|
+
} else if (minValue <= value && value <= maxValue) {
|
|
451
|
+
return true;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
}) ?? [];
|
|
457
|
+
|
|
458
|
+
return validFields.length === activeFields.length;
|
|
459
|
+
},
|
|
376
460
|
};
|