From 547601d7dff6e6149394e81760e410ec3136f8cd Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Fri, 22 May 2026 11:24:03 +0200 Subject: [PATCH] integrate ticketing with LnnInfoBox --- src/elm/components/LanInfoBox.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/elm/components/LanInfoBox.py b/src/elm/components/LanInfoBox.py index 8e31e8b..041f13d 100644 --- a/src/elm/components/LanInfoBox.py +++ b/src/elm/components/LanInfoBox.py @@ -1,9 +1,23 @@ from rio import Component, Rectangle, Row, Text, Spacer, ProgressBar, Column, Color, TextStyle +from rio.event import on_populate from elm.services import ConfigurationService +from elm.types import Ticket class LanInfoBox(Component): + total_tickets: int = 1 + available_tickets: int = 0 + + @on_populate + async def on_populate(self) -> None: + total_tickets = 0 + for ticket_info in self.session[ConfigurationService].get_ticket_info(): + total_tickets += ticket_info.total_tickets + + self.total_tickets = total_tickets + self.available_tickets = total_tickets - len(await Ticket.find_all().to_list()) + def build(self) -> Component: lan_info = self.session[ConfigurationService].get_lan_info() if self.session.is_mobile(): @@ -32,10 +46,10 @@ class LanInfoBox(Component): Row(Text("Duschen:", font_size=0.7), Spacer(), Text("Ja" if lan_info.has_showers else "Nein", fill=self.session.theme.primary_color, font_size=0.8, overflow="nowrap")), Spacer(), Column( - Row(Text("Verfügbare Tickets", font_size=0.7, overflow="wrap"), Spacer(), Text("22 / 60", fill=self.session.theme.primary_color, font_size=0.8), + Row(Text("Verfügbare Tickets", font_size=0.7, overflow="wrap"), Spacer(), Text(f"{self.available_tickets} / {self.total_tickets}", fill=self.session.theme.primary_color, font_size=0.8), margin_bottom=0.4), ProgressBar( - progress=22 / 60, + progress=self.available_tickets / self.total_tickets, margin=0.5, rounded=False, min_height=0.4, @@ -77,9 +91,9 @@ class LanInfoBox(Component): Row(Text("Duschen:", font_size=0.9), Spacer(), Text("Ja" if lan_info.has_showers else "Nein", fill=self.session.theme.primary_color, font_size=0.9, overflow="nowrap")), Spacer(), Column( - Row(Text("Verfügbare Tickets", font_size=0.9, overflow="wrap"), Spacer(), Text("22 / 60", fill=self.session.theme.primary_color, font_size=0.9), margin_bottom=0.4), + Row(Text("Verfügbare Tickets", font_size=0.9, overflow="wrap"), Spacer(), Text(f"{self.available_tickets} / {self.total_tickets}", fill=self.session.theme.primary_color, font_size=0.9), margin_bottom=0.4), ProgressBar( - progress=22 / 60, + progress=self.available_tickets / self.total_tickets, margin=0.5, rounded=False, min_height=0.4,