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 {
constructor () {
this.allSelectedSeats = { 'TestEvent2': [ { 'id': 'secAr1s1', 'component': 1 } ] };
this.ticketTotals = { 'TestEvent2': { 'ticket1': 5, 'ticket2': 5 } };
this.allSelectedSeats = { 'test2': [ { 'id': 'secAr1s1', 'component': 1 } ] };
this.ticketTotals = { 'test2': { 'ticket1': 5, 'ticket2': 5 } };
this.settings = { 'maxTickets': 10 };
}
@@ -24,13 +24,16 @@ class POSTHandler {
let transmit = {};
if ( dat.length > 0 ) {
transmit = JSON.parse( dat[ 0 ].data );
} else {
transmit[ data.eventID ] = {};
}
if ( !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 ) {
reject( { 'code': 409, 'message': 'ERR_SEAT_SELECTED' } );
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( () => {
resolve( 'ok' );
} ).catch( () => {
} ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } );
} );
} else {
reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } );
return;
}
} ).catch( () => {
} ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } );
} );
} else if ( call === 'deselectTicket' ) {
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 ][ data.id ] ) {
delete transmit[ data.eventID ][ data.id ];
@@ -87,12 +94,30 @@ class POSTHandler {
} else {
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( () => {
resolve( 'ok' );
} ).catch( () => {
} ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } );
} );
} ).catch( () => {
} ).catch( error => {
console.error( error );
reject( { 'code': 500, 'message': 'ERR_DB' } );
} );
}

View File

@@ -171,27 +171,32 @@
if ( res.status === 200 ) {
let unavailableSeats = {};
res.json().then( data => {
console.log( data );
for ( let seat in data.booked ) {
if ( data.booked[ seat ] ) {
if ( !unavailableSeats[ data.booked[ seat ].component ] ) {
unavailableSeats[ data.booked[ seat ].component ];
}
unavailableSeats[ data.booked[ seat ].component ][ data.booked[ seat ].id ] = 'nav';
}
}
for ( let seat in data.reserved ) {
if ( data.reserved[ seat ] ) {
if ( !unavailableSeats[ data.reserved[ seat ].component ] ) {
unavailableSeats[ data.reserved[ seat ].component ] = {};
}
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 ][ data.user[ seat ].id ] = 'sel';
}
}
let tickets = {};
if ( this.cart[ this.event.eventID ] ) {
@@ -302,10 +307,10 @@
if ( this.cart[ this.event.eventID ] ) {
let tickets = this.cart[ this.event.eventID ][ 'tickets' ];
for ( let seat in tickets ) {
if ( !unavailableSeats[ data.user[ seat ].component ] ) {
unavailableSeats[ data.reserved[ seat ].component ] = {};
if ( !this.unavailableSeats[ data.user[ 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
const options = {
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: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options ).then( res => {
res.text().then( text => {
console.log( text );
} );
} );
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options );
},
standing ( id ) {
const d = this.draggables[ id ];
@@ -445,7 +446,6 @@
}
for ( let group in data.data ) {
if ( !this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] ) {
if ( data.data[ group ] > 0 ) {
const options = {
method: 'post',
@@ -472,20 +472,25 @@
localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
} );
} 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 ];
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 = {
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: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options ).then( res => {
res.text().then( text => {
console.log( text );
} );
} );
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options );
localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
}
}
}
}
@@ -504,8 +509,6 @@
<style scoped>
.parent {
height: 80vh;
/* aspect-ratio: 16 / 9; */
/* -webkit-aspect-ratio: 16 / 9; */
width: 70vw;
top: 17vh;
left: 5vw;
@@ -538,7 +541,6 @@
}
.content-parent {
/* aspect-ratio: 16 / 9; */
width: 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>
</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>
</tr>
</table>
@@ -114,9 +114,10 @@
}
}
},
deleteTicket ( ticketID, event ) {
deleteTicket ( ticketID, event, component ) {
this.ticketToDelete[ 'event' ] = event;
this.ticketToDelete[ 'id' ] = ticketID;
this.ticketToDelete[ 'component' ] = component;
this.$refs.popups.openPopup( 'Do you really want to delete this ticket?', {}, 'confirm' );
},
verifyTicketDelete ( status ) {
@@ -126,6 +127,15 @@
} else {
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 ) );
},