From dbd59c298a3fc64987382e183b3500b681443b08 Mon Sep 17 00:00:00 2001 From: David Rodenkirchen Date: Thu, 28 May 2026 01:00:29 +0200 Subject: [PATCH] add disenabling and enabling of menu items --- src/elm/pages/CateringAdminPage.py | 33 +++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/elm/pages/CateringAdminPage.py b/src/elm/pages/CateringAdminPage.py index 7b11370..9d3f80a 100644 --- a/src/elm/pages/CateringAdminPage.py +++ b/src/elm/pages/CateringAdminPage.py @@ -6,15 +6,14 @@ from functools import partial from typing import Optional from decimal import Decimal -from beanie import PydanticObjectId, Document -from rio import Component, Column, Row, Text, Spacer, page, Rectangle, TextInput, GuardEvent, Button, TextInputChangeEvent, NumberInput, IconButton, FlowContainer, List, \ - PointerEventListener, Overlay, Link +from beanie import PydanticObjectId +from rio import Component, Column, Row, Text, Spacer, page, Rectangle, GuardEvent, FlowContainer, List, PointerEventListener, Overlay, Link, Switch, SwitchChangeEvent from rio.event import on_populate -from elm.types import UserSession, User, Transaction, Seat -from elm.services import AccountingService, MailingService, ReceiptPrintingService -from elm.components import AccountInfoBox, ElmButton -from elm.types.CateringTypes import CateringOrder, CateringOrderStatus +from elm.types import UserSession, User, Seat +from elm.services import AccountingService, ReceiptPrintingService +from elm.components import ElmButton +from elm.types.CateringTypes import CateringOrder, CateringOrderStatus, CateringMenuItem, CateringMenuItemCategory logger = logging.getLogger(__name__.split(".")[-1]) @@ -31,12 +30,14 @@ class CateringAdminPage(Component): open_orders: List[CateringOrder] = List() all_users: list[User] = [] all_seats: list[Seat] = [] + all_menu_items: list[CateringMenuItem] = [] edited_order: Optional[CateringOrder] = None @on_populate async def on_populate(self) -> None: self.all_users = await User.find_all().to_list() self.all_seats = await Seat.find_all(fetch_links=True).to_list() + self.all_menu_items = await CateringMenuItem.find_all(fetch_links=True).to_list() self.open_orders = List(await CateringOrder.find_many( { "status": { @@ -111,6 +112,11 @@ class CateringAdminPage(Component): self.session.create_task(self.session[ReceiptPrintingService].print_order(user, self.edited_order)) self.edited_order = None + @staticmethod + async def change_item_active(event: SwitchChangeEvent, item: CateringMenuItem) -> None: + item.active = event.is_on + await item.save() + def build(self) -> Component: if self.edited_order: overlay = [ @@ -194,6 +200,19 @@ class CateringAdminPage(Component): stroke_width=0.1, stroke_color=self.session.theme.box_border_color, ), + Column( + *[Column( + Text(text=category.value, margin_bottom=1, margin_top=0.5, fill=self.session.theme.primary_color), + *[Rectangle( + content=Row(Text(text=item.name, overflow="ellipsize", grow_x=True), Switch(is_on=item.active, on_change=lambda event, item=item: self.change_item_active(event, item)), margin=0.1), + stroke_width=0.1, + stroke_color=self.session.theme.box_border_color + ) for item in filter(lambda i: i.category == category, self.all_menu_items)], + spacing=0.5 + ) for category in CateringMenuItemCategory], + spacing=0.5, + margin=1 + ), Spacer() ), fill=self.session.theme.box_color,