{% extends "management/base.html" %} {% load i18n lucide ui %} {% block heading %}{% trans "Memberships" %}{% endblock heading %} {% block subheading %}{% if current_season %}{% blocktrans %}Fee status for season{% endblocktrans %}{% endif %}{% endblock subheading %} {% block actions %} {% lucide "file-down" size=16 %} {% trans "Export to PDF" %} {% endblock actions %} {% block panel %} {% if not current_season %}
{% lucide "calendar-x" size=20 %} {% trans "No season covers today, so there's nothing to show fee status for yet." %}
{% else %}
{% lucide "users" size=16 %} {% trans "Registered" %}
{{ kpi_total }}
{% trans "This season" %}
{% lucide "circle-check" size=16 %} {% trans "Paid" %}
{{ kpi_paid }}
{% lucide "circle-dashed" size=16 %} {% trans "Partially paid" %}
{{ kpi_partial }}
{% lucide "circle-x" size=16 %} {% trans "Unpaid" %}
{{ kpi_unpaid }}
{% lucide "circle-check" size=16 %} {% trans "Waived" %}
{{ kpi_waived }}
{% lucide "percent" size=16 %} {% trans "Paid rate" %}
{% if kpi_paid_rate is None %}{% trans "N/A" %}{% else %}{{ kpi_paid_rate }}%{% endif %}
{% endif %}
{% lucide "x" size=16 %} {% trans "Reset" %}
{% csrf_token %}
{% blocktrans count counter=memberships|length %}{{ counter }} membership{% plural %}{{ counter }} memberships{% endblocktrans %}
{# table-cards: this table is dense enough (10+ columns) that horizontal scroll alone stops being usable below `md` -- see the .table-cards rule in app.css. #}
{% for membership in memberships %} {% empty %} {% endfor %}
{% trans "Name" %} {% trans "Email" %} {% trans "Family" %} {% trans "Status" %} {% trans "Fee status" %} {% trans "Owed" %} {% trans "Paid" %} {% trans "License" %}
{{ membership.member.last_name }}, {{ membership.member.first_name }} {{ membership.member.contact_email|default:"-" }} {% if membership.member.family_memberships_display %} {% for fm in membership.member.family_memberships_display %} {{ fm.family }} {% if not forloop.last %},{% endif %} {% endfor %} {% else %} - {% endif %} {{ membership.get_status_display }} {{ membership.get_fee_status_display }} € {{ membership.fee_amount }} € {{ membership.amount_paid }} {% if membership.record_payment_form and membership.fee_amount %}
{% blocktrans with remaining=membership.remaining_balance_display %}{{ remaining }} left{% endblocktrans %}
{% endif %}
{{ membership.license|default:"-" }} {% if membership.record_payment_form %}
{% endif %}
{% trans "Nobody matches these filters." %}
{% trans "Record payment" as record_payment_title %} {% trans "Record" as record_payment_submit_label %} {% for membership in memberships %} {% if membership.record_payment_form %} {# A standalone form, not nested inside the bulk form above -- its submit button lives in the table row and links back here via the form="..." attribute. #}
{% csrf_token %}
{% url 'management:membership_record_payment' membership.pk as record_payment_url %} {% blocktrans with name=membership.member asvar record_payment_blurb %}For {{ name }}. Any amount is fine -- partial payments accumulate until the fee is settled.{% endblocktrans %} {% include "controlpanel/_modal_form.html" with modal_id=membership.pk|dom_id:"record_payment_modal" title=record_payment_title form=membership.record_payment_form action_url=record_payment_url submit_label=record_payment_submit_label submit_icon="receipt" blurb=record_payment_blurb %} {% endif %} {% endfor %} {% endblock panel %} {% block extra_body %} {% endblock extra_body %}