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