58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
from django.utils import timezone
|
|
|
|
class Person(models.Model):
|
|
"""Repräsentiert Schüler oder Lehrer."""
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
|
rolle = models.CharField(max_length=20, choices=[('schueler', 'Schüler'), ('lehrer', 'Lehrer'), ('mitarbeiter','Mensa-Mitarbeiter'), ('chef','Mensa-Leitung')])
|
|
klasse = models.CharField(max_length=4, blank=True, null=True) # Nur für Schüler relevant
|
|
|
|
def __str__(self):
|
|
return f"{self.user.username} ({self.rolle})"
|
|
|
|
class SpeiseplanTag(models.Model):
|
|
"""Ein bestimmter Tag im Speiseplan."""
|
|
datum = models.DateField(unique=True)
|
|
|
|
def __str__(self):
|
|
return self.datum.strftime('%d.%m.%Y')
|
|
|
|
class Gericht(models.Model):
|
|
"""Ein einzelnes Gericht (z.B. 'Nudeln mit Tomatensauce')."""
|
|
name = models.CharField(max_length=100)
|
|
ist_vegetarisch = models.BooleanField(default=False)
|
|
allergene = models.TextField(blank=True)
|
|
preis = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Menue(models.Model):
|
|
"""Eine Kombination von Speisen für einen Tag (z.B. Hauptgang + Dessert)."""
|
|
tag = models.ForeignKey(SpeiseplanTag, on_delete=models.CASCADE, related_name='menues')
|
|
gericht = models.ForeignKey(Gericht, on_delete=models.CASCADE)
|
|
preis = models.DecimalField(max_digits=5, decimal_places=2)
|
|
|
|
def __str__(self):
|
|
return f"{self.tag.datum}: {self.gericht.name} ({self.preis}€)"
|
|
|
|
class Bestellung(models.Model):
|
|
"""Eine abgeschlossene Bestellung eines Nutzers."""
|
|
STATUS_CHOICES = [
|
|
('offen', 'Offen'),
|
|
('abgeholt', 'Abgeholt'),
|
|
('verwaist', 'Nicht abgeholt'),
|
|
('bezahlt', 'Bezahlt'),
|
|
('storniert', 'Storniert'),
|
|
]
|
|
|
|
person = models.ForeignKey(Person, on_delete=models.CASCADE)
|
|
menue = models.ForeignKey(Menue, on_delete=models.CASCADE)
|
|
datum_bestellung = models.DateTimeField(default=timezone.now)
|
|
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='offen')
|
|
bezahlt = models.BooleanField(default=False)
|
|
|
|
def __str__(self):
|
|
return f"Bestellung {self.id} von {self.person.user.username}"
|