working occupied seats

This commit is contained in:
2023-07-26 16:45:15 +02:00
parent 7716f56ea1
commit 15217c640a
5 changed files with 44 additions and 33 deletions

View File

@@ -30,7 +30,6 @@ class GETHandler {
if ( query.event ) { if ( query.event ) {
db.getJSONDataSimple( 'booked', query.event ).then( data => { db.getJSONDataSimple( 'booked', query.event ).then( data => {
db.getDataSimple( 'temp', 'user_id', session.id ).then( dat => { db.getDataSimple( 'temp', 'user_id', session.id ).then( dat => {
console.log( dat );
resolve( { 'booked': data ?? {}, 'user': dat[ 0 ] ? JSON.parse( dat[ 0 ].data )[ query.event ] ?? {} : {} } ); resolve( { 'booked': data ?? {}, 'user': dat[ 0 ] ? JSON.parse( dat[ 0 ].data )[ query.event ] ?? {} : {} } );
} ); } );
} ).catch( error => { } ).catch( error => {

View File

@@ -11,7 +11,7 @@ const db = require( '../db/db.js' );
class POSTHandler { class POSTHandler {
constructor () { constructor () {
this.allSelectedSeats = { 'TestEvent2': [ 'secAr1s1' ] }; this.allSelectedSeats = { 'TestEvent2': [ { 'id': 'secAr1s1', 'component': 1 } ] };
} }
// Add lang in the future // Add lang in the future
@@ -31,7 +31,7 @@ class POSTHandler {
if ( this.allSelectedSeats[ data.eventID ].includes( data.id ) ) { if ( this.allSelectedSeats[ data.eventID ].includes( data.id ) ) {
reject( { 'code': 409, 'message': 'Seat already selected' } ); reject( { 'code': 409, 'message': 'Seat already selected' } );
} else { } else {
this.allSelectedSeats[ data.eventID ].push( data.id ); this.allSelectedSeats[ data.eventID ].push( { 'id': data.id, 'component': data.component } );
transmit[ data.eventID ][ data.id ] = data; transmit[ data.eventID ][ data.id ] = data;
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' );
@@ -69,8 +69,8 @@ class POSTHandler {
} ); } );
} }
getReservedSeats () { getReservedSeats ( event ) {
return this.allSelectedSeats; return this.allSelectedSeats[ event ];
} }
} }

View File

@@ -21,7 +21,7 @@ module.exports = ( app ) => {
getHandler.handleCall( req.params.call, req.query, req.session ).then( data => { getHandler.handleCall( req.params.call, req.query, req.session ).then( data => {
if ( req.params.call === 'getReservedSeats' ) { if ( req.params.call === 'getReservedSeats' ) {
let dat = data; let dat = data;
dat[ 'reserved' ] = postHandler.getReservedSeats(); dat[ 'reserved' ] = postHandler.getReservedSeats( req.query.event );
res.send( dat ); res.send( dat );
} else { } else {
res.send( data ); res.send( data );

View File

@@ -59,6 +59,10 @@ export default {
id: { id: {
type: Number, type: Number,
"default": 1, "default": 1,
},
unavailable: {
type: Object,
"default": {}
} }
}, },
data () { data () {
@@ -94,9 +98,9 @@ export default {
this.seats[ row ][ n ][ 'style' ] += `color: ${ this.data.categoryInfo.color.fg ? this.data.categoryInfo.color.fg : 'black' }; background-color: ${ this.data.categoryInfo.color.bg ? this.data.categoryInfo.color.bg : 'rgba( 0, 0, 0, 0 )' }`; this.seats[ row ][ n ][ 'style' ] += `color: ${ this.data.categoryInfo.color.fg ? this.data.categoryInfo.color.fg : 'black' }; background-color: ${ this.data.categoryInfo.color.bg ? this.data.categoryInfo.color.bg : 'rgba( 0, 0, 0, 0 )' }`;
} }
if ( this.data.unavailableSeats ) { if ( this.unavailable[ this.id ] ) {
if ( this.data.unavailableSeats[ this.seats[ row ][ n ][ 'id' ] ] ) { if ( this.unavailable[ this.id ][ this.seats[ row ][ n ][ 'id' ] ] ) {
this.seats[ row ][ n ][ 'status' ] = this.data.unavailableSeats[ this.seats[ row ][ n ][ 'id' ] ]; this.seats[ row ][ n ][ 'status' ] = this.unavailable[ this.id ][ this.seats[ row ][ n ][ 'id' ] ];
} }
} }
} }
@@ -127,6 +131,7 @@ export default {
}, },
watch: { watch: {
scaleFactor() { scaleFactor() {
console.log( 'scaleFactor' );
this.setScaleFactor(); this.setScaleFactor();
}, },
h() { h() {
@@ -138,7 +143,8 @@ export default {
origin() { origin() {
this.calculateChairs(); this.calculateChairs();
}, },
data () { unavailable() {
console.log( 'updating' );
this.calculateChairs(); this.calculateChairs();
} }
}, },

View File

@@ -17,17 +17,17 @@
<circularSeatplanComponent v-if="draggable.shape == 'circular' && draggable.type == 'seat'" :ref="'component' + draggable.id" <circularSeatplanComponent v-if="draggable.shape == 'circular' && draggable.type == 'seat'" :ref="'component' + draggable.id"
:scale-factor="scaleFactor" :w="draggable.w" :h="draggable.h" :origin="draggable.origin" :starting-row="draggable.startingRow" :scale-factor="scaleFactor" :w="draggable.w" :h="draggable.h" :origin="draggable.origin" :starting-row="draggable.startingRow"
:data="draggable.data" :id="draggable.id" :data="draggable.data" :id="draggable.id" :unavailable="unavailableSeats"
@seatSelected="( seat ) => { seatSelected( seat ) }" @seatDeselected="( seat ) => { seatDeselected( seat ) }"></circularSeatplanComponent> @seatSelected="( seat ) => { seatSelected( seat ) }" @seatDeselected="( seat ) => { seatDeselected( seat ) }"></circularSeatplanComponent>
<trapezoidSeatplanComponent v-else-if="draggable.shape == 'trapezoid' && draggable.type == 'seat'" :ref="'component' + draggable.id" <trapezoidSeatplanComponent v-else-if="draggable.shape == 'trapezoid' && draggable.type == 'seat'" :ref="'component' + draggable.id"
:scale-factor="scaleFactor" :w="draggable.w" :h="draggable.h" :origin="draggable.origin" :starting-row="draggable.startingRow" :scale-factor="scaleFactor" :w="draggable.w" :h="draggable.h" :origin="draggable.origin" :starting-row="draggable.startingRow"
:data="draggable.data" :id="draggable.id" :data="draggable.data" :id="draggable.id" :unavailable="unavailableSeats"
@seatSelected="( seat ) => { seatSelected( seat ) }" @seatDeselected="( seat ) => { seatDeselected( seat ) }"></trapezoidSeatplanComponent> @seatSelected="( seat ) => { seatSelected( seat ) }" @seatDeselected="( seat ) => { seatDeselected( seat ) }"></trapezoidSeatplanComponent>
<rectangularSeatplanComponent v-else-if="draggable.shape == 'rectangular' && draggable.type == 'seat'" :ref="'component' + draggable.id" <rectangularSeatplanComponent v-else-if="draggable.shape == 'rectangular' && draggable.type == 'seat'" :ref="'component' + draggable.id"
:scale-factor="scaleFactor" :w="draggable.w" :h="draggable.h" :origin="draggable.origin" :starting-row="draggable.startingRow" :scale-factor="scaleFactor" :w="draggable.w" :h="draggable.h" :origin="draggable.origin" :starting-row="draggable.startingRow"
:data="draggable.data" :id="draggable.id" :data="draggable.data" :id="draggable.id" :unavailable="unavailableSeats"
@seatSelected="( seat ) => { seatSelected( seat ) }" @seatDeselected="( seat ) => { seatDeselected( seat ) }"></rectangularSeatplanComponent> @seatSelected="( seat ) => { seatSelected( seat ) }" @seatDeselected="( seat ) => { seatDeselected( seat ) }"></rectangularSeatplanComponent>
<stagesSeatplanComponent :ref="'component' + draggable.id" v-else-if="draggable.type == 'stage'" :origin="draggable.origin" :shape="draggable.shape"></stagesSeatplanComponent> <stagesSeatplanComponent :ref="'component' + draggable.id" v-else-if="draggable.type == 'stage'" :origin="draggable.origin" :shape="draggable.shape"></stagesSeatplanComponent>
@@ -90,6 +90,7 @@
generalSettings: { 'namingScheme': 'numeric' }, generalSettings: { 'namingScheme': 'numeric' },
selectedSeat: {}, selectedSeat: {},
cart: {}, cart: {},
unavailableSeats: {},
} }
}, },
methods: { methods: {
@@ -151,7 +152,7 @@
} }
for ( let element in this.draggables ) { for ( let element in this.draggables ) {
this.draggables[ element ][ 'data' ] = { 'sector': this.draggables[ element ][ 'sector' ], 'unavailableSeats': {}, 'categoryInfo': { 'pricing': categoryDetails[ this.draggables[ element ][ 'category' ] ] } }; this.draggables[ element ][ 'data' ] = { 'sector': this.draggables[ element ][ 'sector' ], 'categoryInfo': { 'pricing': categoryDetails[ this.draggables[ element ][ 'category' ] ] } };
} }
this.seatChecks(); this.seatChecks();
@@ -162,27 +163,38 @@
}, 1 ); }, 1 );
}, },
seatChecks () { seatChecks () {
// TODO: Check if all seats are available
// Method: Server sends all user selected seats + all selected seats. If seat is in both
// then selected, if just in all selected, taken, else available.
let self = this; let self = this;
let allSeatsAvailable = true; let allSeatsAvailable = true;
fetch( localStorage.getItem( 'url' ) + '/getAPI/getReservedSeats?event=' + this.event.name ).then( res => { fetch( localStorage.getItem( 'url' ) + '/getAPI/getReservedSeats?event=' + this.event.name ).then( res => {
if ( res.status === 200 ) { if ( res.status === 200 ) {
let unavailableSeats = {};
res.json().then( data => { res.json().then( data => {
for ( let seat in data.booked ) {
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 ( !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 ( !unavailableSeats[ data.user[ seat ].component ] ) {
unavailableSeats[ data.reserved[ seat ].component ] = {};
}
unavailableSeats[ data.user[ seat ].component ][ data.user[ seat ].id ] = 'sel';
}
let tickets = {}; let tickets = {};
if ( this.cart[ this.event.name ] ) { if ( this.cart[ this.event.name ] ) {
tickets = this.cart[ this.event.name ][ 'tickets' ]; tickets = this.cart[ this.event.name ][ 'tickets' ];
} }
if ( Object.keys( data.booked ).length > 0 && Object.keys( data.reserved ).length > 0 ) {
for ( let ticket in data.booked ) {
this.draggables[ data.booked[ ticket ].component ][ 'data' ][ 'unavailableSeats' ][ ticket ] = 'nav';
}
for ( let ticket in data.reserved ) {
this.draggables[ data.reserved[ ticket ] ][ 'data' ][ 'unavailableSeats' ][ ticket ] = 'nav';
}
}
if ( data.user ) { if ( data.user ) {
for ( let element in tickets ) { for ( let element in tickets ) {
@@ -200,9 +212,7 @@
allSeatsAvailable = false; allSeatsAvailable = false;
} }
for ( let ticket in tickets ) { this.unavailableSeats = unavailableSeats;
this.draggables[ tickets[ ticket ].comp ][ 'data' ][ 'unavailableSeats' ][ ticket ] = 'sel';
}
if ( !allSeatsAvailable ) { if ( !allSeatsAvailable ) {
setTimeout( () => { setTimeout( () => {
@@ -210,10 +220,6 @@
}, 500 ); }, 500 );
localStorage.setItem( 'cart', JSON.stringify( this.cart ) ); localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
} }
sessionStorage.setItem( 'seatplan', JSON.stringify( this.scaleDown( this.draggables ) ) );
// this.loadSeatplan();
} ); } );
} else { } else {
console.error( 'unable to load' ); console.error( 'unable to load' );