Tickets moveable to basket, Basket shows tickets, removable

This commit is contained in:
2024-10-05 20:23:13 +02:00
parent e48782b897
commit d1cdf1f8fb
21 changed files with 301 additions and 334 deletions

View File

@@ -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()
}
}

View File

@@ -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<SeatModel> = []
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
}
}

View File

@@ -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
}
}

View File

@@ -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 = []
},
/**