add disenabling and enabling of menu items

This commit is contained in:
David Rodenkirchen
2026-05-28 01:00:29 +02:00
parent d8dca5c6d3
commit dbd59c298a
+26 -7
View File
@@ -6,15 +6,14 @@ from functools import partial
from typing import Optional from typing import Optional
from decimal import Decimal from decimal import Decimal
from beanie import PydanticObjectId, Document from beanie import PydanticObjectId
from rio import Component, Column, Row, Text, Spacer, page, Rectangle, TextInput, GuardEvent, Button, TextInputChangeEvent, NumberInput, IconButton, FlowContainer, List, \ from rio import Component, Column, Row, Text, Spacer, page, Rectangle, GuardEvent, FlowContainer, List, PointerEventListener, Overlay, Link, Switch, SwitchChangeEvent
PointerEventListener, Overlay, Link
from rio.event import on_populate from rio.event import on_populate
from elm.types import UserSession, User, Transaction, Seat from elm.types import UserSession, User, Seat
from elm.services import AccountingService, MailingService, ReceiptPrintingService from elm.services import AccountingService, ReceiptPrintingService
from elm.components import AccountInfoBox, ElmButton from elm.components import ElmButton
from elm.types.CateringTypes import CateringOrder, CateringOrderStatus from elm.types.CateringTypes import CateringOrder, CateringOrderStatus, CateringMenuItem, CateringMenuItemCategory
logger = logging.getLogger(__name__.split(".")[-1]) logger = logging.getLogger(__name__.split(".")[-1])
@@ -31,12 +30,14 @@ class CateringAdminPage(Component):
open_orders: List[CateringOrder] = List() open_orders: List[CateringOrder] = List()
all_users: list[User] = [] all_users: list[User] = []
all_seats: list[Seat] = [] all_seats: list[Seat] = []
all_menu_items: list[CateringMenuItem] = []
edited_order: Optional[CateringOrder] = None edited_order: Optional[CateringOrder] = None
@on_populate @on_populate
async def on_populate(self) -> None: async def on_populate(self) -> None:
self.all_users = await User.find_all().to_list() self.all_users = await User.find_all().to_list()
self.all_seats = await Seat.find_all(fetch_links=True).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( self.open_orders = List(await CateringOrder.find_many(
{ {
"status": { "status": {
@@ -111,6 +112,11 @@ class CateringAdminPage(Component):
self.session.create_task(self.session[ReceiptPrintingService].print_order(user, self.edited_order)) self.session.create_task(self.session[ReceiptPrintingService].print_order(user, self.edited_order))
self.edited_order = None 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: def build(self) -> Component:
if self.edited_order: if self.edited_order:
overlay = [ overlay = [
@@ -194,6 +200,19 @@ class CateringAdminPage(Component):
stroke_width=0.1, stroke_width=0.1,
stroke_color=self.session.theme.box_border_color, 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() Spacer()
), ),
fill=self.session.theme.box_color, fill=self.session.theme.box_color,