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.""" Si elles ne le sont pas, on ajoute ce qui manque."""
for pâte_id, pâte_nom, pâte_ordre in ( for pâte_id, pâte_nom, pâte_ordre in (
obj.commande_set.values_list( 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") .order_by("réservation__pain__pâte")
.distinct() .distinct()
@ -169,16 +171,21 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
pâte_manquante = somme_commandée - somme_coulée pâte_manquante = somme_commandée - somme_coulée
if pâte_manquante > 0: if pâte_manquante > 0:
obj.coulée_set.create( 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( self.message_user(
request, 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: elif pâte_manquante < 0:
self.message_user( self.message_user(
request, 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, messages.WARNING,
) )
@ -216,7 +223,8 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
ingrédients = c.pâte.ingrédient_set.values_list('nom', 'couleur') ingrédients = c.pâte.ingrédient_set.values_list('nom', 'couleur')
for i, _ in ingrédients: for i, _ in ingrédients:
quantités.append((c.quantité / c.pâte.poids_de_base * sum( 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()) )).quantize(Decimal('1.000')).normalize())
masse_coulée = sum( masse_coulée = sum(
@ -228,24 +236,42 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
if masse_coulée == masse_commandée: if masse_coulée == masse_commandée:
problems = "" problems = ""
elif masse_coulée > masse_commandée: 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: 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]) extra_context["coulées"].append([problems, ingrédients, quantités])
""" on créé un tableau total coulée / ingrédient """ """ 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) ingrédients.sort(key=lambda x: x.ordre)
extra_context["ingrédients"] = ingrédients 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))] totaux = [sum(obj.coulée_set.values_list('quantité', flat=True))]
for i in ingrédients: for i in ingrédients:
total = sum([ total = sum([
qté * qté_unit / unit qté * qté_unit / unit
for qté, qté_unit, unit in for qté, qté_unit, unit in
obj.coulée_set.filter(pâte__ingrédient__nom=i.nom) 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() ]).quantize(Decimal('1.000')).normalize()
totaux.append(total) totaux.append(total)
extra_context["totaux_coulées"] = totaux 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): def masse_commandée(self, pâte_id):
"Renvoie la masse commandée d'une pâte donnée" "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é') poids_qté = (
return sum([c['réservation__quantité'] * c['réservation__pain__poids'] for c in 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 Ingrédient(models.Model):
class Meta: class Meta: