diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index 99bb948..e7dc540 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -1131,3 +1131,9 @@ msgstr "Успешно сохранено" msgid "This user can not buy admin services" msgstr "Этот пользователь не может назначать административные услуги" + +msgid "Remove subscriber" +msgstr "Удаление абонента" + +msgid "Are you sure about them?" +msgstr "Вы уверены в этом?" diff --git a/abonapp/templates/abonapp/abon_confirm_delete.html b/abonapp/templates/abonapp/abon_confirm_delete.html new file mode 100644 index 0000000..664bc1b --- /dev/null +++ b/abonapp/templates/abonapp/abon_confirm_delete.html @@ -0,0 +1,18 @@ +{% load i18n %} +
{% csrf_token %} + + + + +
diff --git a/abonapp/templates/abonapp/peoples.html b/abonapp/templates/abonapp/peoples.html index c853de4..9072a81 100644 --- a/abonapp/templates/abonapp/peoples.html +++ b/abonapp/templates/abonapp/peoples.html @@ -113,7 +113,7 @@ {% if can_del_abon %} - + {% endif %} diff --git a/abonapp/urls.py b/abonapp/urls.py index dd9a893..12d799b 100644 --- a/abonapp/urls.py +++ b/abonapp/urls.py @@ -21,6 +21,7 @@ subscriber_patterns = [ url(r'^extra_field/edit$', views.extra_field_change, name='extra_field_edit'), url(r'^unsubscribe_service(?P\d+)/$', views.unsubscribe_service, name='unsubscribe_service'), url(r'^dev/$', views.dev, name='dev'), + url(r'^del$', views.DelAbonDeleteView.as_view(), name='del_abon'), url(r'^clear_dev/$', views.clear_dev, name='clear_dev'), url(r'^task_log/$', views.TaskLogListView.as_view(), name='task_log'), url(r'^user_dev/$', views.save_user_dev_port, name='save_user_dev_port'), @@ -55,8 +56,6 @@ urlpatterns = [ url(r'^log$', views.LogListView.as_view(), name='log'), - url(r'^del$', views.del_abon, name='del_abon'), - url(r'^pay$', views.terminal_pay, name='terminal_pay'), url(r'^debtors$', views.DebtorsListView.as_view(), name='debtors'), diff --git a/abonapp/views.py b/abonapp/views.py index 69e7a88..b4c2955 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -5,11 +5,12 @@ from django.db import IntegrityError, ProgrammingError, transaction from django.db.models import Count, Q from django.shortcuts import render, redirect, get_object_or_404, resolve_url from django.contrib.auth.decorators import login_required -from django.http import HttpResponse, HttpResponseBadRequest +from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect from django.contrib import messages +from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from django.utils.decorators import method_decorator -from django.views.generic import ListView, UpdateView, CreateView +from django.views.generic import ListView, UpdateView, CreateView, DeleteView from django.conf import settings from jsonview.decorators import json_view @@ -153,29 +154,37 @@ class AbonCreateView(CreateView): return super(AbonCreateView, self).form_invalid(form) -@login_required -@mydefs.only_admins -def del_abon(request): - uid = request.GET.get('id') - try: - abon = get_object_or_404(models.Abon, pk=uid) - if not request.user.has_perm('abonapp.delete_abon') or not request.user.has_perm( - 'group_app.can_view_group', abon.group): +@method_decorator([login_required, mydefs.only_admins], name='dispatch') +@method_decorator(permission_required('abonapp.delete_abon'), name='dispatch') +class DelAbonDeleteView(DeleteView): + model = models.Abon + slug_url_kwarg = 'uname' + slug_field = 'username' + success_url = reverse_lazy('abonapp:group_list') + context_object_name = 'abon' + + def get_object(self, queryset=None): + abon = super(DelAbonDeleteView, self).get_object(queryset) + if not self.request.user.has_perm('group_app.can_view_group', abon.group): raise PermissionDenied - gid = abon.group.id - abon.delete() - abon.sync_with_nas(created=False) - messages.success(request, _('delete abon success msg')) - return mydefs.res_success(request, resolve_url('abonapp:people_list', gid=gid)) + return abon - except NasNetworkError as e: - messages.error(request, e) - except NasFailedResult as e: - messages.error(request, _("NAS says: '%s'") % e) - except mydefs.MultipleException as errs: - for err in errs.err_list: - messages.error(request, err) - return redirect('abonapp:group_list') + def delete(self, request, *args, **kwargs): + try: + abon = self.get_object() + gid = abon.group.id + abon.delete() + abon.sync_with_nas(created=False) + messages.success(request, _('delete abon success msg')) + return redirect('abonapp:people_list', gid=gid) + except NasNetworkError as e: + messages.error(self.request, e) + except NasFailedResult as e: + messages.error(self.request, _("NAS says: '%s'") % e) + except mydefs.MultipleException as errs: + for err in errs.err_list: + messages.error(self.request, err) + return HttpResponseRedirect(self.success_url) @login_required