fix various bugs in seat plan selector

This commit is contained in:
2023-08-03 11:11:16 +02:00
parent 127bd5b630
commit 19874cd007
3 changed files with 114 additions and 77 deletions

View File

@@ -11,8 +11,8 @@ const db = require( '../db/db.js' );
class POSTHandler { class POSTHandler {
constructor () { constructor () {
this.allSelectedSeats = { 'TestEvent2': [ { 'id': 'secAr1s1', 'component': 1 } ] }; this.allSelectedSeats = { 'test2': [ { 'id': 'secAr1s1', 'component': 1 } ] };
this.ticketTotals = { 'TestEvent2': { 'ticket1': 5, 'ticket2': 5 } }; this.ticketTotals = { 'test2': { 'ticket1': 5, 'ticket2': 5 } };
this.settings = { 'maxTickets': 10 }; this.settings = { 'maxTickets': 10 };
} }
@@ -24,13 +24,16 @@ class POSTHandler {
let transmit = {}; let transmit = {};
if ( dat.length > 0 ) { if ( dat.length > 0 ) {
transmit = JSON.parse( dat[ 0 ].data ); transmit = JSON.parse( dat[ 0 ].data );
} else {
transmit[ data.eventID ] = {};
} }
if ( !this.allSelectedSeats[ data.eventID ] ) { if ( !this.allSelectedSeats[ data.eventID ] ) {
this.allSelectedSeats[ data.eventID ] = []; this.allSelectedSeats[ data.eventID ] = [];
} }
if ( !transmit[ data.eventID ] ) {
transmit[ data.eventID ] = {};
}
if ( this.allSelectedSeats[ data.eventID ].includes( data.id ) && !data.count ) { if ( this.allSelectedSeats[ data.eventID ].includes( data.id ) && !data.count ) {
reject( { 'code': 409, 'message': 'ERR_SEAT_SELECTED' } ); reject( { 'code': 409, 'message': 'ERR_SEAT_SELECTED' } );
return; return;
@@ -62,19 +65,23 @@ class POSTHandler {
} }
db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'data': JSON.stringify( transmit ), 'timestamp': new Date().toString() } ).then( () => { db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'data': JSON.stringify( transmit ), 'timestamp': new Date().toString() } ).then( () => {
resolve( 'ok' ); resolve( 'ok' );
} ).catch( () => { } ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } ); reject( { 'code': 500, 'message': 'ERR_DB' } );
} ); } );
} else { } else {
reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } ); reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } );
return; return;
} }
} ).catch( () => { } ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } ); reject( { 'code': 500, 'message': 'ERR_DB' } );
} ); } );
} else if ( call === 'deselectTicket' ) { } else if ( call === 'deselectTicket' ) {
db.getDataSimple( 'temp', 'user_id', session.id ).then( dat => { db.getDataSimple( 'temp', 'user_id', session.id ).then( dat => {
let transmit = JSON.parse( dat[ 0 ].data ); let transmit = {};
if ( dat[ 0 ] ) {
transmit = JSON.parse( dat[ 0 ].data );
if ( transmit[ data.eventID ] ) { if ( transmit[ data.eventID ] ) {
if ( transmit[ data.eventID ][ data.id ] ) { if ( transmit[ data.eventID ][ data.id ] ) {
delete transmit[ data.eventID ][ data.id ]; delete transmit[ data.eventID ][ data.id ];
@@ -87,12 +94,30 @@ class POSTHandler {
} else { } else {
reject( { 'code': 404, 'message': 'ERR_DATA_NOT_FOUND' } ); reject( { 'code': 404, 'message': 'ERR_DATA_NOT_FOUND' } );
} }
const allSeats = this.allSelectedSeats[ data.eventID ];
for ( let seat in allSeats ) {
if ( allSeats[ seat ].component === data.component ) {
if ( allSeats[ seat ].id === data.id ) {
delete this.allSelectedSeats[ data.eventID ][ seat ];
}
}
}
} else {
reject( { 'code': 404, 'message': 'ERR_DATA_NOT_FOUND' } );
return;
}
db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'data': JSON.stringify( transmit ) } ).then( () => { db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'data': JSON.stringify( transmit ) } ).then( () => {
resolve( 'ok' ); resolve( 'ok' );
} ).catch( () => { } ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } ); reject( { 'code': 500, 'message': 'ERR_DB' } );
} ); } );
} ).catch( () => { } ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } ); reject( { 'code': 500, 'message': 'ERR_DB' } );
} ); } );
} }

View File

@@ -171,27 +171,32 @@
if ( res.status === 200 ) { if ( res.status === 200 ) {
let unavailableSeats = {}; let unavailableSeats = {};
res.json().then( data => { res.json().then( data => {
console.log( data );
for ( let seat in data.booked ) { for ( let seat in data.booked ) {
if ( data.booked[ seat ] ) {
if ( !unavailableSeats[ data.booked[ seat ].component ] ) { if ( !unavailableSeats[ data.booked[ seat ].component ] ) {
unavailableSeats[ data.booked[ seat ].component ]; unavailableSeats[ data.booked[ seat ].component ];
} }
unavailableSeats[ data.booked[ seat ].component ][ data.booked[ seat ].id ] = 'nav'; unavailableSeats[ data.booked[ seat ].component ][ data.booked[ seat ].id ] = 'nav';
} }
}
for ( let seat in data.reserved ) { for ( let seat in data.reserved ) {
if ( data.reserved[ seat ] ) {
if ( !unavailableSeats[ data.reserved[ seat ].component ] ) { if ( !unavailableSeats[ data.reserved[ seat ].component ] ) {
unavailableSeats[ data.reserved[ seat ].component ] = {}; unavailableSeats[ data.reserved[ seat ].component ] = {};
} }
unavailableSeats[ data.reserved[ seat ].component ][ data.reserved[ seat ].id ] = 'nav'; unavailableSeats[ data.reserved[ seat ].component ][ data.reserved[ seat ].id ] = 'nav';
} }
}
for ( let seat in data.user ) { for ( let seat in data.user ) {
if ( data.user[ seat ] ) {
if ( !unavailableSeats[ data.user[ seat ].component ] ) { if ( !unavailableSeats[ data.user[ seat ].component ] ) {
unavailableSeats[ data.reserved[ seat ].component ] = {}; unavailableSeats[ data.reserved[ seat ].component ] = {};
} }
unavailableSeats[ data.user[ seat ].component ][ data.user[ seat ].id ] = 'sel'; unavailableSeats[ data.user[ seat ].component ][ data.user[ seat ].id ] = 'sel';
} }
}
let tickets = {}; let tickets = {};
if ( this.cart[ this.event.eventID ] ) { if ( this.cart[ this.event.eventID ] ) {
@@ -302,10 +307,10 @@
if ( this.cart[ this.event.eventID ] ) { if ( this.cart[ this.event.eventID ] ) {
let tickets = this.cart[ this.event.eventID ][ 'tickets' ]; let tickets = this.cart[ this.event.eventID ][ 'tickets' ];
for ( let seat in tickets ) { for ( let seat in tickets ) {
if ( !unavailableSeats[ data.user[ seat ].component ] ) { if ( !this.unavailableSeats[ data.user[ seat ].component ] ) {
unavailableSeats[ data.reserved[ seat ].component ] = {}; this.unavailableSeats[ data.reserved[ seat ].component ] = {};
} }
unavailableSeats[ tickets[ seat ].component ][ tickets[ seat ].id ] = 'sel'; this.unavailableSeats[ tickets[ seat ].component ][ tickets[ seat ].id ] = 'sel';
} }
} }
@@ -400,17 +405,13 @@
// Make call to server to deselect ticket // Make call to server to deselect ticket
const options = { const options = {
method: 'post', method: 'post',
body: JSON.stringify( { 'id': seat[ 'id' ], 'eventID': this.event.eventID } ), body: JSON.stringify( { 'id': seat[ 'id' ], 'eventID': this.event.eventID, 'component': seat.component } ),
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'charset': 'utf-8' 'charset': 'utf-8'
} }
}; };
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options ).then( res => { fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options );
res.text().then( text => {
console.log( text );
} );
} );
}, },
standing ( id ) { standing ( id ) {
const d = this.draggables[ id ]; const d = this.draggables[ id ];
@@ -445,7 +446,6 @@
} }
for ( let group in data.data ) { for ( let group in data.data ) {
if ( !this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] ) {
if ( data.data[ group ] > 0 ) { if ( data.data[ group ] > 0 ) {
const options = { const options = {
method: 'post', method: 'post',
@@ -472,20 +472,25 @@
localStorage.setItem( 'cart', JSON.stringify( this.cart ) ); localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
} ); } );
} else { } else {
if ( this.cart[ this.event.eventID ] ) {
if ( this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] ) {
delete this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ]; delete this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ];
if ( this.cart[ this.event.eventID ] ) {
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length < 1 ) {
delete this.cart[ this.event.eventID ];
}
}
const options = { const options = {
method: 'post', method: 'post',
body: JSON.stringify( { 'id': 'ticket' + data.component + '_' + group, 'eventID': this.event.eventID } ), body: JSON.stringify( { 'id': 'ticket' + data.component + '_' + group, 'eventID': this.event.eventID, 'component': data.component } ),
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'charset': 'utf-8' 'charset': 'utf-8'
} }
}; };
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options ).then( res => { fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options );
res.text().then( text => { localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
console.log( text ); }
} );
} );
} }
} }
} }
@@ -504,8 +509,6 @@
<style scoped> <style scoped>
.parent { .parent {
height: 80vh; height: 80vh;
/* aspect-ratio: 16 / 9; */
/* -webkit-aspect-ratio: 16 / 9; */
width: 70vw; width: 70vw;
top: 17vh; top: 17vh;
left: 5vw; left: 5vw;
@@ -538,7 +541,6 @@
} }
.content-parent { .content-parent {
/* aspect-ratio: 16 / 9; */
width: 400vw; width: 400vw;
height: 400vw; height: 400vw;
} }

View File

@@ -20,7 +20,7 @@
<h4 class="price"><div style="display: inline;" v-if="ticket.count">{{ ticket.count }}x</div> {{ ticket.displayName }}: </h4> <h4 class="price"><div style="display: inline;" v-if="ticket.count">{{ ticket.count }}x</div> {{ ticket.displayName }}: </h4>
</td> </td>
<td> <td>
{{ backend.currency }} {{ ticket.price }} <span class="material-symbols-outlined deleteButton" @click="deleteTicket( ticket.id, event.eventID )" title="Delete ticket">delete</span> {{ backend.currency }} {{ ticket.price }} <span class="material-symbols-outlined deleteButton" @click="deleteTicket( ticket.id, event.eventID, ticket.comp )" title="Delete ticket">delete</span>
</td> </td>
</tr> </tr>
</table> </table>
@@ -114,9 +114,10 @@
} }
} }
}, },
deleteTicket ( ticketID, event ) { deleteTicket ( ticketID, event, component ) {
this.ticketToDelete[ 'event' ] = event; this.ticketToDelete[ 'event' ] = event;
this.ticketToDelete[ 'id' ] = ticketID; this.ticketToDelete[ 'id' ] = ticketID;
this.ticketToDelete[ 'component' ] = component;
this.$refs.popups.openPopup( 'Do you really want to delete this ticket?', {}, 'confirm' ); this.$refs.popups.openPopup( 'Do you really want to delete this ticket?', {}, 'confirm' );
}, },
verifyTicketDelete ( status ) { verifyTicketDelete ( status ) {
@@ -126,6 +127,15 @@
} else { } else {
delete this.cart[ this.ticketToDelete.event ]; delete this.cart[ this.ticketToDelete.event ];
} }
const options = {
method: 'post',
body: JSON.stringify( { 'id': this.ticketToDelete[ 'id' ], 'eventID': this.ticketToDelete[ 'event' ], 'component': this.ticketToDelete[ 'component' ] } ),
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options );
} }
localStorage.setItem( 'cart', JSON.stringify( this.cart ) ); localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
}, },