From 1d21fbae5a91d1e7d8afdc724208ba62fed26176 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Tue, 25 Mar 2025 21:05:17 +0100 Subject: [PATCH] improve seating plan booking button --- .../components/SeatingPlanInfoBox.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/ez_lan_manager/components/SeatingPlanInfoBox.py b/src/ez_lan_manager/components/SeatingPlanInfoBox.py index 68668f7..aa6ff2a 100644 --- a/src/ez_lan_manager/components/SeatingPlanInfoBox.py +++ b/src/ez_lan_manager/components/SeatingPlanInfoBox.py @@ -1,7 +1,11 @@ from decimal import Decimal +from functools import partial 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): @@ -12,6 +16,13 @@ class SeatingPlanInfoBox(Component): seat_occupant: Optional[str] = None seat_price: Decimal = Decimal("0") 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: if not self.show: @@ -36,7 +47,7 @@ class SeatingPlanInfoBox(Component): style=TextStyle(fill=self.session.theme.neutral_color), overflow="wrap", justify="center"), Button( Text( - f"Buchen", + "Buchen" if self.has_user_ticket else "Ticket kaufen", margin=1, style=TextStyle(fill=self.session.theme.neutral_color, font_size=1.1), overflow="wrap", @@ -48,7 +59,8 @@ class SeatingPlanInfoBox(Component): margin=1, grow_y=False, 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 )