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 %}
+
@@ -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(