improve seating plan booking button

This commit is contained in:
David Rodenkirchen 2025-03-25 21:05:17 +01:00
parent db8ada283b
commit 1d21fbae5a

View File

@ -1,7 +1,11 @@
from decimal import Decimal from decimal import Decimal
from functools import partial
from typing import Optional, Callable from typing import Optional, Callable
from rio import Component, Column, Text, TextStyle, Button, Spacer from rio import Component, Column, Text, TextStyle, Button, Spacer, event
from src.ez_lan_manager import TicketingService
from src.ez_lan_manager.types.SessionStorage import SessionStorage
class SeatingPlanInfoBox(Component): class SeatingPlanInfoBox(Component):
@ -12,6 +16,13 @@ class SeatingPlanInfoBox(Component):
seat_occupant: Optional[str] = None seat_occupant: Optional[str] = None
seat_price: Decimal = Decimal("0") seat_price: Decimal = Decimal("0")
is_blocked: bool = False is_blocked: bool = False
has_user_ticket = False
@event.on_page_change
async def check_ticket(self) -> None:
if self.session[SessionStorage].user_id:
user_ticket = await self.session[TicketingService].get_user_ticket(self.session[SessionStorage].user_id)
self.has_user_ticket = not (user_ticket is None)
def build(self) -> Component: def build(self) -> Component:
if not self.show: if not self.show:
@ -36,7 +47,7 @@ class SeatingPlanInfoBox(Component):
style=TextStyle(fill=self.session.theme.neutral_color), overflow="wrap", justify="center"), style=TextStyle(fill=self.session.theme.neutral_color), overflow="wrap", justify="center"),
Button( Button(
Text( Text(
f"Buchen", "Buchen" if self.has_user_ticket else "Ticket kaufen",
margin=1, margin=1,
style=TextStyle(fill=self.session.theme.neutral_color, font_size=1.1), style=TextStyle(fill=self.session.theme.neutral_color, font_size=1.1),
overflow="wrap", overflow="wrap",
@ -48,7 +59,8 @@ class SeatingPlanInfoBox(Component):
margin=1, margin=1,
grow_y=False, grow_y=False,
is_sensitive=not self.is_booking_blocked, is_sensitive=not self.is_booking_blocked,
on_press=self.purchase_cb on_press=self.purchase_cb if self.has_user_ticket else partial(self.session.navigate_to, "./buy_ticket")
), ) if self.session[SessionStorage].user_id else Text(f"Du musst eingeloggt sein um einen Sitzplatz zu buchen", margin=1,
style=TextStyle(fill=self.session.theme.neutral_color), overflow="wrap", justify="center"),
min_height=10 min_height=10
) )