@sellout/models 0.0.188-alpha.0 → 0.0.188
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/generateActivityReport.mutation.d.ts +2 -0
- package/.dist/graphql/mutations/generateActivityReport.mutation.js +18 -0
- package/.dist/graphql/mutations/generateActivityReport.mutation.js.map +1 -0
- 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/graphql/queries/order.query.js +1 -0
- package/.dist/graphql/queries/order.query.js.map +1 -1
- package/.dist/graphql/queries/orders.query.js +1 -0
- package/.dist/graphql/queries/orders.query.js.map +1 -1
- package/.dist/graphql/queries/userProfilesAdmin.query.js +2 -5
- package/.dist/graphql/queries/userProfilesAdmin.query.js.map +1 -1
- package/.dist/interfaces/ICreateOrderParams.d.ts +2 -0
- package/.dist/interfaces/IFee.d.ts +1 -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/interfaces/IPagination.d.ts +1 -2
- package/.dist/interfaces/IPagination.js +0 -1
- package/.dist/interfaces/IPagination.js.map +1 -1
- 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 +1014 -118
- package/.dist/utils/OrderUtil.js +111 -195
- package/.dist/utils/OrderUtil.js.map +1 -1
- package/.dist/utils/PaymentUtil.d.ts +2 -2
- package/.dist/utils/PaymentUtil.js +190 -198
- package/.dist/utils/PaymentUtil.js.map +1 -1
- package/package.json +3 -3
- package/src/graphql/mutations/generateActivityReport.mutation.ts +14 -0
- package/src/graphql/mutations/sendSeasonOrderReceiptEmail.mutation.ts +9 -0
- package/src/graphql/queries/order.query.ts +1 -0
- package/src/graphql/queries/orders.query.ts +1 -0
- package/src/graphql/queries/userProfilesAdmin.query.ts +2 -5
- package/src/interfaces/ICreateOrderParams.ts +2 -0
- package/src/interfaces/IFee.ts +2 -0
- package/src/interfaces/IOrder.ts +2 -1
- package/src/interfaces/IOrderSummary.ts +1 -0
- package/src/interfaces/IPagination.ts +6 -7
- package/src/proto/email.proto +0 -2
- package/src/proto/event.proto +0 -3
- package/src/proto/fee.proto +1 -0
- package/src/proto/order.proto +35 -1
- package/src/schemas/Order.ts +81 -0
- package/src/utils/OrderUtil.ts +128 -219
- package/src/utils/PaymentUtil.ts +243 -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;
|
|
257
|
+
return acc + getFeeAmount(fee)
|
|
295
258
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
}
|
|
299
|
-
}
|
|
259
|
+
return acc
|
|
260
|
+
}, 0)
|
|
300
261
|
|
|
301
|
-
const
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
const ticketTaxFeeTotal = tickets.reduce((cur, ticket) => {
|
|
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 {
|
|
@@ -616,18 +568,40 @@ class PaymentUtil {
|
|
|
616
568
|
); // + (upgrade.price * tax/100)
|
|
617
569
|
return ticketTotal + upgradeTotal;
|
|
618
570
|
}
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
calculatePaymentSubtotalValue(params: any): number {
|
|
574
|
+
let {
|
|
575
|
+
tickets = [],
|
|
576
|
+
upgrades = [],
|
|
577
|
+
// paymentMethodType,
|
|
578
|
+
// fees
|
|
579
|
+
} = params;
|
|
580
|
+
|
|
581
|
+
// if (paymentMethodType === PaymentMethodTypeEnum.None) return 0;
|
|
582
|
+
|
|
583
|
+
const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0); // + (ticket.price * tax/100)
|
|
584
|
+
const upgradeTotal = upgrades.reduce(
|
|
585
|
+
(cur, upgrade) => cur + upgrade.price,
|
|
586
|
+
0
|
|
587
|
+
); // + (upgrade.price * tax/100)
|
|
588
|
+
return ticketTotal + upgradeTotal;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
|
|
619
593
|
calculateFee(params: IPaymentCalculatorParams): number {
|
|
620
594
|
let { fees } = params;
|
|
621
595
|
const salesTax = fees.filter((f) => f.name == "Sales tax");
|
|
622
596
|
const tax = salesTax.length > 0 ? salesTax[0].value : 0;
|
|
623
|
-
const total = this.calculatePaymentTotal(params);
|
|
597
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
624
598
|
let subtotal = this.calculatePaymentSubtotal(params);
|
|
625
599
|
subtotal = subtotal + (subtotal * tax) / 100;
|
|
626
600
|
return Math.round(total - subtotal);
|
|
627
601
|
}
|
|
628
602
|
|
|
629
603
|
calculateFeeWithoutTax(params: IPaymentCalculatorParams): number {
|
|
630
|
-
const total = this.calculatePaymentTotal(params);
|
|
604
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
631
605
|
let subtotal = this.calculatePaymentSubtotal(params);
|
|
632
606
|
return Math.round(total - subtotal);
|
|
633
607
|
}
|
|
@@ -667,14 +641,14 @@ class PaymentUtil {
|
|
|
667
641
|
});
|
|
668
642
|
}
|
|
669
643
|
calculateStripeFee(params: IPaymentCalculatorParams): number {
|
|
670
|
-
const total = this.calculatePaymentTotal(params);
|
|
644
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
671
645
|
const subtotal = this.calculatePaymentSubtotal(params);
|
|
672
646
|
const platformFees = this.calculatePlatformFee(params);
|
|
673
647
|
const organizationFee = this.calculateOrganizationFee(params);
|
|
674
648
|
return total - subtotal - platformFees - organizationFee;
|
|
675
649
|
}
|
|
676
650
|
calculateProcessingFee(params: IPaymentCalculatorParams): number {
|
|
677
|
-
const total = this.calculatePaymentTotal(params);
|
|
651
|
+
const total = this.calculatePaymentTotal(params).total;
|
|
678
652
|
const subtotal = this.calculatePaymentSubtotal(params);
|
|
679
653
|
const organizationFee = this.calculateOrganizationFee(params);
|
|
680
654
|
return total - subtotal - organizationFee;
|
|
@@ -686,7 +660,7 @@ class PaymentUtil {
|
|
|
686
660
|
// }
|
|
687
661
|
|
|
688
662
|
calculateGuestFee(tickets: any, event: any): number {
|
|
689
|
-
|
|
663
|
+
|
|
690
664
|
let guestTicketFees = event?.fees.filter(
|
|
691
665
|
(fee: IFee) =>
|
|
692
666
|
fee.filters && fee.filters[0] === FeeFiltersEnum.GuestTicket
|
|
@@ -702,10 +676,10 @@ class PaymentUtil {
|
|
|
702
676
|
let guestMembers = tickets.filter((a) => a.guestTicket).length;
|
|
703
677
|
let guestFees = (guestFeesValue as number) * guestMembers;
|
|
704
678
|
return guestTicketFees.length > 0 && event.organization.isTegIntegration
|
|
705
|
-
? guestFees + guestFees * stripeFeesValue/100
|
|
679
|
+
? guestFees + guestFees * stripeFeesValue / 100
|
|
706
680
|
: 0;
|
|
707
681
|
}
|
|
708
|
-
|
|
682
|
+
|
|
709
683
|
}
|
|
710
684
|
|
|
711
685
|
export default new PaymentUtil();
|