diff --git a/fournée/core/models.py b/fournée/core/models.py index 8acd4c0..11d1a63 100644 --- a/fournée/core/models.py +++ b/fournée/core/models.py @@ -198,4 +198,32 @@ class Coulée(models.Model): def __str__(self): return f"{self.pâte} ({clean(self.quantité)} kg)" + @staticmethod + def récapitulatif_des_coûts(**kwargs): + coulées = Coulée.objects.filter(**kwargs) + ingrédients = [ + Fourniture.objects.get(nom=nom) + for nom in set( + coulées.values_list( + "pâte__ingrédient__fourniture__nom", flat=True + ) + ) + ] + ingrédients.sort(key=lambda x: x.ordre) + poids_total = 0 + for i in ingrédients: + poids = clean(sum([ + qté * qté_unit / unit + for qté, qté_unit, unit in + coulées.filter( + pâte__ingrédient__fourniture__nom=i.nom + ) + .values_list( + 'quantité', + 'pâte__ingrédient__quantité', + 'pâte__poids_de_base', + ) + ])) + print(f"{i.nom: >20}\t{clean(poids):>12} kg\t ({i.prix} €/kg)\t {clean(poids * i.prix)} €") + diff --git a/fournée/core/utils.py b/fournée/core/utils.py index 60d8bd1..6012c2e 100644 --- a/fournée/core/utils.py +++ b/fournée/core/utils.py @@ -2,7 +2,7 @@ from decimal import Decimal def clean(d): - if type(d) == int: + if isinstance(d, int): return d if d == d.to_integral(): return d.quantize(Decimal(1))