add Tournament placeholder page and integrate seating info with account info

This commit is contained in:
David Rodenkirchen
2026-05-23 02:03:02 +02:00
parent 5d422a9863
commit 4803607e3b
3 changed files with 57 additions and 9 deletions
+3 -3
View File
@@ -23,15 +23,15 @@
[tickets] [tickets]
[tickets."NORMAL"] [tickets."NORMAL"]
total_tickets=24 total_tickets=38
price="20.00" price="25.00"
description="Normales Ticket" description="Normales Ticket"
additional_info="Berechtigt zur Nutzung eines regulären Platzes für die gesamte Dauer der LAN" additional_info="Berechtigt zur Nutzung eines regulären Platzes für die gesamte Dauer der LAN"
can_be_sold=true can_be_sold=true
[tickets."DELUXE"] [tickets."DELUXE"]
total_tickets=30 total_tickets=30
price="25.00" price="30.00"
description="Deluxe Ticket" description="Deluxe Ticket"
additional_info="Wie das normale Ticket, aber mit doppelt so breitem Tisch (160cm)" additional_info="Wie das normale Ticket, aber mit doppelt so breitem Tisch (160cm)"
can_be_sold=true can_be_sold=true
+12 -6
View File
@@ -1,9 +1,10 @@
from typing import Optional from typing import Optional
from bson import ObjectId
from rio import Component, Rectangle, Column, Text, Row, PointerEventListener, TextInput from rio import Component, Rectangle, Column, Text, Row, PointerEventListener, TextInput
from rio.event import on_populate from rio.event import on_populate
from elm.types import UserSession, Ticket from elm.types import UserSession, Ticket, Seat
from elm.components import ElmButton from elm.components import ElmButton
from elm.services import UserService from elm.services import UserService
@@ -16,6 +17,7 @@ class AccountInfoBox(Component):
password_input_blocked: bool = False password_input_blocked: bool = False
password_change_in_progress: bool = False password_change_in_progress: bool = False
ticket: Optional[Ticket] = None ticket: Optional[Ticket] = None
seat: Optional[Seat] = None
@on_populate @on_populate
async def on_populate(self) -> None: async def on_populate(self) -> None:
@@ -24,6 +26,7 @@ class AccountInfoBox(Component):
if user: if user:
self.mail = user.user_mail self.mail = user.user_mail
self.ticket = await Ticket.find_one({"owner.$id": user.id}) self.ticket = await Ticket.find_one({"owner.$id": user.id})
self.seat = await Seat.find_one({"user.$id": ObjectId(user.id)})
else: else:
self.session.navigate_to("./login") self.session.navigate_to("./login")
except KeyError: except KeyError:
@@ -63,8 +66,11 @@ class AccountInfoBox(Component):
def build(self) -> Component: def build(self) -> Component:
row_col = Row row_col = Row
ticket_text = "-" ticket_text = "-"
seat_text = "-"
if self.ticket: if self.ticket:
ticket_text = self.ticket.category ticket_text = self.ticket.category
if self.seat:
seat_text = self.seat.seat_id
if self.session.is_mobile(): if self.session.is_mobile():
row_col = Column row_col = Column
@@ -99,13 +105,13 @@ class AccountInfoBox(Component):
), ),
PointerEventListener( PointerEventListener(
Rectangle( Rectangle(
content=Row(Text("Sitzplatz:", margin=1, overflow="wrap", justify="left"), Text("-", margin=1, overflow="wrap", justify="right")), content=Row(Text("Sitzplatz:", margin=1, overflow="wrap", justify="left"), Text(seat_text, margin=1, overflow="wrap", justify="right")),
fill=self.session.theme.danger_color_dark, fill=self.session.theme.success_color if self.seat else self.session.theme.danger_color_dark,
stroke_width=0.1, stroke_width=0.1,
stroke_color=self.session.theme.danger_color, stroke_color=self.session.theme.success_color if self.seat else self.session.theme.danger_color,
hover_fill=self.session.theme.danger_color, hover_fill=self.session.theme.success_color if self.seat else self.session.theme.danger_color,
hover_stroke_width=0.1, hover_stroke_width=0.1,
hover_stroke_color=self.session.theme.danger_color_dark, hover_stroke_color=self.session.theme.success_color if self.seat else self.session.theme.danger_color_dark,
transition_time=0.2, transition_time=0.2,
cursor="pointer" cursor="pointer"
), ),
+42
View File
@@ -0,0 +1,42 @@
from __future__ import annotations
from copy import copy
from typing import Any, Optional
from uuid import uuid4
from rio import Component, Column, Row, Text, Spacer, page, Color, Rectangle, TextInput, GuardEvent
from elm.types import UserSession, User
from elm.services import UserService, LocalData, LocalDataService, ConfigurationService
from elm.components import ElmButton
@page(name="Tournaments", url_segment="tournaments")
class TournamentsPage(Component):
def build(self) -> Component:
return Row(
Rectangle(
content=Column(
Rectangle(
content=Rectangle(
content=Text("Turniere", margin=0.5, selectable=False, overflow="wrap"),
fill=self.session.theme.header_box_background_color,
margin=0.4
),
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color,
),
Column(
Text("Es wurde noch kein Turnierbaum hinterlegt", fill=self.session.theme.text_color, overflow="wrap", justify="center"),
margin=1,
spacing=1
),
Spacer()
),
fill=self.session.theme.box_color,
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color
),
align_x=0.5,
align_y=0.5
)