78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
from typing import final
|
|
|
|
from PySide6.QtWidgets import QWidget, QVBoxLayout, QLabel
|
|
from Movie import Movie
|
|
from enum import Enum
|
|
|
|
class ShopItemType(Enum):
|
|
"""
|
|
Enum dictating types of items that can be bought from the cinema.
|
|
"""
|
|
Movie = 0
|
|
Popcorn = 1
|
|
Frozen_Coke = 2
|
|
|
|
@final
|
|
class ShopItem:
|
|
"""
|
|
Represents an item that can be bought from the cinema.
|
|
"""
|
|
def __init__(self, shoptype: ShopItemType, quantity: int, movie: Movie | None = None):
|
|
"""
|
|
Creates a new ShopItem.
|
|
Throws:
|
|
ValueError - type is ShopItemType.Movie, but movie is not provided as a paramater
|
|
Example (creates a ShopItem with type popcorn and quantity 3):
|
|
ShopItem(ShopItemType.Popcorn, 3)
|
|
"""
|
|
self.type = shoptype
|
|
self.movie = movie
|
|
self.quantity = quantity
|
|
self.cost: float
|
|
match shoptype:
|
|
case ShopItemType.Movie:
|
|
if movie is not None:
|
|
self.cost = movie.price
|
|
else:
|
|
raise ValueError("ShopItem with type ShopItemType.Movie must provide a movie as an argument")
|
|
case ShopItemType.Popcorn:
|
|
self.cost = 9.95
|
|
pass
|
|
case ShopItemType.Frozen_Coke:
|
|
self.cost = 4.95
|
|
|
|
def __repr__(self):
|
|
return f"ShopItem(type={self.type}, movie={self.movie}, quantity={self.quantity}, cost={self.cost})"
|
|
|
|
@final
|
|
class Cart:
|
|
|
|
cv: CartView | None = None
|
|
|
|
def __init__(self):
|
|
self.contents: list[ShopItem] = []
|
|
|
|
def __repr__(self):
|
|
return f"Cart(contents={self.contents})"
|
|
|
|
def addItem(self, item: ShopItem):
|
|
self.contents.append(item)
|
|
pass
|
|
|
|
def show(self):
|
|
self.cv = CartView()
|
|
self.cv.show()
|
|
|
|
|
|
cart = Cart()
|
|
|
|
class CartView(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
global cart
|
|
self.setWindowTitle("Work in progress!")
|
|
layout = QVBoxLayout()
|
|
layout.addWidget(QLabel(f"Cart: {cart}"))
|
|
self.setLayout(layout)
|
|
|