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>
This commit is contained in:
2026-06-09 15:54:29 +02:00
parent 752f129df9
commit 2d611dcac5
5 changed files with 50 additions and 22 deletions
+4 -3
View File
@@ -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),
]
@@ -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'),
),
]
+1
View File
@@ -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"
+19 -12
View File
@@ -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 {
+8 -7
View File
@@ -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(),
),