@sellout/models 0.0.105 → 0.0.108
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/DropDownEnum.d.ts +3 -0
- package/.dist/enums/DropDownEnum.js +8 -0
- package/.dist/enums/DropDownEnum.js.map +1 -0
- package/.dist/graphql/fragments/event.fragment.js +15 -14
- package/.dist/graphql/fragments/event.fragment.js.map +1 -1
- package/.dist/graphql/fragments/order.fragment.js +4 -2
- package/.dist/graphql/fragments/order.fragment.js.map +1 -1
- package/.dist/graphql/mutations/acceptRole.mutation.js +1 -1
- package/.dist/graphql/mutations/acceptRole.mutation.js.map +1 -1
- package/.dist/graphql/mutations/applyPlatformFeesToAllOrganizations.mutation.js +1 -1
- package/.dist/graphql/mutations/applyPlatformFeesToAllOrganizations.mutation.js.map +1 -1
- package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js +1 -1
- package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js.map +1 -1
- package/.dist/graphql/mutations/breakApartOrder.js +1 -1
- package/.dist/graphql/mutations/breakApartOrder.js.map +1 -1
- package/.dist/graphql/mutations/createArtist.mutation.js +1 -1
- package/.dist/graphql/mutations/createArtist.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createEvent.mutation.js +4 -1
- package/.dist/graphql/mutations/createEvent.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createFee.mutation.js +1 -1
- package/.dist/graphql/mutations/createFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createOrder.mutation.js +1 -1
- package/.dist/graphql/mutations/createOrder.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createOrderPaymentIntent.mutation.js +1 -1
- package/.dist/graphql/mutations/createOrderPaymentIntent.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createOrganizationFee.mutation.js +1 -1
- package/.dist/graphql/mutations/createOrganizationFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createPlatformFee.mutation.js +1 -1
- package/.dist/graphql/mutations/createPlatformFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createRole.mutation.js +1 -1
- package/.dist/graphql/mutations/createRole.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createStripeSetupIntent.mutation.js +1 -1
- package/.dist/graphql/mutations/createStripeSetupIntent.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createStripeTerminalConnectionToken.mutation.js +1 -1
- package/.dist/graphql/mutations/createStripeTerminalConnectionToken.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createVenue.mutation.js +27 -26
- package/.dist/graphql/mutations/createVenue.mutation.js.map +1 -1
- package/.dist/graphql/mutations/createWebFlowSite.mutation.js +1 -1
- package/.dist/graphql/mutations/createWebFlowSite.mutation.js.map +1 -1
- package/.dist/graphql/mutations/deleteEvent.mutation.d.ts +2 -0
- package/.dist/graphql/mutations/deleteEvent.mutation.js +25 -0
- package/.dist/graphql/mutations/deleteEvent.mutation.js.map +1 -0
- package/.dist/graphql/mutations/deleteFee.mutation.js +1 -1
- package/.dist/graphql/mutations/deleteFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/deleteOrganizationFee.mutation.js +1 -1
- package/.dist/graphql/mutations/deleteOrganizationFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/deletePlatformFee.mutation.js +1 -1
- package/.dist/graphql/mutations/deletePlatformFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/deleteRole.mutation.js +1 -1
- package/.dist/graphql/mutations/deleteRole.mutation.js.map +1 -1
- package/.dist/graphql/mutations/deleteStripeTerminalReader.mutation.js +1 -1
- package/.dist/graphql/mutations/deleteStripeTerminalReader.mutation.js.map +1 -1
- package/.dist/graphql/mutations/deleteUnverifiedUser.mutation.js +1 -1
- package/.dist/graphql/mutations/deleteUnverifiedUser.mutation.js.map +1 -1
- package/.dist/graphql/mutations/forgotPassword.mutation.js +1 -1
- package/.dist/graphql/mutations/forgotPassword.mutation.js.map +1 -1
- package/.dist/graphql/mutations/generateOrderReport.mutation.js +1 -1
- package/.dist/graphql/mutations/generateOrderReport.mutation.js.map +1 -1
- package/.dist/graphql/mutations/generateUserProfileReport.mutation.js +1 -1
- package/.dist/graphql/mutations/generateUserProfileReport.mutation.js.map +1 -1
- package/.dist/graphql/mutations/login.mutation.js +1 -1
- package/.dist/graphql/mutations/login.mutation.js.map +1 -1
- package/.dist/graphql/mutations/publishEvent.mutation.js +4 -1
- package/.dist/graphql/mutations/publishEvent.mutation.js.map +1 -1
- package/.dist/graphql/mutations/refundOrder.mutation.d.ts +2 -0
- package/.dist/graphql/mutations/refundOrder.mutation.js +130 -0
- package/.dist/graphql/mutations/refundOrder.mutation.js.map +1 -0
- package/.dist/graphql/mutations/register.mutation.js +1 -1
- package/.dist/graphql/mutations/register.mutation.js.map +1 -1
- package/.dist/graphql/mutations/registerStripeTerminalReader.mutation.js +1 -1
- package/.dist/graphql/mutations/registerStripeTerminalReader.mutation.js.map +1 -1
- package/.dist/graphql/mutations/remapWebFlowSite.mutation.js +1 -1
- package/.dist/graphql/mutations/remapWebFlowSite.mutation.js.map +1 -1
- package/.dist/graphql/mutations/resetUserPassword.mutation.js +1 -1
- package/.dist/graphql/mutations/resetUserPassword.mutation.js.map +1 -1
- package/.dist/graphql/mutations/resetUserPasswordInApp.mutation.js +1 -1
- package/.dist/graphql/mutations/resetUserPasswordInApp.mutation.js.map +1 -1
- package/.dist/graphql/mutations/sendOrderReceiptEmail.mutation.d.ts +2 -0
- package/.dist/graphql/mutations/sendOrderReceiptEmail.mutation.js +13 -0
- package/.dist/graphql/mutations/sendOrderReceiptEmail.mutation.js.map +1 -0
- package/.dist/graphql/mutations/sendUserEmailVerification.mutation.js +1 -1
- package/.dist/graphql/mutations/sendUserEmailVerification.mutation.js.map +1 -1
- package/.dist/graphql/mutations/sendUserPhoneAuthentication.mutation.js +1 -1
- package/.dist/graphql/mutations/sendUserPhoneAuthentication.mutation.js.map +1 -1
- package/.dist/graphql/mutations/sendUserPhoneVerification.mutation.js +1 -1
- package/.dist/graphql/mutations/sendUserPhoneVerification.mutation.js.map +1 -1
- package/.dist/graphql/mutations/setUserOrgContextId.mutation.js +1 -1
- package/.dist/graphql/mutations/setUserOrgContextId.mutation.js.map +1 -1
- package/.dist/graphql/mutations/setUserPassword.mutation.js +1 -1
- package/.dist/graphql/mutations/setUserPassword.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateArtist.mutation.js +1 -1
- package/.dist/graphql/mutations/updateArtist.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateBasicUserInfo.mutation.js +1 -1
- package/.dist/graphql/mutations/updateBasicUserInfo.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateEvent.mutation.js +4 -1
- package/.dist/graphql/mutations/updateEvent.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateFee.mutation.js +1 -1
- package/.dist/graphql/mutations/updateFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateOrganization.mutation.js +1 -1
- package/.dist/graphql/mutations/updateOrganization.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateOrganizationFee.mutation.js +1 -1
- package/.dist/graphql/mutations/updateOrganizationFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updatePlatformFee.mutation.js +1 -1
- package/.dist/graphql/mutations/updatePlatformFee.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateUserEmail.mutation.js +1 -1
- package/.dist/graphql/mutations/updateUserEmail.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateUserPhoneNumber.mutation.js +1 -1
- package/.dist/graphql/mutations/updateUserPhoneNumber.mutation.js.map +1 -1
- package/.dist/graphql/mutations/updateVenue.mutation.js +27 -26
- package/.dist/graphql/mutations/updateVenue.mutation.js.map +1 -1
- package/.dist/graphql/mutations/uploadFiles.mutation.js +1 -1
- package/.dist/graphql/mutations/uploadFiles.mutation.js.map +1 -1
- package/.dist/graphql/mutations/verifyUserEmail.mutation.js +1 -1
- package/.dist/graphql/mutations/verifyUserEmail.mutation.js.map +1 -1
- package/.dist/graphql/mutations/verifyUserPhoneAuthentication.mutation.js +1 -1
- package/.dist/graphql/mutations/verifyUserPhoneAuthentication.mutation.js.map +1 -1
- package/.dist/graphql/mutations/verifyUserPhoneNumber.mutation.js +1 -1
- package/.dist/graphql/mutations/verifyUserPhoneNumber.mutation.js.map +1 -1
- package/.dist/graphql/queries/analytics.query.js +1 -1
- package/.dist/graphql/queries/analytics.query.js.map +1 -1
- package/.dist/graphql/queries/artist.query.js +1 -1
- package/.dist/graphql/queries/artist.query.js.map +1 -1
- package/.dist/graphql/queries/artists.query.js +1 -1
- package/.dist/graphql/queries/artists.query.js.map +1 -1
- package/.dist/graphql/queries/context.query.js +1 -1
- package/.dist/graphql/queries/context.query.js.map +1 -1
- package/.dist/graphql/queries/customerOrders.query.js +1 -1
- package/.dist/graphql/queries/customerOrders.query.js.map +1 -1
- package/.dist/graphql/queries/customerProfile.query.js +1 -1
- package/.dist/graphql/queries/customerProfile.query.js.map +1 -1
- package/.dist/graphql/queries/event.query.js +5 -1
- package/.dist/graphql/queries/event.query.js.map +1 -1
- package/.dist/graphql/queries/events.query.js +5 -1
- package/.dist/graphql/queries/events.query.js.map +1 -1
- package/.dist/graphql/queries/fee.query.js +1 -1
- package/.dist/graphql/queries/fee.query.js.map +1 -1
- package/.dist/graphql/queries/fees.query.d.ts +2 -0
- package/.dist/graphql/queries/fees.query.js +30 -0
- package/.dist/graphql/queries/fees.query.js.map +1 -0
- package/.dist/graphql/queries/isSuperUser.query.js +1 -1
- package/.dist/graphql/queries/isSuperUser.query.js.map +1 -1
- package/.dist/graphql/queries/listStripeTerminalReaders.query.js +1 -1
- package/.dist/graphql/queries/listStripeTerminalReaders.query.js.map +1 -1
- package/.dist/graphql/queries/order.query.js +17 -1
- package/.dist/graphql/queries/order.query.js.map +1 -1
- package/.dist/graphql/queries/orders.query.js +1 -1
- package/.dist/graphql/queries/orders.query.js.map +1 -1
- package/.dist/graphql/queries/organizationFees.query.js +1 -1
- package/.dist/graphql/queries/organizationFees.query.js.map +1 -1
- package/.dist/graphql/queries/organizations.query.js +1 -1
- package/.dist/graphql/queries/organizations.query.js.map +1 -1
- package/.dist/graphql/queries/platformFees.query.js +1 -1
- package/.dist/graphql/queries/platformFees.query.js.map +1 -1
- package/.dist/graphql/queries/profile.query.js +1 -1
- package/.dist/graphql/queries/profile.query.js.map +1 -1
- package/.dist/graphql/queries/profiles.query.js +1 -1
- package/.dist/graphql/queries/profiles.query.js.map +1 -1
- package/.dist/graphql/queries/publicEvent.query.js +5 -1
- package/.dist/graphql/queries/publicEvent.query.js.map +1 -1
- package/.dist/graphql/queries/role.query.js +1 -1
- package/.dist/graphql/queries/role.query.js.map +1 -1
- package/.dist/graphql/queries/roles.query.js +1 -1
- package/.dist/graphql/queries/roles.query.js.map +1 -1
- package/.dist/graphql/queries/seating.query.js +1 -1
- package/.dist/graphql/queries/seating.query.js.map +1 -1
- package/.dist/graphql/queries/userExists.query.js +1 -1
- package/.dist/graphql/queries/userExists.query.js.map +1 -1
- package/.dist/graphql/queries/userProfile.query.js +1 -1
- package/.dist/graphql/queries/userProfile.query.js.map +1 -1
- package/.dist/graphql/queries/userRoles.query.js +1 -1
- package/.dist/graphql/queries/userRoles.query.js.map +1 -1
- package/.dist/graphql/queries/venue.query.js +27 -26
- package/.dist/graphql/queries/venue.query.js.map +1 -1
- package/.dist/graphql/queries/venues.query.js +27 -26
- package/.dist/graphql/queries/venues.query.js.map +1 -1
- package/.dist/graphql/queries/webFlowSites.query.js +1 -1
- package/.dist/graphql/queries/webFlowSites.query.js.map +1 -1
- package/.dist/graphql/queries/webflow.query.js +1 -1
- package/.dist/graphql/queries/webflow.query.js.map +1 -1
- package/.dist/interfaces/IAddress.d.ts +1 -0
- package/.dist/interfaces/IEvent.d.ts +2 -0
- package/.dist/interfaces/IEventQuery.d.ts +1 -0
- package/.dist/interfaces/IOrder.d.ts +2 -0
- package/.dist/interfaces/IOrder.js.map +1 -1
- package/.dist/interfaces/IOrderQuery.d.ts +1 -0
- package/.dist/interfaces/IOrderState.d.ts +2 -1
- package/.dist/interfaces/IOrderState.js +1 -0
- package/.dist/interfaces/IOrderState.js.map +1 -1
- package/.dist/interfaces/IPayment.d.ts +1 -0
- package/.dist/interfaces/IProcessingFees.d.ts +5 -0
- package/.dist/interfaces/IProcessingFees.js +4 -0
- package/.dist/interfaces/IProcessingFees.js.map +1 -0
- package/.dist/interfaces/IRefund.d.ts +1 -0
- package/.dist/interfaces/IRefundModal.d.ts +8 -0
- package/.dist/interfaces/IRefundModal.js +3 -0
- package/.dist/interfaces/IRefundModal.js.map +1 -0
- package/.dist/interfaces/ISearchDropdownItem.d.ts +4 -0
- package/.dist/interfaces/ISearchDropdownItem.js +3 -0
- package/.dist/interfaces/ISearchDropdownItem.js.map +1 -0
- package/.dist/interfaces/ITicketType.d.ts +1 -0
- package/.dist/schemas/Address.d.ts +5 -0
- package/.dist/schemas/Address.js +5 -0
- package/.dist/schemas/Address.js.map +1 -1
- package/.dist/schemas/Event.d.ts +19 -0
- package/.dist/schemas/Event.js +15 -1
- package/.dist/schemas/Event.js.map +1 -1
- package/.dist/schemas/Order.d.ts +39 -0
- package/.dist/schemas/Order.js +7 -0
- package/.dist/schemas/Order.js.map +1 -1
- package/.dist/schemas/Organization.d.ts +5 -0
- package/.dist/schemas/UserProfile.d.ts +5 -0
- package/.dist/schemas/Venue.d.ts +5 -0
- package/.dist/sellout-proto.js +3278 -405
- package/.dist/utils/AnalyticsUtil.js +5 -2
- package/.dist/utils/AnalyticsUtil.js.map +1 -1
- package/.dist/utils/EventUtil.d.ts +20 -2
- package/.dist/utils/EventUtil.js +330 -52
- package/.dist/utils/EventUtil.js.map +1 -1
- package/.dist/utils/FeeUtil.d.ts +5 -0
- package/.dist/utils/FeeUtil.js +21 -0
- package/.dist/utils/FeeUtil.js.map +1 -1
- package/.dist/utils/OrderUtil.js.map +1 -1
- package/.dist/utils/SaveLogsToFile.d.ts +2 -0
- package/.dist/utils/SaveLogsToFile.js +43 -0
- package/.dist/utils/SaveLogsToFile.js.map +1 -0
- package/.dist/utils/TierUtil.js +1 -1
- package/.dist/utils/TierUtil.js.map +1 -1
- package/package.json +11 -11
- package/src/enums/DropDownEnum.ts +3 -0
- package/src/graphql/fragments/event.fragment.ts +1 -0
- package/src/graphql/fragments/order.fragment.ts +2 -0
- package/src/graphql/mutations/createEvent.mutation.ts +3 -0
- package/src/graphql/mutations/createVenue.mutation.ts +32 -31
- package/src/graphql/mutations/deleteEvent.mutation.ts +21 -0
- package/src/graphql/mutations/publishEvent.mutation.ts +3 -0
- package/src/graphql/mutations/refundOrder.mutation.ts +126 -0
- package/src/graphql/mutations/sendOrderReceiptEmail.mutation.ts +9 -0
- package/src/graphql/mutations/updateEvent.mutation.ts +3 -0
- package/src/graphql/mutations/updateVenue.mutation.ts +32 -31
- package/src/graphql/queries/event.query.ts +4 -0
- package/src/graphql/queries/events.query.ts +4 -0
- package/src/graphql/queries/fees.query.ts +26 -0
- package/src/graphql/queries/order.query.ts +16 -0
- package/src/graphql/queries/publicEvent.query.ts +4 -0
- package/src/graphql/queries/venue.query.ts +31 -30
- package/src/graphql/queries/venues.query.ts +32 -31
- package/src/interfaces/IAddress.ts +1 -0
- package/src/interfaces/IEvent.ts +2 -0
- package/src/interfaces/IEventQuery.ts +1 -0
- package/src/interfaces/IOrder.ts +3 -1
- package/src/interfaces/IOrderQuery.ts +1 -0
- package/src/interfaces/IOrderState.ts +1 -0
- package/src/interfaces/IPayment.ts +1 -0
- package/src/interfaces/IProcessingFees.ts +6 -0
- package/src/interfaces/IRefund.ts +1 -0
- package/src/interfaces/IRefundModal.ts +8 -0
- package/src/interfaces/ISearchDropdownItem.ts +5 -0
- package/src/interfaces/ITicketType.ts +1 -0
- package/src/proto/common.proto +74 -73
- package/src/proto/event.proto +38 -0
- package/src/proto/order.proto +20 -0
- package/src/proto/seating.proto +13 -0
- package/src/proto/stripe.proto +13 -0
- package/src/schemas/Address.ts +62 -57
- package/src/schemas/Event.ts +15 -1
- package/src/schemas/Order.ts +7 -0
- package/src/utils/AnalyticsUtil.ts +9 -9
- package/src/utils/EventUtil.ts +416 -121
- package/src/utils/FeeUtil.ts +20 -0
- package/src/utils/SaveLogsToFile.ts +13 -0
package/src/utils/EventUtil.ts
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import Joi from
|
|
1
|
+
import Joi from "@hapi/joi";
|
|
2
2
|
import * as Time from "@sellout/utils/.dist/time";
|
|
3
3
|
import IEventCustomField from "../interfaces/IEventCustomField";
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import IRefundModal from "../interfaces/IRefundModal";
|
|
5
|
+
import IEvent, {
|
|
6
|
+
EventProcessAsEnum,
|
|
7
|
+
EventTypeEnum,
|
|
8
|
+
} from "../interfaces/IEvent";
|
|
9
|
+
import { CustomFieldTypeEnum } from "../enums/CustomFieldTypeEnum";
|
|
6
10
|
import IOrderCustomField from "../interfaces/IOrderCustomField";
|
|
7
11
|
import IEventUpgrade from "../interfaces/IEventUpgrade";
|
|
8
12
|
import ITicketType from "../interfaces/ITicketType";
|
|
9
13
|
import IEventPromotion from "../interfaces/IEventPromotion";
|
|
10
|
-
import { EventPromotionTypeEnum } from
|
|
11
|
-
|
|
14
|
+
import { EventPromotionTypeEnum } from "../interfaces/IEventPromotion";
|
|
15
|
+
import { DropDownEnum } from "../enums/DropDownEnum";
|
|
16
|
+
import { SendQRCodeEnum} from "../interfaces/IEvent";
|
|
12
17
|
export default {
|
|
13
18
|
/****************************************************************************************
|
|
14
19
|
* Schedule
|
|
@@ -53,26 +58,28 @@ export default {
|
|
|
53
58
|
},
|
|
54
59
|
hasEnded(event): boolean {
|
|
55
60
|
const {
|
|
56
|
-
schedule: { endsAt }
|
|
61
|
+
schedule: { endsAt }
|
|
57
62
|
} = event;
|
|
58
63
|
const now = Time.now();
|
|
59
|
-
return endsAt < now;
|
|
64
|
+
return endsAt < now ;
|
|
60
65
|
},
|
|
61
66
|
isUnavailable(event: IEvent): boolean {
|
|
62
|
-
if(!event.published) return true;
|
|
63
|
-
if(!this.hasBeenAnnounced(event)) return true;
|
|
64
|
-
if(!this.isOnSale(event)) return true;
|
|
65
|
-
if(this.allTicketsAreLocked(event)) return true;
|
|
66
|
-
if(this.saleHasEnded(event)) return true;
|
|
67
|
+
if (!event.published) return true;
|
|
68
|
+
if (!this.hasBeenAnnounced(event)) return true;
|
|
69
|
+
if (!this.isOnSale(event)) return true;
|
|
70
|
+
if (this.allTicketsAreLocked(event)) return true;
|
|
71
|
+
if (this.saleHasEnded(event)) return true;
|
|
67
72
|
return false;
|
|
68
73
|
},
|
|
69
74
|
allTicketsAreLocked(event: IEvent): boolean {
|
|
70
75
|
const ticketTypeCount = event.ticketTypes?.length;
|
|
71
|
-
const promotionCodeTicketCount = [
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
const promotionCodeTicketCount = [
|
|
77
|
+
...new Set(
|
|
78
|
+
event.promotions?.reduce((cur: string[], promotion) => {
|
|
79
|
+
return [...cur, ...promotion.ticketTypeIds];
|
|
80
|
+
}, [])
|
|
81
|
+
),
|
|
82
|
+
].length;
|
|
76
83
|
return ticketTypeCount === promotionCodeTicketCount;
|
|
77
84
|
},
|
|
78
85
|
/****************************************************************************************
|
|
@@ -82,18 +89,30 @@ export default {
|
|
|
82
89
|
const {
|
|
83
90
|
performances: [performance],
|
|
84
91
|
} = event;
|
|
85
|
-
const {
|
|
86
|
-
schedule: { doorsAt, startsAt },
|
|
92
|
+
const { schedule: { doorsAt, startsAt },
|
|
87
93
|
} = performance;
|
|
94
|
+
/*
|
|
95
|
+
changing to lower case
|
|
96
|
+
becuse previosly it is stored with different values
|
|
97
|
+
like Upon Order, Upon order
|
|
98
|
+
*/
|
|
99
|
+
if(event.sendQRCode.toLowerCase() === SendQRCodeEnum.UponOrder.toLowerCase()){
|
|
100
|
+
return Time.now();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (event.sendQRCode.toLowerCase() === SendQRCodeEnum.TwoWeeksBefore.toLowerCase()) {
|
|
104
|
+
const TWO_WEEKS = 14 * 24 * 60 * 60;
|
|
105
|
+
return startsAt - TWO_WEEKS;
|
|
106
|
+
}
|
|
88
107
|
|
|
89
|
-
if (event.sendQRCode === "Upon Order") {
|
|
90
|
-
|
|
108
|
+
/* if (event.sendQRCode === "Upon Order") {
|
|
109
|
+
return Time.now();
|
|
91
110
|
}
|
|
92
111
|
|
|
93
112
|
if (event.sendQRCode === "Two Weeks Before Show") {
|
|
94
113
|
const TWO_WEEKS = 14 * 24 * 60 * 60;
|
|
95
114
|
return startsAt - TWO_WEEKS;
|
|
96
|
-
}
|
|
115
|
+
} */
|
|
97
116
|
|
|
98
117
|
return doorsAt - 600;
|
|
99
118
|
},
|
|
@@ -103,9 +122,12 @@ export default {
|
|
|
103
122
|
|
|
104
123
|
// Never send a receipt if we are
|
|
105
124
|
// send a qr code upon order
|
|
106
|
-
if
|
|
107
|
-
|
|
125
|
+
if(event.sendQRCode.toLowerCase() === SendQRCodeEnum.UponOrder.toLowerCase()){
|
|
126
|
+
return false;
|
|
108
127
|
}
|
|
128
|
+
// if (event.sendQRCode === "Upon Order") {
|
|
129
|
+
// return false;
|
|
130
|
+
// }
|
|
109
131
|
|
|
110
132
|
// Only send a receipt if QR codes for
|
|
111
133
|
// the event haven't already gone out
|
|
@@ -131,7 +153,7 @@ export default {
|
|
|
131
153
|
* Seating
|
|
132
154
|
****************************************************************************************/
|
|
133
155
|
isSeated(event?: IEvent): boolean {
|
|
134
|
-
if(!event) return false;
|
|
156
|
+
if (!event) return false;
|
|
135
157
|
return Boolean(event.seatingChartKey);
|
|
136
158
|
},
|
|
137
159
|
/****************************************************************************************
|
|
@@ -190,7 +212,7 @@ export default {
|
|
|
190
212
|
);
|
|
191
213
|
},
|
|
192
214
|
activeTicketTypes(event: IEvent): ITicketType[] {
|
|
193
|
-
return event.ticketTypes?.filter(ticketType => ticketType.visible) ?? [];
|
|
215
|
+
return event.ticketTypes?.filter((ticketType) => ticketType.visible) ?? [];
|
|
194
216
|
},
|
|
195
217
|
remainingTicketQty(event, ticketTypeId: string | null = null): number {
|
|
196
218
|
if (ticketTypeId) {
|
|
@@ -234,16 +256,20 @@ export default {
|
|
|
234
256
|
return event.upgrades.find((upgrades) => upgrades._id === upgradeId);
|
|
235
257
|
},
|
|
236
258
|
activeUpgrades(event: IEvent): IEventUpgrade[] {
|
|
237
|
-
return (
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
259
|
+
return (
|
|
260
|
+
(event?.upgrades ?? [])
|
|
261
|
+
// must be active
|
|
262
|
+
.filter((upgrade) => upgrade.visible)
|
|
263
|
+
// must have remaining qty
|
|
264
|
+
.filter((upgrade) => upgrade.remainingQty > 0)
|
|
265
|
+
);
|
|
242
266
|
},
|
|
243
267
|
activeNonComplimentaryUpgrades(event: IEvent): IEventUpgrade[] {
|
|
244
|
-
return
|
|
245
|
-
|
|
246
|
-
|
|
268
|
+
return (
|
|
269
|
+
this.activeUpgrades(event)
|
|
270
|
+
// must not be complimentary
|
|
271
|
+
.filter((upgrade) => !upgrade.complimentary)
|
|
272
|
+
);
|
|
247
273
|
},
|
|
248
274
|
remainingUpgradeQty(event, upgradeId: string | null = null): number {
|
|
249
275
|
if (upgradeId) {
|
|
@@ -269,7 +295,10 @@ export default {
|
|
|
269
295
|
}, {});
|
|
270
296
|
},
|
|
271
297
|
isUpgradeForSpecificTickets(event: IEvent, upgrade: IEventUpgrade): boolean {
|
|
272
|
-
return Boolean(
|
|
298
|
+
return Boolean(
|
|
299
|
+
event?.ticketTypes?.map((t) => t._id).sort() ===
|
|
300
|
+
upgrade?.ticketTypeIds?.sort()
|
|
301
|
+
);
|
|
273
302
|
},
|
|
274
303
|
/****************************************************************************************
|
|
275
304
|
* Promotions
|
|
@@ -279,135 +308,401 @@ export default {
|
|
|
279
308
|
(promotions) => promotions._id === promotionId
|
|
280
309
|
);
|
|
281
310
|
},
|
|
282
|
-
activePromotions(
|
|
311
|
+
activePromotions(
|
|
312
|
+
event: IEvent,
|
|
313
|
+
type: EventPromotionTypeEnum | null = null
|
|
314
|
+
): IEventPromotion[] {
|
|
283
315
|
const now = Time.now();
|
|
284
316
|
|
|
285
317
|
let promotions = (event?.promotions ?? [])
|
|
286
318
|
// must be active
|
|
287
|
-
.filter(promotion => promotion.active)
|
|
319
|
+
.filter((promotion) => promotion.active)
|
|
288
320
|
// must have remaining qty
|
|
289
|
-
.filter(promotion => promotion.remainingQty > 0)
|
|
321
|
+
.filter((promotion) => promotion.remainingQty > 0)
|
|
290
322
|
// must be in the correct time
|
|
291
|
-
.filter(
|
|
323
|
+
.filter(
|
|
324
|
+
(promotion) => promotion.startsAt < now && now < promotion.endsAt
|
|
325
|
+
);
|
|
292
326
|
|
|
293
327
|
// Optional type
|
|
294
|
-
if(type !== null) {
|
|
295
|
-
promotions = promotions.filter(
|
|
296
|
-
promotion => promotion.type === type
|
|
297
|
-
);
|
|
328
|
+
if (type !== null) {
|
|
329
|
+
promotions = promotions.filter((promotion) => promotion.type === type);
|
|
298
330
|
}
|
|
299
331
|
|
|
300
|
-
return promotions
|
|
332
|
+
return promotions;
|
|
301
333
|
},
|
|
302
334
|
/****************************************************************************************
|
|
303
335
|
* Custom Fields
|
|
304
336
|
****************************************************************************************/
|
|
305
337
|
customField(event: IEvent, customFieldId: string): IEventCustomField | null {
|
|
306
|
-
return
|
|
307
|
-
(
|
|
308
|
-
|
|
338
|
+
return (
|
|
339
|
+
event?.customFields?.find(
|
|
340
|
+
(customField) => customField._id === customFieldId
|
|
341
|
+
) ?? null
|
|
342
|
+
);
|
|
309
343
|
},
|
|
310
344
|
activeCustomFields(event: IEvent): IEventCustomField[] {
|
|
311
|
-
return
|
|
345
|
+
return (
|
|
346
|
+
event.customFields?.filter((customField) => customField.active) ?? []
|
|
347
|
+
);
|
|
312
348
|
},
|
|
313
349
|
hasCustomFields(event) {
|
|
314
350
|
return (
|
|
315
351
|
event.customFields.filter((customField) => customField.active).length > 0
|
|
316
352
|
);
|
|
317
353
|
},
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
354
|
+
// Fixed issue SELLOUT-49
|
|
355
|
+
customFieldsAreValid(
|
|
356
|
+
eventCustomFields: IEventCustomField[],
|
|
357
|
+
orderCustomFields: IOrderCustomField[]
|
|
358
|
+
): boolean {
|
|
359
|
+
const activeFields =
|
|
360
|
+
eventCustomFields?.filter(
|
|
361
|
+
(eventCustomField) => eventCustomField.active
|
|
362
|
+
) ?? [];
|
|
322
363
|
|
|
323
|
-
const validFields =
|
|
324
|
-
|
|
325
|
-
_id,
|
|
326
|
-
|
|
327
|
-
maxLength,
|
|
328
|
-
minValue,
|
|
329
|
-
maxValue,
|
|
330
|
-
required,
|
|
331
|
-
} = eventCustomField;
|
|
364
|
+
const validFields =
|
|
365
|
+
activeFields?.filter((eventCustomField) => {
|
|
366
|
+
const { _id, minLength, maxLength, minValue, maxValue, required } =
|
|
367
|
+
eventCustomField;
|
|
332
368
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
369
|
+
const orderCustomField = orderCustomFields.find(
|
|
370
|
+
(orderCustomField) => orderCustomField.customFieldId === _id
|
|
371
|
+
);
|
|
336
372
|
|
|
337
|
-
|
|
338
|
-
|
|
373
|
+
// Field is not required and orderCustomField not empty
|
|
374
|
+
if (!required && !orderCustomField) return true;
|
|
339
375
|
|
|
340
|
-
|
|
376
|
+
// Field has not been filled out
|
|
377
|
+
if (!orderCustomField) return false;
|
|
341
378
|
|
|
342
|
-
|
|
343
|
-
value = <string>value;
|
|
344
|
-
if (minLength === 0 && maxLength === 0) {
|
|
345
|
-
return !(required && value.length === 0);
|
|
346
|
-
}
|
|
379
|
+
let { value } = orderCustomField;
|
|
347
380
|
|
|
348
|
-
if (
|
|
381
|
+
if (
|
|
382
|
+
!required &&
|
|
383
|
+
(value === undefined || value === "NaN" || value === "" || value === DropDownEnum.Select)
|
|
384
|
+
) {
|
|
349
385
|
return true;
|
|
350
386
|
}
|
|
351
387
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
388
|
+
if (eventCustomField.type === CustomFieldTypeEnum.Text) {
|
|
389
|
+
value = <string>value;
|
|
390
|
+
if (value) {
|
|
391
|
+
if (minLength === 0 && maxLength === 0 && value.length > 0) {
|
|
392
|
+
return true;
|
|
393
|
+
} else if (minLength === 0 && value.length <= maxLength) {
|
|
394
|
+
return true;
|
|
395
|
+
} else if (maxLength === 0 && minLength <= value.length) {
|
|
396
|
+
return true;
|
|
397
|
+
} else if (minLength <= value.length && value.length <= maxLength) {
|
|
398
|
+
return true;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return false;
|
|
402
|
+
} else if (eventCustomField.type === CustomFieldTypeEnum.Dropdown) {
|
|
403
|
+
value = <string>value;
|
|
404
|
+
if (value !== "" && value !== DropDownEnum.Select) {
|
|
405
|
+
return true;
|
|
406
|
+
}
|
|
407
|
+
return false;
|
|
408
|
+
} else if (eventCustomField.type === CustomFieldTypeEnum.Address) {
|
|
409
|
+
value = <string>value;
|
|
410
|
+
if (value !== "") {
|
|
411
|
+
return true;
|
|
412
|
+
}
|
|
413
|
+
return false;
|
|
414
|
+
} else {
|
|
415
|
+
value = <number>value;
|
|
416
|
+
if (value) {
|
|
417
|
+
if (minValue === 0 && maxValue === 0 && value > 0) {
|
|
418
|
+
return true;
|
|
419
|
+
} else if (minValue === 0 && value <= maxValue) {
|
|
420
|
+
return true;
|
|
421
|
+
} else if (maxValue === 0 && minValue <= value) {
|
|
422
|
+
return true;
|
|
423
|
+
} else if (minValue <= value && value <= maxValue) {
|
|
424
|
+
return true;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return false;
|
|
361
428
|
}
|
|
362
|
-
|
|
363
|
-
return false;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
}) ?? [];
|
|
429
|
+
}) ?? [];
|
|
367
430
|
|
|
368
431
|
return validFields.length === activeFields.length;
|
|
369
432
|
},
|
|
370
433
|
/****************************************************************************************
|
|
371
|
-
* Publish
|
|
434
|
+
* Publish validate
|
|
372
435
|
****************************************************************************************/
|
|
373
436
|
validatePublish(event: IEvent): any {
|
|
374
437
|
let eventSchema;
|
|
375
438
|
|
|
376
|
-
switch(event.type) {
|
|
439
|
+
switch (event.type) {
|
|
377
440
|
case EventTypeEnum.GeneralEvent:
|
|
378
|
-
eventSchema = Joi.object()
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
441
|
+
eventSchema = Joi.object()
|
|
442
|
+
.options({ abortEarly: false })
|
|
443
|
+
.keys({
|
|
444
|
+
name: Joi.string()
|
|
445
|
+
.required()
|
|
446
|
+
.messages({ "string.empty": '"Event name" is a required field' }),
|
|
447
|
+
description: Joi.string().required().messages({
|
|
448
|
+
"string.empty": '"Event description" is a required field',
|
|
449
|
+
}),
|
|
450
|
+
posterImageUrl: Joi.string().required().messages({
|
|
451
|
+
"string.empty": '"Event image" is a required field',
|
|
452
|
+
}),
|
|
453
|
+
venueId: Joi.string()
|
|
454
|
+
.required()
|
|
455
|
+
.messages({ "string.empty": '"Venue" is required' }),
|
|
456
|
+
ticketTypes: Joi.array()
|
|
457
|
+
.min(1)
|
|
458
|
+
.items(
|
|
459
|
+
Joi.object()
|
|
460
|
+
.options({ allowUnknown: true })
|
|
461
|
+
.keys({
|
|
462
|
+
name: Joi.string().required(),
|
|
463
|
+
remainingQty: Joi.number().required(),
|
|
464
|
+
totalQty: Joi.number().required(),
|
|
465
|
+
purchaseLimit: Joi.number().required(),
|
|
466
|
+
tiers: Joi.array().items(
|
|
467
|
+
Joi.object()
|
|
468
|
+
.keys({
|
|
469
|
+
name: Joi.string().required(),
|
|
470
|
+
price: Joi.number().required(),
|
|
471
|
+
remainingQty: Joi.number().required(),
|
|
472
|
+
totalQty: Joi.number().required(),
|
|
473
|
+
})
|
|
474
|
+
.unknown(true)
|
|
475
|
+
),
|
|
476
|
+
})
|
|
477
|
+
)
|
|
478
|
+
.messages({ "array.min": "Event must have atleast 1 ticket" }),
|
|
479
|
+
})
|
|
480
|
+
.unknown(true);
|
|
481
|
+
break;
|
|
482
|
+
case EventTypeEnum.Concert:
|
|
483
|
+
eventSchema = Joi.object()
|
|
484
|
+
.options({ abortEarly: false })
|
|
485
|
+
.keys({
|
|
486
|
+
name: Joi.string()
|
|
487
|
+
.required()
|
|
488
|
+
.messages({ "string.empty": '"Event name" is a required field' }),
|
|
489
|
+
description: Joi.string().required().messages({
|
|
490
|
+
"string.empty": '"Event description" is a required field',
|
|
491
|
+
}),
|
|
492
|
+
posterImageUrl: Joi.string().required().messages({
|
|
493
|
+
"string.empty": '"Event image" is a required field',
|
|
494
|
+
}),
|
|
495
|
+
venueId: Joi.string()
|
|
496
|
+
.required()
|
|
497
|
+
.messages({ "string.empty": '"Venue" is required' }),
|
|
498
|
+
performances: Joi.array()
|
|
499
|
+
.items(
|
|
500
|
+
Joi.object()
|
|
501
|
+
.keys({
|
|
502
|
+
headliningArtistIds: Joi.array()
|
|
503
|
+
.items(Joi.string().required())
|
|
504
|
+
.messages({
|
|
505
|
+
"array.includesRequiredUnknowns":
|
|
506
|
+
"An event performer is required for a concert",
|
|
507
|
+
}),
|
|
508
|
+
})
|
|
509
|
+
.unknown(true)
|
|
510
|
+
)
|
|
511
|
+
.default([]),
|
|
512
|
+
})
|
|
513
|
+
.unknown(true);
|
|
514
|
+
break;
|
|
408
515
|
}
|
|
409
516
|
|
|
410
517
|
return eventSchema.validate(event);
|
|
411
|
-
}
|
|
412
|
-
|
|
518
|
+
},
|
|
519
|
+
/****************************************************************************************
|
|
520
|
+
* Ticket validate
|
|
521
|
+
****************************************************************************************/
|
|
522
|
+
validateTicket(ticket: ITicketType, isPaid: Boolean): any {
|
|
523
|
+
let ticketSchema;
|
|
524
|
+
let limit = isPaid ? "Purchase limit" : "RSVP limit";
|
|
525
|
+
let used = ticket.totalQty - ticket.remainingQty;
|
|
526
|
+
ticketSchema = Joi.object()
|
|
527
|
+
.options({ abortEarly: false })
|
|
528
|
+
.keys({
|
|
529
|
+
name: Joi.string()
|
|
530
|
+
.required()
|
|
531
|
+
.messages({ "string.empty": '"Ticket name" is a required field' }),
|
|
532
|
+
remainingQty: Joi.number().required(),
|
|
533
|
+
totalQty: Joi.number().required().min(1).messages({
|
|
534
|
+
"number.required": '"Total qty." is a required field',
|
|
535
|
+
"number.min": '"Total qty." must be greater than 0',
|
|
536
|
+
}),
|
|
537
|
+
purchaseLimit: Joi.number()
|
|
538
|
+
.required()
|
|
539
|
+
.min(1)
|
|
540
|
+
.messages({
|
|
541
|
+
"number.required": `"${limit}" is a required field`,
|
|
542
|
+
"number.min": `"${limit}" must be greater than 0`,
|
|
543
|
+
"number.base": `"${limit}" must be a number`,
|
|
544
|
+
}),
|
|
545
|
+
tiers: Joi.array().items(
|
|
546
|
+
Joi.object()
|
|
547
|
+
.keys({
|
|
548
|
+
name: Joi.string().required(),
|
|
549
|
+
price: Joi.number().required(),
|
|
550
|
+
remainingQty: Joi.number().required(),
|
|
551
|
+
totalQty: Joi.number()
|
|
552
|
+
.custom((value, helpers) => {
|
|
553
|
+
if (value > 0 && value < used) {
|
|
554
|
+
return helpers.error("totalqty.invalid");
|
|
555
|
+
}
|
|
556
|
+
return value;
|
|
557
|
+
})
|
|
558
|
+
.messages({
|
|
559
|
+
"totalqty.invalid":
|
|
560
|
+
'"Total qty." must be greater than or equal to number of ticket sold',
|
|
561
|
+
})
|
|
562
|
+
.required(),
|
|
563
|
+
})
|
|
564
|
+
.unknown(true)
|
|
565
|
+
),
|
|
566
|
+
})
|
|
567
|
+
.unknown(true);
|
|
568
|
+
return ticketSchema.validate(ticket);
|
|
569
|
+
},
|
|
570
|
+
/****************************************************************************************
|
|
571
|
+
* Upgrade validate
|
|
572
|
+
****************************************************************************************/
|
|
573
|
+
validateUpgrade(upgrade: IEventUpgrade, isPaid: Boolean): any {
|
|
574
|
+
let upgradeSchema;
|
|
575
|
+
let limit = isPaid ? "Purchase limit" : "RSVP limit";
|
|
576
|
+
let used = upgrade.totalQty - upgrade.remainingQty;
|
|
577
|
+
upgradeSchema = Joi.object()
|
|
578
|
+
.options({ abortEarly: false })
|
|
579
|
+
.keys({
|
|
580
|
+
name: Joi.string()
|
|
581
|
+
.required()
|
|
582
|
+
.messages({ "string.empty": '"Upgrade name" is a required field' }),
|
|
583
|
+
price: Joi.number().required(),
|
|
584
|
+
totalQty: Joi.number()
|
|
585
|
+
.custom((value, helpers) => {
|
|
586
|
+
if (value > 0 && value < used) {
|
|
587
|
+
return helpers.error("totalqty.invalid");
|
|
588
|
+
}
|
|
589
|
+
return value;
|
|
590
|
+
})
|
|
591
|
+
.messages({
|
|
592
|
+
"totalqty.invalid":
|
|
593
|
+
'"Total qty." must be greater than or equal to number of upgrade sold',
|
|
594
|
+
})
|
|
595
|
+
.required()
|
|
596
|
+
.min(1)
|
|
597
|
+
.messages({
|
|
598
|
+
"number.required": '"Total qty." is a required field',
|
|
599
|
+
"number.min": '"Total qty." must be greater than 0',
|
|
600
|
+
}),
|
|
601
|
+
remainingQty: Joi.number(),
|
|
602
|
+
purchaseLimit: Joi.number()
|
|
603
|
+
.required()
|
|
604
|
+
.min(1)
|
|
605
|
+
.messages({
|
|
606
|
+
"number.required": `"${limit}" is a required field`,
|
|
607
|
+
"number.min": `"${limit}" must be greater than 0`,
|
|
608
|
+
"number.base": `"${limit}" must be a number`,
|
|
609
|
+
}),
|
|
610
|
+
complimentary: Joi.boolean().required(),
|
|
611
|
+
complimentaryWith: Joi.string().required(),
|
|
612
|
+
complimentaryQty: Joi.number().required(),
|
|
613
|
+
ticketTypeIds: Joi.array().items(Joi.string()).default([]),
|
|
614
|
+
imageUrl: Joi.string().optional().allow(""),
|
|
615
|
+
description: Joi.string().optional().allow(""),
|
|
616
|
+
visible: Joi.boolean().required(),
|
|
617
|
+
rollFees: Joi.boolean().required(),
|
|
618
|
+
})
|
|
619
|
+
.unknown(true);
|
|
620
|
+
return upgradeSchema.validate(upgrade);
|
|
621
|
+
},
|
|
622
|
+
/****************************************************************************************
|
|
623
|
+
* Promotion validate
|
|
624
|
+
****************************************************************************************/
|
|
625
|
+
validatePromotion(promotion: IEventPromotion): any {
|
|
626
|
+
let promotionSchema;
|
|
627
|
+
let used = promotion.totalQty - promotion.remainingQty;
|
|
628
|
+
promotionSchema = Joi.object()
|
|
629
|
+
.options({ abortEarly: false })
|
|
630
|
+
.keys({
|
|
631
|
+
code: Joi.string()
|
|
632
|
+
.required()
|
|
633
|
+
.messages({ "string.empty": '"Secret code" is a required field' }),
|
|
634
|
+
type: Joi.string().required(),
|
|
635
|
+
remainingQty: Joi.number(),
|
|
636
|
+
totalQty: Joi.number()
|
|
637
|
+
.custom((value, helpers) => {
|
|
638
|
+
if (value > 0 && value < used) {
|
|
639
|
+
return helpers.error("totalqty.invalid");
|
|
640
|
+
}
|
|
641
|
+
return value;
|
|
642
|
+
})
|
|
643
|
+
.messages({
|
|
644
|
+
"totalqty.invalid":
|
|
645
|
+
'"Total qty." must be greater than or equal to number of secret code sold',
|
|
646
|
+
})
|
|
647
|
+
.required()
|
|
648
|
+
.min(1)
|
|
649
|
+
.messages({
|
|
650
|
+
"number.required": '"Total qty." is a required field',
|
|
651
|
+
"number.min": '"Total qty." must be greater than 0',
|
|
652
|
+
}),
|
|
653
|
+
ticketTypeIds: Joi.array().items(Joi.string()).default([]),
|
|
654
|
+
upgradeIds: Joi.array().items(Joi.string()).default([]),
|
|
655
|
+
active: Joi.boolean().required(),
|
|
656
|
+
startsAt: Joi.number().required(),
|
|
657
|
+
endsAt: Joi.number().required(),
|
|
658
|
+
useLimit: Joi.number().min(1).messages({
|
|
659
|
+
"number.required": '"Use limit" is a required field',
|
|
660
|
+
"number.min": 'Use limit" must be greater than 0',
|
|
661
|
+
"number.base": '"Use limit" must be a number',
|
|
662
|
+
}),
|
|
663
|
+
discountType: Joi.string(),
|
|
664
|
+
discountValue: Joi.number(),
|
|
665
|
+
})
|
|
666
|
+
.unknown(true);
|
|
667
|
+
return promotionSchema.validate(promotion);
|
|
668
|
+
},
|
|
669
|
+
/****************************************************************************************
|
|
670
|
+
* CustomField validate
|
|
671
|
+
****************************************************************************************/
|
|
672
|
+
validateCustomField(customField: IEventCustomField): any {
|
|
673
|
+
let customFieldSchema;
|
|
674
|
+
customFieldSchema = Joi.object()
|
|
675
|
+
.options({ abortEarly: false })
|
|
676
|
+
.keys({
|
|
677
|
+
label: Joi.string()
|
|
678
|
+
.required()
|
|
679
|
+
.messages({ "string.empty": '"Question" is a required field' }),
|
|
680
|
+
type: Joi.string().required(),
|
|
681
|
+
// minLength: Joi.number(),
|
|
682
|
+
// maxLength: Joi.number(),
|
|
683
|
+
// minValue: Joi.number(),
|
|
684
|
+
// maxValue: Joi.number(),
|
|
685
|
+
options: Joi.array().items(Joi.string()).default([]),
|
|
686
|
+
required: Joi.boolean().required(),
|
|
687
|
+
active: Joi.boolean().required(),
|
|
688
|
+
})
|
|
689
|
+
.unknown(true);
|
|
690
|
+
return customFieldSchema.validate(customField);
|
|
691
|
+
},
|
|
692
|
+
validateRefundModal(refundField: IRefundModal): any {
|
|
693
|
+
let refundFieldSchema;
|
|
694
|
+
refundFieldSchema = Joi.object()
|
|
695
|
+
.options({ abortEarly: false })
|
|
696
|
+
.keys({
|
|
697
|
+
// ticketIds: Joi.array()
|
|
698
|
+
// .min(1)
|
|
699
|
+
// .items(Joi.string())
|
|
700
|
+
// .messages({ "array.min": "Select any one checkbox for refunding." }),
|
|
701
|
+
refundReason: Joi.string()
|
|
702
|
+
.required()
|
|
703
|
+
.messages({ "string.empty": '"Reason" is a required field' }),
|
|
704
|
+
})
|
|
705
|
+
.unknown(true);
|
|
706
|
+
return refundFieldSchema.validate(refundField);
|
|
707
|
+
},
|
|
413
708
|
};
|