{% extends "management/base.html" %} {% load i18n static lucide %} {% block panel_title %}Overview{% endblock panel_title %} {% block heading %}{{ club.name }}{% endblock heading %} {% block topbar_context %} {% if not attention.no_season %} {% blocktrans with start=attention.season.start_date|date:"Y" end=attention.season.end_date|date:"Y" %}Season {{ start }}-{{ end }}{% endblocktrans %} {% endif %} {% endblock topbar_context %} {% block actions %} {% lucide "plus" size=16 %} {% trans "New member" %} {% endblock actions %} {% block panel %} {# Every level here; base.html repeats it on other pages only once it turns urgent. #} {% include "management/_billing_notice.html" %} {% if attention.no_season %}
{% lucide "calendar-x" size=20 %} {% trans "No season covers today, so this club cannot take a signup or schedule a match. Nothing errors — it is simply inert." %}
{% endif %} {% if is_club_admin and billing_ends_at %}
{% lucide "calendar-clock" size=20 %} {% if billing_auto_renews %} {% blocktrans with date=billing_ends_at|date:"j M Y" %}Your current billing period ends {{ date }} and will renew automatically.{% endblocktrans %} {% else %} {% blocktrans with date=billing_ends_at|date:"j M Y" %}Your current billing period ends {{ date }} and is not set to renew automatically — billing is about to stop. Contact us to keep access.{% endblocktrans %} {% endif %}
{% endif %}
{% trans "Total members" %}
{{ member_count }}
{% if member_count_change is None %} {% trans "No previous season to compare" %} {% else %} {% if member_count_change > 0 %}+{% endif %}{{ member_count_change }} {% trans "vs last season" %} {% endif %}
{% trans "Awaiting approval" %}
{{ attention.pending_approvals }}
{% trans "Memberships to review" %}
{% trans "Teams without coach" %}
{{ attention.teams_without_manager }}
{% trans "Nobody can pick a squad" %}
{% trans "Unrostered members" %}
{{ attention.unrostered }}
{% trans "Active, on no team" %}
{% trans "New members" %}
{{ attention.new_members }}
{% trans "First season at this club" %}
{% trans "Attendance" %}
{% if attention.attendance.turnout is None %}—{% else %}{{ attention.attendance.turnout }}%{% endif %}
{% if attention.attendance.turnout is None %}{% trans "No events this season" %}{% else %}{% trans "Turnout this season" %}{% endif %}
{% if requirements_configured %}
{% trans "Missing documentation" %}
{{ missing_documentation_count }}
{% trans "Members with an open checklist item" %}
{% endif %}
{# --- left: needs attention + signups ----------------------------- #}
{% trans "Needs attention" %}
{% if attention.pending_approvals %}
{% blocktrans count count=attention.pending_approvals %}{{ count }} membership awaiting approval{% plural %}{{ count }} memberships awaiting approval{% endblocktrans %}
{% trans "Review" %}
{% endif %} {% if attention.teams_without_manager %}
{% blocktrans count count=attention.teams_without_manager %}{{ count }} team has no coach assigned{% plural %}{{ count }} teams have no coach assigned{% endblocktrans %}
{% trans "Nobody can pick a squad for them" %}
{% trans "Assign" %}
{% endif %} {% if attention.unrostered %}
{% blocktrans count count=attention.unrostered %}{{ count }} active member is on no team{% plural %}{{ count }} active members are on no team{% endblocktrans %}
{% trans "Review" %}
{% endif %} {% if missing_documentation_count %}
{% blocktrans count count=missing_documentation_count %}{{ count }} member has an open checklist item{% plural %}{{ count }} members have an open checklist item{% endblocktrans %}
{% trans "Documents/medical certificates still outstanding" %}
{% trans "Review" %}
{% endif %} {% if not attention.pending_approvals and not attention.teams_without_manager and not attention.unrostered and not missing_documentation_count %}
{% trans "Nothing needs attention." %}
{% endif %}
{% if is_club_admin %} {# Financial/admin-only charts -- desktop-only canvases, same reasoning the old flat template gave: squeezed on a phone, and this surface is desktop-only anyway now. #}
{% trans "Signups per month" %}

{% trans "New members against returning ones." %}

{% trans "Club fee status" %}
{% trans "Renewal rate" %}
{% if attention.renewal_rate is None %}

{% trans "No previous season to compare." %}

{% else %}
{% endif %}
{% endif %}
{# --- right: this weekend + news ----------------------------------- #}
{% if recent_notifications is not None %} {# Same anatomy as "Needs attention" on the left -- see management.context_processors.notification_bell, also shown as a dropdown from the topbar bell on every page; this is the fuller list. #}
{% trans "Notifications" %} {% if unread_notification_count %}
{% csrf_token %}
{% endif %}
{% for notification in recent_notifications %}
{{ notification.title }}
{{ notification.body|truncatechars:120 }}
{{ notification.created|timesince }} {% trans "ago" %}
{% empty %}
{% trans "Nothing yet." %}
{% endfor %}
{% endif %}
{% trans "Upcoming" %}
{% for event in upcoming_events %}
{{ event.start|date:"d" }}
{{ event.start|date:"D" }}
{{ event.title }}
{{ event.start|date:"H:i" }}
{% for team in event.teams.all %} {{ team.short_name }} {% endfor %}
{% lucide "chevron-right" size=15 %}
{% if not forloop.last %}
{% endif %} {% empty %}
{% trans "Nothing scheduled." %}
{% endfor %}
{% trans "View calendar" %} →
{% trans "News" %} {% trans "View all" %}
{% for news_item in published_news %}
{{ news_item.title }} {{ news_item.published_at|date:"j M" }}
{% empty %}
{% trans "Nothing published yet." %}
{% endfor %}
{% for group in groups %} {% if group.title != "Shop" or is_club_admin %}
{% lucide group.icon size=16 %} {{ group.title }}
{% for label, value in group.stats %}
{{ label }}
{% if group.title == "Shop" and label == "Outstanding" or label == "Revenue" %}€{% endif %}{{ value }}
{% endfor %}
{% endif %} {% endfor %}
{% endblock panel %} {% block extra_body %} {% trans "New" as new_label %} {% trans "Returning" as returning_label %} {% trans "Renewed" as renewed_label %} {% trans "Not renewed" as not_renewed_label %} {{ charts|json_script:"chart-data" }} {{ attention.renewal_rate|json_script:"renewal-rate-data" }} {% endblock extra_body %}