From 59dacda37d0d3b672cc213407eaee5aad795b78d Mon Sep 17 00:00:00 2001 From: Ludovic Stephan Date: Fri, 11 Sep 2020 15:21:29 +0200 Subject: [PATCH] Inventory deletion view --- kfet/views.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/kfet/views.py b/kfet/views.py index a9dd1945..d42c6338 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -13,7 +13,7 @@ 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, Prefetch, Q, Sum +from django.db.models import Count, F, Max, OuterRef, Prefetch, Q, Subquery, Sum from django.forms import formset_factory from django.http import Http404, HttpResponseBadRequest, JsonResponse from django.shortcuts import get_object_or_404, redirect, render @@ -1909,6 +1909,32 @@ class InventoryRead(DetailView): return context +class InventoryDelete(PermissionRequiredMixin, DeleteView): + model = Inventory + success_url = reverse_lazy("kfet.inventory") + success_message = "Inventaire annulé avec succès !" + permission_required = "kfet.delete_inventory" + + def get(self, request, *args, **kwargs): + return redirect("kfet.inventory.read", self.kwargs.get(self.pk_url_kwarg)) + + def delete(self, request, *args, **kwargs): + inv = self.get_object() + # On met à jour les articles dont c'est le dernier inventaire + # .get() ne marche pas avec OuterRef, donc on utilise .filter() avec [:1] + update_subquery = InventoryArticle.objects.filter( + inventory=inv, article=OuterRef("pk") + ).values("stock_old")[:1] + + Article.objects.annotate(last_env=Max("inventories__at")).filter( + last_env=inv.at + ).update(stock=Subquery(update_subquery)) + + # On a tout mis à jour, on peut delete (avec un message) + messages.success(request, self.success_message) + return super().delete(request, *args, **kwargs) + + # ----- # Order views # -----