mirror of
https://github.com/janishutz/libreevent.git
synced 2025-11-25 05:14:23 +00:00
working occupied seats
This commit is contained in:
@@ -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 => {
|
||||||
|
|||||||
@@ -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 ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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' );
|
||||||
|
|||||||
Reference in New Issue
Block a user