From 4eaa83f2ea327651c08ef2baf17a12126e2b24a0 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Thu, 21 Mar 2019 15:37:49 +0300 Subject: [PATCH] add question before free user ip address --- abonapp/locale/ru/LC_MESSAGES/django.po | 3 + abonapp/templates/abonapp/editAbon.html | 2 +- .../abonapp/modal_confirm_ip_free.html | 14 +++++ abonapp/urls.py | 2 +- abonapp/views.py | 57 +++++++++++++------ 5 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 abonapp/templates/abonapp/modal_confirm_ip_free.html diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index 9e32206..aba5fa3 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -1170,3 +1170,6 @@ msgstr "Обновить ip адрес" msgid "Please pick NAS for consumer" msgstr "Выберите шлюз для абонента" + +msgid "Are you sure you want to free ip user session?" +msgstr "Вы уверены что хотите удалить ip абонента?" diff --git a/abonapp/templates/abonapp/editAbon.html b/abonapp/templates/abonapp/editAbon.html index 463c519..899d842 100644 --- a/abonapp/templates/abonapp/editAbon.html +++ b/abonapp/templates/abonapp/editAbon.html @@ -197,7 +197,7 @@
{{ abon.ip_address }}
- + {% if perms.abonapp.can_ping %} diff --git a/abonapp/templates/abonapp/modal_confirm_ip_free.html b/abonapp/templates/abonapp/modal_confirm_ip_free.html new file mode 100644 index 0000000..edfe35a --- /dev/null +++ b/abonapp/templates/abonapp/modal_confirm_ip_free.html @@ -0,0 +1,14 @@ +{% extends 'base_delete_modal.html' %} +{% load i18n %} + +{% block modal_form_url %} + {% url 'abonapp:user_session_free' gid object.username %} +{% endblock %} + +{% block modal_form_title %} + {% trans 'Free session' %} +{% endblock %} + +{% block modal_form_text %} +

{% trans 'Are you sure you want to free ip user session?' %}

+{% endblock %} diff --git a/abonapp/urls.py b/abonapp/urls.py index e5585cd..ac1c048 100644 --- a/abonapp/urls.py +++ b/abonapp/urls.py @@ -25,7 +25,7 @@ subscriber_patterns = [ path('tel/add/', views.tel_add, name='telephone_new'), path('tel/del/', views.tel_del, name='telephone_del'), path('markers/', views.EditSibscriberMarkers.as_view(), name='markers_edit'), - path('session/free/', views.user_session_free, name='user_session_free'), + path('session/free/', views.UserSessionFree.as_view(), name='user_session_free'), path('periodic_pay/', views.add_edit_periodic_pay, name='add_periodic_pay'), path('periodic_pay//', views.add_edit_periodic_pay, name='add_periodic_pay'), path('periodic_pay//del/', views.del_periodic_pay, name='del_periodic_pay'), diff --git a/abonapp/views.py b/abonapp/views.py index 91472de..f8ab12a 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -23,7 +23,6 @@ from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView, UpdateView, CreateView, DeleteView from djing import lib -from djing import ping from djing.global_base_views import OrderedFilteredList, SecureApiView from djing.lib.decorators import json_view, only_admins from djing.lib.mixins import ( @@ -1222,21 +1221,47 @@ class EditSibscriberMarkers(LoginAdminPermissionMixin, UpdateView): return v -@login_required -@only_admins -@permission_required('abonapp.change_abon') -def user_session_free(request, gid: int, uname): - abon = get_object_or_404(models.Abon, username=uname) - if abon.nas is None: - messages.error(request, _('gateway required')) - return redirect('abonapp:abon_home', gid, uname) - if abon.ip_address: - abon.free_ip_addr() - customer_nas_command.delay(abon.pk, 'remove') - messages.success(request, _('Ip lease has been freed')) - else: - messages.error(request, _('User not have ip')) - return redirect('abonapp:abon_home', gid, uname) +class UserSessionFree(LoginRequiredMixin, OnlyAdminsMixin, PermissionRequiredMixin, UpdateView): + permission_required = 'abonapp.change_abon' + model = models.Abon + slug_url_kwarg = 'uname' + slug_field = 'username' + fields = 'ip_address', + template_name = 'abonapp/modal_confirm_ip_free.html' + + def get(self, request, *args, **kwargs): + r = super().get(request, *args, **kwargs) + abon = self.object + if abon.nas is None: + messages.error(self.request, _('gateway required')) + return redirect( + 'abonapp:abon_home', + gid=self.kwargs.get('gid'), + uname=self.kwargs.get('uname') + ) + return r + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + abon = self.object + if abon.ip_address: + abon.free_ip_addr() + customer_nas_command.delay(abon.pk, 'remove') + messages.success(request, _('Ip lease has been freed')) + else: + messages.error(request, _('User not have ip')) + return redirect( + 'abonapp:abon_home', + gid=self.kwargs.get('gid'), + uname=self.kwargs.get('uname') + ) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({ + 'gid': self.kwargs.get('gid'), + }) + return context @login_required