Verified Commit ff31437d authored by Jakob Moser's avatar Jakob Moser
Browse files

Try implementing persons table

parent 37808365
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
from babel.numbers import format_currency
from rich.text import Text
from textual.widgets import DataTable

from poolpay.model.Person import Person


def to_row(p: Person) -> tuple[str, str, Text, str]:
    balance = format_currency(p.balance_cents / 100, "EUR", locale="de_DE")
    style = "green" if p.balance_cents > 0 else "red" if p.balance_cents < 0 else ""

    return (
        p.name,
        p.cl_account_name,
        Text(balance, style=style),
        ", ".join(card.id for card in p.cards)
    )


class PersonsTable(DataTable):
    def on_mount(self) -> None:
        self.add_columns("Name", "CL-Account", "Kontostand", "Karten-IDs")
        self.add_rows(to_row(p) for p in Person.get_all())

    def on_data_table_header_selected(self, event: DataTable.HeaderSelected) -> None:
        self.sort(event.column_key)