diff --git a/src/server/backend/api/getHandler.js b/src/server/backend/api/getHandler.js index bd453e2..6b771b3 100644 --- a/src/server/backend/api/getHandler.js +++ b/src/server/backend/api/getHandler.js @@ -58,6 +58,8 @@ class GETHandler { resolve( 'extended' ); } else if ( call === 'getName' ) { resolve( { 'name': settings.name } ); + } else if ( call === 'reloadData' ) { + resolve( 'ok' ); } else { reject( { 'code': 404, 'message': 'Route not found' } ); } diff --git a/src/server/backend/api/postHandler.js b/src/server/backend/api/postHandler.js index c606b04..78a68fb 100644 --- a/src/server/backend/api/postHandler.js +++ b/src/server/backend/api/postHandler.js @@ -14,13 +14,24 @@ const pwHandler = require( '../credentials/pwdmanager.js' ); class POSTHandler { constructor () { + this.loadData(); + + this.settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ); + } + + loadData () { db.getJSONData( 'booked' ).then( dat => { this.allSelectedSeats = dat; db.getJSONData( 'events' ).then( dat => { this.events = dat; this.ticketTotals = {}; + this.detailedTicketTotals = {}; for ( let event in this.events ) { this.ticketTotals[ event ] = this.events[ event ][ 'totalSeats' ]; + this.detailedTicketTotals[ event ] = {}; + for ( let category in this.events[ event ].categories ) { + this.detailedTicketTotals[ event ][ category ] = this.events[ event ].categories[ category ].ticketCount ?? 0; + } } for ( let event in this.allSelectedSeats ) { @@ -28,14 +39,12 @@ class POSTHandler { if ( this.allSelectedSeats[ event ][ t ][ 'count' ] ) { this.ticketTotals[ event ] -= this.allSelectedSeats[ event ][ t ][ 'count' ]; } else { - this.ticketTotals[ event ] -= 1 + this.ticketTotals[ event ] -= 1; } } } } ); } ); - - this.settings = JSON.parse( fs.readFileSync( path.join( __dirname + '/../../config/settings.config.json' ) ) ); } // Add lang in the future @@ -68,40 +77,41 @@ class POSTHandler { totalTickets += totalTicketsPerID[ category ]; } - if ( totalTickets <= this.settings.maxTickets ) { - if ( totalTicketsPerID[ id ] <= this.ticketTotals[ data.eventID ][ id ] ) { - let info = {}; - info[ data.eventID ] = tickets; - if ( data.count < 1 ) { - if ( Object.keys( info[ data.eventID ] ).length < 1 ) { - delete info[ data.eventID ]; - } else { - delete info[ data.eventID ][ data.id ]; - } - } else { - info[ data.eventID ][ data.id ] = data; - } - let ticketCount = data.count; - const maxTickets = this.ticketTotals[ data.eventID ][ data.id.slice( 0, data.id.indexOf( '_' ) ) ]; - if ( ticketCount > maxTickets ) { - ticketCount = maxTickets; - } - if ( maxTickets > 0 ) { - db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ); - resolve( { 'status': 'ok', 'ticketCount': ticketCount } ); - } else { - reject( { 'code': 409, 'message': 'ERR_ALL_OCCUPIED' } ); - } + if ( this.settings.maxTickets !== 0 ) { + if ( totalTickets >= this.settings.maxTickets ) { + reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } ); + } + } + if ( totalTicketsPerID[ id ] <= this.detailedTicketTotals[ data.eventID ][ id ] ) { + let info = {}; + info[ data.eventID ] = tickets; + if ( data.count < 1 ) { + if ( Object.keys( info[ data.eventID ] ).length < 1 ) { + delete info[ data.eventID ]; + } else { + delete info[ data.eventID ][ data.id ]; + } + } else { + info[ data.eventID ][ data.id ] = data; + } + let ticketCount = data.count; + const maxTickets = this.detailedTicketTotals[ data.eventID ][ data.id.slice( 0, data.id.indexOf( '_' ) ) ]; + if ( ticketCount > maxTickets ) { + ticketCount = maxTickets; + } + if ( maxTickets > 0 ) { + db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ); + resolve( { 'status': 'ok', 'ticketCount': ticketCount } ); + } else { + reject( { 'code': 409, 'message': 'ERR_ALL_OCCUPIED' } ); } - } else { - reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } ); } } else { let info = {}; info[ data.eventID ] = {}; info[ data.eventID ][ data.id ] = data; let ticketCount = data.count; - const maxTickets = this.ticketTotals[ data.eventID ][ data.id.slice( 0, data.id.indexOf( '_' ) ) ]; + const maxTickets = this.detailedTicketTotals[ data.eventID ][ data.category ]; if ( ticketCount > maxTickets ) { ticketCount = maxTickets; } diff --git a/src/server/backend/db/data/booked.json b/src/server/backend/db/data/booked.json index 70ef179..8ea70e7 100644 --- a/src/server/backend/db/data/booked.json +++ b/src/server/backend/db/data/booked.json @@ -1 +1 @@ -{"test4":{"secAr4s7":{"id":"secAr4s7","component":1,"ticketOption":"1","eventID":"test4","category":"1","name":"Row 5, Seat 8"},"secAr6s14":{"id":"secAr6s14","component":1,"ticketOption":"2","eventID":"test4","category":"1","name":"Row 7, Seat 15"}}} \ No newline at end of file +{"test4":{"secAr4s7":{"id":"secAr4s7","component":1,"ticketOption":"1","eventID":"test4","category":"1","name":"Row 5, Seat 8"},"secAr6s14":{"id":"secAr6s14","component":1,"ticketOption":"2","eventID":"test4","category":"1","name":"Row 7, Seat 15"}},"test3":{"ticket1_1":{"id":"ticket1_1","component":1,"ticketOption":"1","eventID":"test3","count":1,"category":"1","name":"Category 1 (Child)"}}} \ No newline at end of file diff --git a/src/server/backend/db/data/eventDrafts.json b/src/server/backend/db/data/eventDrafts.json index 1586b6f..650024c 100644 --- a/src/server/backend/db/data/eventDrafts.json +++ b/src/server/backend/db/data/eventDrafts.json @@ -1 +1 @@ -{"test4":{"name":"Test4Event","description":"Let's see what happens if I update the description, how fast it is reflected in the UI","location":"test2","date":"2023-10-30T10:00:00.000Z","categories":{"1":{"price":{"1":20,"2":30},"bg":"#ff0000","fg":"#ff0000","name":"Category 1","id":"1","ticketCount":1}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test4","time":"10:00:00.000","startingPrice":20,"currency":"CHF","isDraft":true,"locationName":"TestLocation2","hasSeatplan":true,"totalSeats":353},"test3":{"name":"TestEvent3","description":"This is another test event, this time without seat plan","location":"test","date":"2023-11-25T19:00:00.000Z","categories":{"1":{"price":{"1":20,"2":25},"bg":"#FFFFFF","fg":"#000000","name":"Category 1","id":1,"ticketCount":50},"2":{"price":{"1":30,"2":35},"bg":"#FFFFFF","fg":"#000000","name":"Category 2","id":2,"ticketCount":50}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test3","time":"19:00:00.000","startingPrice":20,"currency":"CHF","locationName":"TestLocation","hasSeatplan":false,"totalSeats":null}} \ No newline at end of file +{"test4":{"name":"Test4Event","description":"Let's see what happens if I update the description, how fast it is reflected in the UI","location":"test2","date":"2023-10-30T10:00:00.000Z","categories":{"1":{"price":{"1":20,"2":30},"bg":"#ff0000","fg":"#ff0000","name":"Category 1","id":"1","ticketCount":1}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test4","time":"10:00:00.000","startingPrice":20,"currency":"CHF","isDraft":true,"locationName":"TestLocation2","hasSeatplan":true,"totalSeats":353},"test3":{"name":"TestEvent3","description":"This is another test event, this time without seat plan","location":"test","date":"2023-11-25T19:00:00.000Z","categories":{"1":{"price":{"1":20,"2":25},"bg":"#FFFFFF","fg":"#000000","name":"Category 1","id":1,"ticketCount":50},"2":{"price":{"1":30,"2":35},"bg":"#FFFFFF","fg":"#000000","name":"Category 2","id":2,"ticketCount":50}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test3","time":"19:00:00.000","startingPrice":20,"currency":"CHF","locationName":"TestLocation","hasSeatplan":false,"totalSeats":100},"testStanding":{"name":"Standing Test event","description":"Teststsatahadsf","location":"testLocationNoSeatplan","date":"2023-11-25T10:00:00.000Z","categories":{"1":{"price":{"1":10,"2":15},"bg":"#FFFFFF","fg":"#000000","name":"Category 1","id":"1","ticketCount":1}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"testStanding","time":"10:00","startingPrice":10,"currency":"CHF","locationName":"TestLocationWithoutSeatplan","hasSeatplan":true,"totalSeats":1}} \ No newline at end of file diff --git a/src/server/backend/db/data/events.json b/src/server/backend/db/data/events.json index 1586b6f..88953a8 100644 --- a/src/server/backend/db/data/events.json +++ b/src/server/backend/db/data/events.json @@ -1 +1 @@ -{"test4":{"name":"Test4Event","description":"Let's see what happens if I update the description, how fast it is reflected in the UI","location":"test2","date":"2023-10-30T10:00:00.000Z","categories":{"1":{"price":{"1":20,"2":30},"bg":"#ff0000","fg":"#ff0000","name":"Category 1","id":"1","ticketCount":1}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test4","time":"10:00:00.000","startingPrice":20,"currency":"CHF","isDraft":true,"locationName":"TestLocation2","hasSeatplan":true,"totalSeats":353},"test3":{"name":"TestEvent3","description":"This is another test event, this time without seat plan","location":"test","date":"2023-11-25T19:00:00.000Z","categories":{"1":{"price":{"1":20,"2":25},"bg":"#FFFFFF","fg":"#000000","name":"Category 1","id":1,"ticketCount":50},"2":{"price":{"1":30,"2":35},"bg":"#FFFFFF","fg":"#000000","name":"Category 2","id":2,"ticketCount":50}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test3","time":"19:00:00.000","startingPrice":20,"currency":"CHF","locationName":"TestLocation","hasSeatplan":false,"totalSeats":null}} \ No newline at end of file +{"test4":{"name":"Test4Event","description":"Let's see what happens if I update the description, how fast it is reflected in the UI","location":"test2","date":"2023-10-30T10:00:00.000Z","categories":{"1":{"price":{"1":20,"2":30},"bg":"#ff0000","fg":"#ff0000","name":"Category 1","id":"1","ticketCount":1}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test4","time":"10:00:00.000","startingPrice":20,"currency":"CHF","isDraft":true,"locationName":"TestLocation2","hasSeatplan":true,"totalSeats":353},"test3":{"name":"TestEvent3","description":"This is another test event, this time without seat plan","location":"test","date":"2023-11-25T19:00:00.000Z","categories":{"1":{"price":{"1":20,"2":25},"bg":"#FFFFFF","fg":"#000000","name":"Category 1","id":1,"ticketCount":50},"2":{"price":{"1":30,"2":35},"bg":"#FFFFFF","fg":"#000000","name":"Category 2","id":2,"ticketCount":50}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"test3","time":"19:00:00.000","startingPrice":20,"currency":"CHF","locationName":"TestLocation","hasSeatplan":false,"totalSeats":100},"testStanding":{"name":"Standing Test event","description":"Teststsatahadsf","location":"testLocationNoSeatplan","date":"2023-11-25T10:00:00.000Z","categories":{"1":{"price":{"1":10,"2":15},"bg":"#FFFFFF","fg":"#000000","name":"Category 1","id":"1","ticketCount":1}},"ageGroups":{"1":{"id":1,"name":"Child","age":"0 - 15.99"},"2":{"id":2,"name":"Adult"}},"maxTickets":0,"eventID":"testStanding","time":"10:00:00.000","startingPrice":10,"currency":"CHF","locationName":"TestLocationWithoutSeatplan","hasSeatplan":true,"totalSeats":1}} \ No newline at end of file diff --git a/src/server/backend/db/data/locations.json b/src/server/backend/db/data/locations.json index 52ab41a..d2c4d71 100644 --- a/src/server/backend/db/data/locations.json +++ b/src/server/backend/db/data/locations.json @@ -1 +1 @@ -{"test2":{"locationID":"test2","name":"TestLocation2","seatplan-enabled":true,"totalSeats":352},"test":{"locationID":"test","name":"TestLocation","seatplan-enabled":false}} \ No newline at end of file +{"test2":{"locationID":"test2","name":"TestLocation2","seatplan-enabled":true,"totalSeats":352},"test":{"locationID":"test","name":"TestLocation","seatplan-enabled":false},"testLocationNoSeatplan":{"locationID":"testLocationNoSeatplan","name":"TestLocationWithoutSeatplan","seatplan-enabled":true,"totalSeats":0}} \ No newline at end of file diff --git a/src/server/backend/db/data/seatplan.json b/src/server/backend/db/data/seatplan.json index 20b75a1..e6f6a31 100644 --- a/src/server/backend/db/data/seatplan.json +++ b/src/server/backend/db/data/seatplan.json @@ -1 +1 @@ -{"test2":{"draft":{"seatInfo":{"data":{"1":{"0":22,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":22,"8":22,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":22}},"count":352},"data":{"1":{"x":296.892,"y":13.495,"h":560.66,"w":728.735,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"seat","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1"},"2":{"x":357.007,"y":660.033,"h":117.775,"w":601.145,"active":false,"draggable":true,"resizable":true,"id":2,"origin":3,"shape":"rectangular","type":"stage","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"ticketCount":1,"numberingDirection":"left","category":"1"},"3":{"x":517.721,"y":669.847,"h":80.971,"w":304.253,"active":false,"draggable":true,"resizable":true,"id":3,"origin":1,"shape":"rectangular","type":"text","startingRow":1,"seatNumberingPosition":2,"sector":"A","text":{"text":"Stage","textSize":25,"colour":"#2160ff"},"ticketCount":1,"numberingDirection":"left","category":"1"}}},"save":{"seatInfo":{"data":{"1":{"0":22,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":22,"8":22,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":22}},"count":0},"data":{"1":{"x":296.892,"y":13.495,"h":560.66,"w":728.735,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"seat","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1"},"2":{"x":357.375,"y":660.049,"h":117.775,"w":601.145,"active":false,"draggable":true,"resizable":true,"id":2,"origin":3,"shape":"rectangular","type":"stage","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"ticketCount":1,"numberingDirection":"left","category":"1"},"3":{"x":517.828,"y":670.99,"h":80.971,"w":304.253,"active":false,"draggable":true,"resizable":true,"id":3,"origin":1,"shape":"rectangular","type":"text","startingRow":1,"seatNumberingPosition":2,"sector":"A","text":{"text":"Stage","textSize":25,"colour":"#2160ff"},"ticketCount":1,"numberingDirection":"left","category":"1"}}}},"test":{"draft":{},"save":{"seatInfo":{"data":{"1":{"0":22}},"count":0},"data":{"1":{"x":427.696,"y":160.539,"h":371.324,"w":734.069,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"stand","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1","ticketCount":50}}}}} \ No newline at end of file +{"test2":{"draft":{"seatInfo":{"data":{"1":{"0":22,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":22,"8":22,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":22}},"count":352},"data":{"1":{"x":296.892,"y":13.495,"h":560.66,"w":728.735,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"seat","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1"},"2":{"x":357.007,"y":660.033,"h":117.775,"w":601.145,"active":false,"draggable":true,"resizable":true,"id":2,"origin":3,"shape":"rectangular","type":"stage","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"ticketCount":1,"numberingDirection":"left","category":"1"},"3":{"x":517.721,"y":669.847,"h":80.971,"w":304.253,"active":false,"draggable":true,"resizable":true,"id":3,"origin":1,"shape":"rectangular","type":"text","startingRow":1,"seatNumberingPosition":2,"sector":"A","text":{"text":"Stage","textSize":25,"colour":"#2160ff"},"ticketCount":1,"numberingDirection":"left","category":"1"}}},"save":{"seatInfo":{"data":{"1":{"0":22,"1":22,"2":22,"3":22,"4":22,"5":22,"6":22,"7":22,"8":22,"9":22,"10":22,"11":22,"12":22,"13":22,"14":22,"15":22}},"count":0},"data":{"1":{"x":296.892,"y":13.495,"h":560.66,"w":728.735,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"seat","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1"},"2":{"x":357.375,"y":660.049,"h":117.775,"w":601.145,"active":false,"draggable":true,"resizable":true,"id":2,"origin":3,"shape":"rectangular","type":"stage","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"ticketCount":1,"numberingDirection":"left","category":"1"},"3":{"x":517.828,"y":670.99,"h":80.971,"w":304.253,"active":false,"draggable":true,"resizable":true,"id":3,"origin":1,"shape":"rectangular","type":"text","startingRow":1,"seatNumberingPosition":2,"sector":"A","text":{"text":"Stage","textSize":25,"colour":"#2160ff"},"ticketCount":1,"numberingDirection":"left","category":"1"}}}},"test":{"draft":{},"save":{"seatInfo":{"data":{"1":{"0":22}},"count":0},"data":{"1":{"x":427.696,"y":160.539,"h":371.324,"w":734.069,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"stand","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1","ticketCount":50}}}},"testLocationNoSeatplan":{"draft":{},"save":{"seatInfo":{"data":{"1":{"0":9,"1":9,"2":9,"startingRow":1}},"count":0},"data":{"1":{"x":375,"y":169.118,"h":294.118,"w":750,"active":false,"draggable":true,"resizable":true,"id":1,"origin":1,"shape":"rectangular","type":"stand","startingRow":1,"seatNumberingPosition":1,"sector":"A","text":{"text":"TestText","textSize":20,"colour":"#20FFFF"},"numberingDirection":"left","category":"1","ticketCount":50}}}}} \ No newline at end of file diff --git a/src/server/backend/plugins/payments/stripe/stripeRoutes.js b/src/server/backend/plugins/payments/stripe/stripeRoutes.js index a6de901..16526b7 100644 --- a/src/server/backend/plugins/payments/stripe/stripeRoutes.js +++ b/src/server/backend/plugins/payments/stripe/stripeRoutes.js @@ -43,9 +43,12 @@ module.exports = ( app, settings ) => { db.getDataSimple( 'temp', 'user_id', req.session.id ).then( dat => { if ( dat[ 0 ] ) { db.getJSONData( 'events' ).then( events => { + console.log( events ); let data = JSON.parse( dat[ 0 ].data ); ( async () => { + console.log( data ); for ( let event in data ) { + console.log( event ); for ( let item in data[ event ] ) { purchase[ 'line_items' ].push( { 'price_data': { @@ -159,7 +162,6 @@ module.exports = ( app, settings ) => { if ( user[ 0 ] ) { const tickets = JSON.parse( dat[ 0 ].data ); db.writeDataSimple( 'orders', 'account_id', user[ 0 ].account_id, { 'account_id': user[ 0 ].account_id, 'tickets': dat[ 0 ].data, 'order_name': sessionReference[ event.data.object.id ][ 'tok' ] } ).then( () => { - console.log( sessionReference[ event.data.object.id ][ 'tok' ] ); TicketGenerator.generateTickets( sessionReference[ event.data.object.id ] ); db.getJSONData( 'booked' ).then( ret => { let booked = ret ?? {}; diff --git a/src/server/backend/tickets/store/e6q8NWzr5vbiM2bSH9Arpx3GI4F_4jSR.pdf b/src/server/backend/tickets/store/e6q8NWzr5vbiM2bSH9Arpx3GI4F_4jSR.pdf deleted file mode 100644 index ab27961..0000000 Binary files a/src/server/backend/tickets/store/e6q8NWzr5vbiM2bSH9Arpx3GI4F_4jSR.pdf and /dev/null differ diff --git a/src/server/backend/userAPIRoutes.js b/src/server/backend/userAPIRoutes.js index 7b9ceec..18191b6 100644 --- a/src/server/backend/userAPIRoutes.js +++ b/src/server/backend/userAPIRoutes.js @@ -29,7 +29,14 @@ module.exports = ( app, settings ) => { dat[ event ][ 'free' ] = freeSeats[ event ]; } res.send( dat ); - }else { + } else if ( req.params.call === 'reloadData' ) { + if ( req.session.loggedInAdmin ) { + postHandler.loadData(); + res.send( 'ok' ); + } else { + res.status( 403 ).send( 'unauthorized' ); + } + } else { res.send( data ); } } ).catch( error => { diff --git a/src/webapp/main/src/components/noseatplan.vue b/src/webapp/main/src/components/noseatplan.vue index 6ede931..48e7e30 100644 --- a/src/webapp/main/src/components/noseatplan.vue +++ b/src/webapp/main/src/components/noseatplan.vue @@ -94,6 +94,13 @@ export default { }, cartHandling () { for ( let ticket in this.selectedTickets ) { + let category = ''; + const ticketSlice = ticket.slice( 0, ticket.indexOf( '_' ) ); + for ( let letter in ticketSlice ) { + if ( !isNaN( ticketSlice[ letter ] ) ) { + category += parseInt( ticketSlice[ letter ] ); + } + } const options = { method: 'post', body: JSON.stringify( { @@ -102,8 +109,8 @@ export default { 'ticketOption': ticket.substring( ticket.indexOf( '_' ) + 1 ), 'eventID': this.event.eventID, 'count': this.selectedTickets[ ticket ], - 'category': ticket.slice( 0, ticket.indexOf( '_' ) ), - 'name': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')', + 'category': category, + 'name': this.event.categories[ category ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')', } ), headers: { 'Content-Type': 'application/json', diff --git a/src/webapp/main/src/views/admin/events/EventsDetailsView.vue b/src/webapp/main/src/views/admin/events/EventsDetailsView.vue index 952b538..ab22bcd 100644 --- a/src/webapp/main/src/views/admin/events/EventsDetailsView.vue +++ b/src/webapp/main/src/views/admin/events/EventsDetailsView.vue @@ -342,7 +342,7 @@ } let lowestPrice = 1000000; - let totalSeats = parseInt( this.locations[ this.event.location ].totalSeats ); + let totalSeats = parseInt( this.locations[ this.event.location ].totalSeats ?? 0 ); for ( let category in this.event.categories ) { for ( let price in this.event.categories[ category ].price ) { if ( this.event.categories[ category ].price[ price ] < 0.5 || ( !this.event.categories[ category ].ticketCount && this.hasSeatPlan ) ) { @@ -383,6 +383,7 @@ if ( res.status === 200 ) { if ( action === 'deploy' ) { this.$refs.notification.createNotification( 'Your event has been published successfully.', 5, 'ok', 'normal' ); + fetch( '/getAPI/reloadData' ).catch( () => {} ); this.hasLiveVersion = true; } else { this.$refs.notification.createNotification( 'Saved as draft successfully!', 5, 'ok', 'normal' );