This commit is contained in:
François Poulain 2024-05-13 22:09:10 +02:00
parent bd419e091d
commit ece6e9aad2
2 changed files with 45 additions and 12 deletions

View File

@ -155,7 +155,9 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
Si elles ne le sont pas, on ajoute ce qui manque."""
for pâte_id, pâte_nom, pâte_ordre in (
obj.commande_set.values_list(
"réservation__pain__pâte", "réservation__pain__pâte__nom", "réservation__pain__pâte__ordre"
"réservation__pain__pâte",
"réservation__pain__pâte__nom",
"réservation__pain__pâte__ordre"
)
.order_by("réservation__pain__pâte")
.distinct()
@ -169,16 +171,21 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
pâte_manquante = somme_commandée - somme_coulée
if pâte_manquante > 0:
obj.coulée_set.create(
pâte_id=pâte_id, quantité=pâte_manquante, ordre=pâte_ordre
pâte_id=pâte_id,
quantité=pâte_manquante,
ordre=pâte_ordre
)
self.message_user(
request,
f"Création d'une coulée de {pâte_manquante.normalize()} kg pour la pâte {pâte_nom}.",
f"Création d'une coulée de "
f"{pâte_manquante.normalize()} kg "
f"pour la pâte {pâte_nom}.",
)
elif pâte_manquante < 0:
self.message_user(
request,
f"Attention la pâte {pâte_nom} est prévue en excès ({-pâte_manquante.normalize()} kg en trop)",
f"Attention la pâte {pâte_nom} est prévue "
f"en excès ({-pâte_manquante.normalize()} kg en trop)",
messages.WARNING,
)
@ -216,7 +223,8 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
ingrédients = c.pâte.ingrédient_set.values_list('nom', 'couleur')
for i, _ in ingrédients:
quantités.append((c.quantité / c.pâte.poids_de_base * sum(
c.pâte.ingrédient_set.filter(nom=i).values_list("quantité", flat=True)
c.pâte.ingrédient_set.filter(nom=i)
.values_list("quantité", flat=True)
)).quantize(Decimal('1.000')).normalize())
masse_coulée = sum(
@ -228,24 +236,42 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
if masse_coulée == masse_commandée:
problems = ""
elif masse_coulée > masse_commandée:
problems = f"{(masse_coulée - masse_commandée).normalize()} kg coulés en trop !!"
problems = (
f"{(masse_coulée - masse_commandée).normalize()} "
"kg coulés en trop !!"
)
elif masse_coulée < masse_commandée:
problems = f"{(masse_commandée - masse_coulée).normalize()} kg coulés en moins !!"
problems = (
f"{(masse_commandée - masse_coulée).normalize()} "
"kg coulés en moins !!"
)
extra_context["coulées"].append([problems, ingrédients, quantités])
""" on créé un tableau total coulée / ingrédient """
ingrédients = [models.Ingrédient.objects.filter(nom=nom).first() for nom in set(coulées.values_list("pâte__ingrédient__nom", flat=True))]
ingrédients = [
models.Ingrédient.objects.filter(nom=nom).first()
for nom in set(
coulées.values_list("pâte__ingrédient__nom", flat=True)
)
]
ingrédients.sort(key=lambda x: x.ordre)
extra_context["ingrédients"] = ingrédients
pains = models.Pain.objects.filter(pk__in=obj.commande_set.exclude(réservation__isnull=True).values_list("pains", flat=True)).values_list("nom", flat=True)
pains = models.Pain.objects.filter(
pk__in=obj.commande_set.exclude(réservation__isnull=True)
.values_list("pains", flat=True)
).values_list("nom", flat=True)
totaux = [sum(obj.coulée_set.values_list('quantité', flat=True))]
for i in ingrédients:
total = sum([
qté * qté_unit / unit
for qté, qté_unit, unit in
obj.coulée_set.filter(pâte__ingrédient__nom=i.nom)
.values_list('quantité', 'pâte__ingrédient__quantité', 'pâte__poids_de_base')
.values_list(
'quantité',
'pâte__ingrédient__quantité',
'pâte__poids_de_base',
)
]).quantize(Decimal('1.000')).normalize()
totaux.append(total)
extra_context["totaux_coulées"] = totaux

View File

@ -15,8 +15,15 @@ class Fournée(models.Model):
def masse_commandée(self, pâte_id):
"Renvoie la masse commandée d'une pâte donnée"
poids_qté = self.commande_set.exclude(réservation=None).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é])
poids_qté = (
self.commande_set.exclude(réservation=None)
.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: