diff --git a/kfet/static/kfet/css/base/fixed.css b/kfet/static/kfet/css/base/fixed.css index d198c50f..270331d8 100644 --- a/kfet/static/kfet/css/base/fixed.css +++ b/kfet/static/kfet/css/base/fixed.css @@ -57,12 +57,20 @@ aside .heading .sub { aside .buttons { margin-left: -15px; margin-right: -15px; + flex-wrap: wrap; } aside .buttons > * { flex: 0 1 auto !important; } +aside .buttons > hr { + flex-basis: 100%; + height: 0; + margin: 0; + border: 0; +} + /* Aside - Text */ diff --git a/kfet/static/kfet/css/libs/jconfirm-kfet.css b/kfet/static/kfet/css/libs/jconfirm-kfet.css index d2803434..a50e22d6 100644 --- a/kfet/static/kfet/css/libs/jconfirm-kfet.css +++ b/kfet/static/kfet/css/libs/jconfirm-kfet.css @@ -23,11 +23,19 @@ } .jconfirm .jconfirm-box .content-pane { - margin:0 !important; + border-bottom:1px solid #ddd; + margin: 0px !important; } .jconfirm .jconfirm-box .content { - border-bottom:1px solid #ddd; + padding: 5px; +} + +.jconfirm .jconfirm-box .content div.warning { + font-size: 16px; + font-weight: bold; + text-align: center; + margin: 5px 0px; } .jconfirm .jconfirm-box input { @@ -43,7 +51,7 @@ } .jconfirm .jconfirm-box .buttons { - margin-top:-5px; /* j'arrive pas à voir pk y'a un espace au dessus sinon... */ + margin-top:-6px; /* j'arrive pas à voir pk y'a un espace au dessus sinon... */ padding:0; height:40px; } diff --git a/kfet/templates/kfet/left_account.html b/kfet/templates/kfet/left_account.html index 18438ff1..716c96cc 100644 --- a/kfet/templates/kfet/left_account.html +++ b/kfet/templates/kfet/left_account.html @@ -18,6 +18,15 @@ Créditer + {% if perms.kfet.delete_account %} +
+ +
+ {% csrf_token %} +
+ {% endif %}
@@ -92,5 +101,24 @@ $( function() { $(this).addClass('focus'); }); + // Delete button + $('#button-delete').click(function() { + $.confirm({ + title: 'Confirmer la suppression', + content: ` +
+ Cette opération est irréversible ! +
+ Toutes les données associées à ce compte seront anonymisées. + `, + backgroundDismiss: true, + animation: 'top', + closeAnimation: 'bottom', + keyboardEnabled: true, + confirm: function() { + $('#account-delete-form').submit(); + } + }) + }) }); diff --git a/kfet/urls.py b/kfet/urls.py index e3e3ad2d..44bbc153 100644 --- a/kfet/urls.py +++ b/kfet/urls.py @@ -57,6 +57,12 @@ urlpatterns = [ views.account_update, name="kfet.account.update", ), + # Account - Delete + path( + "accounts//delete", + views.AccountDeleteView.as_view(), + name="kfet.account.delete", + ), # Account - Groups path("accounts/groups", views.account_group, name="kfet.account.group"), path( diff --git a/kfet/views.py b/kfet/views.py index 9ce17f47..eb058eb4 100644 --- a/kfet/views.py +++ b/kfet/views.py @@ -7,6 +7,7 @@ from urllib.parse import urlencode from django.contrib import messages from django.contrib.auth.decorators import login_required, permission_required +from django.contrib.auth.mixins import PermissionRequiredMixin from django.contrib.auth.models import Permission, User from django.contrib.messages.views import SuccessMessageMixin from django.core.exceptions import PermissionDenied @@ -20,7 +21,7 @@ from django.utils import timezone from django.utils.decorators import method_decorator from django.views.generic import DetailView, FormView, ListView, TemplateView from django.views.generic.detail import BaseDetailView -from django.views.generic.edit import CreateView, UpdateView +from django.views.generic.edit import CreateView, DeleteView, UpdateView from gestioncof.models import CofProfile from kfet import consumers @@ -467,6 +468,35 @@ def account_update(request, trigramme): }, ) + # Account - Delete + + +class AccountDeleteView(PermissionRequiredMixin, DeleteView): + model = Account + slug_field = "trigramme" + slug_url_kwarg = "trigramme" + success_url = reverse_lazy("kfet.account") + success_message = "Compte supprimé avec succès !" + permission_required = "kfet.delete_account" + + def get(self, request, *args, **kwargs): + return redirect("kfet.account.read", self.kwargs.get(self.get_slug_field())) + + def delete(self, request, *args, **kwargs): + self.object = self.get_object() + if self.object.balance > 0.01: + messages.error( + request, + "Impossible de supprimer un compte " + "avec une balance strictement positive !", + ) + return redirect("kfet.account.read", self.object.trigramme) + + # SuccessMessageMixin does not work with DeleteView, see : + # https://code.djangoproject.com/ticket/21926 + messages.success(request, self.success_message) + return super().delete(request, *args, **kwargs) + class AccountNegativeList(ListView): queryset = AccountNegative.objects.select_related(