prerelease/0.6.0 #1
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user