500€ Kassen-Vorschuss was counted as income, inflating Einnahmen by 500€
and showing Bilanz -166€ instead of the correct -666€.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New usernames now show a "party is over" page instead of proceeding to
account creation. Existing users can still log in. Extended BOOKING_END
to 2026-06-17 23:59 to allow edits through Wednesday night.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Drink.Category.sekt for consignment alcoholic drinks
- Order sekt under "mit Alkohol" section, after Radler
- Rainbow gradient CSS for .drink-btn-sekt
- Rebalance all drink button brightness to match rainbow midpoint
- Seed Sekty Drink (3.50€, no deposit, no purchase price)
- Update Sternburg Export 10.99→9.49, Altenburger Helles 15.99→13.99
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Same fix as self-booking page: radio buttons replaced with checkboxes
with mutual-exclusivity JS, so Gratis/Direkt-bar can be deselected.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add is_superuser to list_display and list_filter. Add is_active,
is_staff, is_superuser, last_login (readonly), and user_permissions
to the user detail fieldset.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Style "Spenden" link as a compact right-aligned button
- Replace radio buttons with checkboxes for Gratis/Direkt-bezahlt (toggleable)
- Remove "Sonstiges" from payment method dropdown
- Disable submit buttons on form submit to prevent double-clicks and give loading feedback (fixes drink_id=None bug caused by disabled button value not being submitted)
- Block weak PINs (sequential and repeated digits)
- Limit usernames to 2–20 characters
- Style PIN errors consistently with other error messages
- Add self-service "PIN ändern" page, shown above Logout in 2-column layout
- Highlight own username in orange badge (matching staff-target cyan style)
- Update booking window: 2026-05-30 10:00 – 2026-06-14 22:00
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Balance panel turns green with "Bezahlt ✓" + breakdown when open_balance <= 0, on all four tab pages (me, pay, staff_user, staff_pay)
- booking_mode radio on me.html and staff_user.html: normal / for_free / cash_paid; cash_paid auto-creates matching UserPayment(method=cash)
- Dashboard finance section shows "Kasse (bar)" sum of all cash payments for cross-checking
- staff_pay prefill lower-capped at 0; "Zahlung eintragen" always visible on staff_user
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 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>
- Users can delete their own bookings (confirmation page)
- Crew page tree (/suff/staff/): book/pay/delete for any user, register
new users, set/reset PINs
- Anonymous walk-in user "anonym": bookings auto-create matching cash
payment so balance stays at 0
- Self-signup: unknown name creates account (PIN required); known name
without PIN and no activity allows claim (PIN required); known name
without PIN but with activity blocks and points to bar crew
- Crew-only PIN set/reset; no random PINs, PINs never displayed
- Cyan .staff-target highlight on all crew pages
- Updated suff.md with current feature state and open ideas
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add a Drink.category field (beer, alc_free_beer, radler, alc_free_radler,
soft, water) and apply per-category gradient backgrounds to the booking
buttons so users can recognize drinks at a glance. Sort buttons by
category, shrink them to a 3:2 aspect ratio, and switch labels to more
verbose brand names (Sternburg Export, Ur-Krostitzer, etc.).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
All three are now superseded by the staff-only /suff/dashboard/ page
plus the year-scoped Drink and User admin views: drink_stats by the
Drink list+detail, user_stats by the User list+detail breakdown, and
total_balance by the dashboard's Refinanzierung gesamt panel.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Self-service /suff/pay/ page lets users record their own payments
(cash/PayPal/bank/other) against their tab. Open balance is shown on
/suff/me/ alongside total and paid amount, with a Bezahlen button when
something is owed.
Staff-only /suff/dashboard/ replaces the drink_stats / total_balance /
user_stats CLI commands with a mobile-friendly festival view: overall
refinancing progress bar (Spenden vs. Ausgaben with Bilanz), drinks
refinancing bar (sales revenue vs. purchase cost with profit), per-drink
sold/total/balance, open balances per user, and fun facts (top
spender, top drink, busiest day, and top user per festival day).
Linked from /suff/me/ when the logged-in user is staff.
seed_drinks_2026 also creates the non-drink Payments we already know
about (toilets, drinks/equipment down payment, band fees per stage day),
idempotently keyed on (purpose, date).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
User list shows Konsumiert / Bezahlt / Offener Betrag for the current
year. User detail page adds a BILANZ section with per-drink breakdowns
(paid + free) so a quick look at the user page replaces what
user_stats used to print.
Drink list shows crates_purchased, bottles_sold, bottles_remaining,
purchase_price_total, and balance, with a year filter. Detail page
groups all derived values into German sections (Kästen, Flaschen,
Menge, Einkauf, Pfand, Verkauf), replacing the drink_stats command.
UserPayment admin gets a custom YearFilter (created_at__year is not
admin-filterable directly). Donation/Payment get date filters and
search.
Group admin is unregistered (unused in this project).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Drink gets a year field (default 2024 for legacy rows), with name+year
unique together so each festival can have its own price/crate config
without overwriting the previous year. User balance properties
(consumed_drinks_price, paid_amount, open_balance) and the new
current_year() helper all filter by current year so year-over-year data
stays separated.
UserPayment model tracks per-user payments (cash/PayPal/bank/other)
against their drink tab, separate from Donation (event-level income).
Verbose names + Meta verbose_name(_plural) added across all models, and
LANGUAGE_CODE set to "de" so the admin renders German throughout.
Drink gains a few derived properties (crates_full_returned,
crates_remaining, bottles_consumed, bottles_remaining,
remaining_purchase_value) used by the upcoming admin and dashboard
views.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Self-service drink tab at /suff/ for festival attendees. Users log in
with username + 3-digit PIN stored in a separate User.pin field, so
staff/admin accounts can keep their strong password for /admin/ and
also use the drink tool with the same username. PINs for staff users
must be set from the admin panel via a dedicated "PIN setzen" view to
prevent account takeover by name collision.
Time-gated to the festival window (Thu–Sun in Berlin tz) with phases
before/booking/readonly/closed; in non-production mode the tool is
always in booking phase for local testing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Update site title and dates to 2026 (11.-14. Juni)
- New amber/fire color scheme replacing the old green
- Archive 2022 and 2024 as single combined Django pages (news, program, A-Z, Bühne & Technik, Finanzen)
- Archive pages use a neutral blue-grey color scheme for content
- Remove standalone atoz, program, finance pages; consolidate into main Festival page
- Main page now has Über uns intro, Programm (2026 lineup), Von A bis Z, Finanzen sections
- Footer with archive links instead of nav entries
- Nav simplified to Festival and für Bands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>