From 3e95dfeee3feeca76e6258db65a39c78a3c966fb Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Tue, 8 Aug 2023 16:08:38 +0200 Subject: [PATCH] fix payments not working with last change --- src/server/backend/api/postHandler.js | 6 +++--- .../plugins/payments/stripe/stripeRoutes.js | 19 ++++++++++------- .../seatplan/userApp/userWindow.vue | 21 +++++++++---------- .../views/purchasing/PaymentSuccessView.vue | 1 + 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/server/backend/api/postHandler.js b/src/server/backend/api/postHandler.js index 028bb8a..59c29d7 100644 --- a/src/server/backend/api/postHandler.js +++ b/src/server/backend/api/postHandler.js @@ -70,7 +70,7 @@ class POSTHandler { ticketCount = maxTickets; } if ( maxTickets > 0 ) { - db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toDateString(), 'data': JSON.stringify( info ) } ); + 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' } ); @@ -89,7 +89,7 @@ class POSTHandler { ticketCount = maxTickets; } if ( maxTickets > 0 ) { - db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toDateString(), 'data': JSON.stringify( info ) } ); + 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' } ); @@ -106,7 +106,7 @@ class POSTHandler { let info = {}; info[ data.eventID ] = {}; info[ data.eventID ][ data.id ] = data; - db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toDateString(), 'data': JSON.stringify( info ) } ).catch( err => { + db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ).catch( err => { console.error( err ); } ); resolve( 'ok' ); diff --git a/src/server/backend/plugins/payments/stripe/stripeRoutes.js b/src/server/backend/plugins/payments/stripe/stripeRoutes.js index 5296263..c1071a3 100644 --- a/src/server/backend/plugins/payments/stripe/stripeRoutes.js +++ b/src/server/backend/plugins/payments/stripe/stripeRoutes.js @@ -109,11 +109,15 @@ module.exports = ( app, settings ) => { delete paymentOk[ request.session.id ]; response.send( { 'status': 'paymentOk' } ); } else { - const stat = TicketGenerator.getGenerationStatus( request.session.id ); - if ( stat === 'done' ) { - response.send( { 'status': 'ticketOk' } ); - } else if ( stat === 'noTicket' ) { - response.send( { 'status': 'noTicket' } ); + if ( !pendingPayments[ request.session.id ] ) { + const stat = TicketGenerator.getGenerationStatus( request.session.id ); + if ( stat === 'done' ) { + response.send( { 'status': 'ticketOk' } ); + } else if ( stat === 'noTicket' ) { + response.send( { 'status': 'noTicket' } ); + } else { + response.send( '' ); + } } else { response.send( '' ); } @@ -146,7 +150,6 @@ module.exports = ( app, settings ) => { 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' ] ); - delete pendingPayments[ sessionReference[ event.data.object.id ][ 'tok' ] ]; TicketGenerator.generateTickets( sessionReference[ event.data.object.id ] ); db.getJSONData( 'booked' ).then( ret => { let booked = ret ?? {}; @@ -158,7 +161,9 @@ module.exports = ( app, settings ) => { booked[ event ][ tik ] = tickets[ event ][ tik ]; } } - db.writeJSONData( 'booked', booked ); + db.writeJSONData( 'booked', booked ).then( () => { + delete pendingPayments[ sessionReference[ event.data.object.id ][ 'tok' ] ]; + } ); db.deleteDataSimple( 'temp', 'user_id', sessionReference[ event.data.object.id ][ 'tok' ] ).catch( error => { console.error( '[ STRIPE ] ERROR whilst deleting data from DB: ' + error ); } ); diff --git a/src/webapp/main/src/components/seatplan/userApp/userWindow.vue b/src/webapp/main/src/components/seatplan/userApp/userWindow.vue index 0c61e95..9e563d5 100644 --- a/src/webapp/main/src/components/seatplan/userApp/userWindow.vue +++ b/src/webapp/main/src/components/seatplan/userApp/userWindow.vue @@ -177,11 +177,10 @@ unavailableSeats[ data.reserved[ seat ].component ][ data.reserved[ seat ].id ] = 'nav'; } } - for ( let seat in data.user ) { if ( data.user[ seat ] ) { if ( !unavailableSeats[ data.user[ seat ].component ] ) { - unavailableSeats[ data.reserved[ seat ].component ] = {}; + unavailableSeats[ data.user[ seat ].component ] = {}; } unavailableSeats[ data.user[ seat ].component ][ data.user[ seat ].id ] = 'sel'; } @@ -293,15 +292,15 @@ this.draggables = this.scaleUp( JSON.parse( sessionStorage.getItem( 'seatplan' ) ) ); } - if ( this.cart[ this.event.eventID ] ) { - let tickets = this.cart[ this.event.eventID ][ 'tickets' ]; - for ( let seat in tickets ) { - if ( !this.unavailableSeats[ data.user[ seat ].component ] ) { - this.unavailableSeats[ data.reserved[ seat ].component ] = {}; - } - this.unavailableSeats[ tickets[ seat ].component ][ tickets[ seat ].id ] = 'sel'; - } - } + // if ( this.cart[ this.event.eventID ] ) { + // let tickets = this.cart[ this.event.eventID ][ 'tickets' ]; + // for ( let seat in tickets ) { + // if ( !this.unavailableSeats[ data.user[ seat ].component ] ) { + // this.unavailableSeats[ data.reserved[ seat ].component ] = {}; + // } + // this.unavailableSeats[ tickets[ seat ].component ][ tickets[ seat ].id ] = 'sel'; + // } + // } }, scaleUp ( valueArray ) { diff --git a/src/webapp/main/src/views/purchasing/PaymentSuccessView.vue b/src/webapp/main/src/views/purchasing/PaymentSuccessView.vue index 4e735e8..aa696ca 100644 --- a/src/webapp/main/src/views/purchasing/PaymentSuccessView.vue +++ b/src/webapp/main/src/views/purchasing/PaymentSuccessView.vue @@ -48,6 +48,7 @@ if ( e.data === 'ready' ) { self.$refs.notification.cancelNotification( startNotification ); self.$refs.notification.createNotification( 'Your tickets are ready! Starting download...', 10, 'progress', 'normal' ); + localStorage.removeItem( 'cart' ); setTimeout( () => { open( '/tickets/tickets.pdf' ); source.close();