77 lines
2.5 KiB
Python
77 lines
2.5 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from rio import Component, Column, NumberInput, ThemeContextSwitcher, TextInput, Row, Button, EventHandler
|
|
|
|
from src.ez_lan_manager.types.Transaction import Transaction
|
|
from src.ez_lan_manager.types.User import User
|
|
|
|
|
|
class NewTransactionForm(Component):
|
|
user: Optional[User] = None
|
|
input_value: float = 0
|
|
input_reason: str = ""
|
|
new_transaction_cb: EventHandler[Transaction] = None
|
|
|
|
async def send_debit_transaction(self) -> None:
|
|
await self.call_event_handler(
|
|
self.new_transaction_cb,
|
|
Transaction(
|
|
user_id=self.user.user_id,
|
|
value=round(self.input_value * 100),
|
|
is_debit=True,
|
|
reference=self.input_reason,
|
|
transaction_date=datetime.now()
|
|
)
|
|
)
|
|
|
|
async def send_credit_transaction(self) -> None:
|
|
await self.call_event_handler(
|
|
self.new_transaction_cb,
|
|
Transaction(
|
|
user_id=self.user.user_id,
|
|
value=round(self.input_value * 100),
|
|
is_debit=False,
|
|
reference=self.input_reason,
|
|
transaction_date=datetime.now()
|
|
)
|
|
)
|
|
|
|
def build(self) -> Component:
|
|
return ThemeContextSwitcher(
|
|
content=Column(
|
|
NumberInput(
|
|
value=self.bind().input_value,
|
|
label="Betrag",
|
|
suffix_text="€",
|
|
decimals=2,
|
|
thousands_separator=".",
|
|
margin=1,
|
|
margin_bottom=0
|
|
),
|
|
TextInput(
|
|
text=self.bind().input_reason,
|
|
label="Beschreibung",
|
|
margin=1,
|
|
margin_bottom=0
|
|
),
|
|
Row(
|
|
Button(
|
|
content="Entfernen",
|
|
shape="rectangle",
|
|
color="danger",
|
|
margin=1,
|
|
on_press=self.send_debit_transaction
|
|
),
|
|
Button(
|
|
content="Hinzufügen",
|
|
shape="rectangle",
|
|
color="success",
|
|
margin=1,
|
|
on_press=self.send_credit_transaction
|
|
)
|
|
)
|
|
),
|
|
color="primary"
|
|
)
|