diff --git a/charts.py b/charts.py index 0a8d074..8f6bf09 100644 --- a/charts.py +++ b/charts.py @@ -31,8 +31,8 @@ def color_for_name(name: str, names: list[str]) -> str: return PLAYER_PALETTE[index % len(PLAYER_PALETTE)] -def net_tone(value_cents: int) -> str: - bucket = net_result_bucket(value_cents) +def net_tone(value_cents: int, break_even_cents: int = 100) -> str: + bucket = net_result_bucket(value_cents, break_even_cents) if bucket == "win": return "#6fc093" # --pos @@ -96,7 +96,7 @@ def cumulative_profit_series(sessions: list[SessionSummary]) -> dict[str, object def player_session_series( - sessions: list[SessionSummary], player_name: str + sessions: list[SessionSummary], player_name: str, break_even_cents: int = 100 ) -> dict[str, Any]: ordered_sessions = sorted(sessions, key=session_sort_key) labels: list[str] = [] @@ -130,12 +130,12 @@ def player_session_series( "labels": labels, "color": color_for_name(player_name, all_player_names), "net_values": net_values, - "net_colors": [net_tone(round(value * 100)) for value in net_values], + "net_colors": [net_tone(round(value * 100), break_even_cents) for value in net_values], "cumulative_values": cumulative_values, } -def session_breakdown_series(session: SessionSummary) -> dict[str, Any]: +def session_breakdown_series(session: SessionSummary, break_even_cents: int = 100) -> dict[str, Any]: ordered_entries = sorted( session.entries, key=lambda entry: (entry.net_cents, entry.player_name.casefold()), @@ -145,5 +145,5 @@ def session_breakdown_series(session: SessionSummary) -> dict[str, Any]: return { "labels": [entry.player_name for entry in ordered_entries], "net_values": [round(entry.net_cents / 100, 2) for entry in ordered_entries], - "net_colors": [net_tone(entry.net_cents) for entry in ordered_entries], + "net_colors": [net_tone(entry.net_cents, break_even_cents) for entry in ordered_entries], } diff --git a/config.py b/config.py index 8592fc9..00d6da7 100644 --- a/config.py +++ b/config.py @@ -9,7 +9,7 @@ DATA_PATH = BASE_DIR / "data" / "entries.csv" DEFAULT_DATABASE_URL = f"sqlite:///{BASE_DIR / 'data' / 'boker-dev.sqlite3'}" ELIGIBLE_MIN_SESSIONS = 3 -APP_VERSION = "2.5.1" +APP_VERSION = "2.5.2" def load_local_env(env_path: Path) -> None: diff --git a/routes/leagues.py b/routes/leagues.py index 3ba2b4a..b95340c 100644 --- a/routes/leagues.py +++ b/routes/leagues.py @@ -589,7 +589,7 @@ def player_detail(league_ref: str, player_id: str): abort(404) all_sessions = build_session_summaries(list_event_rows_for_league(league.id)) - board = build_leaderboard(all_sessions) + board = build_leaderboard(all_sessions, league.break_even_cents) player_stats = next( (player for player in board if player.player_name == player_record.display_name), None, @@ -619,7 +619,7 @@ def player_detail(league_ref: str, player_id: str): player_record=player_record, player=player_stats, player_rank=player_rank, - chart_data=player_session_series(all_sessions, player_record.display_name), + chart_data=player_session_series(all_sessions, player_record.display_name, league.break_even_cents), player_sessions=player_sessions, session_label=session_label, session_ids=session_ref_map(league.id), @@ -676,7 +676,7 @@ def players(league_ref: str): from ledger_repositories import list_event_rows_for_league all_sessions = build_session_summaries(list_event_rows_for_league(league.id)) - board = build_leaderboard(all_sessions) + board = build_leaderboard(all_sessions, league.break_even_cents) stats_by_name = {p.player_name: p for p in board} return render_template( @@ -1083,7 +1083,7 @@ def session_public_view(league_ref: str, session_id: str): session=summary, session_number=session_number, raw_events=session_events(rows, summary.session_id), - chart_data=session_breakdown_series(summary), + chart_data=session_breakdown_series(summary, league.break_even_cents), session_label=session_label, prev_session_id=ref_to_db_id.get(prev_summary.session_id) if prev_summary else None, next_session_id=ref_to_db_id.get(next_summary.session_id) if next_summary else None,