feat: Add dedicated buyer dashboard, buyer role assignment, Bavarian White-Blue light/dark mode and mobile drawer

This commit is contained in:
2026-09-22 08:21:06 +02:00
parent 1ff5b3a31e
commit 0bdcbe7976
6 changed files with 825 additions and 67 deletions
+28 -3
View File
@@ -87,15 +87,17 @@
<div class="no-print">
<div class="admin-header">
<div>
<h1>👨‍🍳 Einkäufer- & Admin-Cockpit</h1>
<h1>⚙️ Verwaltung & Orga-Cockpit</h1>
<p class="admin-sub">Portal: <strong>{{ tenant.name }}</strong></p>
</div>
<div class="admin-actions-top">
<a href="/einkauf{% if event %}?event_id={{ event.id }}{% endif %}" class="btn-primary" style="text-decoration: none; display: inline-flex; align-items: center; gap: 6px;">
🛒 Zur Einkaufs- & Kassenansicht
</a>
{% if event %}
<button onclick="copyShoppingList()" class="btn-primary">📋 Einkaufsliste kopieren</button>
<button onclick="copyGuestPassLink('{{ event.id }}', '{{ event.guest_token or '' }}')" class="btn-secondary" title="Gast-Link für Dienstleister">🔗 Dienstleister-Gastlink</button>
<a href="/events/{{ event.id }}/calendar.ics" class="btn-secondary" title="Termin als Outlook/Kalenderdatei (.ics) herunterladen" style="text-decoration: none; display: inline-flex; align-items: center;">📅 Outlook (.ics)</a>
<button onclick="openOutlookModal()" class="btn-secondary" title="Outlook Einladungsvorlage anzeigen">✉️ Outlook-Vorlage</button>
<a href="/events/{{ event.id }}/calendar.ics" class="btn-secondary" title="Termin als Outlook/Kalenderdatei (.ics) herunterladen" style="text-decoration: none; display: inline-flex; align-items: center;">📅 Outlook (.ics)</a>
<button onclick="window.print()" class="btn-secondary">🖨️ Liste drucken (A4)</button>
{% endif %}
</div>
@@ -380,6 +382,18 @@
<strong>Gäste- & Dienstleister-Bestellungen erlauben</strong>
</label>
</div>
<div class="input-group" style="margin-top: 14px;">
<label for="edit_buyer">🛒 Zugewiesener Einkäufer für diese Runde</label>
<select id="edit_buyer" name="buyer_id">
<option value="">-- Nicht zugewiesen / Admin übernimmt --</option>
{% for member in team_members %}
<option value="{{ member.id }}" {% if event.buyer_id == member.id %}selected{% endif %}>
{{ member.first_name }} {{ member.last_name }} ({{ member.email }})
</option>
{% endfor %}
</select>
<small class="field-hint">Der ausgewählte Kollege sieht diese Runde direkt in der Einkaufs-Zentrale.</small>
</div>
<div class="input-group" style="margin-top: 14px;">
<label for="edit_status">Status der Runde</label>
<select id="edit_status" name="status_val">
@@ -428,6 +442,17 @@
<strong>Gäste- & Dienstleister-Bestellungen erlauben</strong>
</label>
</div>
<div class="input-group" style="margin-top: 14px;">
<label for="new_buyer">🛒 Zugewiesener Einkäufer für diese Runde (Optional)</label>
<select id="new_buyer" name="buyer_id">
<option value="">-- Nicht zugewiesen / Admin übernimmt --</option>
{% for member in team_members %}
<option value="{{ member.id }}">
{{ member.first_name }} {{ member.last_name }} ({{ member.email }})
</option>
{% endfor %}
</select>
</div>
<button type="submit" class="btn-primary" style="margin-top: 1rem;">Runde jetzt starten</button>
</form>
</div>