CP_EHRENAMT/app/templates/dienste_einsatz.html
2026-06-25 18:58:44 +02:00

95 lines
3.8 KiB
HTML

{% extends shell_base %}
{% block title %}Einsatz besetzen · CheckPoint Ehrenamt{% endblock %}
{% from "_zeit.html" import zeitspanne %}
{% macro besetzte_plaetze(zuteilungen, frei, leer_text) %}
{% for z in zuteilungen %}
<li class="cp-card">
<strong>{{ z.user.anzeigename }}</strong>
<form method="post" action="{{ url_for('dienste.entfernen', einsatz_id=einsatz.id) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="zuteilung_id" value="{{ z.id }}">
<button type="submit" class="cp-btn cp-btn--ghost">Entfernen</button>
</form>
</li>
{% endfor %}
{% for _ in range(frei) %}
<li class="cp-card cp-card--leer cp-muted">{{ leer_text }}</li>
{% endfor %}
{% endmacro %}
{% block content %}
{% if einsatz.planungszeitraum_id %}
<p><a class="cp-muted" href="{{ url_for('dienste.zeitraum', zeitraum_id=einsatz.planungszeitraum_id) }}">← Zurück</a></p>
{% else %}
<p><a class="cp-muted" href="{{ url_for('dienste.liste') }}">← Dienstplan</a></p>
{% endif %}
<h1>{{ einsatz.art }}{% if einsatz.ort %} · {{ einsatz.ort }}{% endif %}</h1>
<div class="cp-muted">
{{ einsatz.datum.strftime('%a, %d.%m.%Y') }} ·
{{ zeitspanne(einsatz) }}
</div>
<div class="cp-muted">
{{ haupt|length }}/{{ einsatz.HAUPT_PLAETZE }} Haupt ·
{{ springer|length }}/{{ einsatz.SPRINGER_PLAETZE }} Springer
</div>
{# Unterbesetzt-Markierung (manuell) #}
<form method="post" action="{{ url_for('dienste.unterbesetzt', einsatz_id=einsatz.id) }}" class="cp-actions">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<button type="submit" class="cp-btn {{ 'cp-btn--urgent' if einsatz.unterbesetzt else 'cp-btn--ghost' }}">
{{ "Unterbesetzt aufheben" if einsatz.unterbesetzt else "Als unterbesetzt markieren" }}
</button>
</form>
{% if einsatz.unterbesetzt %}
<p class="cp-tag cp-tag--urgent">Unterbesetzt</p>
{% endif %}
<h2>Hauptplätze</h2>
<ul class="cp-list">
{{ besetzte_plaetze(haupt, haupt_frei, "Frei") }}
</ul>
<h2>Springerplatz</h2>
<ul class="cp-list">
{{ besetzte_plaetze(springer, springer_frei, "Frei") }}
</ul>
<h2>Verfügbare Personen</h2>
<p class="cp-muted">Nur Personen, die „Kann" gemeldet haben. Zahlen helfen beim
fairen Verteilen.</p>
<ul class="cp-list">
{% for p in kandidaten %}
{% set f = fairness.get(p.id) %}
<li class="cp-card">
<strong>{{ p.anzeigename }}</strong>
<div class="cp-muted">
{{ (f[0] if f else 0) }} bisherige Einsätze ·
zuletzt: {{ f[1].strftime('%d.%m.%Y') if f and f[1] else '—' }}
</div>
<div class="cp-actions">
{% if haupt_frei > 0 %}
<form method="post" action="{{ url_for('dienste.zuteilen', einsatz_id=einsatz.id) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="user_id" value="{{ p.id }}">
<input type="hidden" name="platztyp" value="haupt">
<button type="submit" class="cp-btn cp-btn--primary">Als Haupt</button>
</form>
{% endif %}
{% if springer_frei > 0 %}
<form method="post" action="{{ url_for('dienste.zuteilen', einsatz_id=einsatz.id) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="user_id" value="{{ p.id }}">
<input type="hidden" name="platztyp" value="springer">
<button type="submit" class="cp-btn cp-btn--ghost">Als Springer</button>
</form>
{% endif %}
</div>
</li>
{% else %}
<li class="cp-muted">Niemand hat „Kann" gemeldet (oder alle sind schon zugeteilt).</li>
{% endfor %}
</ul>
{% endblock %}