diff --git a/app.py b/app.py index 70ae2af..b1f30e6 100644 --- a/app.py +++ b/app.py @@ -448,6 +448,20 @@ def admin_dashboard(): recent_sessions = sessions[:8] recent_events = list(reversed(events[-20:])) + admin_totals = { + "cash_in_cents": sum(session.total_cash_in_cents for session in sessions), + "paid_out_cents": sum(session.total_paid_out_cents for session in sessions), + "still_owed_cents": sum( + session.total_current_due_cents for session in sessions + ), + "players_owe_cents": sum( + session.total_player_owes_cents for session in sessions + ), + "open_balance_cents": sum( + session.total_open_balance_cents for session in sessions + ), + } + return render_template( "admin_dashboard.html", open_sessions=open_sessions, @@ -455,6 +469,7 @@ def admin_dashboard(): recent_events=recent_events, player_names=unique_player_names(events), session_label=session_label, + admin_totals=admin_totals, ) diff --git a/static/css/style.css b/static/css/style.css index 412cd27..f77f9b9 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -1069,6 +1069,31 @@ td a:hover { display: none; } +.admin-cash-grid { + display: grid; + gap: 1rem; + grid-template-columns: repeat(5, minmax(0, 1fr)); + margin-bottom: 1rem; +} + +@media (max-width: 1200px) { + .admin-cash-grid { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +@media (max-width: 760px) { + .admin-cash-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 520px) { + .admin-cash-grid { + grid-template-columns: 1fr; + } +} + @media (max-width: 1100px) { .payout-summary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); diff --git a/stats.py b/stats.py index 0fc8c3d..c1d5af7 100644 --- a/stats.py +++ b/stats.py @@ -146,6 +146,18 @@ class SessionSummary: def total_player_owes_cents(self) -> int: return sum(entry.player_owes_cents for entry in self.entries) + @property + def total_cash_in_cents(self) -> int: + return sum(entry.buy_in_cents for entry in self.entries) + + @property + def total_paid_out_cents(self) -> int: + return sum(entry.paid_cents for entry in self.entries) + + @property + def total_open_balance_cents(self) -> int: + return self.total_current_due_cents - self.total_player_owes_cents + @dataclass class PlayerStats: diff --git a/templates/admin_dashboard.html b/templates/admin_dashboard.html index a5042d3..41d9b29 100644 --- a/templates/admin_dashboard.html +++ b/templates/admin_dashboard.html @@ -115,6 +115,39 @@ +
+
+ Cash in + {{ admin_totals.cash_in_cents | money }} +
+ +
+ Paid out + {{ admin_totals.paid_out_cents | money }} +
+ +
+ Still owed + + {{ admin_totals.still_owed_cents | money }} + +
+ +
+ Players owe + + {{ admin_totals.players_owe_cents | money }} + +
+ +
+ Open balance + + {{ admin_totals.open_balance_cents | money }} + +
+
+
@@ -126,10 +159,13 @@ - + - - + + + + + @@ -143,8 +179,17 @@ - - + + + + +
DateSession PlayersBuy-insCash-outsCash inPaid outStill owedPlayers oweOpen balance Status Action
{{ session.entries|length }}{{ session.total_buy_in_cents | money }}{{ session.total_cash_out_cents | money }}{{ session.total_cash_in_cents | money }}{{ session.total_paid_out_cents | money }} + {{ session.total_current_due_cents | money }} + + {{ session.total_player_owes_cents | money }} + + {{ session.total_open_balance_cents | money }} + {{ session.status }}