@@ -29,8 +42,8 @@ defineProps({
@@ -48,4 +61,9 @@ defineProps({
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/software/src/components/seatPlanMap/seatGroupSheet.vue b/software/src/components/seatPlanMap/seatGroupSheet.vue
index b3b4655..e590539 100644
--- a/software/src/components/seatPlanMap/seatGroupSheet.vue
+++ b/software/src/components/seatPlanMap/seatGroupSheet.vue
@@ -3,9 +3,11 @@ import { SeatGroupModel } from '@/data/models/locations/seatGroupModel';
import seatGroupTable from './seatGroupTable.vue';
import { useBasketStore } from '@/data/stores/basketStore';
import standingArea from './standingArea.vue';
+import { ConcertModel } from '@/data/models/acts/concertModel';
defineProps({
seatGroup: SeatGroupModel,
+ concert: ConcertModel,
backgroundColor: String
})
@@ -15,6 +17,7 @@ defineProps({
@@ -32,7 +35,11 @@ defineProps({
-
+
diff --git a/software/src/components/seatPlanMap/seatGroupTable.vue b/software/src/components/seatPlanMap/seatGroupTable.vue
index 1432d9e..10dff53 100644
--- a/software/src/components/seatPlanMap/seatGroupTable.vue
+++ b/software/src/components/seatPlanMap/seatGroupTable.vue
@@ -1,4 +1,5 @@
diff --git a/software/src/data/models/acts/concertModel.ts b/software/src/data/models/acts/concertModel.ts
index b6f578c..0b40866 100644
--- a/software/src/data/models/acts/concertModel.ts
+++ b/software/src/data/models/acts/concertModel.ts
@@ -1,9 +1,24 @@
import { LocationModel } from "./../locations/locationModel"
+import { BandModel } from "./bandModel"
+import { EventModel } from "./eventModel"
export class ConcertModel {
- id: number
- inStock: number
- date: string
- price: number
- location: LocationModel
+ id: number = 0
+ inStock: number = 0
+ date: string = ""
+ price: number = 0
+ location: LocationModel = new LocationModel()
+ event: {
+ id: number
+ name: string
+ offered: boolean
+ image: string
+ band: BandModel
+ } = {
+ id: 0,
+ name: "",
+ offered: true,
+ image: "",
+ band: new BandModel()
+ }
}
\ No newline at end of file
diff --git a/software/src/data/models/ordering/basketItemModel.ts b/software/src/data/models/ordering/basketItemModel.ts
index 8195339..e4dc6ad 100644
--- a/software/src/data/models/ordering/basketItemModel.ts
+++ b/software/src/data/models/ordering/basketItemModel.ts
@@ -1,12 +1,14 @@
import { ConcertModel } from "../acts/concertModel"
+import { SeatModel } from "../locations/seatModel"
export class BasketItemModel {
- id: number = -1
- quantity: number = 1
concert: ConcertModel = new ConcertModel()
+ seats: Array = []
+ price: number
- constructor(quantity: number, concert: ConcertModel) {
- this.quantity = quantity
+ constructor(concert: ConcertModel, seat: SeatModel, price: number) {
this.concert = concert
+ this.seats = [ seat ]
+ this.price = price
}
}
\ No newline at end of file
diff --git a/software/src/data/models/ordering/selectedSeatModel.ts b/software/src/data/models/ordering/selectedSeatModel.ts
index ac23b97..2574f89 100644
--- a/software/src/data/models/ordering/selectedSeatModel.ts
+++ b/software/src/data/models/ordering/selectedSeatModel.ts
@@ -1,14 +1,17 @@
+import { ConcertModel } from "../acts/concertModel";
import { SeatModel } from "../locations/seatModel";
-import { SeatRowModel } from "../locations/seatRowModel";
export class SelectedSeatModel {
seat: SeatModel
seatRow: number
seatGroupName: string
+ concert: ConcertModel
+ price: number
- constructor(seat: SeatModel, seatRow: number, seatGroupName: string) {
+ constructor(seat: SeatModel, seatRow: number, seatGroupName: string, concert: ConcertModel) {
this.seat = seat
this.seatRow = seatRow
this.seatGroupName = seatGroupName
+ this.concert = concert
}
}
\ No newline at end of file
diff --git a/software/src/data/stores/basketStore.ts b/software/src/data/stores/basketStore.ts
index d6bf833..ac406a0 100644
--- a/software/src/data/stores/basketStore.ts
+++ b/software/src/data/stores/basketStore.ts
@@ -3,12 +3,11 @@ import { useLocalStorage } from "@vueuse/core";
import { BasketItemModel } from "../models/ordering/basketItemModel";
import { useFeedbackStore } from "./feedbackStore";
import { BannerStateEnum } from "../enums/bannerStateEnum";
-import { ConcertModel } from "../models/acts/concertModel";
import { AddressModel } from "../models/user/addressModel";
import { PaymentModel } from "../models/user/paymentModel";
-import { SeatModel } from "../models/locations/seatModel";
import { ref } from "vue";
import { SelectedSeatModel } from "../models/ordering/selectedSeatModel";
+import { calcPrice } from "@/scripts/concertScripts";
export const useBasketStore = defineStore('basketStore', {
state: () => ({
@@ -27,9 +26,9 @@ export const useBasketStore = defineStore('basketStore', {
getTotalPrice() {
let result = 0
- // for (let item of this.itemsInBasket) {
- // result += calcPrice(item.product.price, item.product.discount, item.quantity)
- // }
+ for (let item of this.itemsInBasket) {
+ result += calcPrice(item.price, item.seats.length)
+ }
return Math.round(result * 100) / 100
}
@@ -50,25 +49,22 @@ export const useBasketStore = defineStore('basketStore', {
)
},
- /**
- * Add an item to the basket. If the product is already in the basket, the quantity will increase
- *
- * @param concert Concert to add
- * @param quantity Quantity of the product
- */
- addItemToBasket(concert: ConcertModel, quantity: number) {
- const feedbackStore = useFeedbackStore()
- feedbackStore.changeBanner(BannerStateEnum.BASKETPRODUCTADDED)
+ moveSeatSelectionsToBasket() {
+ for (let selectedSeat of this.selectedSeats) {
+ let itemInBasket: BasketItemModel = this.itemsInBasket.find((basketItem: BasketItemModel) => {
+ return basketItem.concert.id == selectedSeat.concert.id
+ })
- // Product is already in the basket, increase number of items
- if (this.itemsInBasket.find((basketItem: BasketItemModel) =>
- basketItem.concert.id == concert.id))
- {
- this.itemsInBasket.find((basketItem: BasketItemModel) =>
- basketItem.concert.id == concert.id).quantity += quantity
- } else {
- this.itemsInBasket.push(new BasketItemModel(quantity, concert))
+ if (itemInBasket != undefined) {
+ itemInBasket.seats.push(selectedSeat.seat)
+ } else {
+ this.itemsInBasket.push(
+ new BasketItemModel(selectedSeat.concert, selectedSeat.seat, selectedSeat.concert.price)
+ )
+ }
}
+
+ this.selectedSeats = []
},
/**
diff --git a/software/src/locales/de.json b/software/src/locales/de.json
index 90197a6..b6fa5cc 100644
--- a/software/src/locales/de.json
+++ b/software/src/locales/de.json
@@ -149,5 +149,7 @@
"image": "Foto | Fotos",
"seatSelection": "Sitzauswahl",
"loading": "Lade",
- "orderSummary": "Bestellübersicht"
+ "orderSummary": "Bestellübersicht",
+ "basket": "Warenkorb",
+ "event": "Event"
}
diff --git a/software/src/locales/en.json b/software/src/locales/en.json
index bf354b5..6c7e07d 100644
--- a/software/src/locales/en.json
+++ b/software/src/locales/en.json
@@ -149,5 +149,7 @@
"image": "Image | Images",
"seatSelection": "Select seat",
"loading": "Loading",
- "orderSummary": "Order Summary"
+ "orderSummary": "Order Summary",
+ "basket": "Basket",
+ "event": "Event"
}
diff --git a/software/src/pages/basketPage/index.vue b/software/src/pages/basketPage/index.vue
index bfc3181..0754c40 100644
--- a/software/src/pages/basketPage/index.vue
+++ b/software/src/pages/basketPage/index.vue
@@ -1,11 +1,13 @@
-
-
-
-
-
- | {{ $t('product.category') }} |
- {{ $t('product.brand') }} |
- {{ $t('product.products') }} |
- {{ $t('quantity') }} |
- {{ $t('product.productPrice') }} |
- {{ $t('totalPrice') }} |
- |
-
-
-
-
-
-
- |
- {{ basketItem.concert.category.name }}
- |
-
-
-
- {{ basketItem.concert.brand.name }}
- |
-
-
-
- {{ basketItem.concert.name }}
- |
-
-
-
- {{ basketItem.quantity }}x
-
- |
-
-
-
-
-
-
-
-
- {{ calcPrice(basketItem.concert.price, basketItem.concert.discount, basketItem.quantity) }} €
-
-
-
- {{ calcPrice(basketItem.concert.price, 0, basketItem.quantity) }} €
-
-
-
-
- {{ calcPrice(basketItem.concert.price, 0, basketItem.quantity) }} €
-
- |
-
-
-
- |
-
-
-
-
\ No newline at end of file
diff --git a/software/src/pages/basketPage/ticketsTable.vue b/software/src/pages/basketPage/ticketsTable.vue
new file mode 100644
index 0000000..c2c4964
--- /dev/null
+++ b/software/src/pages/basketPage/ticketsTable.vue
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+ | {{ $t('band') }} |
+ {{ $t('event') }} |
+ {{ $t('quantity') }} |
+ {{ $t('product.productPrice') }} |
+ {{ $t('totalPrice') }} |
+ |
+
+
+
+
+
+
+ |
+ {{ basketItem.concert.event.band.name }}
+ |
+
+
+
+ {{ basketItem.concert.event.name }}
+ |
+
+
+
+ {{ basketItem.seats.length }}x
+ |
+
+
+
+
+ {{ basketItem.price }} €
+
+ |
+
+
+
+ {{ (calcPrice(basketItem.concert.price, basketItem.seats.length)).toFixed(2) }} €
+ |
+
+
+
+ |
+
+
+
+
\ No newline at end of file
diff --git a/software/src/pages/events/bandDetailPage/concertSection.vue b/software/src/pages/events/bandDetailPage/concertSection.vue
index a75d602..06ed563 100644
--- a/software/src/pages/events/bandDetailPage/concertSection.vue
+++ b/software/src/pages/events/bandDetailPage/concertSection.vue
@@ -1,15 +1,12 @@
-
+
-
+
-
+
- 0) && router.push('/concert/' + concert.id)"
+ :link="concert.inStock > 0"
+ :append-icon="concert.inStock == 0 ? 'mdi-minus-circle' : 'mdi-ticket'"
+ :append-icon-color="concert.inStock > 0 ? 'green' : 'red'"
>
-
-
-
-
+
+
+
+
+
-
-
- {{ concert.location.name }}
-
+
+
+ {{ concert.location.name }}
+
-
- {{ concert.location.city.name }}
-
-
-
+
+ {{ concert.location.city.name }}
+
+
+
+
-
-
+
+
{{ concert.price.toFixed(2) }} €
-
-
- {{ $t('add') }}
-
-
-
- {{ $t('soldOut') }}
-
+
+ {{ $t('soldOut') }}
-
+
\ No newline at end of file
diff --git a/software/src/pages/events/bandDetailPage/index.vue b/software/src/pages/events/bandDetailPage/index.vue
index 325e126..af1b993 100644
--- a/software/src/pages/events/bandDetailPage/index.vue
+++ b/software/src/pages/events/bandDetailPage/index.vue
@@ -1,5 +1,4 @@
@@ -37,6 +34,22 @@ getConcert(Number(router.currentRoute.value.params.id))
+
+
+
+
+ {{ dateStringToHumanReadableString(concertModel.date) }}
+ {{ concertModel.location.name }}
+ {{ concertModel.location.city.name }}
+
+
+
+
@@ -58,7 +71,7 @@ getConcert(Number(router.currentRoute.value.params.id))
-
+
@@ -78,6 +91,17 @@ getConcert(Number(router.currentRoute.value.params.id))
+
+
+
+ {{ $t('addToBasket') }}
+
+
diff --git a/software/src/scripts/concertScripts.ts b/software/src/scripts/concertScripts.ts
index eeb1fb0..17ebb30 100644
--- a/software/src/scripts/concertScripts.ts
+++ b/software/src/scripts/concertScripts.ts
@@ -12,8 +12,8 @@ import { EventModel } from "@/data/models/acts/eventModel"
*
* @returns Price rounded to two digits
*/
-export function calcPrice(price: number, discount: number = 0, quantity: number = 1): number {
- return Math.round(quantity * price * ((100 - discount) / 100) * 100) / 100
+export function calcPrice(price: number, quantity: number = 1): number {
+ return Math.round(quantity * price * 100) / 100
}
/**