From 986fc71f200fb23eca60449526f01d1659a0c59f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Poulain?= Date: Thu, 20 Jun 2024 21:53:36 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20ajoute=20la=20consommation=20hedbo=20pa?= =?UTF-8?q?ss=C3=A9e=20des=20fournitures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fournée/core/admin.py | 13 ++++++++++++- fournée/core/models.py | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/fournée/core/admin.py b/fournée/core/admin.py index a41cb4e..2149ce2 100644 --- a/fournée/core/admin.py +++ b/fournée/core/admin.py @@ -38,7 +38,14 @@ class DocumentInline(admin.TabularInline): class FournitureAdmin(admin.ModelAdmin): - list_display = ["nom", "ordre", "couleur", "conditionnement", "emballage"] + list_display = [ + "nom", + "ordre", + "couleur", + "conditionnement", + "emballage", + "consommation", + ] list_editable = ["ordre", "couleur", "conditionnement", "emballage"] inlines = [ DocumentInline, @@ -46,6 +53,10 @@ class FournitureAdmin(admin.ModelAdmin): actions = None save_as = True + @admin.display + def consommation(self, obj): + return obj.consommation() + admin_site.register(models.Fourniture, FournitureAdmin) diff --git a/fournée/core/models.py b/fournée/core/models.py index 78d3a18..189cb0a 100644 --- a/fournée/core/models.py +++ b/fournée/core/models.py @@ -1,3 +1,4 @@ +import datetime from uuid import uuid4 from django.db import models @@ -61,6 +62,30 @@ class Fourniture(models.Model): def __str__(self): return f"{self.nom}" + def consommation(self): + """Renvois la consommation de la semaine passée""" + today = datetime.date.today() + sevendays = datetime.timedelta(days=7) + fournées = Fournée.objects.filter(date__gte=today-sevendays) + coulées_id = fournées.values('coulée') + quantités_coulées = [ + q * pi / pb + for pi, pb, q in Ingrédient.objects.filter( + recette__coulée__in=coulées_id, fourniture=self + ).values_list( + 'recette__coulée__quantité', + 'recette__poids_de_base', + 'quantité', + )] + quantité = clean(sum(quantités_coulées)) if quantités_coulées else 0 + r = f"{quantité} kg" + if quantité and self.conditionnement: + r += ( + f" soit {clean(quantité/self.conditionnement)} " + + f"{self.emballage}" + ) + return r + class Ingrédient(models.Model): class Meta: