@sellout/models 0.0.160 → 0.0.162

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 (49) hide show
  1. package/.dist/graphql/mutations/createSeason.mutation.js +1 -0
  2. package/.dist/graphql/mutations/createSeason.mutation.js.map +1 -1
  3. package/.dist/graphql/mutations/publishSeason.mutation.js +1 -0
  4. package/.dist/graphql/mutations/publishSeason.mutation.js.map +1 -1
  5. package/.dist/graphql/mutations/updateSeason.mutation.js +1 -0
  6. package/.dist/graphql/mutations/updateSeason.mutation.js.map +1 -1
  7. package/.dist/graphql/queries/publicSeason.query.js +7 -0
  8. package/.dist/graphql/queries/publicSeason.query.js.map +1 -1
  9. package/.dist/interfaces/ICreateOrderParams.d.ts +2 -4
  10. package/.dist/interfaces/IFee.d.ts +2 -1
  11. package/.dist/interfaces/IFee.js +1 -0
  12. package/.dist/interfaces/IFee.js.map +1 -1
  13. package/.dist/interfaces/IOrderTicket.d.ts +2 -4
  14. package/.dist/interfaces/ISeason.d.ts +1 -0
  15. package/.dist/interfaces/ITeiMemberInfo.d.ts +6 -0
  16. package/.dist/interfaces/ITeiMemberInfo.js +3 -0
  17. package/.dist/interfaces/ITeiMemberInfo.js.map +1 -0
  18. package/.dist/interfaces/ITicketType.d.ts +2 -4
  19. package/.dist/schemas/Order.d.ts +17 -15
  20. package/.dist/schemas/Order.js +19 -15
  21. package/.dist/schemas/Order.js.map +1 -1
  22. package/.dist/schemas/Season.d.ts +5 -0
  23. package/.dist/schemas/Season.js +5 -1
  24. package/.dist/schemas/Season.js.map +1 -1
  25. package/.dist/sellout-proto.js +312 -158
  26. package/.dist/utils/PaymentUtil.d.ts +4 -3
  27. package/.dist/utils/PaymentUtil.js +63 -29
  28. package/.dist/utils/PaymentUtil.js.map +1 -1
  29. package/.dist/utils/SeasonUtil.d.ts +2 -0
  30. package/.dist/utils/SeasonUtil.js +75 -0
  31. package/.dist/utils/SeasonUtil.js.map +1 -1
  32. package/package.json +3 -3
  33. package/src/graphql/mutations/createSeason.mutation.ts +1 -0
  34. package/src/graphql/mutations/publishSeason.mutation.ts +1 -0
  35. package/src/graphql/mutations/updateSeason.mutation.ts +1 -0
  36. package/src/graphql/queries/publicSeason.query.ts +7 -0
  37. package/src/interfaces/ICreateOrderParams.ts +2 -4
  38. package/src/interfaces/IFee.ts +1 -0
  39. package/src/interfaces/IOrderTicket.ts +2 -5
  40. package/src/interfaces/ISeason.ts +1 -0
  41. package/src/interfaces/ITeiMemberInfo.ts +6 -0
  42. package/src/interfaces/ITicketType.ts +2 -4
  43. package/src/proto/order.proto +9 -8
  44. package/src/proto/season.proto +1 -0
  45. package/src/schemas/Order.ts +31 -26
  46. package/src/schemas/Season.ts +5 -1
  47. package/src/utils/EventUtil.ts +1 -1
  48. package/src/utils/PaymentUtil.ts +130 -83
  49. package/src/utils/SeasonUtil.ts +84 -0
@@ -41,12 +41,29 @@ const Scan = {
41
41
  type: String,
42
42
  required: false,
43
43
  default: '',
44
- },startsAt:{
44
+ }, startsAt: {
45
45
  type: Number,
46
46
  required: false,
47
47
  }
48
48
  };
49
-
49
+ const TeiMemberInfoInput = {
50
+ firstName: {
51
+ type: String,
52
+ required: false
53
+ },
54
+ lastName: {
55
+ type: String,
56
+ required: false
57
+ },
58
+ email: {
59
+ type: String,
60
+ required: false
61
+ },
62
+ phoneNumber: {
63
+ type: String,
64
+ required: false
65
+ }
66
+ }
50
67
  const OrderTicket = {
51
68
  _id: {
52
69
  type: String,
@@ -95,39 +112,25 @@ const OrderTicket = {
95
112
  required: false,
96
113
  default: null,
97
114
  },
98
- values:{
115
+ values: {
99
116
  type: String,
100
117
  required: false,
101
- },description:{
118
+ }, description: {
102
119
  type: String,
103
120
  required: false
104
- },dayIds:[
121
+ }, dayIds: [
105
122
  {
106
123
  type: String,
107
124
  required: false
108
125
  }
109
- ],teiMemberId:{
126
+ ], teiMemberId: {
110
127
  type: String,
111
128
  required: false
112
- },isMemberIdValid:{
129
+ }, isMemberIdValid: {
113
130
  type: Boolean,
114
131
  required: false
115
- }, firstName :{
116
- type: String,
117
- required: false
118
132
  },
119
- lastName:{
120
- type: String,
121
- required: false
122
- },
123
- email:{
124
- type: String,
125
- required: false
126
- },
127
- phoneNumber:{
128
- type: String,
129
- required: false
130
- }
133
+ teiMemberInfo: TeiMemberInfoInput
131
134
  };
132
135
 
133
136
  const OrderUpgrade = {
@@ -195,6 +198,8 @@ const OrderCustomField = {
195
198
  },
196
199
  };
197
200
 
201
+
202
+
198
203
  const Payment = {
199
204
  _id: {
200
205
  type: String,
@@ -349,15 +354,15 @@ export default {
349
354
  address: Address,
350
355
  customFields: [OrderCustomField],
351
356
  payments: [Payment],
352
- seasonId:{
357
+ seasonId: {
353
358
  type: String,
354
359
  required: false,
355
- },hidden:{
360
+ }, hidden: {
356
361
  type: Boolean,
357
362
  required: false,
358
- },printed:{
363
+ }, printed: {
359
364
  type: Boolean,
360
365
  required: false,
361
- default:false
366
+ default: false
362
367
  }
363
368
  };
@@ -501,7 +501,11 @@ export default {
501
501
  type: String,
502
502
  required: false
503
503
  }
504
- ]
504
+ ],isGuestTicketSale:{
505
+ type: Boolean,
506
+ required: false,
507
+ default: false
508
+ }
505
509
  };
506
510
 
507
511
 
@@ -14,7 +14,7 @@ import IEventPromotion from "../interfaces/IEventPromotion";
14
14
  import { EventPromotionTypeEnum } from "../interfaces/IEventPromotion";
15
15
  import { DropDownEnum } from "../enums/DropDownEnum";
16
16
  import { SendQRCodeEnum } from "../interfaces/IEvent";
17
- import IEventSchedule from "src/interfaces/IEventSchedule";
17
+ import IEventSchedule from "../interfaces/IEventSchedule";
18
18
 
19
19
  export default {
20
20
  /****************************************************************************************
@@ -1,16 +1,20 @@
1
- import FeeUtil from './FeeUtil';
2
- import { ICreateOrderTicketParams, ICreateOrderUpgradeParams } from '../interfaces/ICreateOrderParams';
3
- import IFee, { FeeAppliedToEnum, FeeFiltersEnum, FeeTypeEnum } from '../interfaces/IFee';
4
- import { PaymentMethodTypeEnum } from '../enums/PaymentMethodTypeEnum';
5
- // import IPayment from 'src/interfaces/IPayment';
6
- // import IPayment from 'src/interfaces/IPayment';
7
- // import { OrderTypeEnum } from 'src/interfaces/IOrderType';
1
+ import FeeUtil from "./FeeUtil";
2
+ import {
3
+ ICreateOrderTicketParams,
4
+ ICreateOrderUpgradeParams,
5
+ } from "../interfaces/ICreateOrderParams";
6
+ import IFee, {
7
+ FeeAppliedToEnum,
8
+ FeeFiltersEnum,
9
+ FeeTypeEnum,
10
+ } from "../interfaces/IFee";
11
+ import { PaymentMethodTypeEnum } from "../enums/PaymentMethodTypeEnum";
8
12
 
9
13
  interface IPaymentCalculatorParams {
10
14
  tickets: ICreateOrderTicketParams[];
11
15
  upgrades: ICreateOrderUpgradeParams[];
12
16
  fees: IFee[];
13
- paymentMethodType: PaymentMethodTypeEnum
17
+ paymentMethodType: PaymentMethodTypeEnum;
14
18
  }
15
19
 
16
20
  // interface IOrderItems {
@@ -23,13 +27,12 @@ class PaymentUtil {
23
27
  // calculateOrderItemPrices(params: IPaymentCalculatorParams): IOrderItems {
24
28
 
25
29
  // let {
26
- // tickets = [],
30
+ // tickets = [],
27
31
  // upgrades = [],
28
32
  // fees = [],
29
33
  // paymentMethodType,
30
34
  // } = params;
31
35
 
32
-
33
36
  // // Filter fees
34
37
  // fees = fees.filter((fee: IFee) => {
35
38
  // // Ignore card reader fees for non card reader payemnts
@@ -77,7 +80,7 @@ class PaymentUtil {
77
80
  // const maxFee = fee.maxAppliedToPrice || Infinity;
78
81
 
79
82
  // if (minFee <= price && price <= maxFee) {
80
- // console.log(fee);
83
+ // console.log(fee);
81
84
  // if (fee.type === FeeTypeEnum.Flat) {
82
85
  // return price - fee.value;
83
86
  // } if (fee.type === FeeTypeEnum.Percent) {
@@ -85,7 +88,6 @@ class PaymentUtil {
85
88
  // }
86
89
  // }
87
90
 
88
-
89
91
  // // if(fee.type === FeeTypeEnum.Percent) {
90
92
  // // return price * (1 - fee.value / 100);
91
93
  // // }
@@ -111,15 +113,13 @@ class PaymentUtil {
111
113
 
112
114
  // tickets = tickets.map((ticket: ICreateOrderTicketParams): ICreateOrderTicketParams => {
113
115
  // const price = Math.floor(calculateTicketPrice(ticket));
114
- // console.log(`Ticket Price: `, price);
116
+ // console.log(`Ticket Price: `, price);
115
117
  // return {
116
118
  // ...ticket,
117
119
  // price,
118
120
  // }
119
121
  // });
120
122
 
121
-
122
-
123
123
  // // upgrades = upgrades.map((upgrade: ICreateOrderUpgradeParams): ICreateOrderUpgradeParams => {
124
124
  // // return {
125
125
  // // ...upgrade,
@@ -133,12 +133,7 @@ class PaymentUtil {
133
133
  // };
134
134
  // },
135
135
  calculatePaymentTotal(params: IPaymentCalculatorParams): number {
136
- let {
137
- tickets = [],
138
- upgrades = [],
139
- fees = [],
140
- paymentMethodType,
141
- } = params;
136
+ let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
142
137
 
143
138
  // No items, total is always 0
144
139
  if (!tickets.length && !upgrades.length) return 0;
@@ -146,45 +141,73 @@ class PaymentUtil {
146
141
  // Filter fees
147
142
  fees = fees.filter((fee: IFee) => {
148
143
  // Ignore card reader fees for non card reader payemnts
149
- if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardReader) && paymentMethodType !== PaymentMethodTypeEnum.CardReader) {
144
+ if (
145
+ fee.filters &&
146
+ fee.filters.includes(FeeFiltersEnum.CardReader) &&
147
+ paymentMethodType !== PaymentMethodTypeEnum.CardReader
148
+ ) {
150
149
  return false;
151
150
  }
152
151
 
153
152
  // Ignore card entry fees for non card entry payemnts
154
- if (fee.filters && fee.filters.includes(FeeFiltersEnum.CardEntry) && paymentMethodType !== PaymentMethodTypeEnum.CardEntry) {
153
+ if (
154
+ fee.filters &&
155
+ fee.filters.includes(FeeFiltersEnum.CardEntry) &&
156
+ paymentMethodType !== PaymentMethodTypeEnum.CardEntry
157
+ ) {
155
158
  return false;
156
159
  }
157
160
 
158
161
  return true;
159
162
  });
160
163
 
161
- const ticketFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Ticket)
164
+ fees = fees.filter(
165
+ (fee: IFee) =>
166
+ fee.filters && fee.filters[0] !== FeeFiltersEnum.GuestTicket
167
+ );
168
+
169
+ const ticketFees = fees
170
+ .filter((f) => f.appliedTo === FeeAppliedToEnum.Ticket)
162
171
  .sort(({ type }) => {
163
172
  if (type === FeeTypeEnum.Flat) return -1;
164
173
  else return 1;
165
- })
166
- const upgradeFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Upgrade);
174
+ });
175
+ const upgradeFees = fees.filter(
176
+ (f) => f.appliedTo === FeeAppliedToEnum.Upgrade
177
+ );
167
178
  // Orders mattes here. Flat type fees must be applied before Percent type fees
168
- const orderFees = fees.filter(f => f.appliedTo === FeeAppliedToEnum.Order && f.name != 'Sales tax').sort(({ type }) => {
169
- if (type === 'Flat') return -1;
170
- else return 1;
171
- });
172
- const salesTax = fees.filter(f => f.name == 'Sales tax');
179
+ const orderFees = fees
180
+ .filter(
181
+ (f) => f.appliedTo === FeeAppliedToEnum.Order && f.name != "Sales tax"
182
+ )
183
+ .sort(({ type }) => {
184
+ if (type === "Flat") return -1;
185
+ else return 1;
186
+ });
187
+ const salesTax = fees.filter((f) => f.name == "Sales tax");
173
188
 
174
- function applyTicketFee(ticket: ICreateOrderTicketParams, fee: IFee): number {
189
+ function applyTicketFee(
190
+ ticket: ICreateOrderTicketParams,
191
+ fee: IFee
192
+ ): number {
175
193
  // Ignore seated fees if not seated
176
- if (fee.filters && fee.filters.includes(FeeFiltersEnum.Seated) && !ticket.seat) {
194
+ if (
195
+ fee.filters &&
196
+ fee.filters.includes(FeeFiltersEnum.Seated) &&
197
+ !ticket.seat
198
+ ) {
177
199
  return 0;
178
200
  }
179
-
201
+
180
202
  const minFee = fee.minAppliedToPrice || 0;
181
203
  const maxFee = fee.maxAppliedToPrice || Infinity;
182
204
 
183
205
  if (minFee <= ticket.price && ticket.price <= maxFee) {
184
206
  if (fee.type === FeeTypeEnum.Flat) {
185
207
  return fee.value;
186
- } if (fee.type === FeeTypeEnum.Percent) {
187
- return (ticket.price * fee.value / 100);
208
+ }
209
+ if (fee.type === FeeTypeEnum.Percent) {
210
+ return (ticket.price * fee.value) / 100;
188
211
  }
189
212
  } else {
190
213
  return 0;
@@ -193,15 +216,19 @@ class PaymentUtil {
193
216
  return 0;
194
217
  }
195
218
 
196
- function applyUpgradeFee(upgrade: ICreateOrderUpgradeParams, fee: IFee): number {
219
+ function applyUpgradeFee(
220
+ upgrade: ICreateOrderUpgradeParams,
221
+ fee: IFee
222
+ ): number {
197
223
  const minFee = fee.minAppliedToPrice || 0;
198
224
  const maxFee = fee.maxAppliedToPrice || Infinity;
199
225
 
200
226
  if (minFee <= upgrade.price && upgrade.price <= maxFee) {
201
227
  if (fee.type === FeeTypeEnum.Flat) {
202
228
  return upgrade.price + fee.value;
203
- } if (fee.type === FeeTypeEnum.Percent) {
204
- return (upgrade.price * fee.value / 100);
229
+ }
230
+ if (fee.type === FeeTypeEnum.Percent) {
231
+ return (upgrade.price * fee.value) / 100;
205
232
  }
206
233
  } else {
207
234
  return 0;
@@ -213,36 +240,59 @@ class PaymentUtil {
213
240
  function applyOrderFee(orderSubtotal, fee) {
214
241
  if (fee.type === FeeTypeEnum.Flat) {
215
242
  return orderSubtotal + fee.value;
216
- } if (fee.type === FeeTypeEnum.Percent) {
217
- return (orderSubtotal / (1 - fee.value / 100));
243
+ }
244
+ if (fee.type === FeeTypeEnum.Percent) {
245
+ return orderSubtotal / (1 - fee.value / 100);
218
246
  }
219
247
  }
220
248
 
221
249
  const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0);
222
250
 
223
251
  const ticketTaxFeeTotal = tickets.reduce((cur, ticket) => {
224
- return cur + salesTax.reduce((cur, fee) => {
225
- const value = cur + applyTicketFee(ticket, fee);
226
- return value;
227
- }, 0);
252
+ return (
253
+ cur +
254
+ salesTax.reduce((cur, fee) => {
255
+ const value = cur + applyTicketFee(ticket, fee);
256
+ return value;
257
+ }, 0)
258
+ );
228
259
  }, 0);
229
260
  const ticketFeeTotal = tickets.reduce((cur, ticket) => {
230
- return cur + ticketFees.reduce((cur, fee) => {
231
- const value = cur + applyTicketFee(ticket, fee);
232
- return value;
233
- }, 0);
261
+ return (
262
+ cur +
263
+ ticketFees.reduce((cur, fee) => {
264
+ const value = cur + applyTicketFee(ticket, fee);
265
+ return value;
266
+ }, 0)
267
+ );
234
268
  }, 0);
235
269
 
236
- const upgradeTotal = upgrades.reduce((cur, upgrade) => cur + upgrade.price, 0);
270
+ const upgradeTotal = upgrades.reduce(
271
+ (cur, upgrade) => cur + upgrade.price,
272
+ 0
273
+ );
237
274
 
238
275
  const upgradeTaxFeeTotal = upgrades.reduce((cur, upgrade) => {
239
- return cur + salesTax.reduce((curr, fee) => curr + applyUpgradeFee(upgrade, fee), 0);
276
+ return (
277
+ cur +
278
+ salesTax.reduce((curr, fee) => curr + applyUpgradeFee(upgrade, fee), 0)
279
+ );
240
280
  }, 0);
241
281
 
242
282
  const upgradeFeeTotal = upgrades.reduce((cur, upgrade) => {
243
- return cur + upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0);
283
+ return (
284
+ cur +
285
+ upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
286
+ );
244
287
  }, 0);
245
- const orderSubtotal = Math.round(ticketTotal + ticketTaxFeeTotal + ticketFeeTotal + upgradeTaxFeeTotal + upgradeTotal + upgradeFeeTotal);
288
+ const orderSubtotal = Math.round(
289
+ ticketTotal +
290
+ ticketTaxFeeTotal +
291
+ ticketFeeTotal +
292
+ upgradeTaxFeeTotal +
293
+ upgradeTotal +
294
+ upgradeFeeTotal
295
+ );
246
296
 
247
297
  // console.log(`Order SubTotal:`, orderSubtotal);
248
298
 
@@ -262,37 +312,32 @@ class PaymentUtil {
262
312
  // fees
263
313
  } = params;
264
314
 
265
- if(paymentMethodType === PaymentMethodTypeEnum.None) return 0;
315
+ if (paymentMethodType === PaymentMethodTypeEnum.None) return 0;
266
316
 
267
- const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price , 0); // + (ticket.price * tax/100)
268
- const upgradeTotal = upgrades.reduce((cur, upgrade) => cur + upgrade.price, 0); // + (upgrade.price * tax/100)
317
+ const ticketTotal = tickets.reduce((cur, ticket) => cur + ticket.price, 0); // + (ticket.price * tax/100)
318
+ const upgradeTotal = upgrades.reduce(
319
+ (cur, upgrade) => cur + upgrade.price,
320
+ 0
321
+ ); // + (upgrade.price * tax/100)
269
322
  return ticketTotal + upgradeTotal;
270
323
  }
271
324
  calculateFee(params: IPaymentCalculatorParams): number {
272
- let {
273
- fees
274
- } = params;
275
- const salesTax = fees.filter(f => f.name == 'Sales tax');
276
- const tax = salesTax.length > 0 ? salesTax[0].value : 0
325
+ let { fees } = params;
326
+ const salesTax = fees.filter((f) => f.name == "Sales tax");
327
+ const tax = salesTax.length > 0 ? salesTax[0].value : 0;
277
328
  const total = this.calculatePaymentTotal(params);
278
329
  let subtotal = this.calculatePaymentSubtotal(params);
279
- subtotal = subtotal + (subtotal*tax/100)
330
+ subtotal = subtotal + (subtotal * tax) / 100;
280
331
  return Math.round(total - subtotal);
281
332
  }
282
333
 
283
334
  calculateFeeWithoutTax(params: IPaymentCalculatorParams): number {
284
-
285
335
  const total = this.calculatePaymentTotal(params);
286
336
  let subtotal = this.calculatePaymentSubtotal(params);
287
337
  return Math.round(total - subtotal);
288
338
  }
289
339
  calculateOrganizationFee(params: IPaymentCalculatorParams): number {
290
- let {
291
- tickets = [],
292
- upgrades = [],
293
- fees = [],
294
- paymentMethodType,
295
- } = params;
340
+ let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
296
341
 
297
342
  fees = FeeUtil.promoterFees(fees);
298
343
  return this.calculateFee({
@@ -303,14 +348,8 @@ class PaymentUtil {
303
348
  });
304
349
  }
305
350
 
306
-
307
351
  calculateTaxFee(params: IPaymentCalculatorParams): number {
308
- let {
309
- tickets = [],
310
- upgrades = [],
311
- fees = [],
312
- paymentMethodType,
313
- } = params;
352
+ let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
314
353
 
315
354
  fees = FeeUtil.taxFees(fees);
316
355
  return this.calculateFeeWithoutTax({
@@ -321,12 +360,7 @@ class PaymentUtil {
321
360
  });
322
361
  }
323
362
  calculatePlatformFee(params: IPaymentCalculatorParams): number {
324
- let {
325
- tickets = [],
326
- upgrades = [],
327
- fees = [],
328
- paymentMethodType,
329
- } = params;
363
+ let { tickets = [], upgrades = [], fees = [], paymentMethodType } = params;
330
364
 
331
365
  fees = FeeUtil.selloutFees(fees);
332
366
 
@@ -348,7 +382,7 @@ class PaymentUtil {
348
382
  const total = this.calculatePaymentTotal(params);
349
383
  const subtotal = this.calculatePaymentSubtotal(params);
350
384
  const organizationFee = this.calculateOrganizationFee(params);
351
- return total - subtotal - organizationFee;
385
+ return total - subtotal - organizationFee;
352
386
  }
353
387
  // calculateTaxFee(params: IPaymentCalculatorParams): number {
354
388
  // const organizationFee = this.calculateTaxFee(params);
@@ -356,6 +390,19 @@ class PaymentUtil {
356
390
  // return organizationFee;
357
391
  // }
358
392
 
393
+ calculateGuestFee(tickets: any, event: any): number {
394
+ let guestTicketFees = event?.fees.filter(
395
+ (fee: IFee) =>
396
+ fee.filters && fee.filters[0] === FeeFiltersEnum.GuestTicket
397
+ );
398
+ let guestFeesValue = guestTicketFees && guestTicketFees[0]?.value;
399
+ let guestMembers = tickets.filter((a) => !a.isMemberIdValid).length;
400
+
401
+ let guestFees = (guestFeesValue as number) * guestMembers;
402
+ return guestTicketFees.length > 0 && event.organization.isTegIntegration
403
+ ? guestFees
404
+ : 0;
405
+ }
359
406
  }
360
407
 
361
408
  export default new PaymentUtil();
@@ -6,6 +6,9 @@ import * as Time from "@sellout/utils/.dist/time";
6
6
  import ISeason from "../interfaces/ISeason";
7
7
  import ITicketType from "../interfaces/ITicketType";
8
8
  import ISeasonCustomField from "../interfaces/ISeasonCustomField";
9
+ import IOrderCustomField from "../interfaces/IOrderCustomField";
10
+ import { CustomFieldTypeEnum } from "../enums/CustomFieldTypeEnum";
11
+ import { DropDownEnum } from "../enums/DropDownEnum";
9
12
 
10
13
  export default {
11
14
  /****************************************************************************************
@@ -373,4 +376,85 @@ export default {
373
376
  .unknown(true);
374
377
  return customFieldSchema.validate(customField);
375
378
  },
379
+ customFieldsAreValid(
380
+ seasonCustomFields: ISeasonCustomField[],
381
+ orderCustomFields: IOrderCustomField[]
382
+ ): boolean {
383
+ const activeFields =
384
+ seasonCustomFields?.filter(
385
+ (seasonCustomField) => seasonCustomField.active
386
+ ) ?? [];
387
+
388
+ const validFields =
389
+ activeFields?.filter((eventCustomField) => {
390
+ const { _id, minLength, maxLength, minValue, maxValue, required } =
391
+ eventCustomField;
392
+
393
+ const orderCustomField = orderCustomFields?.find(
394
+ (orderCustomField) => orderCustomField.customFieldId === _id
395
+ );
396
+
397
+ // Field is not required and orderCustomField not empty
398
+ if (!required && !orderCustomField) return true;
399
+
400
+ // Field has not been filled out
401
+ if (!orderCustomField) return false;
402
+
403
+ let { value } = orderCustomField;
404
+
405
+ if (
406
+ !required &&
407
+ (value === undefined ||
408
+ value === "NaN" ||
409
+ value === "" ||
410
+ value === DropDownEnum.Select)
411
+ ) {
412
+ return true;
413
+ }
414
+
415
+ if (eventCustomField?.type === CustomFieldTypeEnum.Text) {
416
+ value = <string>value;
417
+ if (value) {
418
+ if (minLength === 0 && maxLength === 0 && value.length > 0) {
419
+ return true;
420
+ } else if (minLength === 0 && value.length <= maxLength) {
421
+ return true;
422
+ } else if (maxLength === 0 && minLength <= value.length) {
423
+ return true;
424
+ } else if (minLength <= value.length && value.length <= maxLength) {
425
+ return true;
426
+ }
427
+ }
428
+ return false;
429
+ } else if (eventCustomField.type === CustomFieldTypeEnum.Dropdown) {
430
+ value = <string>value;
431
+ if (value !== "" && value !== DropDownEnum.Select) {
432
+ return true;
433
+ }
434
+ return false;
435
+ } else if (eventCustomField.type === CustomFieldTypeEnum.Address) {
436
+ value = <string>value;
437
+ if (value !== "") {
438
+ return true;
439
+ }
440
+ return false;
441
+ } else {
442
+ value = <number>value;
443
+ if (value) {
444
+ if (minValue === 0 && maxValue === 0 && value > 0) {
445
+ return true;
446
+ } else if (minValue === 0 && value <= maxValue) {
447
+ return true;
448
+ } else if (maxValue === 0 && minValue <= value) {
449
+ return true;
450
+ } else if (minValue <= value && value <= maxValue) {
451
+ return true;
452
+ }
453
+ }
454
+ return false;
455
+ }
456
+ }) ?? [];
457
+
458
+ return validFields.length === activeFields.length;
459
+ },
376
460
  };