@sellout/models 0.0.62 → 0.0.64

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 (54) hide show
  1. package/.dist/enums/OrderItemTypeEnum.d.ts +4 -0
  2. package/.dist/enums/OrderItemTypeEnum.js +10 -0
  3. package/.dist/enums/OrderItemTypeEnum.js.map +1 -0
  4. package/.dist/graphql/fragments/order.fragment.js +4 -0
  5. package/.dist/graphql/fragments/order.fragment.js.map +1 -1
  6. package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js +10 -1
  7. package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js.map +1 -1
  8. package/.dist/graphql/mutations/breakApartOrder.d.ts +2 -0
  9. package/.dist/graphql/mutations/breakApartOrder.js +43 -0
  10. package/.dist/graphql/mutations/breakApartOrder.js.map +1 -0
  11. package/.dist/graphql/mutations/register.mutation.js +2 -9
  12. package/.dist/graphql/mutations/register.mutation.js.map +1 -1
  13. package/.dist/graphql/queries/order.query.js +2 -0
  14. package/.dist/graphql/queries/order.query.js.map +1 -1
  15. package/.dist/graphql/queries/publicEvent.query.js +1 -0
  16. package/.dist/graphql/queries/publicEvent.query.js.map +1 -1
  17. package/.dist/graphql/queries/userProfile.query.js +3 -2
  18. package/.dist/graphql/queries/userProfile.query.js.map +1 -1
  19. package/.dist/interfaces/ICreateOrderParams.d.ts +1 -2
  20. package/.dist/interfaces/IOrder.d.ts +0 -2
  21. package/.dist/interfaces/IOrder.js.map +1 -1
  22. package/.dist/interfaces/IOrderTicket.d.ts +1 -0
  23. package/.dist/interfaces/IOrderTicket.js.map +1 -1
  24. package/.dist/interfaces/IOrderUpgrade.d.ts +1 -0
  25. package/.dist/interfaces/IStripeCustomer.d.ts +2 -2
  26. package/.dist/interfaces/IStripePaymentMethod.d.ts +10 -0
  27. package/.dist/interfaces/IStripePaymentMethod.js +3 -0
  28. package/.dist/interfaces/IStripePaymentMethod.js.map +1 -0
  29. package/.dist/schemas/Order.d.ts +10 -4
  30. package/.dist/schemas/Order.js +10 -4
  31. package/.dist/schemas/Order.js.map +1 -1
  32. package/.dist/sellout-proto.js +1008 -116
  33. package/.dist/utils/PaymentUtil.js +129 -26
  34. package/.dist/utils/PaymentUtil.js.map +1 -1
  35. package/package.json +4 -4
  36. package/src/enums/OrderItemTypeEnum.ts +4 -0
  37. package/src/graphql/fragments/order.fragment.ts +4 -0
  38. package/src/graphql/mutations/attachStripePaymentMethod.mutation.ts +10 -1
  39. package/src/graphql/mutations/breakApartOrder.ts +39 -0
  40. package/src/graphql/mutations/register.mutation.ts +2 -9
  41. package/src/graphql/queries/order.query.ts +2 -0
  42. package/src/graphql/queries/publicEvent.query.ts +1 -0
  43. package/src/graphql/queries/userProfile.query.ts +3 -2
  44. package/src/interfaces/ICreateOrderParams.ts +1 -2
  45. package/src/interfaces/IOrder.ts +0 -2
  46. package/src/interfaces/IOrderTicket.ts +1 -0
  47. package/src/interfaces/IOrderUpgrade.ts +1 -0
  48. package/src/interfaces/IStripeCustomer.ts +2 -2
  49. package/src/interfaces/{IStripeSource.ts → IStripePaymentMethod.ts} +2 -2
  50. package/src/proto/order.proto +21 -5
  51. package/src/proto/stripe.proto +14 -3
  52. package/src/schemas/Order.ts +10 -4
  53. package/src/utils/PaymentUtil.ts +159 -34
  54. package/src/enums/OrderDeliveryMethodEnum.ts +0 -5
@@ -1,6 +1,7 @@
1
1
  import { ICreateOrderTicketParams, ICreateOrderUpgradeParams } from '../interfaces/ICreateOrderParams';
2
2
  import IFee, { FeeAppliedToEnum, FeeFiltersEnum, FeeTypeEnum } from '../interfaces/IFee';
3
3
  import { PaymentMethodTypeEnum } from '../enums/PaymentMethodTypeEnum';
4
+ // import { OrderTypeEnum } from 'src/interfaces/IOrderType';
4
5
 
5
6
  interface IPaymentCalculatorParams {
6
7
  tickets: ICreateOrderTicketParams[];
@@ -9,50 +10,171 @@ interface IPaymentCalculatorParams {
9
10
  paymentMethodType: PaymentMethodTypeEnum
10
11
  }
11
12
 
13
+ // interface IOrderItems {
14
+ // tickets: ICreateOrderTicketParams[];
15
+ // upgrades: ICreateOrderUpgradeParams[];
16
+ // }
17
+
12
18
  export default {
19
+ // DOES NOT WORK! Work in Progress :)
20
+ // calculateOrderItemPrices(params: IPaymentCalculatorParams): IOrderItems {
21
+
22
+ // let {
23
+ // tickets = [],
24
+ // upgrades = [],
25
+ // fees = [],
26
+ // paymentMethodType,
27
+ // } = params;
28
+
29
+
30
+ // // Filter fees
31
+ // fees = fees.filter((fee: IFee) => {
32
+ // // Ignore card reader fees for non card reader payemnts
33
+ // if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum.CardReader) {
34
+ // return false;
35
+ // }
36
+
37
+ // // Ignore card entry fees for non card entry payemnts
38
+ // if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum.CardEntry) {
39
+ // return false;
40
+ // }
41
+
42
+ // return true;
43
+ // });
44
+
45
+ // const ticketFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Ticket)
46
+ // .sort(({ type }) => {
47
+ // if (type === FeeTypeEnum.Flat) return -1;
48
+ // else return 1;
49
+ // });
50
+ // const upgradeFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Upgrade);
51
+ // // Orders mattes here. Flat type fees must be applied before Percent type fees
52
+ // const orderFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Order)
53
+ // .sort(({ type }) => {
54
+ // if (type === FeeTypeEnum.Percent) return -1;
55
+ // else return 1;
56
+ // })
57
+ // .map(fee => {
58
+ // if(fee.type === FeeTypeEnum.Flat) {
59
+ // return {
60
+ // ...fee,
61
+ // value: fee.value / tickets.length,
62
+ // }
63
+ // }
64
+ // else return fee;
65
+ // });
66
+
67
+ // const reverseApplyFee = (price: number, ticket: ICreateOrderTicketParams, fee: IFee): number => {
68
+ // // Ignore seated fees
69
+ // if (fee.filters && fee.filters.includes(FeeFiltersEnum.Seated) && !ticket.seat) {
70
+ // return price;
71
+ // }
72
+
73
+ // const minFee = fee.minAppliedToPrice || 0;
74
+ // const maxFee = fee.maxAppliedToPrice || Infinity;
75
+
76
+ // if (minFee <= price && price <= maxFee) {
77
+ // console.log(fee);
78
+ // if (fee.type === FeeTypeEnum.Flat) {
79
+ // return price - fee.value;
80
+ // } if (fee.type === FeeTypeEnum.Percent) {
81
+ // return price * (1 - fee.value / 100);
82
+ // }
83
+ // }
84
+
85
+
86
+ // // if(fee.type === FeeTypeEnum.Percent) {
87
+ // // return price * (1 - fee.value / 100);
88
+ // // }
89
+
90
+ // // if(fee.type === FeeTypeEnum.Flat) {
91
+ // // return price - fee.value;
92
+ // // }
93
+
94
+ // return price;
95
+ // }
96
+
97
+ // function calculateTicketPrice(ticket: ICreateOrderTicketParams): number {
98
+ // if(!ticket.rollFees) return ticket.price;
99
+
100
+ // const allFees = [...orderFees, ...ticketFees];
101
+
102
+ // return allFees.reduce((cur, fee) => {
103
+ // const next = reverseApplyFee(cur, ticket, fee);
104
+ // return next;
105
+ // }, ticket.price);
106
+
107
+ // }
108
+
109
+ // tickets = tickets.map((ticket: ICreateOrderTicketParams): ICreateOrderTicketParams => {
110
+ // const price = Math.floor(calculateTicketPrice(ticket));
111
+ // console.log(`Ticket Price: `, price);
112
+ // return {
113
+ // ...ticket,
114
+ // price,
115
+ // }
116
+ // });
117
+
118
+
119
+
120
+ // // upgrades = upgrades.map((upgrade: ICreateOrderUpgradeParams): ICreateOrderUpgradeParams => {
121
+ // // return {
122
+ // // ...upgrade,
123
+ // // price: calculateUpgradePrice(upgrade),
124
+ // // }
125
+ // // });
126
+
127
+ // return {
128
+ // tickets,
129
+ // upgrades,
130
+ // };
131
+ // },
13
132
  calculateTotal(params: IPaymentCalculatorParams): number {
14
133
 
15
- const {
16
- tickets = [],
134
+ let {
135
+ tickets = [],
17
136
  upgrades = [],
18
137
  fees = [],
19
138
  paymentMethodType,
20
139
  } = params;
21
140
 
22
- console.log(fees);
23
-
24
141
  // No items, total is always 0
25
- if(!tickets.length && !upgrades.length) return 0;
142
+ if (!tickets.length && !upgrades.length) return 0;
143
+
144
+ // Filter fees
145
+ fees = fees.filter((fee: IFee) => {
146
+ // Ignore card reader fees for non card reader payemnts
147
+ if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum.CardReader) {
148
+ return false;
149
+ }
26
150
 
27
- const ticketFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Ticket);
151
+ // Ignore card entry fees for non card entry payemnts
152
+ if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum.CardEntry) {
153
+ return false;
154
+ }
155
+
156
+ return true;
157
+ });
158
+
159
+ const ticketFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Ticket)
160
+ .sort(({ type }) => {
161
+ if (type === FeeTypeEnum.Flat) return -1;
162
+ else return 1;
163
+ })
28
164
  const upgradeFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Upgrade);
29
165
  // Orders mattes here. Flat type fees must be applied before Percent type fees
30
166
  const orderFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Order).sort(({ type }) => {
31
167
  if (type === 'Flat') return -1;
32
- return 1;
168
+ else return 1;
33
169
  });
170
+
34
171
 
35
172
  function applyTicketFee(ticket: ICreateOrderTicketParams, fee: IFee): number {
36
- // // Ignore rolled fees
37
- // if (ticket.rollFees) {
38
- // return 0;
39
- // }
40
-
41
- // Ignore seated fees
173
+ // Ignore seated fees if not seated
42
174
  if (fee.filters && fee.filters.includes(FeeFiltersEnum.Seated) && !ticket.seat) {
43
175
  return 0;
44
176
  }
45
-
46
- // Ignore card reader fees for non card reader payemnts
47
- if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum.CardReader) {
48
- return 0;
49
- }
50
-
51
- // Ignore card entry fees for non card entry payemnts
52
- if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum.CardEntry) {
53
- return 0;
54
- }
55
-
177
+
56
178
  const minFee = fee.minAppliedToPrice || 0;
57
179
  const maxFee = fee.maxAppliedToPrice || Infinity;
58
180
 
@@ -70,19 +192,14 @@ export default {
70
192
  }
71
193
 
72
194
  function applyUpgradeFee(upgrade: ICreateOrderUpgradeParams, fee: IFee): number {
73
- // // Ignore rolled fees
74
- // if (upgrade.rollFees) {
75
- // return 0;
76
- // }
77
-
78
195
  const minFee = fee.minAppliedToPrice || 0;
79
196
  const maxFee = fee.maxAppliedToPrice || Infinity;
80
197
 
81
198
  if (minFee <= upgrade.price && upgrade.price <= maxFee) {
82
199
  if (fee.type === FeeTypeEnum.Flat) {
83
- return fee.value;
200
+ return upgrade.price + fee.value;
84
201
  } if (fee.type === FeeTypeEnum.Percent) {
85
- return (upgrade.price * fee.value / 100);
202
+ return (upgrade.price / (1 - fee.value / 100));
86
203
  }
87
204
  } else {
88
205
  return 0;
@@ -102,7 +219,11 @@ export default {
102
219
  const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
103
220
 
104
221
  const ticketFeeTotal = tickets.reduce((cur, ticket) => {
105
- return cur + ticketFees.reduce((cur, fee) => cur + applyTicketFee(ticket, fee), 0);
222
+ return cur + ticketFees.reduce((cur, fee) => {
223
+ const value = cur + applyTicketFee(ticket, fee);
224
+ // console.log(`${fee.name}: ${value}`);
225
+ return value;
226
+ }, 0);
106
227
  }, 0);
107
228
 
108
229
  const upgradeTotal = upgrades.reduce((cur, upgrade) => cur + upgrade.price, 0);
@@ -111,12 +232,16 @@ export default {
111
232
  return cur + upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0);
112
233
  }, 0);
113
234
 
114
- const orderSubtotal = ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal;
235
+ const orderSubtotal = Math.round(ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal);
236
+
237
+ // console.log(`Order SubTotal:`, orderSubtotal);
115
238
 
116
239
  const orderTotal = orderFees.reduce((cur, fee) => {
117
240
  return applyOrderFee(cur, fee);
118
241
  }, orderSubtotal);
119
242
 
120
- return Math.round(orderTotal);
243
+ // console.log(`Order Total`, orderTotal);
244
+
245
+ return orderTotal;
121
246
  }
122
247
  }
@@ -1,5 +0,0 @@
1
- export enum OrderDeliveryMethodEnum {
2
- Email = 'Email',
3
- TextMessage = 'Text Message',
4
- Printed = 'Printed',
5
- };