@@ -147,45 +147,99 @@ router.post('/organisation-type', checkAdmin, validator.body(Joi.object({
147
147
router . get ( '/event-type' , checkAdmin , validator . query ( Joi . object ( {
148
148
saved : Joi . boolean ( )
149
149
} ) ) , async ( req , res , next ) => {
150
- const types = await req . db . EventType . findAll ( ) ;
150
+ const [ types , membershipTypes ] = await Promise . all ( [ req . db . EventType . findAll ( {
151
+ include : [ {
152
+ model : req . db . EventTypeDiscount ,
153
+ include : [ req . db . MembershipType ]
154
+ } ] ,
155
+ order : [
156
+ [ 'id' ] ,
157
+ [ req . db . EventTypeDiscount , 'DiscountAfter' ]
158
+ ]
159
+ } ) , req . db . MembershipType . findAll ( {
160
+ where : {
161
+ IsOrganisation : true ,
162
+ IsActive : true
163
+ }
164
+ } ) ] ) ;
151
165
152
166
return res . render ( 'config/event-type.hbs' , {
153
167
title : 'Event Types' ,
154
- types : types ,
168
+ types,
169
+ membershipTypes,
155
170
saved : req . query . saved ?? false
156
171
} ) ;
157
172
} ) ;
158
173
159
- router . post ( '/event-type' , checkAdmin , validator . body ( Joi . object ( {
160
- id : Joi . array ( )
161
- . items ( Joi . number ( ) ) ,
162
- type : Joi . array ( )
163
- . items ( Joi . string ( ) ) ,
164
- cost : Joi . array ( )
165
- . items ( Joi . number ( ) ) ,
166
- isActive : Joi . array ( )
167
- . items ( Joi . boolean ( ) . falsy ( '0' ) . truthy ( '1' ) ) ,
168
- } ) ) , async ( req , res , next ) => {
169
- await Promise . all ( req . body . type . map ( ( type , i ) => {
170
- const details = {
171
- Name : req . body . type [ i ] ,
172
- EntryCost : req . body . cost [ i ] ,
173
- IsActive : req . body . isActive [ i ]
174
- } ;
174
+ router . post ( '/event-type' , checkAdmin ,
175
+ validator . body ( Joi . object ( {
176
+ id : Joi . array ( )
177
+ . items ( Joi . number ( ) ) ,
178
+ type : Joi . array ( )
179
+ . items ( Joi . string ( ) ) ,
180
+ cost : Joi . array ( )
181
+ . items ( Joi . number ( ) ) ,
182
+ isActive : Joi . array ( )
183
+ . items ( Joi . boolean ( ) . falsy ( '0' ) . truthy ( '1' ) ) ,
184
+ discountAfter : Joi . array ( ) . items ( Joi . array ( ) . items ( Joi . number ( ) ) ) ,
185
+ multiplier : Joi . array ( ) . items ( Joi . array ( ) . items ( Joi . number ( ) ) ) ,
186
+ membersOnly : Joi . array ( ) . items ( Joi . array ( ) . items ( Joi . boolean ( ) ) ) ,
187
+ membershipType : Joi . array ( ) . items ( Joi . array ( ) . items ( Joi . array ( ) . items ( Joi . number ( ) . allow ( '' ) ) ) )
188
+ } ) ) ,
189
+ async ( req , res , next ) => {
190
+ await Promise . all ( req . body . type . map ( ( _ , i ) => {
191
+ return ( async function ( ) {
192
+ const details = {
193
+ Name : req . body . type [ i ] ,
194
+ EntryCost : req . body . cost [ i ] ,
195
+ IsActive : req . body . isActive [ i ]
196
+ } ;
175
197
176
- if ( req . body . id [ i ] < 0 ) {
177
- return req . db . EventType . create ( details ) ;
178
- }
198
+ let type = null ;
199
+ if ( req . body . id [ i ] < 0 ) {
200
+ type = await req . db . EventType . create ( details ) ;
201
+ } else {
202
+ await req . db . EventType . update ( details , {
203
+ where : {
204
+ id : req . body . id [ i ]
205
+ }
206
+ } ) ;
207
+ type = await req . db . EventType . findByPk ( req . body . id [ i ] ) ;
208
+ }
179
209
180
- return req . db . EventType . update ( details , {
181
- where : {
182
- id : req . body . id [ i ]
183
- }
184
- } ) ;
185
- } ) ) ;
210
+ //clear discounts and start fresh
211
+ await req . db . EventTypeDiscount . destroy ( {
212
+ where : {
213
+ EventTypeId : type . id
214
+ }
215
+ } ) ;
186
216
187
- return res . redirect ( '?saved=true' ) ;
188
- } ) ;
217
+ await Promise . all ( req . body . discountAfter [ i ] . map ( ( _ , d ) => {
218
+ return ( async function ( ) {
219
+ const allPos = ( req . body . membershipType [ i ] [ d ] ?? [ ] ) . indexOf ( - 1 ) ;
220
+ if ( allPos > - 1 ) {
221
+ req . body . membershipType [ i ] [ d ] . splice ( allPos , 1 ) ;
222
+ }
223
+
224
+ const discountDetails = {
225
+ DiscountAfter : req . body . discountAfter [ i ] [ d ] ,
226
+ DiscountMultiplier : req . body . multiplier [ i ] [ d ] ,
227
+ MembersOnly : req . body . membersOnly [ i ] [ d ] ,
228
+ AllMembers : allPos > - 1
229
+ } ;
230
+
231
+ const discount = await type . createEventTypeDiscount ( discountDetails ) ;
232
+
233
+ if ( discount . MembersOnly ) {
234
+ await discount . addMembershipTypes ( req . body . membershipType [ i ] [ d ] ) ;
235
+ }
236
+ } ) ( ) ;
237
+ } ) ) ;
238
+ } ) ( ) ;
239
+ } ) ) ;
240
+
241
+ return res . redirect ( '?saved=true' ) ;
242
+ } ) ;
189
243
190
244
router . get ( '/payment-type' , checkAdmin , validator . query ( Joi . object ( {
191
245
saved : Joi . boolean ( )
@@ -275,7 +329,7 @@ router.post('/division', checkAdmin, validator.body(Joi.object({
275
329
return res . redirect ( '?saved=true' ) ;
276
330
} ) ;
277
331
278
- async function loadCaption ( db , parent ) {
332
+ async function loadCaption ( db , parent ) {
279
333
parent . Subcaptions = await db . findAll ( {
280
334
where : {
281
335
ParentID : parent . id
@@ -320,7 +374,7 @@ async function saveCaption(db, caption, parent) {
320
374
ParentID : parent
321
375
} ;
322
376
323
- if ( caption . id < 0 ) {
377
+ if ( caption . id < 0 ) {
324
378
const _new = await db . create ( details ) ;
325
379
326
380
caption . id = _new . id ;
0 commit comments