fournee/fournée/core/models.py

98 lines
2.9 KiB
Python
Raw Normal View History

2024-04-30 12:27:17 +02:00
from django.db import models
class Fournée(models.Model):
class Meta:
ordering = ["-date"]
date = models.DateField()
pour = models.CharField(max_length=64)
def __str__(self):
return f"Fournée du {self.date: %d-%m-%Y} pour {self.pour}"
def masse_commandée(self, pâte_id):
"Renvoie la masse commandée d'une pâte donnée"
poids_qté = self.commande_set.filter(réservation__pain__pâte_id=pâte_id).values('réservation__pain__poids', 'réservation__quantité')
return sum([c['réservation__quantité'] * c['réservation__pain__poids'] for c in poids_qté])
class Ingrédient(models.Model):
class Meta:
ordering = ["ordre", "-quantité"]
recette = models.ForeignKey("Recette", on_delete=models.CASCADE)
nom = models.CharField(max_length=64)
quantité = models.DecimalField(max_digits=6, decimal_places=3)
ordre = models.SmallIntegerField(default=0)
def __str__(self):
return f"{self.nom} ({self.quantité} kg)"
class Recette(models.Model):
class Meta:
ordering = ["nom"]
nom = models.CharField(max_length=64)
poids_de_base = models.DecimalField(max_digits=6, decimal_places=3)
def __str__(self):
return self.nom
class Pain(models.Model):
class Meta:
ordering = ["pâte", "poids", "moulé"]
nom = models.CharField(max_length=64)
pâte = models.ForeignKey("Recette", on_delete=models.CASCADE)
poids = models.DecimalField(max_digits=6, decimal_places=3)
moulé = models.BooleanField()
def __str__(self):
return self.nom
class Réservation(models.Model):
class Meta:
ordering = ["pain", "commande__pour", "commande__fournée__date"]
quantité = models.DecimalField(max_digits=6, decimal_places=3)
pain = models.ForeignKey("Pain", on_delete=models.CASCADE)
commande = models.ForeignKey("Commande", on_delete=models.CASCADE)
def __str__(self):
return f"{self.quantité.normalize()} {self.pain}"
class Commande(models.Model):
class Meta:
ordering = ["pour"]
pour = models.CharField(max_length=64)
pains = models.ManyToManyField("Pain", through="Réservation")
fournée = models.ForeignKey("Fournée", on_delete=models.CASCADE)
def __str__(self):
details = ""
if self.id and self.réservation_set.exists():
details = " (" + ", ".join(
[str(r) for r in self.réservation_set.all()]
) + ")"
return f"{self.pour}" + details
class Coulée(models.Model):
class Meta:
ordering = ["fournée__date", "ordre", "quantité", "pâte"]
ordre = models.SmallIntegerField(default=0)
quantité = models.DecimalField(max_digits=6, decimal_places=3)
pâte = models.ForeignKey("Recette", on_delete=models.CASCADE)
fournée = models.ForeignKey("Fournée", on_delete=models.CASCADE)
def __str__(self):
return f"{self.pâte} ({self.quantité.normalize()} kg)"