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 }}
+
+
+
+