improve catering management

This commit is contained in:
David Rodenkirchen 2025-02-04 08:57:53 +01:00
parent 198a449a55
commit 77c00bb011
3 changed files with 60 additions and 18 deletions

View File

@ -65,6 +65,9 @@ class CateringManagementOrderDisplay(Component):
return PointerEventListener(
content=Card(
content=Column(
Row(
Text(f"ID: {self.order.order_id}", margin_left=0.3, margin_top=0.2, justify="center", style=TextStyle(font_size=1.2)),
),
Row(
Text(f"Status: ", margin_left=0.3, margin_top=0.2),
self.format_order_status(self.order.status),

View File

@ -1,11 +1,11 @@
import logging
from dataclasses import field, dataclass
from datetime import datetime
from typing import Optional
from typing import Optional, Union, Callable
from rio import Column, Component, event, TextStyle, Text, Spacer, PointerEvent, Button
from rio import Column, Component, event, TextStyle, Text, Spacer, PointerEvent, Button, Popup, Checkbox, Card, Row
from src.ez_lan_manager import ConfigurationService, CateringService, SeatingService
from src.ez_lan_manager import ConfigurationService, CateringService, SeatingService, AccountingService
from src.ez_lan_manager.components.CateringManagementOrderDisplay import CateringManagementOrderDisplay
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
from src.ez_lan_manager.types.CateringOrder import CateringOrder, CateringOrderStatus
@ -13,6 +13,35 @@ from src.ez_lan_manager.types.Seat import Seat
logger = logging.getLogger(__name__.split(".")[-1])
class CateringOrderInfoPopup(Component):
order: Optional[CateringOrder] = None
close_cb: Optional[Callable] = None
def build(self) -> Component:
if not self.order:
return Card(
content=Text(""),
margin=1,
color=self.session.theme.hud_color,
min_width=40,
min_height=40,
on_press=self.close_cb
)
return Card(
content=Column(
Text(f"Bestellung {self.order.order_id}", style=TextStyle(font_size=1.2), margin_bottom=1),
*[Row(Text(f"{amount}x"), Spacer(), Text(f"{item.name}")) for item, amount in self.order.items.items()],
Spacer(),
Row(Text("Gesamtpreis:"), Spacer(), Text(self.session[AccountingService].make_euro_string_from_int(self.order.price)))
),
margin=1,
color=self.session.theme.hud_color,
min_width=40,
min_height=40,
on_press=self.close_cb,
corner_radius=0.5
)
@dataclass
class CateringOrderWithSeat:
catering_order: CateringOrder
@ -21,6 +50,8 @@ class CateringOrderWithSeat:
class ManageCateringPage(Component):
all_orders: list[CateringOrderWithSeat] = field(default_factory=list)
last_updated: Optional[datetime] = None
order_popup_open: bool = False
order_popup_order: Optional[CateringOrder] = None
@event.on_populate
async def on_populate(self) -> None:
@ -53,24 +84,32 @@ class ManageCateringPage(Component):
return sorted_list
async def order_clicked(self, order: CateringOrder, _: PointerEvent) -> None:
pass
self.order_popup_order = order
self.order_popup_open = True
async def close_cb(self) -> None:
self.order_popup_open = False
def build(self) -> Component:
header_text = Text(
text="Catering Verwaltung",
style=TextStyle(
fill=self.session.theme.background_color,
font_size=1.2
),
margin_top=2,
margin_bottom=2,
align_x=0.5
)
popup = Popup(
anchor=header_text,
content=CateringOrderInfoPopup(order=self.order_popup_order, close_cb=self.close_cb),
is_open=self.order_popup_open,
position="bottom"
)
return Column(
MainViewContentBox(
Column(
Text(
text="Catering Verwaltung",
style=TextStyle(
fill=self.session.theme.background_color,
font_size=1.2
),
margin_top=2,
margin_bottom=2,
align_x=0.5
)
)
Column(popup)
),
MainViewContentBox(
Column(

View File

@ -10,8 +10,8 @@ logger = logging.getLogger(__name__.split(".")[-1])
# Note for ToDo: rio.UserSettings are saved LOCALLY, do not just read a user_id here!
@dataclass(frozen=False)
class SessionStorage:
_user_id: Optional[int] = None # DEBUG: Put user ID here to skip login
_is_team_member: bool = False
_user_id: Optional[int] = 28 # DEBUG: Put user ID here to skip login
_is_team_member: bool = True
_notification_callbacks: dict[str, Callable] = field(default_factory=dict)
async def clear(self) -> None: