@sellout/models 0.0.184 → 0.0.185
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/sendSeasonOrderReceiptEmail.mutation.d.ts +2 -0
- package/.dist/graphql/mutations/sendSeasonOrderReceiptEmail.mutation.js +13 -0
- package/.dist/graphql/mutations/sendSeasonOrderReceiptEmail.mutation.js.map +1 -0
- package/.dist/interfaces/ICreateOrderParams.d.ts +2 -0
- package/.dist/interfaces/IOrder.d.ts +2 -1
- package/.dist/interfaces/IOrder.js.map +1 -1
- package/.dist/interfaces/IOrderSummary.d.ts +1 -0
- package/.dist/schemas/Order.d.ts +81 -0
- package/.dist/schemas/Order.js +81 -0
- package/.dist/schemas/Order.js.map +1 -1
- package/.dist/sellout-proto.js +628 -6
- package/.dist/utils/OrderUtil.js +1 -123
- package/.dist/utils/OrderUtil.js.map +1 -1
- package/.dist/utils/PaymentUtil.d.ts +1 -2
- package/.dist/utils/PaymentUtil.js +180 -198
- package/.dist/utils/PaymentUtil.js.map +1 -1
- package/package.json +3 -3
- package/src/graphql/mutations/sendSeasonOrderReceiptEmail.mutation.ts +9 -0
- package/src/interfaces/ICreateOrderParams.ts +2 -0
- package/src/interfaces/IOrder.ts +2 -1
- package/src/interfaces/IOrderSummary.ts +1 -0
- package/src/proto/order.proto +24 -1
- package/src/schemas/Order.ts +81 -0
- package/src/utils/OrderUtil.ts +1 -137
- package/src/utils/PaymentUtil.ts +221 -269
package/src/utils/PaymentUtil.ts
CHANGED
|
@@ -10,6 +10,7 @@ import IFee, {
|
|
|
10
10
|
FeeAppliedByEnum
|
|
11
11
|
} from "../interfaces/IFee";
|
|
12
12
|
import { PaymentMethodTypeEnum } from "../enums/PaymentMethodTypeEnum";
|
|
13
|
+
// import Fee from "src/schemas/Fee";
|
|
13
14
|
|
|
14
15
|
interface IPaymentCalculatorParams {
|
|
15
16
|
tickets: ICreateOrderTicketParams[];
|
|
@@ -134,7 +135,7 @@ class PaymentUtil {
|
|
|
134
135
|
// };
|
|
135
136
|
// },
|
|
136
137
|
|
|
137
|
-
calculatePaymentTotal(params: IPaymentCalculatorParams):
|
|
138
|
+
calculatePaymentTotal(params: IPaymentCalculatorParams): any {
|
|
138
139
|
let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
|
|
139
140
|
|
|
140
141
|
// No items, total is always 0
|
|
@@ -151,6 +152,10 @@ class PaymentUtil {
|
|
|
151
152
|
return false;
|
|
152
153
|
}
|
|
153
154
|
|
|
155
|
+
if (fee.appliedBy == FeeAppliedByEnum.Stripe && paymentMethodType == PaymentMethodTypeEnum.Cash) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
|
|
154
159
|
// Ignore card entry fees for non card entry payemnts
|
|
155
160
|
if (
|
|
156
161
|
fee.filters &&
|
|
@@ -167,12 +172,13 @@ class PaymentUtil {
|
|
|
167
172
|
(fee: IFee) =>
|
|
168
173
|
fee.filters && fee.filters[0] == FeeFiltersEnum.GuestTicket
|
|
169
174
|
);
|
|
170
|
-
|
|
175
|
+
|
|
171
176
|
fees = fees.filter(
|
|
172
177
|
(fee: IFee) =>
|
|
173
178
|
fee.filters && fee.filters[0] !== FeeFiltersEnum.GuestTicket
|
|
174
179
|
);
|
|
175
180
|
|
|
181
|
+
|
|
176
182
|
function applyGuestTicketFee(
|
|
177
183
|
ticket: ICreateOrderTicketParams,
|
|
178
184
|
fee: IFee
|
|
@@ -181,12 +187,12 @@ class PaymentUtil {
|
|
|
181
187
|
if (
|
|
182
188
|
fee.filters &&
|
|
183
189
|
fee.filters.includes(FeeFiltersEnum.Seated) &&
|
|
184
|
-
!ticket.seat
|
|
190
|
+
!ticket.seat
|
|
185
191
|
) {
|
|
186
192
|
return 0;
|
|
187
193
|
}
|
|
188
194
|
|
|
189
|
-
if(!ticket.guestTicket){
|
|
195
|
+
if (!ticket.guestTicket) {
|
|
190
196
|
return 0;
|
|
191
197
|
}
|
|
192
198
|
|
|
@@ -206,262 +212,193 @@ class PaymentUtil {
|
|
|
206
212
|
|
|
207
213
|
return 0;
|
|
208
214
|
}
|
|
209
|
-
|
|
210
|
-
const
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
215
|
+
// Fees applied
|
|
216
|
+
const ticketFeesPromotersFlat = fees
|
|
217
|
+
.filter((f) => f.appliedTo === FeeAppliedToEnum.Ticket &&
|
|
218
|
+
f.appliedBy == FeeAppliedByEnum.Organization && f.type === FeeTypeEnum.Flat)
|
|
219
|
+
const ticketFeesPromotersPercent = fees
|
|
220
|
+
.filter((f) => f.appliedTo === FeeAppliedToEnum.Ticket &&
|
|
221
|
+
f.appliedBy == FeeAppliedByEnum.Organization && f.type === FeeTypeEnum.Percent);
|
|
222
|
+
|
|
223
|
+
const upgradeFeesPromotersFees = fees.filter(
|
|
224
|
+
(f) => f.appliedTo === FeeAppliedToEnum.Upgrade && f.appliedBy == FeeAppliedByEnum.Organization
|
|
225
|
+
);
|
|
219
226
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
227
|
+
const upgradeFeesSelloutFees = fees.filter(
|
|
228
|
+
(f) => f.appliedTo === FeeAppliedToEnum.Upgrade && f.appliedBy == FeeAppliedByEnum.Sellout
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
const selloutFees: any = fees.filter(
|
|
232
|
+
(f) => f.appliedBy == FeeAppliedByEnum.Sellout
|
|
233
|
+
// (f) => f.appliedTo === FeeAppliedToEnum.Upgrade && f.appliedBy == FeeAppliedByEnum.Sellout
|
|
234
|
+
);
|
|
235
|
+
// sales tax fee
|
|
236
|
+
const salesTaxFees = fees.find((f) => f.name == "Sales tax");
|
|
237
|
+
const stripeFees = fees.filter(
|
|
238
|
+
(f) => f.appliedBy == FeeAppliedByEnum.Stripe
|
|
229
239
|
);
|
|
230
240
|
// Orders mattes here. Flat type fees must be applied before Percent type fees
|
|
231
|
-
const
|
|
241
|
+
const promoterOrderFees = fees
|
|
232
242
|
.filter(
|
|
233
|
-
(f) => f.appliedTo === FeeAppliedToEnum.Order && f.name != "Sales tax"
|
|
243
|
+
(f) => f.appliedTo === FeeAppliedToEnum.Order && f.name != "Sales tax" && f.appliedBy == FeeAppliedByEnum.Organization
|
|
234
244
|
)
|
|
235
245
|
.sort(({ type }) => {
|
|
236
246
|
if (type === "Flat") return -1;
|
|
237
247
|
else return 1;
|
|
238
248
|
});
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
fee: IFee
|
|
244
|
-
): number {
|
|
245
|
-
// Ignore seated fees if not seated
|
|
246
|
-
if (
|
|
247
|
-
fee.filters &&
|
|
248
|
-
fee.filters.includes(FeeFiltersEnum.Seated) &&
|
|
249
|
-
!ticket.seat
|
|
250
|
-
) {
|
|
251
|
-
return 0;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
const minFee = fee.minAppliedToPrice || 0;
|
|
255
|
-
const maxFee = fee.maxAppliedToPrice || Infinity;
|
|
256
|
-
|
|
257
|
-
if (minFee <= ticket.price && ticket.price <= maxFee) {
|
|
258
|
-
if (fee.type === FeeTypeEnum.Flat) {
|
|
259
|
-
return fee.value;
|
|
260
|
-
}
|
|
261
|
-
if (fee.type === FeeTypeEnum.Percent) {
|
|
262
|
-
return (ticket.price * fee.value) / 100;
|
|
263
|
-
}
|
|
264
|
-
} else {
|
|
265
|
-
return 0;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
return 0;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
function applyUpgradeFee(
|
|
272
|
-
upgrade: ICreateOrderUpgradeParams,
|
|
273
|
-
fee: IFee
|
|
274
|
-
): number {
|
|
275
|
-
const minFee = fee.minAppliedToPrice || 0;
|
|
276
|
-
const maxFee = fee.maxAppliedToPrice || Infinity;
|
|
277
|
-
|
|
278
|
-
if (minFee <= upgrade.price && upgrade.price <= maxFee) {
|
|
279
|
-
if (fee.type === FeeTypeEnum.Flat) {
|
|
280
|
-
return upgrade.price + fee.value;
|
|
281
|
-
}
|
|
282
|
-
if (fee.type === FeeTypeEnum.Percent) {
|
|
283
|
-
return (upgrade.price * fee.value) / 100;
|
|
284
|
-
}
|
|
285
|
-
} else {
|
|
286
|
-
return 0;
|
|
287
|
-
}
|
|
249
|
+
// Caclualtions
|
|
250
|
+
const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
|
|
251
|
+
const upgradeTotal = upgrades.reduce((cur, upgrade) => cur + upgrade.price, 0);
|
|
252
|
+
const totalTicketAndUpgrades = ticketTotal + upgradeTotal
|
|
288
253
|
|
|
289
|
-
|
|
290
|
-
|
|
254
|
+
const promoterFeeFlatPerOrderTotal = promoterOrderFees.reduce((acc, fee: any) => {
|
|
255
|
+
if (fee.type == FeeTypeEnum.Flat) {
|
|
291
256
|
|
|
292
|
-
|
|
293
|
-
if (fee.type === FeeTypeEnum.Flat) {
|
|
294
|
-
return orderSubtotal + fee.value;
|
|
295
|
-
}
|
|
296
|
-
if (fee.type === FeeTypeEnum.Percent) {
|
|
297
|
-
return orderSubtotal / (1 - fee.value / 100);
|
|
257
|
+
return acc + getFeeAmount(fee)
|
|
298
258
|
}
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
|
|
302
|
-
|
|
259
|
+
return acc
|
|
260
|
+
}, 0)
|
|
303
261
|
|
|
304
|
-
const
|
|
262
|
+
const promoterFeeFlatPerTicketTotal = tickets.reduce((cur, ticket) => {
|
|
305
263
|
return (
|
|
306
264
|
cur +
|
|
307
|
-
|
|
265
|
+
ticketFeesPromotersFlat.reduce((cur, fee) => {
|
|
308
266
|
const value = cur + applyTicketFee(ticket, fee);
|
|
309
267
|
return value;
|
|
310
268
|
}, 0)
|
|
311
269
|
);
|
|
312
270
|
}, 0);
|
|
313
|
-
|
|
271
|
+
|
|
272
|
+
const promoterFeeFlatPerUpgradeTotal = upgrades.reduce((cur, upgrade) => {
|
|
314
273
|
return (
|
|
315
274
|
cur +
|
|
316
|
-
|
|
317
|
-
const value = cur +
|
|
275
|
+
upgradeFeesPromotersFees.reduce((cur, fee) => {
|
|
276
|
+
const value = cur + applyUpgradeFee(upgrade, fee);
|
|
318
277
|
return value;
|
|
319
278
|
}, 0)
|
|
320
279
|
);
|
|
321
280
|
}, 0);
|
|
322
281
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
const upgradeTotal = upgrades.reduce(
|
|
327
|
-
(cur, upgrade) => cur + upgrade.price,
|
|
328
|
-
0
|
|
329
|
-
);
|
|
330
|
-
|
|
331
|
-
const upgradeTaxFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
282
|
+
const SelloutFeeFlatPerUpgradeTotal = upgrades.reduce((cur, upgrade) => {
|
|
332
283
|
return (
|
|
333
284
|
cur +
|
|
334
|
-
|
|
285
|
+
upgradeFeesSelloutFees.reduce((cur, fee) => {
|
|
286
|
+
const value = cur + applyUpgradeFee(upgrade, fee);
|
|
287
|
+
return value;
|
|
288
|
+
}, 0)
|
|
335
289
|
);
|
|
336
290
|
}, 0);
|
|
337
291
|
|
|
338
|
-
const
|
|
292
|
+
const promoterFeePercentPerTicketTotal = tickets.reduce((cur, ticket) => {
|
|
339
293
|
return (
|
|
340
294
|
cur +
|
|
341
|
-
|
|
295
|
+
ticketFeesPromotersPercent.reduce((cur, fee) => {
|
|
296
|
+
const value = cur + applyTicketFee(ticket, fee);
|
|
297
|
+
return value;
|
|
298
|
+
}, 0)
|
|
342
299
|
);
|
|
343
300
|
}, 0);
|
|
344
|
-
const orderSubtotal = Math.round(
|
|
345
|
-
ticketTotal +
|
|
346
|
-
ticketTaxFeeTotal +
|
|
347
|
-
// ticketFeeTotal +
|
|
348
|
-
ticketFeeTotal +
|
|
349
|
-
upgradeTaxFeeTotal + ticketGuestFeeTotal +
|
|
350
|
-
upgradeTotal +
|
|
351
|
-
upgradeFeeTotal
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
const orderTotal = orderFees.reduce((cur, fee) => {
|
|
356
|
-
return applyOrderFee(cur, fee);
|
|
357
|
-
}, orderSubtotal);
|
|
358
|
-
|
|
359
|
-
return Math.round(orderTotal);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
calculatePaymentTotalDublicate(params: IPaymentCalculatorParams): number {
|
|
364
|
-
let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
|
|
365
301
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
// Filter fees
|
|
370
|
-
fees = fees.filter((fee: IFee) => {
|
|
371
|
-
// Ignore card reader fees for non card reader payemnts
|
|
372
|
-
if (
|
|
373
|
-
fee.filters &&
|
|
374
|
-
fee.filters.includes(FeeFiltersEnum.CardReader) &&
|
|
375
|
-
paymentMethodType !== PaymentMethodTypeEnum.CardReader
|
|
376
|
-
) {
|
|
377
|
-
return false;
|
|
302
|
+
const promoterFeePercentPerOrder = promoterOrderFees.reduce((acc, fee) => {
|
|
303
|
+
if (fee.type == FeeTypeEnum.Percent) {
|
|
304
|
+
return acc + getFeeAmount(fee, totalTicketAndUpgrades)
|
|
378
305
|
}
|
|
306
|
+
return acc
|
|
307
|
+
}, 0)
|
|
379
308
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
309
|
+
const ticketGuestFeeTotalForPromoter = tickets.reduce((cur, ticket) => {
|
|
310
|
+
return (
|
|
311
|
+
cur +
|
|
312
|
+
guestFees.reduce((cur, fee) => {
|
|
313
|
+
const value = fee.appliedBy == FeeAppliedByEnum.Organization ? cur + applyGuestTicketFee(ticket, fee) : 0;
|
|
314
|
+
return value;
|
|
315
|
+
}, 0)
|
|
316
|
+
);
|
|
317
|
+
}, 0);
|
|
388
318
|
|
|
389
|
-
|
|
390
|
-
|
|
319
|
+
const ticketGuestFeeTotalForSellout = tickets.reduce((cur, ticket) => {
|
|
320
|
+
return (
|
|
321
|
+
cur +
|
|
322
|
+
guestFees.reduce((cur, fee) => {
|
|
323
|
+
const value = fee.appliedBy == FeeAppliedByEnum.Sellout ? cur + applyGuestTicketFee(ticket, fee) : 0;
|
|
324
|
+
return value;
|
|
325
|
+
}, 0)
|
|
326
|
+
);
|
|
327
|
+
}, 0);
|
|
391
328
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
)
|
|
329
|
+
const orderSubtotal = Math.round(
|
|
330
|
+
ticketTotal +
|
|
331
|
+
upgradeTotal +
|
|
332
|
+
promoterFeeFlatPerTicketTotal +
|
|
333
|
+
promoterFeeFlatPerOrderTotal +
|
|
334
|
+
promoterFeePercentPerTicketTotal +
|
|
335
|
+
promoterFeePercentPerOrder +
|
|
336
|
+
ticketGuestFeeTotalForPromoter + promoterFeeFlatPerUpgradeTotal
|
|
337
|
+
)
|
|
338
|
+
const salesTaxAmount = salesTaxFees ? (orderSubtotal * salesTaxFees.value) / 100 : 0;
|
|
401
339
|
|
|
402
|
-
|
|
403
|
-
ticket: ICreateOrderTicketParams,
|
|
404
|
-
fee: IFee
|
|
405
|
-
): number {
|
|
406
|
-
// Ignore seated fees if not seated
|
|
407
|
-
if (
|
|
408
|
-
fee.filters &&
|
|
409
|
-
fee.filters.includes(FeeFiltersEnum.Seated) &&
|
|
410
|
-
!ticket.seat
|
|
411
|
-
) {
|
|
412
|
-
return 0;
|
|
413
|
-
}
|
|
340
|
+
const promoterTotal = orderSubtotal + salesTaxAmount;
|
|
414
341
|
|
|
415
|
-
|
|
416
|
-
|
|
342
|
+
const selloutPercentFeesAmt = selloutFees.reduce((acc, fee) => {
|
|
343
|
+
if (fee.type == FeeTypeEnum.Percent) {
|
|
344
|
+
return acc + getFeeAmount(fee, promoterTotal)
|
|
417
345
|
}
|
|
346
|
+
return acc
|
|
347
|
+
}, 0)
|
|
418
348
|
|
|
419
|
-
|
|
420
|
-
|
|
349
|
+
const selloutFeeFlatPerTicketAmt = tickets.reduce((cur: number, ticket: any) => {
|
|
350
|
+
return (
|
|
351
|
+
cur +
|
|
352
|
+
selloutFees.reduce((cur: number, fee: IFee) => {
|
|
353
|
+
if (fee.type == FeeTypeEnum.Flat && fee.appliedTo === FeeAppliedToEnum.Ticket &&
|
|
354
|
+
!fee?.filters?.includes(FeeFiltersEnum.Seated)
|
|
355
|
+
) {
|
|
356
|
+
const value = cur + applyTicketFee(ticket, fee);
|
|
357
|
+
return value;
|
|
358
|
+
}
|
|
359
|
+
return cur
|
|
360
|
+
}, 0)
|
|
361
|
+
);
|
|
362
|
+
}, 0);
|
|
421
363
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
if (fee.type === FeeTypeEnum.Percent) {
|
|
427
|
-
return (ticket.price * fee.value) / 100;
|
|
428
|
-
}
|
|
429
|
-
} else {
|
|
430
|
-
return 0;
|
|
364
|
+
const selloutFeeFlatPerOrderAmt = selloutFees.reduce((cur: number, fee: IFee) => {
|
|
365
|
+
if (fee.type === FeeTypeEnum.Flat && fee.appliedTo === FeeAppliedToEnum.Order) {
|
|
366
|
+
const value = cur + fee.value;
|
|
367
|
+
return value;
|
|
431
368
|
}
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
const ticketGuestFeeTotal = tickets.reduce((cur, ticket) => {
|
|
369
|
+
return cur
|
|
370
|
+
}, 0)
|
|
371
|
+
const selloutSeatedFeeAmt = tickets.reduce((cur: number, ticket: any) => {
|
|
437
372
|
return (
|
|
438
373
|
cur +
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
374
|
+
selloutFees.reduce((cur: number, fee: IFee) => {
|
|
375
|
+
if (fee.type == FeeTypeEnum.Flat && fee.appliedTo === FeeAppliedToEnum.Ticket &&
|
|
376
|
+
fee?.filters?.includes(FeeFiltersEnum.Seated)
|
|
377
|
+
) {
|
|
378
|
+
const value = cur + applyTicketFee(ticket, fee);
|
|
379
|
+
return value;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return cur
|
|
383
|
+
|
|
442
384
|
}, 0)
|
|
443
385
|
);
|
|
444
386
|
}, 0);
|
|
445
387
|
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
});
|
|
452
|
-
const upgradeFees = fees.filter(
|
|
453
|
-
(f) => f.appliedTo === FeeAppliedToEnum.Upgrade
|
|
454
|
-
);
|
|
455
|
-
// Orders mattes here. Flat type fees must be applied before Percent type fees
|
|
456
|
-
const orderFees = fees
|
|
457
|
-
.filter(
|
|
458
|
-
(f) => f.appliedTo === FeeAppliedToEnum.Order && f.name != "Sales tax"
|
|
388
|
+
const selloutFeesTotal = Math.round(
|
|
389
|
+
selloutPercentFeesAmt +
|
|
390
|
+
selloutFeeFlatPerTicketAmt +
|
|
391
|
+
selloutFeeFlatPerOrderAmt +
|
|
392
|
+
selloutSeatedFeeAmt + ticketGuestFeeTotalForSellout + SelloutFeeFlatPerUpgradeTotal
|
|
459
393
|
)
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
const
|
|
394
|
+
|
|
395
|
+
const preStripeTotal = promoterTotal + selloutFeesTotal
|
|
396
|
+
|
|
397
|
+
let stripeFeeAmt = 0
|
|
398
|
+
const stripeFeePercentage = stripeFees.find(fee => fee.type == FeeTypeEnum.Percent)?.value || 0
|
|
399
|
+
const stripeFeeFlat = stripeFees.find(fee => fee.type == FeeTypeEnum.Flat)?.value || 0
|
|
400
|
+
stripeFeeAmt = (preStripeTotal + (stripeFeeFlat)) / (1 - (stripeFeePercentage / 100)) - preStripeTotal
|
|
401
|
+
// stripeFeeAmt = ((preStripeTotal + (stripeFeeFlat)) * (stripeFeePercentage / 100)) - preStripeTotal
|
|
465
402
|
|
|
466
403
|
function applyTicketFee(
|
|
467
404
|
ticket: ICreateOrderTicketParams,
|
|
@@ -502,7 +439,8 @@ class PaymentUtil {
|
|
|
502
439
|
|
|
503
440
|
if (minFee <= upgrade.price && upgrade.price <= maxFee) {
|
|
504
441
|
if (fee.type === FeeTypeEnum.Flat) {
|
|
505
|
-
return upgrade.price + fee.value;
|
|
442
|
+
// return upgrade.price + fee.value;
|
|
443
|
+
return fee.value;
|
|
506
444
|
}
|
|
507
445
|
if (fee.type === FeeTypeEnum.Percent) {
|
|
508
446
|
return (upgrade.price * fee.value) / 100;
|
|
@@ -514,89 +452,103 @@ class PaymentUtil {
|
|
|
514
452
|
return 0;
|
|
515
453
|
}
|
|
516
454
|
|
|
517
|
-
|
|
455
|
+
// depricated
|
|
456
|
+
|
|
457
|
+
// function applyOrderFee(orderSubtotal, fee) {
|
|
458
|
+
// if (fee.type === FeeTypeEnum.Flat) {
|
|
459
|
+
// return fee.value
|
|
460
|
+
// // return orderSubtotal + fee.value;
|
|
461
|
+
// }
|
|
462
|
+
// if (fee.type === FeeTypeEnum.Percent) {
|
|
463
|
+
// // return orderSubtotal / (1 - fee.value / 100);
|
|
464
|
+
// return orderSubtotal * (fee.value / 100);
|
|
465
|
+
|
|
466
|
+
// }
|
|
467
|
+
// }
|
|
468
|
+
|
|
469
|
+
// return Calculated fees amount based on type
|
|
470
|
+
function getFeeAmount(fee, amt = 0) {
|
|
518
471
|
if (fee.type === FeeTypeEnum.Flat) {
|
|
519
|
-
return
|
|
472
|
+
return fee.value;
|
|
520
473
|
}
|
|
521
474
|
if (fee.type === FeeTypeEnum.Percent) {
|
|
522
|
-
return
|
|
475
|
+
return amt * (fee.value / 100);
|
|
523
476
|
}
|
|
524
477
|
}
|
|
525
478
|
|
|
526
|
-
|
|
527
|
-
|
|
479
|
+
// function applySelloutFee(amt, fee) {
|
|
480
|
+
// if (fee.type === FeeTypeEnum.Flat) {
|
|
481
|
+
// return amt + fee.value;
|
|
482
|
+
// }
|
|
483
|
+
// if (fee.type === FeeTypeEnum.Percent) {
|
|
484
|
+
// // return amt / (1 - fee.value / 100);
|
|
485
|
+
// return amt * (fee.value / 100);
|
|
486
|
+
// }
|
|
487
|
+
// }
|
|
488
|
+
// let totconsole.log(toto)o = preStripeTotal + stripeFeeAmt;
|
|
489
|
+
|
|
490
|
+
// return Math.round(preStripeTotal + stripeFeeAmt);
|
|
491
|
+
let promoterFeeAmount = promoterFeeFlatPerTicketTotal + promoterFeeFlatPerOrderTotal + promoterFeePercentPerTicketTotal +
|
|
492
|
+
promoterFeePercentPerOrder + ticketGuestFeeTotalForPromoter + promoterFeeFlatPerUpgradeTotal;
|
|
493
|
+
let total = {
|
|
494
|
+
salesTax: salesTaxAmount || 0,
|
|
495
|
+
total: (preStripeTotal + stripeFeeAmt) || 0,
|
|
496
|
+
promoterFees: (promoterFeeAmount) || 0,
|
|
497
|
+
stripeFees: stripeFeeAmt || 0,
|
|
498
|
+
selloutFees: selloutFeesTotal || 0,
|
|
499
|
+
orderSubtotal: orderSubtotal || 0,
|
|
500
|
+
subTotal: totalTicketAndUpgrades || 0,
|
|
501
|
+
totalFees: (promoterFeeAmount + stripeFeeAmt + selloutFeesTotal + salesTaxAmount) || 0,
|
|
502
|
+
totalWithoutTaxFees: (promoterFeeAmount + stripeFeeAmt + selloutFeesTotal) || 0
|
|
503
|
+
}
|
|
504
|
+
return total
|
|
528
505
|
|
|
529
|
-
const ticketTaxFeeTotal = tickets.reduce((cur, ticket) => {
|
|
530
|
-
return (
|
|
531
|
-
cur +
|
|
532
|
-
salesTax.reduce((cur, fee) => {
|
|
533
|
-
const value = cur + applyTicketFee(ticket, fee);
|
|
534
|
-
return value;
|
|
535
|
-
}, 0)
|
|
536
|
-
);
|
|
537
|
-
}, 0);
|
|
538
506
|
|
|
539
|
-
// const
|
|
507
|
+
// const ticketTaxFeeTotal = tickets.reduce((cur, ticket) => {
|
|
540
508
|
// return (
|
|
541
509
|
// cur +
|
|
542
|
-
//
|
|
510
|
+
// salesTax.reduce((cur, fee) => {
|
|
543
511
|
// const value = cur + applyTicketFee(ticket, fee);
|
|
544
512
|
// return value;
|
|
545
513
|
// }, 0)
|
|
546
514
|
// );
|
|
547
515
|
// }, 0);
|
|
548
516
|
|
|
549
|
-
// applyGuestTicketFee
|
|
550
517
|
|
|
551
518
|
|
|
552
519
|
|
|
553
520
|
|
|
554
|
-
const ticketFeeTotal = tickets.reduce((cur, ticket) => {
|
|
555
|
-
return (
|
|
556
|
-
cur +
|
|
557
|
-
ticketFees.reduce((cur, fee) => {
|
|
558
|
-
const value = cur + applyTicketFee(ticket, fee);
|
|
559
|
-
return value;
|
|
560
|
-
}, 0)
|
|
561
|
-
);
|
|
562
|
-
}, 0);
|
|
563
521
|
|
|
564
|
-
const upgradeTotal = upgrades.reduce(
|
|
565
|
-
(cur, upgrade) => cur + upgrade.price,
|
|
566
|
-
0
|
|
567
|
-
);
|
|
568
522
|
|
|
569
|
-
const upgradeTaxFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
}, 0);
|
|
523
|
+
// const upgradeTaxFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
524
|
+
// return (
|
|
525
|
+
// cur +
|
|
526
|
+
// salesTax.reduce((curr, fee) => curr + applyUpgradeFee(upgrade, fee), 0)
|
|
527
|
+
// );
|
|
528
|
+
// }, 0);
|
|
575
529
|
|
|
576
|
-
const upgradeFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
}, 0);
|
|
582
|
-
const orderSubtotal = Math.round(
|
|
583
|
-
ticketTotal +
|
|
584
|
-
ticketTaxFeeTotal +
|
|
585
|
-
ticketFeeTotal +
|
|
586
|
-
upgradeTaxFeeTotal + ticketGuestFeeTotal +
|
|
587
|
-
upgradeTotal +
|
|
588
|
-
upgradeFeeTotal
|
|
589
|
-
);
|
|
530
|
+
// const upgradeFeeTotal = upgrades.reduce((cur, upgrade) => {
|
|
531
|
+
// return (
|
|
532
|
+
// cur +
|
|
533
|
+
// upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
|
|
534
|
+
// );
|
|
535
|
+
// }, 0);
|
|
590
536
|
|
|
537
|
+
// const promoterFeeFlatPerOrder = promoterOrderFees.reduce((cur, fee) => {
|
|
538
|
+
// return applyOrderFee(cur, fee);
|
|
539
|
+
// }, ticketTotal + upgradeTotal);
|
|
591
540
|
|
|
592
|
-
|
|
593
|
-
return applyOrderFee(cur, fee);
|
|
594
|
-
}, orderSubtotal);
|
|
541
|
+
// console.log(promoterOrderTotal)
|
|
595
542
|
|
|
596
543
|
|
|
597
|
-
|
|
598
|
-
|
|
544
|
+
// Applying sellout fees
|
|
545
|
+
|
|
599
546
|
|
|
547
|
+
// applying sales tax fees
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
// return Math.round(orderTotal);
|
|
551
|
+
}
|
|
600
552
|
|
|
601
553
|
|
|
602
554
|
calculatePaymentSubtotal(params: IPaymentCalculatorParams): number {
|
|
@@ -620,14 +572,14 @@ class PaymentUtil {
|
|
|
620
572
|
let { fees } = params;
|
|
621
573
|
const salesTax = fees.filter((f) => f.name == "Sales tax");
|
|
622
574
|
const tax = salesTax.length > 0 ? salesTax[0].value : 0;
|
|
623
|
-
const total = this.calculatePaymentTotal(params);
|
|
575
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
624
576
|
let subtotal = this.calculatePaymentSubtotal(params);
|
|
625
577
|
subtotal = subtotal + (subtotal * tax) / 100;
|
|
626
578
|
return Math.round(total - subtotal);
|
|
627
579
|
}
|
|
628
580
|
|
|
629
581
|
calculateFeeWithoutTax(params: IPaymentCalculatorParams): number {
|
|
630
|
-
const total = this.calculatePaymentTotal(params);
|
|
582
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
631
583
|
let subtotal = this.calculatePaymentSubtotal(params);
|
|
632
584
|
return Math.round(total - subtotal);
|
|
633
585
|
}
|
|
@@ -667,14 +619,14 @@ class PaymentUtil {
|
|
|
667
619
|
});
|
|
668
620
|
}
|
|
669
621
|
calculateStripeFee(params: IPaymentCalculatorParams): number {
|
|
670
|
-
const total = this.calculatePaymentTotal(params);
|
|
622
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
671
623
|
const subtotal = this.calculatePaymentSubtotal(params);
|
|
672
624
|
const platformFees = this.calculatePlatformFee(params);
|
|
673
625
|
const organizationFee = this.calculateOrganizationFee(params);
|
|
674
626
|
return total - subtotal - platformFees - organizationFee;
|
|
675
627
|
}
|
|
676
628
|
calculateProcessingFee(params: IPaymentCalculatorParams): number {
|
|
677
|
-
const total = this.calculatePaymentTotal(params);
|
|
629
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
678
630
|
const subtotal = this.calculatePaymentSubtotal(params);
|
|
679
631
|
const organizationFee = this.calculateOrganizationFee(params);
|
|
680
632
|
return total - subtotal - organizationFee;
|
|
@@ -686,7 +638,7 @@ class PaymentUtil {
|
|
|
686
638
|
// }
|
|
687
639
|
|
|
688
640
|
calculateGuestFee(tickets: any, event: any): number {
|
|
689
|
-
|
|
641
|
+
|
|
690
642
|
let guestTicketFees = event?.fees.filter(
|
|
691
643
|
(fee: IFee) =>
|
|
692
644
|
fee.filters && fee.filters[0] === FeeFiltersEnum.GuestTicket
|
|
@@ -702,10 +654,10 @@ class PaymentUtil {
|
|
|
702
654
|
let guestMembers = tickets.filter((a) => a.guestTicket).length;
|
|
703
655
|
let guestFees = (guestFeesValue as number) * guestMembers;
|
|
704
656
|
return guestTicketFees.length > 0 && event.organization.isTegIntegration
|
|
705
|
-
? guestFees + guestFees * stripeFeesValue/100
|
|
657
|
+
? guestFees + guestFees * stripeFeesValue / 100
|
|
706
658
|
: 0;
|
|
707
659
|
}
|
|
708
|
-
|
|
660
|
+
|
|
709
661
|
}
|
|
710
662
|
|
|
711
663
|
export default new PaymentUtil();
|