feat(fournée): sépare les coulées pour une meilleur présentation des fournée complexes

This commit is contained in:
François Poulain 2024-05-12 19:20:15 +02:00
parent 438d071006
commit 8831ae1b16
2 changed files with 49 additions and 34 deletions

View File

@ -208,29 +208,17 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
obj = self.model.objects.get(pk=object_id) obj = self.model.objects.get(pk=object_id)
extra_context["commandes"] = obj.commande_set.all() extra_context["commandes"] = obj.commande_set.all()
coulées = obj.coulée_set.all() coulées = obj.coulée_set.all()
ingrédients = sorted(
set(
coulées.values_list(
"pâte__ingrédient__nom", "pâte__ingrédient__ordre"
)
),
key=lambda x: x[1],
)
extra_context["ingrédients"] = ingrédients """ on créé les tableaux coulée / ingrédient """
""" on créé un tableau coulée / ingrédient """
extra_context["coulées"] = [] extra_context["coulées"] = []
for c in obj.coulée_set.all(): for c in obj.coulée_set.all():
tmp = [c] quantités = [c, ]
for i, _ in ingrédients: ingrédients = c.pâte.ingrédient_set.values_list('nom', flat=True)
if c.pâte.ingrédient_set.filter(nom=i).exists(): for i in ingrédients:
tmp.append( quantités.append((c.quantité / c.pâte.poids_de_base * sum(
(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()
)
else:
tmp.append("")
masse_coulée = sum( masse_coulée = sum(
obj.coulée_set.filter(pâte=c.pâte).values_list( obj.coulée_set.filter(pâte=c.pâte).values_list(
"quantité", flat=True "quantité", flat=True
@ -243,9 +231,20 @@ class FournéeAdmin(nested_admin.NestedModelAdmin):
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, tmp]) extra_context["coulées"].append([problems, ingrédients, quantités])
pains = set(obj.commande_set.exclude(réservation__isnull=True).values_list("pains__nom", flat=True))
""" on créé un tableau total coulée / ingrédient """
ingrédients = sorted(
set(
coulées.values_list(
"pâte__ingrédient__nom", "pâte__ingrédient__ordre"
)
),
key=lambda x: x[1],
)
extra_context["ingrédients"] = ingrédients
pains = set(obj.commande_set.exclude(réservation__isnull=True).values_list("pains__nom", flat=True))
totaux = [] totaux = []
for i, _ in ingrédients: for i, _ in ingrédients:
total = sum([ total = sum([

View File

@ -27,26 +27,42 @@
<th scope="col" style="text-align:center">{{ i }}</th> <th scope="col" style="text-align:center">{{ i }}</th>
{% endfor %} {% endfor %}
</tr> </tr>
</thead>
<tbody>
<tr> <tr>
<th>Totaux</th> <th>Totaux</th>
{% for p in totaux_coulées %} {% for p in totaux_coulées %}
<th scope="col" style="text-align:center">{{ p }}</th> <th scope="col" style="text-align:center">{{ p }}</th>
{% endfor %} {% endfor %}
</tr> </tr>
</thead>
<tbody>
{% for problems, coulée in coulées %}
<tr{% if problems %} style="color: var(--delete-button-hover-bg);"{% endif %}>
{% for i in coulée %}
{% if forloop.first %}<th scope="row">{% else %}<td style="text-align:center">{% endif %}
{{ i }}
{% if forloop.first %}{% if problems %} ({{ problems }}){% endif %}</th>{% else %}</td>{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody> </tbody>
</table> </table>
<p></p> <div style="display:inline-grid">
{% for problems, ingrédients, quantités in coulées %}
<h3 style="margin-top: 2em{% if problems %}; color: var(--delete-button-hover-bg);{% endif %}">{{ quantités.0 }}{% if problems %} ({{ problems }}){% endif %}</h3>
<table>
<thead>
<tr>
<th></th>
{% for i in ingrédients %}
<th scope="col" style="text-align:center">{{ i }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
<tr>
{% for q in quantités %}
{% if forloop.first %}
<th scope="row">{{ q.pâte.nom }}</th>
{% else %}
<td style="text-align:center">{{ q }}</td>
{% endif %}
{% endfor %}
</tr>
</tbody>
</table>
{% endfor %}
</div>
{% endif %} {% endif %}
{% if divisions %} {% if divisions %}
<hr> <hr>