173 Commits

Author SHA1 Message Date
flo b5142ce3c7 fix(dashboard): subtract cash prefill from income to fix Bilanz
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>
2026-06-20 16:26:53 +02:00
flo ae9d749356 feat(finance): add payment method field and post-festival accounting tools
- Add Payment.method field (cash/card/paypal/bank) with migration
- Show method in PaymentAdmin list view
- Add merge_users management command (atomic, reassigns all FKs)
- Add update_crates_2026 command (actual purchased/returned crates)
- Add finance_summary_2026 command (Ausgaben, Einnahmen, Kasse, Bilanz)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 16:19:05 +02:00
flo 89ea65a0c8 feat(suff): disable new user registration post-festival
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>
2026-06-15 16:36:30 +02:00
flo 2d611dcac5 feat(drinks): add Sekt category with rainbow button styling
- 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>
2026-06-09 15:54:29 +02:00
flo 752f129df9 rename(commands): fill_data_* → seed_* for consistency
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 15:27:33 +02:00
flo 5b7fa07b44 Merge pull request 'chore(deps): update dependency django to v6.0.6' (#28) from renovate/django-6.x into main
Reviewed-on: #28
2026-06-09 13:23:27 +00:00
flo 01b37fda79 Merge pull request 'chore(deps): update dependency ruff to v0.15.16' (#29) from renovate/ruff-0.x into main
Reviewed-on: #29
2026-06-09 13:23:00 +00:00
flo 29e4b231da chore(deps): update dependency ruff to v0.15.16 2026-06-04 17:00:57 +00:00
flo 9fb5373f98 chore(deps): update dependency django to v6.0.6 2026-06-03 17:00:48 +00:00
flo de140c3feb fix(suff): use deselectable checkboxes for booking mode on staff page
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>
2026-05-31 19:00:57 +02:00
flo a0ed28c587 feat(admin): improve user admin list view and detail page
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>
2026-05-31 18:40:59 +02:00
flo 3ef2037917 split drinks by with/without alcohol + disable direct-cash button for anonym 2026-05-31 17:53:45 +02:00
flo 23b24ed0b9 feat(suff): UX improvements and bug fixes
- 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>
2026-05-31 17:37:30 +02:00
flo e0e2b08eef update main page 2026-05-29 14:55:37 +02:00
flo 88456eb5eb Merge pull request 'chore(deps): update dependency ruff to v0.15.15' (#27) from renovate/ruff-0.x into main
Reviewed-on: #27
2026-05-29 11:32:03 +00:00
flo 6558cbe015 chore(deps): update dependency ruff to v0.15.15 2026-05-28 17:00:54 +00:00
flo 95d1481cb4 feat(admin): show is_staff in user list with filter 2026-05-28 17:09:58 +02:00
flo d612acd715 Add settled balance panel, cash booking mode, and Kasse dashboard line
- 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>
2026-05-27 20:02:14 +02:00
flo 51d079a467 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>
2026-05-26 23:50:25 +02:00
flo 50fc32c577 Add booking deletion, crew views, anonymous walk-in, and account claim
- 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>
2026-05-26 18:05:20 +02:00
flo 980decb3fd Merge pull request 'Update dependency ruff to v0.15.14' (#26) from renovate/ruff-0.x into main
Reviewed-on: #26
2026-05-26 14:06:07 +00:00
flo 97085b699b Update dependency ruff to v0.15.14 2026-05-21 17:00:45 +00:00
flo 3e70a756d6 refine closed-page and configure test window 2026-05-15 13:22:11 +02:00
flo b10e434d0c Color-code drink buttons by category
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>
2026-05-14 22:56:27 +02:00
flo 2b46c7cd54 Remove drink_stats / total_balance / user_stats commands
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>
2026-05-14 22:18:57 +02:00
flo 2056d5bbc7 Add staff dashboard, payment flow, seed extra 2026 expenses
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>
2026-05-14 22:18:57 +02:00
flo b9c62babf1 Show year-scoped balances and breakdowns in admin
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>
2026-05-14 22:18:57 +02:00
flo 4c9d041254 Add year-scoped drink data, UserPayment model, German verbose names
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>
2026-05-14 22:18:57 +02:00
flo 2d5ec8fc6d Style suff frontend mobile-first
Dark theme matching GOA palette, standalone microsite (no nav).
- Landing/login: GOA subhead + big "Suff" wordmark, large tap targets
- me page: 2-col 4:3 drink grid, bordered total box, day-grouped
  history with zebra rows, emoji empty-state
- Booking confirmation toast (amber, 5s, then 800ms CSS collapse)
- Touch feedback via :active scale, SVG beer favicon
- no_pin.html link-buttons styled
2026-05-14 12:41:45 +02:00
flo 47d46e8e6f Add suff drink booking tool with PIN auth
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>
2026-05-14 12:05:25 +02:00
flo 1d35f0b9b9 Merge pull request 'Update dependency gunicorn to v26' (#25) from renovate/gunicorn-26.x into main
Reviewed-on: #25
2026-05-13 22:55:44 +00:00
flo 96aa2198a3 Update dependency gunicorn to v26 2026-05-07 07:00:53 +00:00
flo b882f34b97 Merge pull request 'Update dependency ruff to v0.15.12' (#22) from renovate/ruff-0.x into main
Reviewed-on: #22
2026-05-06 18:53:13 +00:00
flo 0fc572ec3b Merge pull request 'Update dependency psycopg to v3.3.4' (#24) from renovate/psycopg-3.x into main
Reviewed-on: #24
2026-05-06 18:52:12 +00:00
flo e2e90f1116 Merge pull request 'Update dependency django to v6.0.5' (#23) from renovate/django-6.x into main
Reviewed-on: #23
2026-05-06 18:51:05 +00:00
flo 370e3fa168 small style improvements 2026-05-06 20:47:43 +02:00
flo 90a943c630 remove navi and for-bands page 2026-05-06 20:42:31 +02:00
flo 0c3012425c rewrite and summarize everything in a single page 2026-05-06 20:41:58 +02:00
flo 1bb888e522 update for-bands page 2026-05-06 19:36:52 +02:00
flo e6e7f1b1cb Update dependency django to v6.0.5 2026-05-05 17:00:51 +00:00
flo 13005054f2 Update dependency psycopg to v3.3.4 2026-05-02 07:00:57 +00:00
flo 6dc44fa770 Update dependency ruff to v0.15.12 2026-04-25 07:00:59 +00:00
flo 4d825f3b28 overhaul site for 2026: amber theme, archive pages, consolidated main page
- 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>
2026-04-20 20:07:51 +02:00
flo 5ec8b93441 fix volume for postrges 18 db 2026-03-30 19:20:09 +02:00
flo 16e0c5e3a6 Merge pull request 'Update dependency ruff to v0.15.8' (#20) from renovate/ruff-0.x into main
Reviewed-on: #20
2026-03-30 17:18:13 +00:00
flo b3be4c6be1 Merge pull request 'Update dependency gunicorn to v25.3.0' (#21) from renovate/gunicorn-25.x into main
Reviewed-on: #21
2026-03-30 17:18:01 +00:00
flo d8ceb6af8e Update dependency gunicorn to v25.3.0 2026-03-27 07:01:04 +00:00
flo cc72b3f32d Update dependency ruff to v0.15.8 2026-03-27 07:00:52 +00:00
flo de8fd5e3cc Merge pull request 'Update dependency django to v6.0.3' (#19) from renovate/django-6.x into main
Reviewed-on: #19
2026-03-12 11:32:41 +00:00
flo 3bfe7340ca Merge pull request 'Update dependency ruff to v0.15.5' (#18) from renovate/ruff-0.x into main
Reviewed-on: #18
2026-03-12 11:31:39 +00:00