4 Commits

Author SHA1 Message Date
Christian 25d1c70a0b Fix incorrect log message in PayPal config loader 2026-06-21 19:15:20 +02:00
David Rodenkirchen 041ddaa334 Add participants page 2026-05-30 09:43:50 +00:00
David Rodenkirchen bbcf18d790 bump version 2026-05-30 09:43:50 +00:00
root 87eb94045c Add Python 3.11 compatibility 2026-05-29 23:17:28 +02:00
7 changed files with 75 additions and 7 deletions
+1 -1
View File
@@ -1 +1 @@
0.6.0-prerelease
0.6.1
+1
View File
@@ -94,6 +94,7 @@ class NavigationBar(Component):
NavigationButton("material/house", "Startseite", "/", extension_state_changed=self.on_extension_pressed),
NavigationButton("material/local_activity", "Tickets", "/tickets", extension_state_changed=self.on_extension_pressed),
NavigationButton("material/chair_alt", "Sitzplan", "/seating", extension_state_changed=self.on_extension_pressed),
NavigationButton("material/group", "Teilnehmer", "/participants", extension_state_changed=self.on_extension_pressed),
NavigationButton("material/local_dining", "Catering", "/catering", extension_state_changed=self.on_extension_pressed),
NavigationButton("material/trophy", "Turniere", "/tournaments", extension_state_changed=self.on_extension_pressed),
margin_bottom=6
+3 -2
View File
@@ -20,8 +20,9 @@ class SeatPixel(Component):
self.associated_user = await self.seat.user.fetch()
async def on_press(self, _: PointerEvent) -> None:
self.session.navigate_to(f"./seat-info?seat_id={self.seat_id.replace("\n", "")}")
seat_id = self.seat_id.replace("\n", "")
self.session.navigate_to(f"./seat-info?seat_id={seat_id}")
def determine_color(self) -> Color:
if self.seat is not None:
try:
+1 -1
View File
@@ -1,6 +1,6 @@
from __future__ import annotations
from _sha2 import sha256
from hashlib import sha256
from random import choices
from typing import Any, Optional
+2 -2
View File
@@ -26,7 +26,7 @@ class TransactionRow(Component):
return Rectangle(
content=Row(
Text(
f"{self.transaction_time.strftime("%d.%m.%y")} /",
f"{self.transaction_time.strftime('%d.%m.%y')} /",
justify="left",
font_size=0.8,
margin_left=0.5,
@@ -174,7 +174,7 @@ class MyBalancePage(Component):
stroke_color=self.session.theme.box_border_color,
),
Column(
ElmButton(text="Banküberweisung", style="small" if self.session.is_mobile() else "normal", on_press=self.toggle_bank_revealer),
ElmButton(text="Banküberweißung", style="small" if self.session.is_mobile() else "normal", on_press=self.toggle_bank_revealer),
Revealer(header=None, is_open=self.bank_revealer_open, content=Column(
Text("QR Code", justify="center"),
Image(self.payment_qr_image, min_width=14, min_height=14, margin_bottom=1),
+66
View File
@@ -0,0 +1,66 @@
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 rio.event import on_populate
from elm.types import UserSession, User, Ticket, Seat
from elm.services import UserService, LocalData, LocalDataService, ConfigurationService
from elm.components import ElmButton
@page(name="Participants", url_segment="participants")
class ParticipantsPage(Component):
participants: list[tuple[User, Seat]] = []
@on_populate
async def on_populate(self) -> None:
seats = await Seat.find_many(
Seat.user != None,
fetch_links=True
).to_list()
self.participants = [(seat.user, seat) for seat in seats]
def build(self) -> Component:
return Row(
Rectangle(
content=Column(
Rectangle(
content=Rectangle(
content=Text("Teilnehmer", 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(
Row(
Text("Nutzer", grow_x=True, font_weight="bold"),
Text("Sitzplatz", font_weight="bold"),
margin=0.5
),
*[
Rectangle(
content=Row(
Text(user.user_name, grow_x=True, font_size=0.8),
Text(seat.seat_id, font_size=0.8),
margin=0.5
),
hover_fill=self.session.theme.secondary_color,
transition_time=0.2
) for user, seat in self.participants],
margin=1
),
Spacer()
),
fill=self.session.theme.box_color,
stroke_width=0.1,
stroke_color=self.session.theme.box_border_color
),
margin=1,
grow_x=True
)
+1 -1
View File
@@ -44,7 +44,7 @@ class ConfigurationService:
secret=self._config["paypal"]["secret"]
)
except KeyError:
logger.fatal("Error loading DatabaseConfiguration, exiting...")
logger.fatal("Error loading PayPalConfiguration, exiting...")
sys.exit(1)
def get_ticket_info(self) -> tuple[TicketInfo, ...]: