Compare commits

...

2 Commits

Author SHA1 Message Date
374da7c644 ajoute une notion de poids de coulée préférée 2024-06-08 14:10:08 +02:00
5d1d9ee5ad plus élégant 2024-06-08 14:09:41 +02:00
4 changed files with 52 additions and 15 deletions

View File

@ -176,11 +176,12 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
"""Pour chaque pâte on regarde si les coulées sont complètes.
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, poids_préféré 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__ordre",
"réservation__pain__pâte__poids_préféré",
)
.order_by("réservation__pain__pâte")
.distinct()
@ -193,17 +194,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
)
self.message_user(
request,
f"Création d'une coulée de "
f"{clean(pâte_manquante)} kg "
f"pour la pâte {pâte_nom}.",
)
for à_couler in models.Recette.découpe(
pâte_manquante,
poids_préféré,
):
obj.coulée_set.create(
pâte_id=pâte_id,
quantité=à_couler,
ordre=pâte_ordre
)
self.message_user(
request,
f"Création d'une coulée de "
f"{clean(à_couler)} kg "
f"pour la pâte {pâte_nom}.",
)
elif pâte_manquante < 0:
self.message_user(
request,

View File

@ -0,0 +1,17 @@
# Generated by Django 4.2.13 on 2024-06-07 08:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0017_alter_document_nom"),
]
operations = [
migrations.AddField(
model_name="recette",
name="poids_préféré",
field=models.DecimalField(decimal_places=3, default=0, max_digits=6),
),
]

View File

@ -80,11 +80,27 @@ class Recette(models.Model):
nom = models.CharField(max_length=64)
poids_de_base = models.DecimalField(max_digits=6, decimal_places=3)
poids_préféré = models.DecimalField(
default=0, max_digits=6, decimal_places=3
)
ordre = models.SmallIntegerField(default=0)
def __str__(self):
return self.nom
@staticmethod
def découpe(quantité, préféré):
if not préféré:
return [quantité]
q, r = divmod(quantité, préféré)
if not q:
return [r]
if r/préféré > 0.5:
return [préféré]*int(q) + [r]
else :
ret = [préféré]*int(q)
ret[-1] += r
return ret
class Pain(models.Model):
class Meta:

View File

@ -15,8 +15,7 @@ def submit_row_tag(parser, token):
@register.simple_tag
def emballe(quantité, fourniture):
quotient = quantité // fourniture.conditionnement
reste = quantité % fourniture.conditionnement
quotient, reste = divmod(quantité, fourniture.conditionnement)
if not reste and quotient == 1:
return f"{quotient} {fourniture.emballage}"
if not reste and quotient > 1: