95 lines
3.8 KiB
HTML
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 %}
|