fix a few bugs

This commit is contained in:
2023-10-14 08:00:44 +02:00
parent e61a425ba3
commit b31667a77f
3 changed files with 259 additions and 173 deletions

View File

@@ -90,111 +90,123 @@ class POSTHandler {
if ( call === 'reserveTicket' ) { if ( call === 'reserveTicket' ) {
if ( data.count || data.count === 0 ) { if ( data.count || data.count === 0 ) {
db.getDataSimple( 'temp', 'user_id', session.id ).then( dat => { db.getDataSimple( 'temp', 'user_id', session.id ).then( dat => {
// const id = data.id.slice( 0, data.id.indexOf( '_' ) );
if ( dat[ 0 ] ) { if ( dat[ 0 ] ) {
// data.count is the total amount of tickets currently selected // data.count is the total amount of tickets currently selected
let totalTickets = 0; let totalTickets = 0;
// sum up total of tickets // sum up total of tickets
let info = JSON.parse( dat[ 0 ].data ); let info = JSON.parse( dat[ 0 ].data );
let tickets = info[ data.eventID ]; let tickets = info[ data.eventID ] ?? {};
for ( let ticket in tickets ) { for ( let ticket in tickets ) {
totalTickets += tickets[ ticket ].count; if ( tickets[ ticket ].count ) {
totalTickets += tickets[ ticket ].count;
} else {
totalTickets += 1;
}
} }
// find actual ticket ID and check if there are tickets for this ticketID already
const id = data.id.slice( 0, data.id.indexOf( '_' ) );
// check if total ticket count exceeds max tickets per order // check if total ticket count exceeds max tickets per order
if ( this.settings.maxTickets !== 0 ) { if ( this.settings.maxTickets !== 0 ) {
if ( totalTickets >= this.settings.maxTickets ) { if ( totalTickets >= this.settings.maxTickets ) {
reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } ); reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } );
return;
} }
} }
if ( !this.temporarilySelectedTotals[ session.id ] ) { if ( !this.temporarilySelectedTotals[ session.id ] ) {
this.temporarilySelectedTotals[ session.id ] = {}; this.temporarilySelectedTotals[ session.id ] = {};
}
if ( !this.temporarilySelectedTotals[ session.id ][ data.eventID ] ) {
this.temporarilySelectedTotals[ session.id ][ data.eventID ] = {}; this.temporarilySelectedTotals[ session.id ][ data.eventID ] = {};
} }
if ( !this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] ) {
this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] = 0;
}
// check if total ticket count exceeds max tickets for this event and adjust if necessary
let ticketCount = data.count; let ticketCount = data.count;
// check if total ticket count exceeds max tickets for this event and adjust if necessary
if ( this.events[ data.eventID ].maxTickets == 0 || totalTickets < this.events[ data.eventID ].maxTickets ) { if ( this.events[ data.eventID ].maxTickets == 0 || totalTickets < this.events[ data.eventID ].maxTickets ) {
// check if enough tickets are still available // check if enough tickets are still available
if ( totalTickets < this.ticketTotals[ data.eventID ] - this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ] ) { let isExceeded = false;
if ( data.count > this.ticketTotals[ data.eventID ] ) { if ( ( totalTickets - ( tickets[ data.id ] ? tickets[ data.id ][ 'count' ] : 0 ) + ticketCount ) > this.ticketTotals[ data.eventID ] - ( this.temporaryTotals[ data.eventID ] ?? 0 ) + totalTickets && data.count > 0 ) {
ticketCount = this.ticketTotals[ data.eventID ]; ticketCount = this.ticketTotals[ data.eventID ] - ( this.temporaryTotals[ data.eventID ] ?? 0 ) + ( tickets[ data.id ] ? tickets[ data.id ][ 'count' ] : 0 );
} isExceeded = true;
info[ data.eventID ] = tickets; }
if ( data.count < 1 ) { info[ data.eventID ] = tickets;
if ( Object.keys( info[ data.eventID ] ).length < 1 ) { if ( data.count < 1 ) {
delete info[ data.eventID ]; if ( Object.keys( info[ data.eventID ] ).length < 1 ) {
} else { delete info[ data.eventID ];
delete info[ data.eventID ][ data.id ];
}
} else { } else {
info[ data.eventID ][ data.id ] = data; delete info[ data.eventID ][ data.id ];
} }
db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ); } else {
info[ data.eventID ][ data.id ] = data;
}
db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ).then( () => {
if ( !this.temporarilySelected[ data.eventID ] ) { if ( !this.temporarilySelected[ data.eventID ] ) {
this.temporarilySelected[ data.eventID ] = {}; this.temporarilySelected[ data.eventID ] = {};
} }
if ( !this.temporaryTotals[ data.eventID ] ) { if ( !this.temporaryTotals[ data.eventID ] ) {
this.temporaryTotals[ data.eventID ] = 0; this.temporaryTotals[ data.eventID ] = 0;
} }
this.temporarilySelected[ data.eventID ][ id ] = info; this.temporarilySelected[ data.eventID ][ data.id ] = info[ data.eventID ] ? info[ data.eventID ][ data.id ] : undefined;
this.temporaryTotals[ data.eventID ] -= this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ]; this.temporaryTotals[ data.eventID ] -= this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ];
this.temporaryTotals[ data.eventID ] += ticketCount; this.temporaryTotals[ data.eventID ] += ticketCount;
this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ] = ticketCount; this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] = ticketCount;
this.countFreeSeats(); this.countFreeSeats();
resolve( { 'status': 'ok', 'ticketCount': ticketCount } ); if ( isExceeded ) {
} else { reject( { 'code': 409, 'message': { 'count': ticketCount } } );
reject( { 'code': 409, 'message': 'ERR_ALL_OCCUPIED' } ); } else {
} resolve( { 'status': 'ok' } );
}
} );
} else { } else {
reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } ); reject( { 'code': 418, 'message': { 'count': this.settings.maxTickets } } );
} }
} else { } else {
// find actual ticket ID and check if there are tickets for this ticketID already
const id = data.id.slice( 0, data.id.indexOf( '_' ) );
if ( !this.temporarilySelectedTotals[ session.id ] ) { if ( !this.temporarilySelectedTotals[ session.id ] ) {
this.temporarilySelectedTotals[ session.id ] = {}; this.temporarilySelectedTotals[ session.id ] = {};
}
if ( !this.temporarilySelectedTotals[ session.id ][ data.eventID ] ) {
this.temporarilySelectedTotals[ session.id ][ data.eventID ] = {}; this.temporarilySelectedTotals[ session.id ][ data.eventID ] = {};
this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ] = 0; }
if ( !this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] ) {
this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] = 0;
} }
let ticketCount = data.count; let ticketCount = data.count;
// check if total ticket count exceeds max tickets for this event and adjust if necessary
if ( this.events[ data.eventID ].maxTickets == 0 || ticketCount < this.events[ data.eventID ].maxTickets ) { if ( this.events[ data.eventID ].maxTickets == 0 || ticketCount < this.events[ data.eventID ].maxTickets ) {
// check if enough tickets are still available // check if enough tickets are still available
if ( ticketCount < parseInt( this.ticketTotals[ data.eventID ] ) - parseInt( this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ] ) ) { let isExceeded = false;
if ( data.count > this.ticketTotals[ data.eventID ] ) { if ( ticketCount > this.ticketTotals[ data.eventID ] - ( this.temporaryTotals[ data.eventID ] ?? 0 ) + this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] && data.count > 0 ) {
ticketCount = this.ticketTotals[ data.eventID ]; ticketCount = this.ticketTotals[ data.eventID ] - ( this.temporaryTotals[ data.eventID ] ?? 0 ) + this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ];
} isExceeded = true;
}
// Create details let info = {};
let info = {}; info[ data.eventID ] = {};
info[ data.eventID ] = {}; info[ data.eventID ][ data.id ] = data;
info[ data.eventID ][ data.id ] = data; db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ).then( () => {
if ( !this.temporarilySelected[ data.eventID ] ) { if ( !this.temporarilySelected[ data.eventID ] ) {
this.temporarilySelected[ data.eventID ] = {}; this.temporarilySelected[ data.eventID ] = {};
} }
if ( !this.temporaryTotals[ data.eventID ] ) { if ( !this.temporaryTotals[ data.eventID ] ) {
this.temporaryTotals[ data.eventID ] = 0; this.temporaryTotals[ data.eventID ] = 0;
} }
db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ); this.temporarilySelected[ data.eventID ][ data.id ] = info[ data.eventID ] ? info[ data.eventID ][ data.id ] : undefined;
this.temporarilySelected[ data.eventID ][ id ] = info; this.temporaryTotals[ data.eventID ] -= this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ];
this.temporaryTotals[ data.eventID ] -= this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ];
this.temporaryTotals[ data.eventID ] += ticketCount; this.temporaryTotals[ data.eventID ] += ticketCount;
this.temporarilySelectedTotals[ session.id ][ data.eventID ][ id ] = ticketCount; this.temporarilySelectedTotals[ session.id ][ data.eventID ][ data.id ] = ticketCount;
this.countFreeSeats(); this.countFreeSeats();
resolve( 'ok' ); if ( isExceeded ) {
} else { reject( { 'code': 409, 'message': { 'count': ticketCount } } );
reject( { 'code': 409, 'message': 'ERR_ALL_OCCUPIED' } ); } else {
} resolve( { 'status': 'ok' } );
}
} );
} else { } else {
reject( { 'code': 418, 'message': 'ERR_TOO_MANY_TICKETS' } ); reject( { 'code': 418, 'message': { 'count': this.settings.maxTickets } } );
} }
} }
} ); } );
@@ -220,6 +232,8 @@ class POSTHandler {
db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ).then( () => { db.writeDataSimple( 'temp', 'user_id', session.id, { 'user_id': session.id, 'timestamp': new Date().toString(), 'data': JSON.stringify( info ) } ).then( () => {
if ( !this.temporarilySelectedTotals[ session.id ] ) { if ( !this.temporarilySelectedTotals[ session.id ] ) {
this.temporarilySelectedTotals[ session.id ] = {}; this.temporarilySelectedTotals[ session.id ] = {};
}
if ( !this.temporarilySelectedTotals[ session.id ][ data.eventID ] ) {
this.temporarilySelectedTotals[ session.id ][ data.eventID ] = {}; this.temporarilySelectedTotals[ session.id ][ data.eventID ] = {};
} }
if ( !this.temporaryTotals[ data.eventID ] ) { if ( !this.temporaryTotals[ data.eventID ] ) {
@@ -299,7 +313,7 @@ class POSTHandler {
} }
getReservedSeats ( event ) { getReservedSeats ( event ) {
return this.allSelectedSeats[ event ] ? Object.values( Object.assign( {}, this.allSelectedSeats[ event ], this.temporarilySelected[ event ] ) ) : {}; return this.allSelectedSeats[ event ] ? Object.values( Object.assign( {}, this.allSelectedSeats[ event ], this.temporarilySelected[ event ] ) ) : ( this.temporarilySelected[ event ] ?? {} );
} }
countFreeSeats() { countFreeSeats() {
@@ -310,6 +324,7 @@ class POSTHandler {
for ( let el in this.temporaryTotals ) { for ( let el in this.temporaryTotals ) {
this.freeSeats[ el ] -= this.temporaryTotals[ el ]; this.freeSeats[ el ] -= this.temporaryTotals[ el ];
} }
this.ticketTotals[ 'test3' ] = 2;
} }
getFreeSeatsCount() { getFreeSeatsCount() {

View File

@@ -100,6 +100,7 @@ export default {
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.reserved ) { for ( let seat in data.reserved ) {
if ( data.reserved[ seat ] ) { if ( data.reserved[ seat ] ) {
if ( !unavailableSeats[ data.reserved[ seat ].component ] ) { if ( !unavailableSeats[ data.reserved[ seat ].component ] ) {
@@ -138,6 +139,17 @@ export default {
allSeatsAvailable = false; allSeatsAvailable = false;
} }
// Create selectedTickets object
if ( this.cart[ this.event.eventID ] ) {
for ( let ticket in this.cart[ this.event.eventID ][ 'tickets' ] ) {
if ( this.cart[ this.event.eventID ][ 'tickets' ][ ticket ][ 'count' ] ) {
this.selectedTickets[ this.cart[ this.event.eventID ][ 'tickets' ][ ticket ][ 'id' ] ] = this.cart[ this.event.eventID ][ 'tickets' ][ ticket ][ 'count' ];
} else {
this.selectedTickets[ this.cart[ this.event.eventID ][ 'tickets' ][ ticket ][ 'id' ] ] = 0;
}
}
}
this.unavailableSeats = unavailableSeats; this.unavailableSeats = unavailableSeats;
if ( !allSeatsAvailable ) { if ( !allSeatsAvailable ) {
@@ -153,87 +165,118 @@ export default {
} ); } );
}, },
cartHandling () { cartHandling () {
for ( let ticket in this.selectedTickets ) { let tickets = Object.keys( this.selectedTickets );
let category = ''; let ticket, ready = true;
const ticketSlice = ticket.slice( 0, ticket.indexOf( '_' ) ); let postInterval = setInterval( () => {
for ( let letter in ticketSlice ) { if ( ready ) {
if ( !isNaN( ticketSlice[ letter ] ) ) { ready = false;
category += parseInt( ticketSlice[ letter ] ); if ( tickets.length > 0 ) {
ticket = tickets.pop();
let category = '';
const ticketSlice = ticket.slice( 0, ticket.indexOf( '_' ) );
for ( let letter in ticketSlice ) {
if ( !isNaN( ticketSlice[ letter ] ) ) {
category += parseInt( ticketSlice[ letter ] );
}
}
const options = {
method: 'post',
body: JSON.stringify( {
'id': ticket,
'component': 1,
'ticketOption': ticket.substring( ticket.indexOf( '_' ) + 1 ),
'eventID': this.event.eventID,
'count': this.selectedTickets[ ticket ],
'category': category,
'name': this.event.categories[ category ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')',
} ),
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/API/reserveTicket', options ).then( res => {
ready = true;
if ( !this.cart[ this.event.eventID ] ) {
this.cart[ this.event.eventID ] = { 'displayName': this.event.name, 'tickets': {}, 'eventID': this.event.eventID };
}
if ( res.status === 200 ) {
// add item to cart
if ( this.selectedTickets[ ticket ] < 1 ) {
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length <= 1 ) {
try {
delete this.cart[ this.event.eventID ];
} catch {
console.log( 'element nonexistent' );
}
} else {
delete this.cart[ this.event.eventID ][ 'tickets' ][ ticket ];
}
} else {
this.cart[ this.event.eventID ][ 'tickets' ][ ticket ] = {
'displayName': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')',
'price': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].price[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ],
'id': ticket,
'count': this.selectedTickets[ ticket ],
'comp': 1,
};
}
} else if ( res.status === 409 ) {
res.json().then( dat => {
if ( !this.cart[ this.event.eventID ] ) {
this.cart[ this.event.eventID ] = { 'displayName': this.event.name, 'tickets': {}, 'eventID': this.event.eventID };
}
if ( dat.count < 1 ) {
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length <= 1 ) {
try {
delete this.cart[ this.event.eventID ];
} catch {
console.log( 'element nonexistent' );
}
} else {
delete this.cart[ this.event.eventID ][ 'tickets' ][ ticket ];
}
} else {
this.cart[ this.event.eventID ][ 'tickets' ][ ticket ] = {
'displayName': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')',
'price': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].price[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ],
'id': ticket,
'count': dat.count,
'comp': 1,
};
}
this.selectedTickets[ ticket ] = dat.count;
} );
setTimeout( () => {
this.$refs.popups.openPopup( 'Unfortunately, you have selected more tickets than were still available. The maximum amount of tickets that are available have been selected for you automatically. We are sorry for the inconvenience.', {}, 'string' );
}, 300 );
} else if ( res.status === 418 ) {
res.json().then( dat => {
this.selectedTickets[ ticket ] = dat.count;
} );
setTimeout( () => {
this.$refs.popups.openPopup( 'We are sorry, but you have already selected the maximum amount of tickets you can buy at once.', {}, 'string' );
}, 300 );
}
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length < 1 ) {
delete this.cart[ this.event.eventID ];
}
this.$refs.cart.calculateTotal();
localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
} );
} else {
clearInterval( postInterval );
} }
} }
const options = { } );
method: 'post',
body: JSON.stringify( {
'id': ticket,
'component': 1,
'ticketOption': ticket.substring( ticket.indexOf( '_' ) + 1 ),
'eventID': this.event.eventID,
'count': this.selectedTickets[ ticket ],
'category': category,
'name': this.event.categories[ category ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')',
} ),
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/API/reserveTicket', options ).then( res => {
if ( !this.cart[ this.event.eventID ] ) {
this.cart[ this.event.eventID ] = { 'displayName': this.event.name, 'tickets': {}, 'eventID': this.event.eventID };
}
if ( res.status === 200 ) {
// add item to cart
if ( this.selectedTickets[ ticket ] < 1 ) {
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length < 1 ) {
try {
delete this.cart[ this.event.eventID ];
} catch {
console.log( 'element nonexistent' );
}
} else {
delete this.cart[ this.event.eventID ][ 'tickets' ][ ticket ];
}
} else {
this.cart[ this.event.eventID ][ 'tickets' ][ ticket ] = {
'displayName': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')',
'price': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].price[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ],
'id': ticket,
'count': this.selectedTickets[ ticket ],
'comp': 1,
};
}
} else if ( res.status === 409 ) {
res.json().then( dat => {
this.cart[ this.event.eventID ][ 'tickets' ][ ticket ] = {
'displayName': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].name + ' (' + this.event.ageGroups[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ].name + ')',
'price': this.event.categories[ ticket.slice( ticket.indexOf( '_' ) - 1, ticket.indexOf( '_' ) ) ].price[ ticket.substring( ticket.indexOf( '_' ) + 1 ) ],
'id': ticket,
'count': dat.count,
'comp': 1,
};
} );
setTimeout( () => {
this.$refs.popups.openPopup( 'Unfortunately, you have selected more tickets than were still available. The maximum amount of tickets that are available have been selected for you automatically. We are sorry for the inconvenience.', {}, 'string' );
}, 300 );
} else if ( res.status === 418 ) {
setTimeout( () => {
this.$refs.popups.openPopup( 'We are sorry, but you have already selected the maximum amount of tickets you can buy at once.', {}, 'string' );
}, 300 );
}
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length < 1 ) {
delete this.cart[ this.event.eventID ];
}
this.$refs.cart.calculateTotal();
localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
} );
}
}, },
loadTickets () { loadTickets () {
fetch( '/getAPI/getEvent?event=' + sessionStorage.getItem( 'selectedTicket' ) ).then( res => { fetch( '/getAPI/getEvent?event=' + sessionStorage.getItem( 'selectedTicket' ) ).then( res => {
if ( res.status === 200 ) { if ( res.status === 200 ) {
res.json().then( json => { res.json().then( json => {
this.event = json ?? {}; this.event = json ?? {};
this.seatChecks();
} ); } );
} }
} ); } );
@@ -245,7 +288,6 @@ export default {
}, 1 ); }, 1 );
this.cart = localStorage.getItem( 'cart' ) ? JSON.parse( localStorage.getItem( 'cart' ) ): {}; this.cart = localStorage.getItem( 'cart' ) ? JSON.parse( localStorage.getItem( 'cart' ) ): {};
this.loadTickets(); this.loadTickets();
this.seatChecks();
} }
}; };
</script> </script>

View File

@@ -441,61 +441,90 @@ export default {
this.cart[ this.event.eventID ] = { 'displayName': this.event.name, 'tickets': {}, 'eventID': this.event.eventID }; this.cart[ this.event.eventID ] = { 'displayName': this.event.name, 'tickets': {}, 'eventID': this.event.eventID };
} }
for ( let group in data.data ) { let groups = Object.keys( data.data );
if ( data.data[ group ] > 0 ) { let group, ready = true;
const options = { let postInterval = setInterval( () => {
method: 'post', if ( ready ) {
body: JSON.stringify( { 'id': 'ticket' + data.component + '_' + group, 'component': data.component, 'ticketOption': group, 'eventID': this.event.eventID, 'count': data.data[ group ], 'category': this.draggables[ data.component ].category, 'name': 'Ticket ' + data.component + ' (' + this.event.ageGroups[ group ].name + ')' } ), ready = false;
headers: { if ( groups.length > 0 ) {
'Content-Type': 'application/json', group = groups.pop();
'charset': 'utf-8' if ( data.data[ group ] > 0 ) {
}
};
fetch( localStorage.getItem( 'url' ) + '/API/reserveTicket', options ).then( res => {
if ( res.status === 200 ) {
this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] = { 'displayName': 'Ticket ' + data.component + ' (' + this.event.ageGroups[ group ].name + ')', 'price': this.event.categories[ this.draggables[ data.component ].category ].price[ group ], 'id': 'ticket' + data.component + '_' + group, 'count': data.data[ group ], 'comp': data.component };
} else if ( res.status === 409 ) {
res.json().then( dat => {
this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] = { 'displayName': 'Ticket ' + data.component + ' (' + this.event.ageGroups[ group ].name + ')', 'price': this.event.categories[ this.draggables[ data.component ].category ].price[ group ], 'id': 'ticket' + data.component + '_' + group, 'count': dat.count, 'comp': data.component };
} );
setTimeout( () => {
this.$refs.popups.openPopup( 'Unfortunately, you have selected more tickets than were still available. The maximum amount of tickets that are available have been selected for you automatically. We are sorry for the inconvenience.', {}, 'string' );
}, 300 );
} else if ( res.status === 418 ) {
setTimeout( () => {
this.$refs.popups.openPopup( 'We are sorry, but you have already selected the maximum amount of tickets you can buy at once.', {}, 'string' );
}, 300 );
}
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length < 1 ) {
delete this.cart[ this.event.eventID ];
}
this.$refs.cart.calculateTotal();
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 = { const options = {
method: 'post', method: 'post',
body: JSON.stringify( { 'id': 'ticket' + data.component + '_' + group, 'eventID': this.event.eventID, 'component': data.component } ), body: JSON.stringify( { 'id': 'ticket' + data.component + '_' + group, 'component': data.component, 'ticketOption': group, 'eventID': this.event.eventID, 'count': data.data[ group ], 'category': this.draggables[ data.component ].category, 'name': 'Ticket ' + data.component + ' (' + this.event.ageGroups[ group ].name + ')' } ),
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
'charset': 'utf-8' 'charset': 'utf-8'
} }
}; };
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options ); fetch( localStorage.getItem( 'url' ) + '/API/reserveTicket', options ).then( res => {
localStorage.setItem( 'cart', JSON.stringify( this.cart ) ); ready = true;
if ( res.status === 200 ) {
this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] = { 'displayName': 'Ticket ' + data.component + ' (' + this.event.ageGroups[ group ].name + ')', 'price': this.event.categories[ this.draggables[ data.component ].category ].price[ group ], 'id': 'ticket' + data.component + '_' + group, 'count': data.data[ group ], 'comp': data.component };
} else if ( res.status === 409 ) {
res.json().then( dat => {
if ( dat.count < 1 ) {
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length <= 1 ) {
try {
delete this.cart[ this.event.eventID ];
} catch {
console.log( 'element nonexistent' );
}
} else {
delete this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ];
}
}
this.cart[ this.event.eventID ][ 'tickets' ][ 'ticket' + data.component + '_' + group ] = { 'displayName': 'Ticket ' + data.component + ' (' + this.event.ageGroups[ group ].name + ')', 'price': this.event.categories[ this.draggables[ data.component ].category ].price[ group ], 'id': 'ticket' + data.component + '_' + group, 'count': dat.count, 'comp': data.component };
} );
setTimeout( () => {
this.$refs.popups.openPopup( 'Unfortunately, you have selected more tickets than were still available. The maximum amount of tickets that are available have been selected for you automatically. We are sorry for the inconvenience.', {}, 'string' );
}, 300 );
} else if ( res.status === 418 ) {
setTimeout( () => {
this.$refs.popups.openPopup( 'We are sorry, but you have already selected the maximum amount of tickets you can buy at once.', {}, 'string' );
}, 300 );
}
if ( Object.keys( this.cart[ this.event.eventID ][ 'tickets' ] ).length < 1 ) {
delete this.cart[ this.event.eventID ];
}
this.$refs.cart.calculateTotal();
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, 'component': data.component } ),
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8'
}
};
fetch( localStorage.getItem( 'url' ) + '/API/deselectTicket', options ).then( res => {
ready = true;
} );
localStorage.setItem( 'cart', JSON.stringify( this.cart ) );
} else {
ready = true;
}
} else {
ready = true;
}
} }
} else {
clearInterval( postInterval );
} }
} }
} }, 250 );
} }
}, },
created () { created () {