diff --git a/src/ez_lan_manager/components/CateringManagementOrderDisplay.py b/src/ez_lan_manager/components/CateringManagementOrderDisplay.py index 91356f2..3c195a7 100644 --- a/src/ez_lan_manager/components/CateringManagementOrderDisplay.py +++ b/src/ez_lan_manager/components/CateringManagementOrderDisplay.py @@ -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), diff --git a/src/ez_lan_manager/pages/ManageCateringPage.py b/src/ez_lan_manager/pages/ManageCateringPage.py index 2983b88..ab6063c 100644 --- a/src/ez_lan_manager/pages/ManageCateringPage.py +++ b/src/ez_lan_manager/pages/ManageCateringPage.py @@ -1,11 +1,11 @@ import logging from dataclasses import field, dataclass from datetime import datetime -from typing import Optional +from typing import Optional, Callable -from rio import Column, Component, event, TextStyle, Text, Spacer, PointerEvent, Button +from rio import Column, Component, event, TextStyle, Text, Spacer, PointerEvent, Button, Popup, 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(