refactor catering, add orders view
This commit is contained in:
@@ -27,7 +27,6 @@ class BasePage(Component):
|
||||
if self.session.window_width > 28:
|
||||
return Container(
|
||||
content=Column(
|
||||
Row(),
|
||||
Column(
|
||||
Row(
|
||||
Spacer(grow_x=True, grow_y=True),
|
||||
@@ -50,10 +49,9 @@ class BasePage(Component):
|
||||
),
|
||||
Spacer(grow_x=True, grow_y=False),
|
||||
grow_y=False
|
||||
)
|
||||
),
|
||||
Row(),
|
||||
proportions=[4, 92, 4]
|
||||
),
|
||||
margin_top=4
|
||||
)
|
||||
),
|
||||
grow_x=True,
|
||||
grow_y=True
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
from typing import Optional
|
||||
from rio import Column, Component, event, TextStyle, Text, Spacer, Revealer, SwitcherBar, SwitcherBarChangeEvent
|
||||
|
||||
from rio import Column, Component, event, TextStyle, Text, ScrollContainer, Row, Button, Spacer, IconButton
|
||||
|
||||
from src.ez_lan_manager import ConfigurationService, CateringService, AccountingService
|
||||
from src.ez_lan_manager.components.CateringCartItem import CateringCartItem
|
||||
from src.ez_lan_manager import ConfigurationService, CateringService
|
||||
from src.ez_lan_manager.components.CateringSelectionItem import CateringSelectionItem
|
||||
from src.ez_lan_manager.components.MainViewContentBox import MainViewContentBox
|
||||
from src.ez_lan_manager.components.ShoppingCartAndOrders import ShoppingCartAndOrders
|
||||
from src.ez_lan_manager.pages import BasePage
|
||||
from src.ez_lan_manager.types.CateringMenuItem import CateringMenuItem
|
||||
from src.ez_lan_manager.types.CateringMenuItem import CateringMenuItemCategory
|
||||
from src.ez_lan_manager.types.SessionStorage import SessionStorage
|
||||
|
||||
|
||||
class CateringPage(Component):
|
||||
show_cart = True
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
self.session[SessionStorage].subscribe_to_logged_in_or_out_event(self.__class__.__name__, self.on_user_logged_in_status_changed)
|
||||
|
||||
@@ -21,110 +22,244 @@ class CateringPage(Component):
|
||||
async def on_user_logged_in_status_changed(self) -> None:
|
||||
await self.force_refresh()
|
||||
|
||||
async def on_remove_item(self, list_id: int) -> None:
|
||||
catering_service = self.session[CateringService]
|
||||
user_id = self.session[SessionStorage].user_id
|
||||
cart = catering_service.get_cart(user_id)
|
||||
try:
|
||||
cart.pop(list_id)
|
||||
except IndexError:
|
||||
return
|
||||
catering_service.save_cart(user_id, cart)
|
||||
await self.force_refresh()
|
||||
|
||||
async def on_empty_cart_pressed(self) -> None:
|
||||
self.session[CateringService].save_cart(self.session[SessionStorage].user_id, [])
|
||||
await self.force_refresh()
|
||||
async def on_switcher_bar_changed(self, _: SwitcherBarChangeEvent) -> None:
|
||||
await self.shopping_cart_and_orders.switch()
|
||||
|
||||
def build(self) -> Component:
|
||||
user_id = self.session[SessionStorage].user_id
|
||||
catering_service = self.session[CateringService]
|
||||
cart = catering_service.get_cart(user_id)
|
||||
cart_container = ScrollContainer(
|
||||
content=Column(
|
||||
*[CateringCartItem(
|
||||
article_name=cart_item.name,
|
||||
article_price=cart_item.price,
|
||||
article_id=cart_item.item_id,
|
||||
remove_item_cb=self.on_remove_item,
|
||||
list_id=idx
|
||||
) for idx, cart_item in enumerate(cart)],
|
||||
Spacer(grow_y=True)
|
||||
),
|
||||
min_height=8,
|
||||
min_width=33,
|
||||
margin=1
|
||||
self.shopping_cart_and_orders = ShoppingCartAndOrders()
|
||||
switcher_bar = SwitcherBar(
|
||||
values=["cart", "orders"],
|
||||
names=["Warenkorb", "Bestellungen"],
|
||||
selected_value="cart",
|
||||
margin_left=5,
|
||||
margin_right=5,
|
||||
margin_top=1,
|
||||
margin_bottom=1,
|
||||
color=self.session.theme.hud_color,
|
||||
on_change=self.on_switcher_bar_changed
|
||||
)
|
||||
shopping_cart = MainViewContentBox(
|
||||
Column(
|
||||
Text(
|
||||
text="Catering",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin_top=2,
|
||||
margin_bottom=0,
|
||||
align_x=0.5
|
||||
),
|
||||
Text(
|
||||
text="Warenkorb",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=0.8
|
||||
),
|
||||
margin_top=0.2,
|
||||
margin_bottom=0,
|
||||
align_x=0.5
|
||||
),
|
||||
cart_container,
|
||||
Row(
|
||||
Text(
|
||||
text=f"Preis: {AccountingService.make_euro_string_from_int(sum(cart_item.price for cart_item in cart))}",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=0.8
|
||||
),
|
||||
margin=1
|
||||
),
|
||||
Button(
|
||||
content=Text(
|
||||
"Warenkorb leeren",
|
||||
style=TextStyle(fill=self.session.theme.danger_color, font_size=0.9),
|
||||
align_x=0.2
|
||||
),
|
||||
margin=1,
|
||||
margin_left=0,
|
||||
shape="rectangle",
|
||||
style="major",
|
||||
color="primary",
|
||||
on_press=self.on_empty_cart_pressed
|
||||
),
|
||||
Button(
|
||||
content=Text(
|
||||
"Bestellen",
|
||||
style=TextStyle(fill=self.session.theme.success_color, font_size=0.9),
|
||||
align_x=0.2
|
||||
),
|
||||
margin=1,
|
||||
margin_left=0,
|
||||
shape="rectangle",
|
||||
style="major",
|
||||
color="primary"
|
||||
),
|
||||
)
|
||||
)
|
||||
) if user_id else Spacer()
|
||||
|
||||
|
||||
shopping_cart_and_orders_container = MainViewContentBox(
|
||||
Column(
|
||||
Text(
|
||||
text="Catering",
|
||||
style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin_top=2,
|
||||
margin_bottom=0,
|
||||
align_x=0.5
|
||||
),
|
||||
switcher_bar,
|
||||
self.shopping_cart_and_orders
|
||||
)
|
||||
) if user_id else Spacer()
|
||||
|
||||
return BasePage(
|
||||
content=Column(
|
||||
# SHOPPING CART
|
||||
shopping_cart,
|
||||
shopping_cart_and_orders_container,
|
||||
# ITEM SELECTION
|
||||
MainViewContentBox(
|
||||
|
||||
Revealer(
|
||||
header="Snacks",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.SNACK))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Frühstück",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.BREAKFAST))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Hauptspeisen",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.MAIN_COURSE))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Desserts",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.DESSERT))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Wasser & Softdrinks",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.BEVERAGE_NON_ALCOHOLIC))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Alkoholische Getränke",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.BEVERAGE_ALCOHOLIC))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Cocktails & Longdrinks",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.BEVERAGE_COCKTAIL))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Shots",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.BEVERAGE_SHOT))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
MainViewContentBox(
|
||||
Revealer(
|
||||
header="Sonstiges",
|
||||
content=Column(
|
||||
*[CateringSelectionItem(
|
||||
article_name=catering_menu_item.name,
|
||||
article_price=catering_menu_item.price,
|
||||
article_id=catering_menu_item.item_id,
|
||||
on_add_callback=self.shopping_cart_and_orders.on_add_item,
|
||||
is_sensitive=(user_id is not None) and not catering_menu_item.is_disabled,
|
||||
additional_info=catering_menu_item.additional_info,
|
||||
is_grey=idx % 2 == 0
|
||||
) for idx, catering_menu_item in enumerate(catering_service.get_menu(CateringMenuItemCategory.NON_FOOD))],
|
||||
),
|
||||
header_style=TextStyle(
|
||||
fill=self.session.theme.background_color,
|
||||
font_size=1.2
|
||||
),
|
||||
margin=1,
|
||||
align_y=0.5
|
||||
)
|
||||
),
|
||||
align_y=0
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user