diff --git a/kfet/static/kfet/css/base/misc.css b/kfet/static/kfet/css/base/misc.css index fab1a33a..97c0ee7e 100644 --- a/kfet/static/kfet/css/base/misc.css +++ b/kfet/static/kfet/css/base/misc.css @@ -61,7 +61,7 @@ ul { } .table td.no-padding { - padding:0; + padding:0 !important; } .table thead { diff --git a/kfet/templates/kfet/inventory_read.html b/kfet/templates/kfet/inventory_read.html index 9a9275f8..3b308377 100644 --- a/kfet/templates/kfet/inventory_read.html +++ b/kfet/templates/kfet/inventory_read.html @@ -37,6 +37,12 @@ {% block main %} +
+
+ Les valeurs de stock sont calculées sur la base du prix actuel des articles. +
+
+
Erreur - {% regroup inventoryarts by article.category as category_list %} + {% regroup inventoryarts by article.category.name as category_list %} {% for category in category_list %} - + {% for inventoryart in category.list %} - + {% endfor %} {% endfor %} + + + + + + + +
{{ category.grouper.name }}{{ category.grouper }}
- + {{ inventoryart.article.name }} {{ inventoryart.stock_old }} {{ inventoryart.stock_new }}{{ inventoryart.stock_error }}{{ inventoryart.stock_error }} / {{ inventoryart.amount_error|floatformat:"-2" }} €
Valeurs totales{{ total_amount_old|floatformat:"-2" }} €{{ total_amount_new|floatformat:"-2" }} €{{ total_amount_error|floatformat:"-2" }} €
diff --git a/kfet/views.py b/kfet/views.py index 569e42a5..15bde0f7 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -14,7 +14,18 @@ from django.contrib.auth.models import Permission, User from django.contrib.messages.views import SuccessMessageMixin from django.core.exceptions import SuspiciousOperation from django.db import transaction -from django.db.models import Count, F, Max, OuterRef, Prefetch, Q, Subquery, Sum +from django.db.models import ( + Count, + DecimalField, + ExpressionWrapper, + F, + Max, + OuterRef, + Prefetch, + Q, + Subquery, + Sum, +) from django.forms import ValidationError, formset_factory from django.http import ( Http404, @@ -2013,12 +2024,34 @@ class InventoryRead(DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - inventoryarticles = ( + output_field = DecimalField(max_digits=10, decimal_places=2, default=0) + inventory_articles = ( InventoryArticle.objects.select_related("article", "article__category") .filter(inventory=self.object) + .annotate( + amount_error=ExpressionWrapper( + F("stock_error") * F("article__price"), output_field=output_field + ) + ) .order_by("article__category__name", "article__name") ) - context["inventoryarts"] = inventoryarticles + context["inventoryarts"] = inventory_articles + stats = inventory_articles.aggregate( + new=ExpressionWrapper( + Sum(F("stock_new") * F("article__price")), output_field=output_field + ), + error=Sum("amount_error"), + old=ExpressionWrapper( + Sum(F("stock_old") * F("article__price")), output_field=output_field + ), + ) + context.update( + { + "total_amount_old": stats["old"], + "total_amount_new": stats["new"], + "total_amount_error": stats["error"], + } + ) return context