Verified Commit 7c3be1f5 authored by Jakob Moser's avatar Jakob Moser
Browse files

Export balances to CSV

Closes #33
parent d6f32907
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
from datetime import UTC, datetime
from io import StringIO

from textual.app import App, ComposeResult
from textual.containers import VerticalScroll
from textual.events import DeliveryComplete
from textual.widgets import Footer, Header

from poolpay import db
from poolpay.admin.AddPerson import AddPerson
from poolpay.admin.PersonsTable import PersonsTable, to_row
from poolpay.csv.get_persons_csv import get_persons_csv
from poolpay.model.Card import Card
from poolpay.model.Person import Person

@@ -14,6 +19,7 @@ class PoolPayAdminApp(App):
    BINDINGS = [
        ("n", "add_person", "Neue Person hinzufügen"),
        ("d", "toggle_dark", "Dark Mode umschalten"),
        ("e", "export_csv", "CSV exportieren"),
        ("f5", "reload", "Neu laden"),
    ]

@@ -26,6 +32,12 @@ class PoolPayAdminApp(App):
        self.title = "PoolPay"
        self.sub_title = "Administration"

    def on_delivery_complete(self, delivery_complete: DeliveryComplete) -> None:
        self.notify(f"Gespeichert unter {delivery_complete.path}")

    def on_delivery_failed(self) -> None:
        self.notify("Speichern fehlgeschlagen", severity="error")

    def action_reload(self) -> None:
        table = self.query_one(PersonsTable)
        table.reload()
@@ -43,3 +55,12 @@ class PoolPayAdminApp(App):
            self.query_one(PersonsTable).add_rows((to_row(p),))

        self.push_screen(AddPerson(), callback=add_person)

    def action_export_csv(self) -> None:
        persons_csv = get_persons_csv()

        # Timestamp in the form "2025-06-04T190207Z" (UTC date, only second-level precision)
        now = datetime.now(tz=UTC).isoformat()[:19].replace(":", "") + "Z"

        filename = f"{now}_poolpay.csv"
        self.deliver_text(StringIO(persons_csv), save_filename=filename)