@sellout/models 0.0.182 → 0.0.184

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.
Files changed (62) hide show
  1. package/.dist/graphql/mutations/cancelOrder.mutation.d.ts +2 -0
  2. package/.dist/graphql/mutations/cancelOrder.mutation.js +15 -0
  3. package/.dist/graphql/mutations/cancelOrder.mutation.js.map +1 -0
  4. package/.dist/graphql/mutations/deleteSubscription.mutation.d.ts +2 -0
  5. package/.dist/graphql/mutations/deleteSubscription.mutation.js +16 -0
  6. package/.dist/graphql/mutations/deleteSubscription.mutation.js.map +1 -0
  7. package/.dist/graphql/mutations/salesReport.mutation.d.ts +2 -0
  8. package/.dist/graphql/mutations/salesReport.mutation.js +15 -0
  9. package/.dist/graphql/mutations/salesReport.mutation.js.map +1 -0
  10. package/.dist/graphql/mutations/updateOrder.mutation.d.ts +2 -0
  11. package/.dist/graphql/mutations/updateOrder.mutation.js +16 -0
  12. package/.dist/graphql/mutations/updateOrder.mutation.js.map +1 -0
  13. package/.dist/graphql/queries/event.query.js +5 -0
  14. package/.dist/graphql/queries/event.query.js.map +1 -1
  15. package/.dist/interfaces/IEvent.d.ts +2 -0
  16. package/.dist/interfaces/IEvent.js.map +1 -1
  17. package/.dist/interfaces/IOrder.d.ts +1 -0
  18. package/.dist/interfaces/IOrder.js.map +1 -1
  19. package/.dist/interfaces/ISalesReport.d.ts +9 -0
  20. package/.dist/interfaces/ISalesReport.js +9 -0
  21. package/.dist/interfaces/ISalesReport.js.map +1 -0
  22. package/.dist/interfaces/ITask.d.ts +4 -1
  23. package/.dist/interfaces/ITask.js +1 -0
  24. package/.dist/interfaces/ITask.js.map +1 -1
  25. package/.dist/schemas/Event.d.ts +14 -0
  26. package/.dist/schemas/Event.js +16 -1
  27. package/.dist/schemas/Event.js.map +1 -1
  28. package/.dist/schemas/Order.d.ts +4 -0
  29. package/.dist/schemas/Order.js +3 -0
  30. package/.dist/schemas/Order.js.map +1 -1
  31. package/.dist/sellout-proto.js +22030 -17062
  32. package/.dist/utils/EventUtil.js +2 -2
  33. package/.dist/utils/EventUtil.js.map +1 -1
  34. package/.dist/utils/FeeUtil.d.ts +1 -0
  35. package/.dist/utils/FeeUtil.js +8 -0
  36. package/.dist/utils/FeeUtil.js.map +1 -1
  37. package/.dist/utils/OrderUtil.d.ts +2 -0
  38. package/.dist/utils/OrderUtil.js +157 -1
  39. package/.dist/utils/OrderUtil.js.map +1 -1
  40. package/.dist/utils/PaymentUtil.d.ts +1 -0
  41. package/.dist/utils/PaymentUtil.js +201 -4
  42. package/.dist/utils/PaymentUtil.js.map +1 -1
  43. package/package.json +3 -3
  44. package/src/graphql/mutations/cancelOrder.mutation.ts +11 -0
  45. package/src/graphql/mutations/deleteSubscription.mutation.ts +12 -0
  46. package/src/graphql/mutations/salesReport.mutation.ts +10 -0
  47. package/src/graphql/mutations/updateOrder.mutation.ts +11 -0
  48. package/src/graphql/queries/event.query.ts +5 -0
  49. package/src/interfaces/IEvent.ts +2 -0
  50. package/src/interfaces/IOrder.ts +2 -1
  51. package/src/interfaces/ISalesReport.ts +11 -0
  52. package/src/interfaces/ITask.ts +4 -0
  53. package/src/proto/email.proto +6 -2
  54. package/src/proto/event.proto +45 -0
  55. package/src/proto/order.proto +63 -0
  56. package/src/proto/task.proto +22 -0
  57. package/src/schemas/Event.ts +17 -1
  58. package/src/schemas/Order.ts +6 -3
  59. package/src/utils/EventUtil.ts +3 -2
  60. package/src/utils/FeeUtil.ts +8 -0
  61. package/src/utils/OrderUtil.ts +182 -2
  62. package/src/utils/PaymentUtil.ts +298 -5
@@ -362,6 +362,21 @@ const TicketTier = {
362
362
  },
363
363
  };
364
364
 
365
+ const Subscription = {
366
+ _id: {
367
+ type: String,
368
+ default: shortid.generate,
369
+ },
370
+ email: {
371
+ type: String,
372
+ required: true,
373
+ },
374
+ frequency: {
375
+ type: String,
376
+ required: true,
377
+ }
378
+ };
379
+
365
380
  const TicketType = {
366
381
  _id: {
367
382
  type: String,
@@ -542,5 +557,6 @@ export default {
542
557
  }, guestTicketPerMember: {
543
558
  type: String,
544
559
  required: false
545
- }
560
+ },
561
+ subscription: [Subscription]
546
562
  };
@@ -131,10 +131,10 @@ const OrderTicket = {
131
131
  required: false
132
132
  },
133
133
  teiMemberInfo: TeiMemberInfoInput,
134
- guestTicket:{
134
+ guestTicket: {
135
135
  type: Boolean,
136
136
  required: false
137
- }
137
+ }
138
138
  };
139
139
 
140
140
  const OrderUpgrade = {
@@ -368,8 +368,11 @@ export default {
368
368
  type: Boolean,
369
369
  required: false,
370
370
  default: false
371
- },parentSeasonOrderId:{
371
+ }, parentSeasonOrderId: {
372
372
  type: String,
373
373
  required: false,
374
+ }, cancelReason: {
375
+ type: String,
376
+ required: false
374
377
  }
375
378
  };
@@ -138,8 +138,9 @@ export default {
138
138
  return startsAt - TWO_WEEKS;
139
139
  } */
140
140
 
141
- const TEN_HOURS = 10 * 60 * 60;
142
- return doorsAt - TEN_HOURS;
141
+ // return doorsAt - 600;
142
+
143
+ return doorsAt - 28800
143
144
  },
144
145
  shouldSendOrderReceipt(event): boolean {
145
146
  const now = Time.now();
@@ -26,6 +26,14 @@ export default {
26
26
  return true;
27
27
  });
28
28
  },
29
+ organizationFees(fees: any[] = []) {
30
+ return fees.filter((fee) => {
31
+ if (fee.appliedBy === "Organization") {
32
+ return false;
33
+ }
34
+ return true;
35
+ });
36
+ },
29
37
  promoterFees(fees: any[] = []) {
30
38
  return fees?.filter((fee) => {
31
39
  if (fee.appliedBy === "Sellout" || fee.appliedBy === "Stripe") {
@@ -6,6 +6,7 @@ import ICreateOrderParams from '../interfaces/ICreateOrderParams';
6
6
  import IPayment from '../interfaces/IPayment';
7
7
  import PaymentUtil from './PaymentUtil';
8
8
  // import IFee from '../interfaces/IFee';
9
+ import IFee, { FeeAppliedByEnum, FeeTypeEnum, FeeFiltersEnum } from "../interfaces/IFee";
9
10
 
10
11
  export default {
11
12
  isComp(order) {
@@ -112,7 +113,6 @@ export default {
112
113
  upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
113
114
  );
114
115
  }, 0);
115
-
116
116
  const orderSubtotal =
117
117
  ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal;
118
118
 
@@ -130,9 +130,170 @@ export default {
130
130
  return Math.round(orderTotal);
131
131
  }
132
132
  },
133
+
134
+ // orderTotalExport(order: IOrder, fees: any[]): number {
135
+ // if (order?.payments && order?.payments.length > 0) {
136
+ // return order.payments.reduce((cur: number, payment: IPayment): number => {
137
+ // const paymentTickets = order.tickets.filter(ticket => ticket.paymentId === payment._id)
138
+ // const paymentUpgrades = order.upgrades.filter(upgrade => upgrade.paymentId === payment._id)
139
+ // const total = PaymentUtil.calculatePaymentTotalDublicate({
140
+ // tickets: paymentTickets,
141
+ // upgrades: paymentUpgrades,
142
+ // fees: fees,
143
+ // paymentMethodType: payment.paymentMethodType,
144
+ // })
145
+ // return cur + total
146
+ // }, 0);
147
+ // } else {
148
+ // if (
149
+ // (!order.tickets || !order.tickets.length) &&
150
+ // (!order.upgrades || !order.upgrades.length)
151
+ // )
152
+ // return 0;
153
+
154
+ // if (!order.tickets) order.tickets = [];
155
+ // if (!order.upgrades) order.upgrades = [];
156
+
157
+ // const ticketFees = fees.filter(f => f.appliedTo === "Ticket");
158
+ // const upgradeFees = fees.filter(f => f.appliedTo === "Upgrade");
159
+ // let orderFees = fees.filter(f => f.appliedTo === "Order");
160
+
161
+ // function applyTicketFee(ticket, fee) {
162
+ // if (fee.filters.includes("Seated") && !ticket.seat) return 0;
163
+ // const noMax = fee.maxAppliedToPrice === 0;
164
+ // if (
165
+ // (fee.minAppliedToPrice <= ticket.price &&
166
+ // ticket.price <= fee.maxAppliedToPrice) ||
167
+ // noMax
168
+ // ) {
169
+ // if (fee.type === "Flat") {
170
+ // return fee.value;
171
+ // }
172
+ // if (fee.type === "Percent") {
173
+ // return (ticket.price * fee.value) / 100;
174
+ // }
175
+ // } else {
176
+ // return 0;
177
+ // }
178
+ // }
179
+
180
+ // function applyUpgradeFee(upgrade, fee) {
181
+ // const noMax = fee.maxAppliedToPrice === 0;
182
+ // if (
183
+ // (fee.minAppliedToPrice <= upgrade.price &&
184
+ // upgrade.price <= fee.minAppliedToPrice) ||
185
+ // noMax
186
+ // ) {
187
+ // if (fee.type === "Flat") {
188
+ // return fee.value;
189
+ // }
190
+ // if (fee.type === "Percent") {
191
+ // return (upgrade.price * fee.value) / 100;
192
+ // }
193
+ // } else {
194
+ // return 0;
195
+ // }
196
+ // }
197
+
198
+ // function applyOrderFee(orderSubtotal, fee) {
199
+ // if (fee.type === "Flat") {
200
+ // return orderSubtotal + fee.value;
201
+ // }
202
+ // if (fee.type === "Percent") {
203
+ // return orderSubtotal / (1 - fee.value / 100);
204
+ // }
205
+ // }
206
+
207
+ // const ticketTotal = order.tickets.reduce(
208
+ // (cur, ticket) => cur + ticket.price,
209
+ // 0
210
+ // );
211
+
212
+ // const ticketFeeTotal = order.tickets.reduce((cur, ticket) => {
213
+ // return (
214
+ // cur +
215
+ // ticketFees.reduce((cur, fee) => cur + applyTicketFee(ticket, fee), 0)
216
+ // );
217
+ // }, 0);
218
+
219
+ // const upgradeTotal = order.upgrades.reduce(
220
+ // (cur, upgrade) => cur + upgrade.price,
221
+ // 0
222
+ // );
223
+
224
+ // const upgradeFeeTotal = order.upgrades.reduce((cur, upgrade) => {
225
+ // return (
226
+ // cur +
227
+ // upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
228
+ // );
229
+ // }, 0);
230
+ // const orderSubtotal =
231
+ // ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal;
232
+
233
+ // // Order matters here. Flat type fees must be
234
+ // // applied before Percent type fees
235
+ // orderFees = orderFees.sort(({ type }) => {
236
+ // if (type === "Flat") return -1;
237
+ // return 1;
238
+ // });
239
+
240
+ // const orderTotal = orderFees.reduce((cur, fee) => {
241
+ // return applyOrderFee(cur, fee);
242
+ // }, orderSubtotal);
243
+
244
+ // return Math.round(orderTotal);
245
+ // }
246
+ // },
247
+
248
+
249
+
250
+ guestFees(order: IOrder, fees: IFee[]): any {
251
+ let guestTicketFees = fees.find(
252
+ (fee: IFee) => {
253
+ const filter: any = fee?.filters
254
+ return filter.includes(FeeFiltersEnum.GuestTicket)
255
+ }
256
+ );
257
+
258
+ let guestFeesValue = guestTicketFees?.value || 0;
259
+ // const ticketTotal = order.tickets.reduce((cur, ticket) => cur + ticket.price - ticket.refund.refundedAmount, 0);
260
+ const ticketTotal = order.tickets.reduce((cur, ticket) => cur + ticket.price - ticket.refund.refundedAmount, 0);
261
+ let guestMembers = order.tickets.filter((a) => a.guestTicket).length;
262
+ // let guestMembers = order.tickets.filter((a) => a.guestTicket && a.refund.refunded == false).length;
263
+ let guestMembersRefunded = order.tickets.filter((a) => a.guestTicket && a.refund.refunded == true).length;
264
+ const stripeFees: any = fees.find(
265
+ (fee: IFee) => fee.appliedBy === FeeAppliedByEnum.Stripe && fee.type === FeeTypeEnum.Percent
266
+ );
267
+ let guestFees;
268
+ let guestFeesRefunded;
269
+
270
+ if (guestTicketFees?.type === "Flat") {
271
+ guestFees = (guestFeesValue as number) * guestMembers
272
+ guestFeesRefunded = (guestFeesValue as number) * guestMembersRefunded
273
+ } else if (guestTicketFees?.type === "Percent") {
274
+ guestFees = (ticketTotal * guestFeesValue) / 100
275
+ guestFeesRefunded = (ticketTotal * guestMembersRefunded) / 100
276
+ }
277
+ let stripeFeeAmount = 0;
278
+ if (stripeFees?.value) {
279
+ stripeFeeAmount = Math.round(guestFees * stripeFees?.value / 100)
280
+ }
281
+
282
+ return {
283
+ guestFees: guestFees || 0,
284
+ guestFeesRefunded: guestFeesRefunded || 0,
285
+ stripeFeeAmount: stripeFeeAmount || 0
286
+ }
287
+
288
+ },
133
289
  orderTotalWithRefund(order, fees) {
134
- return this.orderTotal(order, fees) - (order.refundedAmount || 0);
290
+ const orderTotal = this.orderTotal(order, fees);
291
+ return orderTotal - (order.refundedAmount || 0);
135
292
  },
293
+ // orderExportTotalWithRefund(order, fees) {
294
+ // const orderTotal = this.orderTotalExport(order, fees);
295
+ // return orderTotal - (order.refundedAmount || 0);
296
+ // },
136
297
  orderTransferAmountWithRefund(order, fees) {
137
298
  const promoterFees = FeeUtil.promoterFees(fees);
138
299
  return this.orderTotalWithRefund(order, promoterFees);
@@ -195,6 +356,13 @@ export default {
195
356
  fees = FeeUtil.selloutFees(fees);
196
357
  return this.orderTotal(order, fees) - this.orderSubtotal(order);
197
358
  },
359
+
360
+ // selloutExortFees(order, fees) {
361
+ // if (!order.tickets) order.tickets = [];
362
+ // if (!order.upgrades) order.upgrades = [];
363
+ // fees = FeeUtil.selloutFees(fees);
364
+ // return this.orderTotalExport(order, fees) - this.orderSubtotal(order);
365
+ // },
198
366
  // This one is special because stripe fees
199
367
  // can be applied as a percentage
200
368
  stripeFees(order, fees) {
@@ -208,6 +376,18 @@ export default {
208
376
  let stripeFeeT = stripeFee < 0 ? 0 : stripeFee;
209
377
  return stripeFeeT;
210
378
  },
379
+
380
+ // stripeFeesExport(order, fees) {
381
+ // if (!order.tickets) order.tickets = [];
382
+ // if (!order.upgrades) order.upgrades = [];
383
+ // const total = this.orderTotalExport(order, fees);
384
+ // const subtotal = this.orderSubtotal(order);
385
+ // const selloutFees = this.selloutExortFees(order, fees);
386
+ // const promoterFees = this.promoterFees(order, fees);
387
+ // let stripeFee = total - subtotal - selloutFees - promoterFees;
388
+ // let stripeFeeT = stripeFee < 0 ? 0 : stripeFee;
389
+ // return stripeFeeT;
390
+ // },
211
391
  promoterFees(order, fees) {
212
392
  if (!order.tickets) order.tickets = [];
213
393
  if (!order.upgrades) order.upgrades = [];
@@ -163,11 +163,61 @@ class PaymentUtil {
163
163
  return true;
164
164
  });
165
165
 
166
+ let guestFees = fees.filter(
167
+ (fee: IFee) =>
168
+ fee.filters && fee.filters[0] == FeeFiltersEnum.GuestTicket
169
+ );
170
+
166
171
  fees = fees.filter(
167
172
  (fee: IFee) =>
168
173
  fee.filters && fee.filters[0] !== FeeFiltersEnum.GuestTicket
169
174
  );
170
175
 
176
+ function applyGuestTicketFee(
177
+ ticket: ICreateOrderTicketParams,
178
+ fee: IFee
179
+ ): number {
180
+ // Ignore seated fees if not seated
181
+ if (
182
+ fee.filters &&
183
+ fee.filters.includes(FeeFiltersEnum.Seated) &&
184
+ !ticket.seat
185
+ ) {
186
+ return 0;
187
+ }
188
+
189
+ if(!ticket.guestTicket){
190
+ return 0;
191
+ }
192
+
193
+ const minFee = fee.minAppliedToPrice || 0;
194
+ const maxFee = fee.maxAppliedToPrice || Infinity;
195
+
196
+ if (minFee <= ticket.price && ticket.price <= maxFee) {
197
+ if (fee.type === FeeTypeEnum.Flat) {
198
+ return fee.value;
199
+ }
200
+ if (fee.type === FeeTypeEnum.Percent) {
201
+ return (ticket.price * fee.value) / 100;
202
+ }
203
+ } else {
204
+ return 0;
205
+ }
206
+
207
+ return 0;
208
+ }
209
+
210
+ const ticketGuestFeeTotal = tickets.reduce((cur, ticket) => {
211
+ return (
212
+ cur +
213
+ guestFees.reduce((cur, fee) => {
214
+ const value = cur + applyGuestTicketFee(ticket, fee);
215
+ return value;
216
+ }, 0)
217
+ );
218
+ }, 0);
219
+
220
+
171
221
  const ticketFees = fees
172
222
  .filter((f) => f.appliedTo === FeeAppliedToEnum.Ticket)
173
223
  .sort(({ type }) => {
@@ -270,6 +320,9 @@ class PaymentUtil {
270
320
  );
271
321
  }, 0);
272
322
 
323
+
324
+
325
+
273
326
  const upgradeTotal = upgrades.reduce(
274
327
  (cur, upgrade) => cur + upgrade.price,
275
328
  0
@@ -291,22 +344,261 @@ class PaymentUtil {
291
344
  const orderSubtotal = Math.round(
292
345
  ticketTotal +
293
346
  ticketTaxFeeTotal +
347
+ // ticketFeeTotal +
294
348
  ticketFeeTotal +
295
- upgradeTaxFeeTotal +
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
+
366
+ // No items, total is always 0
367
+ if (!tickets.length && !upgrades.length) return 0;
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;
378
+ }
379
+
380
+ // Ignore card entry fees for non card entry payemnts
381
+ if (
382
+ fee.filters &&
383
+ fee.filters.includes(FeeFiltersEnum.CardEntry) &&
384
+ paymentMethodType !== PaymentMethodTypeEnum.CardEntry
385
+ ) {
386
+ return false;
387
+ }
388
+
389
+ return true;
390
+ });
391
+
392
+ let guestFees = fees.filter(
393
+ (fee: IFee) =>
394
+ fee.filters && fee.filters[0] == FeeFiltersEnum.GuestTicket
395
+ );
396
+
397
+ fees = fees.filter(
398
+ (fee: IFee) =>
399
+ fee.filters && fee.filters[0] !== FeeFiltersEnum.GuestTicket
400
+ );
401
+
402
+ function applyGuestTicketFee(
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
+ }
414
+
415
+ if(!ticket.guestTicket){
416
+ return 0;
417
+ }
418
+
419
+ const minFee = fee.minAppliedToPrice || 0;
420
+ const maxFee = fee.maxAppliedToPrice || Infinity;
421
+
422
+ if (minFee <= ticket.price && ticket.price <= maxFee) {
423
+ if (fee.type === FeeTypeEnum.Flat) {
424
+ return fee.value;
425
+ }
426
+ if (fee.type === FeeTypeEnum.Percent) {
427
+ return (ticket.price * fee.value) / 100;
428
+ }
429
+ } else {
430
+ return 0;
431
+ }
432
+
433
+ return 0;
434
+ }
435
+
436
+ const ticketGuestFeeTotal = tickets.reduce((cur, ticket) => {
437
+ return (
438
+ cur +
439
+ guestFees.reduce((cur, fee) => {
440
+ const value = cur + applyGuestTicketFee(ticket, fee);
441
+ return value;
442
+ }, 0)
443
+ );
444
+ }, 0);
445
+
446
+ const ticketFees = fees
447
+ .filter((f) => f.appliedTo === FeeAppliedToEnum.Ticket)
448
+ .sort(({ type }) => {
449
+ if (type === FeeTypeEnum.Flat) return -1;
450
+ else return 1;
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"
459
+ )
460
+ .sort(({ type }) => {
461
+ if (type === "Flat") return -1;
462
+ else return 1;
463
+ });
464
+ const salesTax = fees.filter((f) => f.name == "Sales tax");
465
+
466
+ function applyTicketFee(
467
+ ticket: ICreateOrderTicketParams,
468
+ fee: IFee
469
+ ): number {
470
+ // Ignore seated fees if not seated
471
+ if (
472
+ fee.filters &&
473
+ fee.filters.includes(FeeFiltersEnum.Seated) &&
474
+ !ticket.seat
475
+ ) {
476
+ return 0;
477
+ }
478
+
479
+ const minFee = fee.minAppliedToPrice || 0;
480
+ const maxFee = fee.maxAppliedToPrice || Infinity;
481
+
482
+ if (minFee <= ticket.price && ticket.price <= maxFee) {
483
+ if (fee.type === FeeTypeEnum.Flat) {
484
+ return fee.value;
485
+ }
486
+ if (fee.type === FeeTypeEnum.Percent) {
487
+ return (ticket.price * fee.value) / 100;
488
+ }
489
+ } else {
490
+ return 0;
491
+ }
492
+
493
+ return 0;
494
+ }
495
+
496
+ function applyUpgradeFee(
497
+ upgrade: ICreateOrderUpgradeParams,
498
+ fee: IFee
499
+ ): number {
500
+ const minFee = fee.minAppliedToPrice || 0;
501
+ const maxFee = fee.maxAppliedToPrice || Infinity;
502
+
503
+ if (minFee <= upgrade.price && upgrade.price <= maxFee) {
504
+ if (fee.type === FeeTypeEnum.Flat) {
505
+ return upgrade.price + fee.value;
506
+ }
507
+ if (fee.type === FeeTypeEnum.Percent) {
508
+ return (upgrade.price * fee.value) / 100;
509
+ }
510
+ } else {
511
+ return 0;
512
+ }
513
+
514
+ return 0;
515
+ }
516
+
517
+ function applyOrderFee(orderSubtotal, fee) {
518
+ if (fee.type === FeeTypeEnum.Flat) {
519
+ return orderSubtotal + fee.value;
520
+ }
521
+ if (fee.type === FeeTypeEnum.Percent) {
522
+ return orderSubtotal / (1 - fee.value / 100);
523
+ }
524
+ }
525
+
526
+ const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
527
+
528
+
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
+
539
+ // const ticketGuestFeeTotal = tickets.reduce((cur, ticket) => {
540
+ // return (
541
+ // cur +
542
+ // ticketFees.reduce((cur, fee) => {
543
+ // const value = cur + applyTicketFee(ticket, fee);
544
+ // return value;
545
+ // }, 0)
546
+ // );
547
+ // }, 0);
548
+
549
+ // applyGuestTicketFee
550
+
551
+
552
+
553
+
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
+
564
+ const upgradeTotal = upgrades.reduce(
565
+ (cur, upgrade) => cur + upgrade.price,
566
+ 0
567
+ );
568
+
569
+ const upgradeTaxFeeTotal = upgrades.reduce((cur, upgrade) => {
570
+ return (
571
+ cur +
572
+ salesTax.reduce((curr, fee) => curr + applyUpgradeFee(upgrade, fee), 0)
573
+ );
574
+ }, 0);
575
+
576
+ const upgradeFeeTotal = upgrades.reduce((cur, upgrade) => {
577
+ return (
578
+ cur +
579
+ upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
580
+ );
581
+ }, 0);
582
+ const orderSubtotal = Math.round(
583
+ ticketTotal +
584
+ ticketTaxFeeTotal +
585
+ ticketFeeTotal +
586
+ upgradeTaxFeeTotal + ticketGuestFeeTotal +
296
587
  upgradeTotal +
297
588
  upgradeFeeTotal
298
589
  );
299
590
 
300
- // console.log(`Order SubTotal:`, orderSubtotal);
301
591
 
302
592
  const orderTotal = orderFees.reduce((cur, fee) => {
303
593
  return applyOrderFee(cur, fee);
304
594
  }, orderSubtotal);
305
595
 
306
- console.log(`Order Total`, orderTotal);
307
596
 
308
597
  return Math.round(orderTotal);
309
598
  }
599
+
600
+
601
+
310
602
  calculatePaymentSubtotal(params: IPaymentCalculatorParams): number {
311
603
  let {
312
604
  tickets = [],
@@ -404,15 +696,16 @@ class PaymentUtil {
404
696
  (fee: IFee) => fee.appliedBy === FeeAppliedByEnum.Stripe && fee.type === FeeTypeEnum.Percent
405
697
  );
406
698
 
699
+
407
700
  let guestFeesValue = guestTicketFees && guestTicketFees[0]?.value;
408
701
  let stripeFeesValue = stripeFees && stripeFees[0]?.value;
409
702
  let guestMembers = tickets.filter((a) => a.guestTicket).length;
410
-
411
703
  let guestFees = (guestFeesValue as number) * guestMembers;
412
704
  return guestTicketFees.length > 0 && event.organization.isTegIntegration
413
- ? guestFees + Math.round(guestFees * stripeFeesValue/100)
705
+ ? guestFees + guestFees * stripeFeesValue/100
414
706
  : 0;
415
707
  }
708
+
416
709
  }
417
710
 
418
711
  export default new PaymentUtil();