diff --git a/src/webapp/src/App.vue b/src/webapp/src/App.vue index d217c11..e91a678 100644 --- a/src/webapp/src/App.vue +++ b/src/webapp/src/App.vue @@ -35,6 +35,7 @@ --accent-color: #42b983; --hover-color: rgb(83, 83, 83); --accent-background-hover: #4380a8; + --overlay-color: rgba(104, 104, 104, 0.575); --inactive-color: rgb(190, 190, 190); --highlight-backdrop: rgb(85, 63, 207); } @@ -48,6 +49,7 @@ --accent-color: #42b983; --hover-color: rgb(83, 83, 83); --accent-background-hover: #4380a8; + --overlay-color: rgba(104, 104, 104, 0.575); --inactive-color: rgb(190, 190, 190); --highlight-backdrop: rgb(85, 63, 207); } diff --git a/src/webapp/src/components/noseatplan.vue b/src/webapp/src/components/noseatplan.vue index 1fc271a..9f31621 100644 --- a/src/webapp/src/components/noseatplan.vue +++ b/src/webapp/src/components/noseatplan.vue @@ -10,7 +10,7 @@

{{ event.name }}

- {{ seating[ ticket[ 'row' ] ][ 'content' ][ ticket[ 'seat' ] ][ 'name' ] }} ({{ eventInfo[ 'ageGroups' ][ ticket[ 'categoryID' ] ][ 'name' ] }}) + {{ ticket.name }} ({{ ticket.ageGroup }}) {{ eventInfo[ 'currency' ] }} {{ ticket[ 'price' ] }} @@ -20,7 +20,7 @@

Available tickets

- {{ ticket }} + {{ ticket.name }} ({{ eventInfo[ 'categories' ][ ticket.category ][ 'name' ] }}) - Starting at {{ eventInfo.currency }} {{ eventInfo.categories[ ticket.category ][ 'price' ][ '1' ] }}
@@ -48,7 +48,7 @@ export default { }, data () { return { - tickets: {}, + tickets: { 'ticket1': { 'name': 'Ticket 1', 'id': 'ticket1', 'category': 1 }, 'ticket2': { 'name': 'Ticket 2', 'id': 'ticket2', 'category': 2 } }, eventInfo: { 'name': 'TestEvent', 'location': 'TestLocation', 'date': 'TestDate', 'RoomName': 'TestRoom', 'currency': 'CHF', 'categories': { '1': { 'price': { '1':25, '2':35 }, 'bg': 'black', 'fg': 'white', 'name': 'Category 1' }, '2': { 'price': { '1':15, '2':20 }, 'bg': 'green', 'fg': 'white', 'name': 'Category 2' } }, 'ageGroups': { '1':{ 'id': 1, 'name':'Child', 'age':'0 - 15.99' }, '2':{ 'id': 2, 'name': 'Adult', 'age': null } }, 'ageGroupCount':2, 'stage': true }, selectedSeats: {}, pricingCurrentlySelected: {}, @@ -85,8 +85,15 @@ export default { }, 500 ); } - cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] = data; - sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + + // check if no ticket selected and prevent writing if no ticket + // selected to not show too many events + let isEmpty = sessionStorage.getItem( 'selectedTicket' ) ? false : true; + + if ( !isEmpty ) { + cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] = data; + sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + } this.selectedSeats = cart; this.sumUp(); @@ -107,11 +114,18 @@ export default { back[ 'total' ] = price; back[ 'currency' ] = this.eventInfo.currency; - sessionStorage.setItem( 'backend', JSON.stringify( back ) ); - this.total = price; - - sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + + + // check if no ticket selected and prevent writing if no ticket + // selected to not show too many events + let isEmpty = sessionStorage.getItem( 'selectedTicket' ) ? false : true; + + if ( !isEmpty ) { + console.log( 'writing' ); + sessionStorage.setItem( 'backend', JSON.stringify( back ) ); + sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + } }, closePlaceNotAvailablePopup () { $( '#placeNotAvailable' ).hide( 300 ); diff --git a/src/webapp/src/components/seatplan.vue b/src/webapp/src/components/seatplan.vue index 29dbe96..124cd92 100644 --- a/src/webapp/src/components/seatplan.vue +++ b/src/webapp/src/components/seatplan.vue @@ -6,11 +6,11 @@

{{ eventInfo.location }}

Selected tickets

- +

{{ event.name }}

- +
{{ seating[ ticket[ 'row' ] ][ 'content' ][ ticket[ 'seat' ] ][ 'name' ] }} ({{ eventInfo[ 'ageGroups' ][ ticket[ 'categoryID' ] ][ 'name' ] }}){{ ticket.name }} ({{ ticket.ageGroup }}) {{ eventInfo[ 'currency' ] }} {{ ticket[ 'price' ] }}
@@ -85,7 +85,7 @@ export default { data () { return { seating: { 'r1': { 'name': 'Row 1', 'id': 'r1', 'content':{ 'S1':{ 'name': 'Seat 1', 'id': 'S1', 'available': true, 'selected': false, 'category':'1' } } }, 'r2': { 'name': 'Row 2', 'id': 'r2', 'content':{ 'S1':{ 'name': 'S1', 'id': 'S1', 'available': true, 'selected': false, 'category':'2' } } } }, - eventInfo: { 'name': 'TestEvent', 'location': 'TestLocation', 'date': 'TestDate', 'RoomName': 'TestRoom', 'currency': 'CHF', 'categories': { '1': { 'price': { '1':25, '2':35 }, 'bg': 'black', 'fg': 'white', 'name': 'Category 1' }, '2': { 'price': { '1':15, '2':20 }, 'bg': 'green', 'fg': 'white', 'name': 'Category 2' } }, 'ageGroups': { '1':{ 'id': 1, 'name':'Child', 'age':'0 - 15.99' }, '2':{ 'id': 2, 'name': 'Adult', 'age': null } }, 'ageGroupCount':2, 'stage': true }, + eventInfo: { 'name': 'TestEvent2', 'location': 'TestLocation2', 'date': 'TestDate2', 'RoomName': 'TestRoom2', 'currency': 'CHF', 'categories': { '1': { 'price': { '1':25, '2':35 }, 'bg': 'black', 'fg': 'white', 'name': 'Category 1' }, '2': { 'price': { '1':15, '2':20 }, 'bg': 'green', 'fg': 'white', 'name': 'Category 2' } }, 'ageGroups': { '1':{ 'id': 1, 'name':'Child', 'age':'0 - 15.99' }, '2':{ 'id': 2, 'name': 'Adult', 'age': null } }, 'ageGroupCount': 2, 'stage': true, 'maxTickets': 2 }, selectedSeats: {}, pricingCurrentlySelected: {}, total: 0, @@ -96,12 +96,12 @@ export default { /* This function is called whenever the data on the webpage is to be reloaded */ - + // load data from cart and set up cart if not available let cart = sessionStorage.getItem( 'cart' ) ? JSON.parse( sessionStorage.getItem( 'cart' ) ) : {}; cart[ this.ticketID ?? 'default' ] = cart[ this.ticketID ?? 'default' ] ? cart[ this.ticketID ?? 'default' ] : { 'name': this.eventInfo.name, 'date': this.eventInfo.date, 'location': this.eventInfo.location, 'currency': this.eventInfo.currency }; cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] = cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] ? cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] : {}; - + let data = cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] ? cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] : {}; let showError = false @@ -113,7 +113,7 @@ export default { delete data[ i ]; } } - + if ( showError ) { setTimeout( function () { $( '#placeNotAvailable' ).show( 200 ); @@ -121,33 +121,45 @@ export default { }, 500 ); } - cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] = data; - sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); - + // check if no ticket selected and prevent writing if no ticket + // selected to not show too many events + let isEmpty = sessionStorage.getItem( 'selectedTicket' ) ? false : true; + + if ( !isEmpty ) { + cart[ this.ticketID ?? 'default' ][ 'selectedSeats' ] = data; + sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + } + this.selectedSeats = cart; this.sumUp(); }, sumUp () { // This function calculates the total price of the tickets for this event. let cart = sessionStorage.getItem( 'cart' ) ? JSON.parse( sessionStorage.getItem( 'cart' ) ) : {}; - + let price = 0; for ( let i in cart ) { for ( let entry in cart[ i ][ 'selectedSeats' ] ) { price += parseInt( cart[ i ][ 'selectedSeats' ][ entry ][ 'price' ] ); } } - + let back = {}; back[ 'total' ] = price; back[ 'currency' ] = this.eventInfo.currency; - sessionStorage.setItem( 'backend', JSON.stringify( back ) ); - this.total = price; - sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + + // check if no ticket selected and prevent writing if no ticket + // selected to not show too many events + let isEmpty = sessionStorage.getItem( 'selectedTicket' ) ? false : true; + + if ( !isEmpty ) { + sessionStorage.setItem( 'backend', JSON.stringify( back ) ); + sessionStorage.setItem( 'cart', JSON.stringify( cart ) ); + } }, closePlaceNotAvailablePopup () { $( '#placeNotAvailable' ).hide( 300 ); diff --git a/src/webapp/src/main.js b/src/webapp/src/main.js index a00d261..b33d3a8 100644 --- a/src/webapp/src/main.js +++ b/src/webapp/src/main.js @@ -23,7 +23,7 @@ if ( prod ) { } ); } ); } else { - userStore.setUserAuth( true ); + // userStore.setUserAuth( true ); app.use( router ); app.mount( '#app' ); } diff --git a/src/webapp/src/router/index.js b/src/webapp/src/router/index.js index 3f4d695..9a45eb7 100644 --- a/src/webapp/src/router/index.js +++ b/src/webapp/src/router/index.js @@ -22,6 +22,7 @@ const router = createRouter( { router.afterEach( ( to, from ) => { document.title = to.meta.title ? to.meta.title : 'myevent'; } ); + let UserAccountPages = [ 'account' ]; let authRequired = false; diff --git a/src/webapp/src/stores/backendStore.js b/src/webapp/src/stores/backendStore.js index e3575c5..962cefb 100644 --- a/src/webapp/src/stores/backendStore.js +++ b/src/webapp/src/stores/backendStore.js @@ -1,9 +1,11 @@ import { defineStore } from "pinia"; export const useBackendStore = defineStore ( 'backend', { - state: () => ( { 'visitedSetupPages': {} } ), + state: () => ( { 'visitedSetupPages': {}, 'guestPurchase': false, 'guestPurchaseAllowed': false } ), getters: { getVisitedSetupPages: ( state ) => state.visitedSetupPages, + getIsGuestPurchase: ( state ) => state.guestPurchase, + getIsGuestPurchaseAllowed: ( state ) => state.guestPurchaseAllowed, }, actions: { addVisitedSetupPages ( page, data ) { diff --git a/src/webapp/src/views/LoginView.vue b/src/webapp/src/views/LoginView.vue index 6509baf..e6eba1a 100644 --- a/src/webapp/src/views/LoginView.vue +++ b/src/webapp/src/views/LoginView.vue @@ -15,15 +15,23 @@