Files
putzliga/app/routes/scoreboard.py
2026-04-13 08:32:28 +02:00

44 lines
1.6 KiB
Python

from __future__ import annotations
from flask import Blueprint, render_template, request
from flask_login import login_required
from ..services.dates import local_now, month_label
from ..services.monthly import archive_months_missing_up_to_previous, compute_monthly_scores, get_archived_months, get_snapshot_rows
bp = Blueprint("scoreboard", __name__, url_prefix="/scoreboard")
@bp.route("")
@login_required
def index():
archive_months_missing_up_to_previous()
now = local_now()
current_rows = compute_monthly_scores(now.year, now.month)
archive_options = get_archived_months(limit=18)
selected = request.args.get("archive")
selected_archive = selected
selected_year = selected_month = None
archived_rows = []
if selected:
year_str, month_str = selected.split("-")
selected_year, selected_month = int(year_str), int(month_str)
archived_rows = get_snapshot_rows(selected_year, selected_month)
elif archive_options:
selected_year, selected_month = archive_options[0]
selected_archive = f"{selected_year}-{selected_month:02d}"
archived_rows = get_snapshot_rows(selected_year, selected_month)
return render_template(
"scoreboard/index.html",
current_rows=current_rows,
current_label=month_label(now.year, now.month),
archive_options=archive_options,
selected_archive=selected_archive,
archived_rows=archived_rows,
archive_label=month_label(selected_year, selected_month) if selected_year and selected_month else None,
max_points=max([row["total_points"] for row in current_rows], default=1),
)