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 %}
- {{ category.grouper.name }} |
+ {{ category.grouper }} |
{% for inventoryart in category.list %}
-
+
{{ inventoryart.article.name }}
|
{{ inventoryart.stock_old }} |
{{ inventoryart.stock_new }} |
- {{ inventoryart.stock_error }} |
+ {{ inventoryart.stock_error }} / {{ inventoryart.amount_error|floatformat:"-2" }} € |
{% endfor %}
{% endfor %}
+
+
+ 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