@sellout/models 0.0.61 → 0.0.63

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.
@@ -2,38 +2,139 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const IFee_1 = require("../interfaces/IFee");
4
4
  const PaymentMethodTypeEnum_1 = require("../enums/PaymentMethodTypeEnum");
5
+ // interface IOrderItems {
6
+ // tickets: ICreateOrderTicketParams[];
7
+ // upgrades: ICreateOrderUpgradeParams[];
8
+ // }
5
9
  exports.default = {
10
+ // DOES NOT WORK! Work in Progress :)
11
+ // calculateOrderItemPrices(params: IPaymentCalculatorParams): IOrderItems {
12
+ // let {
13
+ // tickets = [],
14
+ // upgrades = [],
15
+ // fees = [],
16
+ // paymentMethodType,
17
+ // } = params;
18
+ // // Filter fees
19
+ // fees = fees.filter((fee: IFee) => {
20
+ // // Ignore card reader fees for non card reader payemnts
21
+ // if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum.CardReader) {
22
+ // return false;
23
+ // }
24
+ // // Ignore card entry fees for non card entry payemnts
25
+ // if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum.CardEntry) {
26
+ // return false;
27
+ // }
28
+ // return true;
29
+ // });
30
+ // const ticketFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Ticket)
31
+ // .sort(({ type }) => {
32
+ // if (type === FeeTypeEnum.Flat) return -1;
33
+ // else return 1;
34
+ // });
35
+ // const upgradeFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Upgrade);
36
+ // // Orders mattes here. Flat type fees must be applied before Percent type fees
37
+ // const orderFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Order)
38
+ // .sort(({ type }) => {
39
+ // if (type === FeeTypeEnum.Percent) return -1;
40
+ // else return 1;
41
+ // })
42
+ // .map(fee => {
43
+ // if(fee.type === FeeTypeEnum.Flat) {
44
+ // return {
45
+ // ...fee,
46
+ // value: fee.value / tickets.length,
47
+ // }
48
+ // }
49
+ // else return fee;
50
+ // });
51
+ // const reverseApplyFee = (price: number, ticket: ICreateOrderTicketParams, fee: IFee): number => {
52
+ // // Ignore seated fees
53
+ // if (fee.filters && fee.filters.includes(FeeFiltersEnum.Seated) && !ticket.seat) {
54
+ // return price;
55
+ // }
56
+ // const minFee = fee.minAppliedToPrice || 0;
57
+ // const maxFee = fee.maxAppliedToPrice || Infinity;
58
+ // if (minFee <= price && price <= maxFee) {
59
+ // console.log(fee);
60
+ // if (fee.type === FeeTypeEnum.Flat) {
61
+ // return price - fee.value;
62
+ // } if (fee.type === FeeTypeEnum.Percent) {
63
+ // return price * (1 - fee.value / 100);
64
+ // }
65
+ // }
66
+ // // if(fee.type === FeeTypeEnum.Percent) {
67
+ // // return price * (1 - fee.value / 100);
68
+ // // }
69
+ // // if(fee.type === FeeTypeEnum.Flat) {
70
+ // // return price - fee.value;
71
+ // // }
72
+ // return price;
73
+ // }
74
+ // function calculateTicketPrice(ticket: ICreateOrderTicketParams): number {
75
+ // if(!ticket.rollFees) return ticket.price;
76
+ // const allFees = [...orderFees, ...ticketFees];
77
+ // return allFees.reduce((cur, fee) => {
78
+ // const next = reverseApplyFee(cur, ticket, fee);
79
+ // return next;
80
+ // }, ticket.price);
81
+ // }
82
+ // tickets = tickets.map((ticket: ICreateOrderTicketParams): ICreateOrderTicketParams => {
83
+ // const price = Math.floor(calculateTicketPrice(ticket));
84
+ // console.log(`Ticket Price: `, price);
85
+ // return {
86
+ // ...ticket,
87
+ // price,
88
+ // }
89
+ // });
90
+ // // upgrades = upgrades.map((upgrade: ICreateOrderUpgradeParams): ICreateOrderUpgradeParams => {
91
+ // // return {
92
+ // // ...upgrade,
93
+ // // price: calculateUpgradePrice(upgrade),
94
+ // // }
95
+ // // });
96
+ // return {
97
+ // tickets,
98
+ // upgrades,
99
+ // };
100
+ // },
6
101
  calculateTotal(params) {
7
- const { tickets = [], upgrades = [], fees = [], paymentMethodType, } = params;
8
- console.log(fees);
102
+ let { tickets = [], upgrades = [], fees = [], paymentMethodType, } = params;
9
103
  // No items, total is always 0
10
104
  if (!tickets.length && !upgrades.length)
11
105
  return 0;
12
- const ticketFees = fees.filter(f => f.appliedTo === IFee_1.FeeAppliedToEnum.Ticket);
106
+ // Filter fees
107
+ fees = fees.filter((fee) => {
108
+ // Ignore card reader fees for non card reader payemnts
109
+ if (fee.filters && fee.filters.includes(IFee_1.FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum_1.PaymentMethodTypeEnum.CardReader) {
110
+ return false;
111
+ }
112
+ // Ignore card entry fees for non card entry payemnts
113
+ if (fee.filters && fee.filters.includes(IFee_1.FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum_1.PaymentMethodTypeEnum.CardEntry) {
114
+ return false;
115
+ }
116
+ return true;
117
+ });
118
+ const ticketFees = fees.filter(f => f.appliedTo === IFee_1.FeeAppliedToEnum.Ticket)
119
+ .sort(({ type }) => {
120
+ if (type === IFee_1.FeeTypeEnum.Flat)
121
+ return -1;
122
+ else
123
+ return 1;
124
+ });
13
125
  const upgradeFees = fees.filter(f => f.appliedTo === IFee_1.FeeAppliedToEnum.Upgrade);
14
126
  // Orders mattes here. Flat type fees must be applied before Percent type fees
15
127
  const orderFees = fees.filter(f => f.appliedTo === IFee_1.FeeAppliedToEnum.Order).sort(({ type }) => {
16
128
  if (type === 'Flat')
17
129
  return -1;
18
- return 1;
130
+ else
131
+ return 1;
19
132
  });
20
133
  function applyTicketFee(ticket, fee) {
21
- // // Ignore rolled fees
22
- // if (ticket.rollFees) {
23
- // return 0;
24
- // }
25
- // Ignore seated fees
134
+ // Ignore seated fees if not seated
26
135
  if (fee.filters && fee.filters.includes(IFee_1.FeeFiltersEnum.Seated) && !ticket.seat) {
27
136
  return 0;
28
137
  }
29
- // Ignore card reader fees for non card reader payemnts
30
- if (fee.filters && fee.filters.includes(IFee_1.FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum_1.PaymentMethodTypeEnum.CardReader) {
31
- return 0;
32
- }
33
- // Ignore card entry fees for non card entry payemnts
34
- if (fee.filters && fee.filters.includes(IFee_1.FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum_1.PaymentMethodTypeEnum.CardEntry) {
35
- return 0;
36
- }
37
138
  const minFee = fee.minAppliedToPrice || 0;
38
139
  const maxFee = fee.maxAppliedToPrice || Infinity;
39
140
  if (minFee <= ticket.price && ticket.price <= maxFee) {
@@ -50,18 +151,14 @@ exports.default = {
50
151
  return 0;
51
152
  }
52
153
  function applyUpgradeFee(upgrade, fee) {
53
- // // Ignore rolled fees
54
- // if (upgrade.rollFees) {
55
- // return 0;
56
- // }
57
154
  const minFee = fee.minAppliedToPrice || 0;
58
155
  const maxFee = fee.maxAppliedToPrice || Infinity;
59
156
  if (minFee <= upgrade.price && upgrade.price <= maxFee) {
60
157
  if (fee.type === IFee_1.FeeTypeEnum.Flat) {
61
- return fee.value;
158
+ return upgrade.price + fee.value;
62
159
  }
63
160
  if (fee.type === IFee_1.FeeTypeEnum.Percent) {
64
- return (upgrade.price * fee.value / 100);
161
+ return (upgrade.price / (1 - fee.value / 100));
65
162
  }
66
163
  }
67
164
  else {
@@ -79,17 +176,23 @@ exports.default = {
79
176
  }
80
177
  const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
81
178
  const ticketFeeTotal = tickets.reduce((cur, ticket) => {
82
- return cur + ticketFees.reduce((cur, fee) => cur + applyTicketFee(ticket, fee), 0);
179
+ return cur + ticketFees.reduce((cur, fee) => {
180
+ const value = cur + applyTicketFee(ticket, fee);
181
+ console.log(`${fee.name}: ${value}`);
182
+ return value;
183
+ }, 0);
83
184
  }, 0);
84
185
  const upgradeTotal = upgrades.reduce((cur, upgrade) => cur + upgrade.price, 0);
85
186
  const upgradeFeeTotal = upgrades.reduce((cur, upgrade) => {
86
187
  return cur + upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0);
87
188
  }, 0);
88
189
  const orderSubtotal = ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal;
190
+ console.log(`Order SubTotal:`, orderSubtotal);
89
191
  const orderTotal = orderFees.reduce((cur, fee) => {
90
192
  return applyOrderFee(cur, fee);
91
193
  }, orderSubtotal);
92
- return Math.round(orderTotal);
194
+ console.log(`Order Total`, orderTotal);
195
+ return orderTotal;
93
196
  }
94
197
  };
95
198
  //# sourceMappingURL=PaymentUtil.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentUtil.js","sourceRoot":"","sources":["../../src/utils/PaymentUtil.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PaymentUtil.js","sourceRoot":"","sources":["../../src/utils/PaymentUtil.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellout/models",
3
- "version": "0.0.61",
3
+ "version": "0.0.63",
4
4
  "description": "Sellout.io models",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -16,8 +16,8 @@
16
16
  "author": "samheutmaker@gmail.com",
17
17
  "license": "MIT",
18
18
  "dependencies": {
19
- "@sellout/service": "^0.0.61",
20
- "@sellout/utils": "^0.0.61",
19
+ "@sellout/service": "^0.0.63",
20
+ "@sellout/utils": "^0.0.63",
21
21
  "@types/shortid": "0.0.29",
22
22
  "apollo-link-debounce": "^2.1.0",
23
23
  "graphql": "^14.6.0",
@@ -30,5 +30,5 @@
30
30
  "protobufjs": "~6.10.1",
31
31
  "typescript": "^3.8.3"
32
32
  },
33
- "gitHead": "58d9a384b9a512a792281d82008e2bbcfd0975a8"
33
+ "gitHead": "ac189b9687d565aeec74f94ade3dabe3d0b29e34"
34
34
  }
@@ -28,6 +28,7 @@ Order.fragments = {
28
28
  ticketTierId
29
29
  price
30
30
  seat
31
+ qrCodeUrl
31
32
  refund {
32
33
  refunded
33
34
  refundedAt
@@ -49,6 +50,7 @@ Order.fragments = {
49
50
  name
50
51
  upgradeId
51
52
  price
53
+ qrCodeUrl
52
54
  refund {
53
55
  refunded
54
56
  refundedAt
@@ -0,0 +1,46 @@
1
+ import gql from "graphql-tag";
2
+ import Order from '../fragments/order.fragment';
3
+
4
+ const mutation = gql`
5
+ mutation breakApartOrder($orderId: String!) {
6
+ breakApartOrder(orderId: $orderId) {
7
+ _id
8
+ event {
9
+ _id
10
+ name
11
+ posterImageUrl
12
+ sendQRCode
13
+ performances {
14
+ schedule {
15
+ doorsAt
16
+ startsAt
17
+ }
18
+ }
19
+ schedule {
20
+ startsAt
21
+ }
22
+ venue {
23
+ name
24
+ address {
25
+ state
26
+ city
27
+ }
28
+ }
29
+ organization {
30
+ orgName
31
+ }
32
+ }
33
+ state
34
+ refundedAmount
35
+ refundReason
36
+ promotionCode
37
+ type
38
+ ...OrderTickets
39
+ ...OrderUpgrades
40
+ }
41
+ }
42
+ ${Order.fragments.tickets}
43
+ ${Order.fragments.upgrades}
44
+ `;
45
+
46
+ export default mutation;
@@ -18,6 +18,7 @@ const query = gql`
18
18
  orgId
19
19
  eventId
20
20
  event {
21
+ _id
21
22
  name
22
23
  posterImageUrl
23
24
  sendQRCode
@@ -14,4 +14,5 @@ export default interface IOrderTicket {
14
14
  refund: IRefund;
15
15
  scan: IScan;
16
16
  state: OrderItemStateEnum;
17
+ qrCodeUrl?: string;
17
18
  };
@@ -12,4 +12,5 @@ export default interface IOrderUpgrade {
12
12
  refund: IRefund;
13
13
  scan: IScan;
14
14
  state: OrderItemStateEnum;
15
+ qrCodeUrl?: string;
15
16
  }
@@ -327,6 +327,21 @@ message QueryOrderAnalyticsResponse {
327
327
  repeated Analytics analytics = 2;
328
328
  }
329
329
 
330
+ /****************************************************************************************
331
+ Break Apart Order
332
+ ****************************************************************************************/
333
+
334
+ message BreakApartOrderRequest {
335
+ string spanContext = 0;
336
+ string orderId = 1;
337
+ }
338
+
339
+ message BreakApartOrderResponse {
340
+ StatusCode status = 0;
341
+ repeated Error errors = 1;
342
+ Order order = 2;
343
+ }
344
+
330
345
  service OrderService {
331
346
  // Create
332
347
  rpc createOrder(CreateOrderRequest) returns (CreateOrderResponse) {}
@@ -335,6 +350,7 @@ service OrderService {
335
350
  rpc sendOrderReceiptEmail(SendOrderReceiptEmailRequest) returns (SendOrderReceiptEmailResponse) {}
336
351
  rpc sendOrderRefundEmail(SendOrderRefundEmailRequest) returns (SendOrderRefundEmailResponse) {}
337
352
  rpc scanOrder(ScanOrderRequest) returns (ScanOrderResponse) {}
353
+ rpc breakApartOrder(BreakApartOrderRequest) returns (BreakApartOrderResponse) {}
338
354
  // Refund
339
355
  rpc refundOrder(RefundOrderRequest) returns (RefundOrderResponse) {}
340
356
  rpc refundEventOrders(RefundEventOrdersRequest) returns (RefundEventOrdersResponse) {}
@@ -82,6 +82,11 @@ const OrderTicket = {
82
82
  type: String,
83
83
  required: true,
84
84
  },
85
+ qrCodeUrl: {
86
+ type: String,
87
+ required: false,
88
+ default: null,
89
+ },
85
90
  };
86
91
 
87
92
  const OrderUpgrade = {
@@ -118,6 +123,11 @@ const OrderUpgrade = {
118
123
  type: String,
119
124
  required: true,
120
125
  },
126
+ qrCodeUrl: {
127
+ type: String,
128
+ required: false,
129
+ default: null,
130
+ },
121
131
  };
122
132
 
123
133
  const OrderCustomField = {
@@ -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);
@@ -113,10 +234,14 @@ export default {
113
234
 
114
235
  const orderSubtotal = ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal;
115
236
 
237
+ console.log(`Order SubTotal:`, orderSubtotal);
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
  }