132 lines
5.3 KiB
Python
132 lines
5.3 KiB
Python
from typing import Optional
|
|
|
|
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.components.MainViewContentBox import MainViewContentBox
|
|
from src.ez_lan_manager.pages import BasePage
|
|
from src.ez_lan_manager.types.CateringMenuItem import CateringMenuItem
|
|
from src.ez_lan_manager.types.SessionStorage import SessionStorage
|
|
|
|
|
|
class CateringPage(Component):
|
|
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)
|
|
|
|
@event.on_populate
|
|
async def on_populate(self) -> None:
|
|
await self.session.set_title(f"{self.session[ConfigurationService].get_lan_info().name} - Catering")
|
|
|
|
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()
|
|
|
|
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
|
|
)
|
|
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()
|
|
|
|
|
|
|
|
return BasePage(
|
|
content=Column(
|
|
# SHOPPING CART
|
|
shopping_cart,
|
|
# ITEM SELECTION
|
|
MainViewContentBox(
|
|
|
|
),
|
|
align_y=0
|
|
)
|
|
)
|