Merge branch '_aandres/inventory_sum_amounts' into 'master'

Affiche les montants des valeurs des stocks sur l'affichage d'un inventaire

See merge request klub-dev-ens/gestioCOF!515
This commit is contained in:
Tom Hubrecht 2023-01-28 15:34:56 +01:00
commit 761ab6df90
3 changed files with 55 additions and 8 deletions

View file

@ -61,7 +61,7 @@ ul {
}
.table td.no-padding {
padding:0;
padding:0 !important;
}
.table thead {

View file

@ -37,6 +37,12 @@
{% block main %}
<div class="messages">
<div class="alert alert-info">
Les valeurs de stock sont calculées sur la base du prix actuel des articles.
</div>
</div>
<div class="table-responsive">
<table
class="table table-condensed table-hover table-striped sortable"
@ -50,28 +56,36 @@
<td>Erreur</td>
</tr>
</thead>
{% regroup inventoryarts by article.category as category_list %}
{% regroup inventoryarts by article.category.name as category_list %}
{% for category in category_list %}
<tbody class="tablesorter-no-sort">
<tr class="section">
<td colspan="4">{{ category.grouper.name }}</td>
<td colspan="4">{{ category.grouper }}</td>
</tr>
</tbody>
<tbody>
{% for inventoryart in category.list %}
<tr>
<td>
<a href="{% url "kfet.article.read" inventoryart.article.id %}">
<a href="{% url "kfet.article.read" inventoryart.article_id %}">
{{ inventoryart.article.name }}
</a>
</td>
<td>{{ inventoryart.stock_old }}</td>
<td>{{ inventoryart.stock_new }}</td>
<td>{{ inventoryart.stock_error }}</td>
<td>{{ inventoryart.stock_error }} / {{ inventoryart.amount_error|floatformat:"-2" }} €</td>
</tr>
{% endfor %}
</tbody>
{% endfor %}
<tbody>
<tr class="section">
<td>Valeurs totales</td>
<td>{{ total_amount_old|floatformat:"-2" }} €</td>
<td>{{ total_amount_new|floatformat:"-2" }} €</td>
<td>{{ total_amount_error|floatformat:"-2" }} €</td>
</tr>
</tbody>
</table>
</div>

View file

@ -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