Add free-drink toggle, payment deletion, donation flow, expanded dashboard
- Crew can mark bookings as free (Gratis checkbox) on staff_user page; free anonymous bookings skip the auto-payment. - Users (and crew) can delete their UserPayments with a confirmation page. - Pay page redesigned around "Eintrittsspende": quick-pick amount buttons (drinks rounded to 5 € + 10/15/20/25/30), "Nur Drinks" escape, intro text, type=text input to dodge browser locale formatting. - Me page: always-visible donate button, intro text linking drinks + Eintrittsspende. - Day cutoff at 06:00 Berlin: festival day rolls at 06:00, applied to current_festival_day plus Frühaufsteher/Nachtschwärmer/Goldene Stunde. - Dashboard: single Finanzen section (income vs costs) with breakdown, fun facts grouped (Trinker / Getränke / Zeit / Geld / Gratis). - Offene Beträge filtered to open > 0. - Staff list shows "(das bist du)" disabled row for own user. - Renamed seed_drinks_2026 -> seed_2026, added Baumarkt 194 € entry. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
{% block content %}
|
||||
<p class="muted">Crew-Ansicht</p>
|
||||
<h2>Buchen für <span class="staff-target">{{ tab_user.username }}</span>{% if is_anonymous_target %} (Bar / Anonym){% endif %}</h2>
|
||||
<h2>Buchen für <span class="staff-target">{{ tab_user.username }}</span></h2>
|
||||
|
||||
{% if booked_drink %}
|
||||
<div class="toast" role="status">
|
||||
Gebucht: +1 {{ booked_drink.name }}{% if is_anonymous_target %} (bar bezahlt){% endif %}
|
||||
Gebucht: +1 {{ booked_drink.name }}{% if booked_free %} (gratis){% elif is_anonymous_target %} (bar bezahlt){% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -38,19 +38,22 @@
|
||||
{% if phase == "booking" %}
|
||||
<section>
|
||||
<h3>Getränk buchen</h3>
|
||||
<div class="drink-grid">
|
||||
{% for drink in drinks %}
|
||||
<form method="post" action="{% url 'suff:staff_book' tab_user.username %}">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="drink_id" value="{{ drink.id }}" />
|
||||
<button type="submit" class="drink-btn drink-btn-{{ drink.category }}">
|
||||
<form method="post" action="{% url 'suff:staff_book' tab_user.username %}">
|
||||
{% csrf_token %}
|
||||
<label class="for-free-toggle">
|
||||
<input type="checkbox" name="for_free" value="1" />
|
||||
<span>Gratis (z.b. Artists am Spieltag)</span>
|
||||
</label>
|
||||
<div class="drink-grid">
|
||||
{% for drink in drinks %}
|
||||
<button type="submit" name="drink_id" value="{{ drink.id }}" class="drink-btn drink-btn-{{ drink.category }}">
|
||||
<span class="drink-plus">+1</span>
|
||||
<span class="drink-name">{{ drink.name }}</span>
|
||||
<span class="drink-price">{{ drink.sale_price_per_bottle|floatformat:2 }} €</span>
|
||||
</button>
|
||||
</form>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user