From 2d611dcac5b58302a057ea3ef84efdb951d9386f Mon Sep 17 00:00:00 2001 From: Flo Ha Date: Tue, 9 Jun 2026 15:54:29 +0200 Subject: [PATCH] feat(drinks): add Sekt category with rainbow button styling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- gaehsnitz/management/commands/seed_2026.py | 7 +++-- .../migrations/0010_add_sekt_category.py | 18 +++++++++++ gaehsnitz/models.py | 1 + gaehsnitz/static/suff/style.css | 31 ++++++++++++------- gaehsnitz/suff.py | 15 ++++----- 5 files changed, 50 insertions(+), 22 deletions(-) create mode 100644 gaehsnitz/migrations/0010_add_sekt_category.py diff --git a/gaehsnitz/management/commands/seed_2026.py b/gaehsnitz/management/commands/seed_2026.py index a767ee3..96c67ff 100644 --- a/gaehsnitz/management/commands/seed_2026.py +++ b/gaehsnitz/management/commands/seed_2026.py @@ -8,7 +8,7 @@ from gaehsnitz.models import Drink, Payment PAYMENTS = [ # purpose, date, amount ("Toiletten", date(2026, 5, 6), 210.01), - ("Anzahlung Getränke+Kühlschrank+Bänke", date(2026, 5, 18), 400.00), + ("Anzahlung Getränke+Kühlschrank+Bänke", date(2026, 6, 8), 400.00), ("Baumarkt", date(2026, 5, 23), 194.00), ("Band: Six Good Years", date(2026, 6, 12), 150.00), ("Band: Melo-Komplott", date(2026, 6, 12), 100.00), @@ -20,10 +20,10 @@ PAYMENTS = [ DRINKS = [ # name, category, crates, btl/crate, size, price/crate, deposit/crate, sale/btl - ("Sternburg Export", "beer", 12, 20, 0.5, 10.99, 3.10, 2.00), + ("Sternburg Export", "beer", 12, 20, 0.5, 9.49, 3.10, 2.00), ("Ur-Krostitzer", "beer", 5, 20, 0.5, 16.49, 3.10, 2.50), ("Budweiser", "beer", 5, 20, 0.5, 20.99, 3.10, 2.50), - ("Altenburger Helles", "beer", 5, 20, 0.5, 15.99, 4.50, 2.50), + ("Altenburger Helles", "beer", 5, 20, 0.5, 13.99, 4.50, 2.50), ("Feldschl. Radler", "radler", 2, 20, 0.5, 14.99, 3.10, 2.50), ("Lübzer Grapef. 0,0", "alc_free_radler", 1, 20, 0.5, 17.99, 3.10, 2.50), ("Freiberger 0,0", "alc_free_beer", 4, 20, 0.5, 15.49, 3.10, 2.50), @@ -31,6 +31,7 @@ DRINKS = [ ("Vita Cola", "soft", 2, 12, 1.0, 10.99, 3.30, 2.50), ("Paulaner Spezi", "soft", 2, 20, 0.5, 17.99, 3.10, 2.50), ("Wasser", "water", 10, 12, 1.0, 5.99, 3.30, 1.50), + ("Sekty Drink", "sekt", 0, 1, 0.33, 0.00, 0.00, 3.50), ] diff --git a/gaehsnitz/migrations/0010_add_sekt_category.py b/gaehsnitz/migrations/0010_add_sekt_category.py new file mode 100644 index 0000000..576f279 --- /dev/null +++ b/gaehsnitz/migrations/0010_add_sekt_category.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.5 on 2026-06-09 13:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('gaehsnitz', '0009_anonymous_user'), + ] + + operations = [ + migrations.AlterField( + model_name='drink', + name='category', + field=models.CharField(choices=[('beer', 'Bier'), ('radler', 'Radler'), ('sekt', 'Sekt'), ('alc_free_beer', 'Bier alkoholfrei'), ('alc_free_radler', 'Radler alkoholfrei'), ('soft', 'Softdrink'), ('water', 'Wasser')], default='beer', max_length=16, verbose_name='Kategorie'), + ), + ] diff --git a/gaehsnitz/models.py b/gaehsnitz/models.py index adc230b..bb1a03a 100644 --- a/gaehsnitz/models.py +++ b/gaehsnitz/models.py @@ -86,6 +86,7 @@ class Drink(models.Model): class Category(models.TextChoices): beer = "beer", "Bier" radler = "radler", "Radler" + sekt = "sekt", "Sekt" alc_free_beer = "alc_free_beer", "Bier alkoholfrei" alc_free_radler = "alc_free_radler", "Radler alkoholfrei" soft = "soft", "Softdrink" diff --git a/gaehsnitz/static/suff/style.css b/gaehsnitz/static/suff/style.css index 365adda..6922313 100644 --- a/gaehsnitz/static/suff/style.css +++ b/gaehsnitz/static/suff/style.css @@ -394,45 +394,52 @@ section { } .drink-btn-beer { - background: linear-gradient(180deg, #f0c878 0%, #b8731a 100%); + background: linear-gradient(180deg, #f5d088 0%, #c8831a 100%); } .drink-btn-beer:hover, .drink-btn-beer:focus { - background: linear-gradient(180deg, #f7d699 0%, #cc8520 100%); + background: linear-gradient(180deg, #fadfaa 0%, #dc9228 100%); } .drink-btn-radler { - background: linear-gradient(180deg, #f7e36b 0%, #d8a02a 100%); + background: linear-gradient(180deg, #faea7a 0%, #e8b038 100%); } .drink-btn-radler:hover, .drink-btn-radler:focus { - background: linear-gradient(180deg, #fff08c 0%, #e8b034 100%); + background: linear-gradient(180deg, #fff59a 0%, #f4c048 100%); +} + +.drink-btn-sekt { + background: linear-gradient(180deg, #e890cc 0%, #e8a040 25%, #e8cc55 50%, #90e865 75%, #65b8e8 100%); +} +.drink-btn-sekt:hover, .drink-btn-sekt:focus { + background: linear-gradient(180deg, #f0a0d8 0%, #f0b055 25%, #f0dc70 50%, #a8f090 75%, #88ccf0 100%); } .drink-btn-alc_free_beer { - background: linear-gradient(180deg, #f0c878 0%, #5e8bbf 100%); + background: linear-gradient(180deg, #f5d088 0%, #7099c8 100%); } .drink-btn-alc_free_beer:hover, .drink-btn-alc_free_beer:focus { - background: linear-gradient(180deg, #f7d699 0%, #7aa3d1 100%); + background: linear-gradient(180deg, #fadfaa 0%, #88aed8 100%); } .drink-btn-alc_free_radler { - background: linear-gradient(180deg, #f7e36b 0%, #5e8bbf 100%); + background: linear-gradient(180deg, #faea7a 0%, #7099c8 100%); } .drink-btn-alc_free_radler:hover, .drink-btn-alc_free_radler:focus { - background: linear-gradient(180deg, #fff08c 0%, #7aa3d1 100%); + background: linear-gradient(180deg, #fff59a 0%, #88aed8 100%); } .drink-btn-soft { - background: linear-gradient(180deg, #f0a35e 0%, #a85a22 100%); + background: linear-gradient(180deg, #f5b070 0%, #ba6a30 100%); } .drink-btn-soft:hover, .drink-btn-soft:focus { - background: linear-gradient(180deg, #f7b878 0%, #c06a2c 100%); + background: linear-gradient(180deg, #fac488 0%, #cc7a3a 100%); } .drink-btn-water { - background: linear-gradient(180deg, #d5e8f4 0%, #95c2dc 100%); + background: linear-gradient(180deg, #daeef8 0%, #a8d0e6 100%); } .drink-btn-water:hover, .drink-btn-water:focus { - background: linear-gradient(180deg, #e4f0f8 0%, #aad0e6 100%); + background: linear-gradient(180deg, #eaf4fc 0%, #bcdcf0 100%); } .drink-plus { diff --git a/gaehsnitz/suff.py b/gaehsnitz/suff.py index 4eceb14..d7a3273 100644 --- a/gaehsnitz/suff.py +++ b/gaehsnitz/suff.py @@ -109,22 +109,23 @@ def _drink_grid_qs(): Drink.objects.filter(year=current_year()) .annotate( alcohol_order=Case( - When(category__in=["beer", "radler"], then=Value(0)), + When(category__in=["beer", "radler", "sekt"], then=Value(0)), default=Value(1), output_field=IntegerField(), ), alcohol_label=Case( - When(category__in=["beer", "radler"], then=Value("mit Alkohol")), + When(category__in=["beer", "radler", "sekt"], then=Value("mit Alkohol")), default=Value("ohne Alkohol"), output_field=CharField(), ), category_order=Case( When(category="beer", then=Value(0)), - When(category="alc_free_beer", then=Value(1)), - When(category="radler", then=Value(2)), - When(category="alc_free_radler", then=Value(3)), - When(category="soft", then=Value(4)), - When(category="water", then=Value(5)), + When(category="radler", then=Value(1)), + When(category="sekt", then=Value(2)), + When(category="alc_free_beer", then=Value(3)), + When(category="alc_free_radler", then=Value(4)), + When(category="soft", then=Value(5)), + When(category="water", then=Value(6)), default=Value(99), output_field=IntegerField(), ),