feat: Compact 1-page print view, event lifecycle & conflict warnings, bulk email invites, guest pass link and post-event guest cleanup

This commit is contained in:
2026-09-21 13:29:15 +02:00
parent e5ca9c3cbf
commit 913aa646ea
5 changed files with 741 additions and 263 deletions
+23 -8
View File
@@ -3,6 +3,20 @@
{% block content %}
<div class="container">
<!-- Multi-Event Picker (wenn mehrere anstehende Runden offen sind) -->
{% if open_events|length > 1 %}
<div class="multi-event-banner">
<span>📅 Weitere offene Termine:</span>
<div class="multi-event-chips">
{% for ev in open_events %}
<a href="/?event_id={{ ev.id }}{% if is_guest_mode %}&guest=1{% endif %}" class="mini-chip {% if event and event.id == ev.id %}active{% endif %}">
{{ ev.event_date.strftime('%d.%m.') }} – {{ ev.title }}
</a>
{% endfor %}
</div>
</div>
{% endif %}
<!-- Header Banner -->
{% if event %}
<div class="banner {% if is_closed %}banner-closed{% endif %}">
@@ -76,9 +90,9 @@
<!-- Right: User Details & Summary -->
<div class="summary-section">
<div class="summary-card">
<h2>2. Bestellung & Angaben</h2>
<h2>2. Angaben & Übersicht</h2>
{% if current_user %}
{% if current_user and not is_guest_mode %}
<div class="logged-in-badge">
<div class="user-avatar">👤</div>
<div>
@@ -92,18 +106,19 @@
<!-- Gast Angaben -->
<div class="guest-order-box">
<div class="privacy-note" style="margin-bottom: 12px;">
👋 <strong>Gast-Bestellung:</strong> Du bestellst ohne dauerhaftes Benutzerkonto für diesen Termin mit.
👋 <strong>Gast- & Dienstleister-Bestellung:</strong><br>
Du bestellst ohne dauerhaftes Konto für diesen Termin ({{ event.event_date.strftime('%d.%m.') }}) mit.
</div>
<div class="input-group">
<label for="g_first_name">Dein Vorname *</label>
<input type="text" id="g_first_name" name="guest_first_name" required placeholder="z. B. Christian">
<label for="g_first_name">Vorname / Name *</label>
<input type="text" id="g_first_name" name="guest_first_name" required placeholder="z. B. Tobias">
</div>
<div class="input-group">
<label for="g_last_name">Nachname (optional)</label>
<input type="text" id="g_last_name" name="guest_last_name" placeholder="z. B. Bauer">
<label for="g_last_name">Firma / Abteilung (optional)</label>
<input type="text" id="g_last_name" name="guest_last_name" placeholder="z. B. IT-Service Müller">
</div>
<div class="input-group">
<label for="g_email">E-Mail (optional für Bestätigung)</label>
<label for="g_email">E-Mail (optional)</label>
<input type="email" id="g_email" name="guest_email" placeholder="name@firma.de">
</div>
</div>