From 6dd11300d3eb1e3445928d9eeb037eb163ea6eb1 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sun, 17 Sep 2023 12:25:44 +0200 Subject: [PATCH] lots of fixes --- src/server/backend/api/getHandler.js | 2 + src/server/backend/api/postHandler.js | 70 ++++++++++-------- src/server/backend/db/data/booked.json | 2 +- src/server/backend/db/data/eventDrafts.json | 2 +- src/server/backend/db/data/events.json | 2 +- src/server/backend/db/data/locations.json | 2 +- src/server/backend/db/data/seatplan.json | 2 +- .../plugins/payments/stripe/stripeRoutes.js | 4 +- .../e6q8NWzr5vbiM2bSH9Arpx3GI4F_4jSR.pdf | Bin 31923 -> 0 bytes src/server/backend/userAPIRoutes.js | 9 ++- src/webapp/main/src/components/noseatplan.vue | 11 ++- .../views/admin/events/EventsDetailsView.vue | 3 +- 12 files changed, 69 insertions(+), 40 deletions(-) delete mode 100644 src/server/backend/tickets/store/e6q8NWzr5vbiM2bSH9Arpx3GI4F_4jSR.pdf 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 ab27961f5bae7e1e3e72ae518a3963d6975a2373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31923 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 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' );