@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.
- package/.dist/enums/OrderItemTypeEnum.d.ts +4 -0
- package/.dist/enums/OrderItemTypeEnum.js +10 -0
- package/.dist/enums/OrderItemTypeEnum.js.map +1 -0
- package/.dist/graphql/fragments/order.fragment.js +4 -0
- package/.dist/graphql/fragments/order.fragment.js.map +1 -1
- package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js +10 -1
- package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js.map +1 -1
- package/.dist/graphql/mutations/breakApartOrder.d.ts +2 -0
- package/.dist/graphql/mutations/breakApartOrder.js +43 -0
- package/.dist/graphql/mutations/breakApartOrder.js.map +1 -0
- package/.dist/graphql/mutations/register.mutation.js +2 -9
- package/.dist/graphql/mutations/register.mutation.js.map +1 -1
- package/.dist/graphql/queries/order.query.js +2 -0
- package/.dist/graphql/queries/order.query.js.map +1 -1
- package/.dist/graphql/queries/publicEvent.query.js +1 -0
- package/.dist/graphql/queries/publicEvent.query.js.map +1 -1
- package/.dist/graphql/queries/userProfile.query.js +3 -2
- package/.dist/graphql/queries/userProfile.query.js.map +1 -1
- package/.dist/interfaces/ICreateOrderParams.d.ts +1 -2
- package/.dist/interfaces/IOrder.d.ts +0 -2
- package/.dist/interfaces/IOrder.js.map +1 -1
- package/.dist/interfaces/IOrderTicket.d.ts +1 -0
- package/.dist/interfaces/IOrderTicket.js.map +1 -1
- package/.dist/interfaces/IOrderUpgrade.d.ts +1 -0
- package/.dist/interfaces/IStripeCustomer.d.ts +2 -2
- package/.dist/interfaces/IStripePaymentMethod.d.ts +10 -0
- package/.dist/interfaces/IStripePaymentMethod.js +3 -0
- package/.dist/interfaces/IStripePaymentMethod.js.map +1 -0
- package/.dist/schemas/Order.d.ts +10 -4
- package/.dist/schemas/Order.js +10 -4
- package/.dist/schemas/Order.js.map +1 -1
- package/.dist/sellout-proto.js +1008 -116
- package/.dist/utils/PaymentUtil.js +129 -26
- package/.dist/utils/PaymentUtil.js.map +1 -1
- package/package.json +4 -4
- package/src/enums/OrderItemTypeEnum.ts +4 -0
- package/src/graphql/fragments/order.fragment.ts +4 -0
- package/src/graphql/mutations/attachStripePaymentMethod.mutation.ts +10 -1
- package/src/graphql/mutations/breakApartOrder.ts +39 -0
- package/src/graphql/mutations/register.mutation.ts +2 -9
- package/src/graphql/queries/order.query.ts +2 -0
- package/src/graphql/queries/publicEvent.query.ts +1 -0
- package/src/graphql/queries/userProfile.query.ts +3 -2
- package/src/interfaces/ICreateOrderParams.ts +1 -2
- package/src/interfaces/IOrder.ts +0 -2
- package/src/interfaces/IOrderTicket.ts +1 -0
- package/src/interfaces/IOrderUpgrade.ts +1 -0
- package/src/interfaces/IStripeCustomer.ts +2 -2
- package/src/interfaces/{IStripeSource.ts → IStripePaymentMethod.ts} +2 -2
- package/src/proto/order.proto +21 -5
- package/src/proto/stripe.proto +14 -3
- package/src/schemas/Order.ts +10 -4
- package/src/utils/PaymentUtil.ts +159 -34
- package/src/enums/OrderDeliveryMethodEnum.ts +0 -5
package/src/utils/PaymentUtil.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
|
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) =>
|
|
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
|
-
|
|
243
|
+
// console.log(`Order Total`, orderTotal);
|
|
244
|
+
|
|
245
|
+
return orderTotal;
|
|
121
246
|
}
|
|
122
247
|
}
|