diff --git a/abonapp/templates/abonapp/debtors.html b/abonapp/templates/abonapp/debtors.html index 96d16be..1a96975 100644 --- a/abonapp/templates/abonapp/debtors.html +++ b/abonapp/templates/abonapp/debtors.html @@ -47,6 +47,6 @@ - {% include 'toolbar_page.html' with pag=peoples %} + {% include 'pagination.html' %} {% endblock %} \ No newline at end of file diff --git a/abonapp/templates/abonapp/dial_log.html b/abonapp/templates/abonapp/dial_log.html index 169906c..9dc5bd9 100644 --- a/abonapp/templates/abonapp/dial_log.html +++ b/abonapp/templates/abonapp/dial_log.html @@ -42,6 +42,6 @@ - {% include 'toolbar_page.html' with pag=logs %} + {% include 'pagination.html' %} {% endblock %} diff --git a/abonapp/templates/abonapp/invoiceForPayment.html b/abonapp/templates/abonapp/invoiceForPayment.html index 92ff0d4..2f57ad1 100644 --- a/abonapp/templates/abonapp/invoiceForPayment.html +++ b/abonapp/templates/abonapp/invoiceForPayment.html @@ -67,6 +67,6 @@ - {% include 'toolbar_page.html' with pag=invoices %} + {% include 'pagination.html' %} {% endblock %} diff --git a/abonapp/templates/abonapp/log.html b/abonapp/templates/abonapp/log.html index 9b208de..e8ef0e9 100644 --- a/abonapp/templates/abonapp/log.html +++ b/abonapp/templates/abonapp/log.html @@ -51,6 +51,6 @@ - {% include 'toolbar_page.html' with pag=logs %} + {% include 'pagination.html' %} {% endblock %} \ No newline at end of file diff --git a/abonapp/templates/abonapp/payHistory.html b/abonapp/templates/abonapp/payHistory.html index f836fa4..e2fa864 100644 --- a/abonapp/templates/abonapp/payHistory.html +++ b/abonapp/templates/abonapp/payHistory.html @@ -53,5 +53,5 @@ - {% include 'toolbar_page.html' with pag=pay_history %} + {% include 'pagination.html' %} {% endblock %} diff --git a/abonapp/templates/abonapp/task_log.html b/abonapp/templates/abonapp/task_log.html index a3df05e..25692f5 100644 --- a/abonapp/templates/abonapp/task_log.html +++ b/abonapp/templates/abonapp/task_log.html @@ -44,5 +44,5 @@ - {% include 'toolbar_page.html' with pag=tasks %} + {% include 'pagination.html' %} {% endblock %} \ No newline at end of file diff --git a/abonapp/urls.py b/abonapp/urls.py index 5f3f9f4..81022f0 100644 --- a/abonapp/urls.py +++ b/abonapp/urls.py @@ -15,13 +15,13 @@ urlpatterns = [ url(r'^(?P\d+)/', include('abonapp.urls_abon')), - url(r'^log$', views.log_page, name='log'), + 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.debtors, name='debtors'), + url(r'^debtors$', views.DebtorsListView.as_view(), name='debtors'), url(r'^ping$', views.abon_ping, name='ping'), diff --git a/abonapp/urls_abon.py b/abonapp/urls_abon.py index 404889c..7299b78 100644 --- a/abonapp/urls_abon.py +++ b/abonapp/urls_abon.py @@ -15,14 +15,14 @@ urlpatterns = [ url(r'^(?P\d+)/services$', views.abon_services, name='abon_services'), url(r'^(?P\d+)/amount', views.abonamount, name='abon_amount'), - url(r'^(?P\d+)/debts', views.invoice_for_payment, name='abon_debts'), - url(r'^(?P\d+)/pay', views.pay_history, name='abon_phistory'), + url(r'^(?P\d+)/debts', views.DebtsListView.as_view(), name='abon_debts'), + url(r'^(?P\d+)/pay', views.PayHistoryListView.as_view(), name='abon_phistory'), url(r'^(?P\d+)/addinvoice$', views.add_invoice, name='add_invoice'), url(r'^(?P\d+)/pick$', views.pick_tariff, name='pick_tariff'), url(r'^(?P\d+)/passport_view$', views.passport_view, name='passport_view'), url(r'^(?P\d+)/chart$', views.charts, name='charts'), - url(r'^(?P\d+)/dials$', views.dials, name='dials'), + url(r'^(?P\d+)/dials$', views.DialsListView.as_view(), name='dials'), url(r'^(?P\d+)/reset_ip$', views.reset_ip, name='reset_ip'), url(r'^(?P\d+)/extra_field$', views.make_extra_field, name='extra_field'), url(r'^(?P\d+)/extra_field/(?P\d+)/delete$', views.extra_field_delete, name='extra_field_delete'), @@ -34,7 +34,7 @@ urlpatterns = [ url(r'^(?P\d+)/dev/$', views.dev, name='dev'), url(r'^(?P\d+)/clear_dev/$', views.clear_dev, name='clear_dev'), - url(r'^(?P\d+)/task_log$', views.task_log, name='task_log'), + url(r'^(?P\d+)/task_log$', views.TaskLogListView.as_view(), name='task_log'), url(r'^(?P\d+)/user_dev$', views.save_user_dev_port, name='save_user_dev_port'), url(r'^(?P\d+)/tel$', views.tels, name='telephones'), diff --git a/abonapp/views.py b/abonapp/views.py index 65fedd9..30abee0 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -230,32 +230,39 @@ def abonamount(request, gid, uid): }, request=request) -@login_required -@mydefs.only_admins -@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')) -def invoice_for_payment(request, gid, uid): - abon = get_object_or_404(models.Abon, pk=uid) - invoices = models.InvoiceForPayment.objects.filter(abon=abon) - invoices = mydefs.pag_mn(request, invoices) - return render(request, 'abonapp/invoiceForPayment.html', { - 'invoices': invoices, - 'abon_group': abon.group, - 'abon': abon - }) +@method_decorator(permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')), name='dispatch') +class DebtsListView(BaseAbonListView): + context_object_name = 'invoices' + template_name = 'abonapp/invoiceForPayment.html' + def get_queryset(self): + abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid')) + self.abon = abon + return models.InvoiceForPayment.objects.filter(abon=abon) -@login_required -@mydefs.only_admins -@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')) -def pay_history(request, gid, uid): - abon = get_object_or_404(models.Abon, pk=uid) - pay_history = models.AbonLog.objects.filter(abon=abon).order_by('-id') - pay_history = mydefs.pag_mn(request, pay_history) - return render(request, 'abonapp/payHistory.html', { - 'pay_history': pay_history, - 'abon_group': abon.group, - 'abon': abon - }) + def get_context_data(self, **kwargs): + context = super(DebtsListView, self).get_context_data(**kwargs) + context['abon_group'] = self.abon.group + context['abon'] = self.abon + return context + + +@method_decorator(permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')), name='dispatch') +class PayHistoryListView(BaseAbonListView): + context_object_name = 'pay_history' + template_name = 'abonapp/payHistory.html' + + def get_queryset(self): + abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid')) + self.abon = abon + pay_history = models.AbonLog.objects.filter(abon=abon).order_by('-id') + return pay_history + + def get_context_data(self, **kwargs): + context = super(PayHistoryListView, self).get_context_data(**kwargs) + context['abon_group'] = self.abon.group + context['abon'] = self.abon + return context @login_required @@ -447,36 +454,44 @@ def unsubscribe_service(request, gid, uid, abon_tariff_id): return redirect('abonapp:abon_services', gid=gid, uid=uid) -@login_required -@permission_required('abonapp.can_view_abonlog') -def log_page(request): - logs = models.AbonLog.objects.all() - logs = mydefs.pag_mn(request, logs) - return render(request, 'abonapp/log.html', { - 'logs': logs - }) +@method_decorator(login_required, name='dispatch') +@method_decorator(permission_required('abonapp.can_view_abonlog'), name='dispatch') +class LogListView(ListView): + paginate_by = PAGINATION_ITEMS_PER_PAGE + http_method_names = ['get'] + context_object_name = 'logs' + template_name = 'abonapp/log.html' + model = models.AbonLog -@login_required -@permission_required('abonapp.can_view_invoiceforpayment') -def debtors(request): - invs = models.InvoiceForPayment.objects.filter(status=True) - invs = mydefs.pag_mn(request, invs) - return render(request, 'abonapp/debtors.html', { - 'invoices': invs - }) +@method_decorator(login_required, name='dispatch') +@method_decorator(permission_required('abonapp.can_view_invoiceforpayment'), name='dispatch') +class DebtorsListView(ListView): + paginate_by = PAGINATION_ITEMS_PER_PAGE + http_method_names = ['get'] + context_object_name = 'invoices' + template_name = 'abonapp/debtors.html' + queryset = models.InvoiceForPayment.objects.filter(status=True) -@login_required -@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')) -def task_log(request, gid, uid): - abon = get_object_or_404(models.Abon, pk=uid) - tasks = Task.objects.filter(abon=abon) - return render(request, 'abonapp/task_log.html', { - 'tasks': tasks, - 'abon_group': get_object_or_404(models.AbonGroup, pk=gid), - 'abon': abon - }) +@method_decorator(login_required, name='dispatch') +@method_decorator(permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')), name='dispatch') +class TaskLogListView(ListView): + paginate_by = PAGINATION_ITEMS_PER_PAGE + http_method_names = ['get'] + context_object_name = 'tasks' + template_name = 'abonapp/task_log.html' + + def get_queryset(self): + abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid')) + self.abon = abon + return Task.objects.filter(abon=abon) + + def get_context_data(self, **kwargs): + context = super(TaskLogListView, self).get_context_data(**kwargs) + context['abon_group'] = self.abon.group + context['abon'] = self.abon + return context @login_required @@ -728,27 +743,34 @@ def abon_ping(request): })) -@login_required -@mydefs.only_admins -def dials(request, gid, uid): - abon = get_object_or_404(models.Abon, pk=uid) - if not request.user.has_perm('abonapp.can_view_abongroup', abon.group): - raise PermissionDenied - if hasattr(abon.group, 'pk') and abon.group.pk != int(gid): - return redirect('abonapp:dials', abon.group.pk, abon.pk) - if abon.telephone is not None and abon.telephone != '': - tel = abon.telephone.replace('+', '') - logs = AsteriskCDR.objects.filter( - Q(src__contains=tel) | Q(dst__contains=tel) - ) - logs = mydefs.pag_mn(request, logs) - else: - logs = None - return render(request, 'abonapp/dial_log.html', { - 'logs': logs, - 'abon_group': get_object_or_404(models.AbonGroup, pk=gid), - 'abon': abon - }) +class DialsListView(BaseAbonListView): + context_object_name = 'logs' + template_name = 'abonapp/dial_log.html' + + def get_queryset(self): + abon = get_object_or_404(models.Abon, pk=self.kwargs.get('uid')) + if not self.request.user.has_perm('abonapp.can_view_abongroup', abon.group): + raise PermissionDenied + self.abon = abon + if abon.telephone is not None and abon.telephone != '': + tel = abon.telephone.replace('+', '') + logs = AsteriskCDR.objects.filter( + Q(src__contains=tel) | Q(dst__contains=tel) + ) + return logs + else: + return AsteriskCDR.objects.empty() + + def get_context_data(self, **kwargs): + context = super(DialsListView, self).get_context_data(**kwargs) + context['abon_group'] = get_object_or_404(models.AbonGroup, pk=self.kwargs.get('gid')) + context['abon'] = self.abon + return context + + def render_to_response(self, context, **response_kwargs): + if hasattr(self.abon.group, 'pk') and self.abon.group.pk != int(self.kwargs.get('gid')): + return redirect('abonapp:dials', self.abon.group.pk, self.abon.pk) + return super(DialsListView, self).render_to_response(context, **response_kwargs) @login_required diff --git a/accounts_app/templates/accounts/perms/objects_of_type.html b/accounts_app/templates/accounts/perms/objects_of_type.html index e5adbcf..4c7d6df 100644 --- a/accounts_app/templates/accounts/perms/objects_of_type.html +++ b/accounts_app/templates/accounts/perms/objects_of_type.html @@ -29,6 +29,6 @@ - {% include 'toolbar_page.html' with pag=objects %} + {% include 'pagination.html' %} {% endblock %} diff --git a/accounts_app/urls.py b/accounts_app/urls.py index ad6d058..7ae5796 100644 --- a/accounts_app/urls.py +++ b/accounts_app/urls.py @@ -13,7 +13,7 @@ urlpatterns = [ url(r'^me$', views.profile_show, name='profile'), - url(r'^$', views.acc_list, name='accounts_list'), + url(r'^$', views.AccountsListView.as_view(), name='accounts_list'), url(r'^add$', views.create_profile, name='create_profile'), @@ -22,7 +22,7 @@ urlpatterns = [ url(r'^(?P\d+)$', views.profile_show, name='other_profile'), url(r'^(?P\d+)/perms$', views.perms, name='setup_perms'), - url(r'^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)$', views.perms_klasses, name='perms_klasses'), + url(r'^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)$', views.PermissionClassListView.as_view(), name='perms_klasses'), url(r'^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)/(?P\d+)$', views.perms_edit, name='perms_edit'), url(r'^(?P\d+)/chgroup$', views.chgroup, name='profile_setup_group'), url(r'^(?P\d+)/del$', views.delete_profile, name='delete_profile'), diff --git a/accounts_app/views.py b/accounts_app/views.py index a929d03..1b971b0 100644 --- a/accounts_app/views.py +++ b/accounts_app/views.py @@ -5,7 +5,11 @@ from django.core.exceptions import PermissionDenied from django.urls import NoReverseMatch from django.shortcuts import render, redirect, get_object_or_404 from django.contrib import messages +from django.utils.decorators import method_decorator from django.utils.translation import ugettext as _ +from django.views.generic import ListView +from django.conf import settings + from abonapp.models import AbonGroup from photo_app.models import Photo @@ -15,6 +19,11 @@ from guardian.decorators import permission_required_or_403 as permission_require from guardian.shortcuts import get_objects_for_user, assign_perm, remove_perm +class BaseAccListView(ListView): + http_method_names = ['get'] + paginate_by = getattr(settings, 'PAGINATION_ITEMS_PER_PAGE', 10) + + @login_required @mydefs.only_admins def home(request): @@ -208,15 +217,15 @@ def delete_profile(request, uid): return redirect('acc_app:accounts_list') -@login_required -@mydefs.only_admins -def acc_list(request): - users = UserProfile.objects.filter(is_admin=True).exclude(pk=request.user.pk) - users = get_objects_for_user(request.user, 'accounts_app.can_view_userprofile', users) - users = mydefs.pag_mn(request, users) - return render(request, 'accounts/acc_list.html', { - 'users': users - }) +@method_decorator([login_required, mydefs.only_admins], name='dispatch') +class AccountsListView(BaseAccListView): + template_name = 'accounts/acc_list.html' + context_object_name = 'users' + + def get_queryset(self): + users = UserProfile.objects.filter(is_admin=True).exclude(pk=self.request.user.pk) + users = get_objects_for_user(self.request.user, 'accounts_app.can_view_userprofile', users) + return users @login_required @@ -235,24 +244,32 @@ def perms(request, uid): }) -@login_required -def perms_klasses(request, uid, klass_name): - if not request.user.is_superuser: - raise PermissionDenied - from django.apps import apps - userprofile = get_object_or_404(UserProfile, pk=uid) - app_label, model_name = klass_name.split('.', 1) - klass = apps.get_model(app_label, model_name) +@method_decorator(login_required, name='dispatch') +class PermissionClassListView(BaseAccListView): + template_name = 'accounts/perms/objects_of_type.html' + context_object_name = 'objects' - objects = klass.objects.all() - objects = mydefs.pag_mn(request, objects) + def get(self, request, *args, **kwargs): + if not request.user.is_superuser: + raise PermissionDenied + return super(PermissionClassListView, self).get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(PermissionClassListView, self).get_context_data(**kwargs) + context['klass'] = self.kwargs.get('klass_name') + context['klass_name'] = self.required_klass_name._meta.verbose_name + context['userprofile'] = get_object_or_404(UserProfile, pk=self.kwargs.get('uid')) + return context + + def get_queryset(self): + from django.apps import apps + klass_name = self.kwargs.get('klass_name') + app_label, model_name = klass_name.split('.', 1) + klass = apps.get_model(app_label, model_name) + objects = klass.objects.all() + self.required_klass_name = klass + return objects - return render(request, 'accounts/perms/objects_of_type.html', { - 'userprofile': userprofile, - 'klass': klass_name, - 'klass_name': klass._meta.verbose_name, - 'objects': objects - }) @login_required def perms_edit(request, uid, klass_name, obj_id): diff --git a/clientsideapp/views.py b/clientsideapp/views.py index a66e35c..212517f 100644 --- a/clientsideapp/views.py +++ b/clientsideapp/views.py @@ -8,7 +8,7 @@ from django.utils.translation import gettext_lazy as _ from abonapp.models import AbonLog, InvoiceForPayment, Abon from tariff_app.models import Tariff -from mydefs import pag_mn, LogicError +from mydefs import LogicError from agent import NasFailedResult, NasNetworkError @@ -20,7 +20,6 @@ def home(request): @login_required def pays(request): pay_history = AbonLog.objects.filter(abon=request.user).order_by('-id') - pay_history = pag_mn(request, pay_history) return render(request, 'clientsideapp/pays.html', { 'pay_history': pay_history }) diff --git a/devapp/templates/devapp/group_list.html b/devapp/templates/devapp/group_list.html index de193b2..3b7448d 100644 --- a/devapp/templates/devapp/group_list.html +++ b/devapp/templates/devapp/group_list.html @@ -46,6 +46,6 @@ - {% include 'toolbar_page.html' with pag=groups %} + {% include 'pagination.html' %} {% endblock %} diff --git a/devapp/urls.py b/devapp/urls.py index f2ec969..af836d4 100644 --- a/devapp/urls.py +++ b/devapp/urls.py @@ -4,7 +4,7 @@ from . import views app_name = 'devapp' urlpatterns = [ - url(r'^$', views.group_list, name='group_list'), + url(r'^$', views.GroupsListView.as_view(), name='group_list'), url(r'^devices_without_groups$', views.DevicesWithoutGroupsListView.as_view(), name='devices_null_group'), url(r'^fix_onu/$', views.fix_onu, name='fix_onu'), url(r'^(?P\d+)$', views.DevicesListView.as_view(), name='devs'), diff --git a/devapp/views.py b/devapp/views.py index 8f4fc06..f932d9d 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -404,14 +404,17 @@ def toggle_port(request, device_id, portid, status=0): return redirect('devapp:view', dev.user_group.pk if dev.user_group is not None else 0, device_id) -@login_required -@only_admins -def group_list(request): - groups = AbonGroup.objects.all().order_by('title') - groups = get_objects_for_user(request.user, 'abonapp.can_view_abongroup', klass=groups, accept_global_perms=False) - return render(request, 'devapp/group_list.html', { - 'groups': groups - }) +@method_decorator([login_required, only_admins], name='dispatch') +class GroupsListView(BaseDeviceListView): + context_object_name = 'groups' + template_name = 'devapp/group_list.html' + model = AbonGroup + + def get_queryset(self): + groups = super(GroupsListView, self).get_queryset() + groups = get_objects_for_user(self.request.user, 'abonapp.can_view_abongroup', klass=groups, + accept_global_perms=False) + return groups @login_required diff --git a/msg_app/templates/msg_app/conversations.html b/msg_app/templates/msg_app/conversations.html index b39e2e0..de0331b 100644 --- a/msg_app/templates/msg_app/conversations.html +++ b/msg_app/templates/msg_app/conversations.html @@ -57,6 +57,6 @@ - {% include 'toolbar_page.html' with pag=conversations %} + {% include 'pagination.html' %} {% endblock %} diff --git a/msg_app/urls.py b/msg_app/urls.py index 21a320c..e5e037a 100644 --- a/msg_app/urls.py +++ b/msg_app/urls.py @@ -6,7 +6,7 @@ app_name = 'msg_app' urlpatterns = [ - url(r'^$', views.home, name='home'), + url(r'^$', views.ConversationsListView.as_view(), name='home'), url(r'^new$', views.new_conversation, name='new_conversation'), url(r'^(?P\d+)/$', views.to_conversation, name='to_conversation'), url(r'^(?P\d+)/(?P\d+)/del$', views.remove_msg, name='remove_msg'), diff --git a/msg_app/views.py b/msg_app/views.py index 431dddb..406e54b 100644 --- a/msg_app/views.py +++ b/msg_app/views.py @@ -3,24 +3,26 @@ from django.contrib.auth.decorators import login_required from django.contrib.gis.shortcuts import render_to_text from django.core.exceptions import PermissionDenied from django.http import HttpResponse +from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.contrib import messages from django.shortcuts import render, redirect, get_object_or_404 +from django.views.generic import ListView + from chatbot.models import MessageQueue -from mydefs import pag_mn from .models import Conversation, MessageError, Message from .forms import ConversationForm, MessageForm -@login_required -def home(request): - # TODO: optimise queries - conversations = Conversation.objects.fetch(request.user) - conversations = pag_mn(request, conversations, 8) - return render(request, 'msg_app/conversations.html', { - 'conversations': conversations - }) +@method_decorator(login_required, name='dispatch') +class ConversationsListView(ListView): + context_object_name = 'conversations' + template_name = 'msg_app/conversations.html' + + def get_queryset(self): + # TODO: optimise queries + return Conversation.objects.fetch(self.request.user) @login_required @@ -90,4 +92,3 @@ def check_news(request): else: r = {'auth': False} return HttpResponse(dumps(r)) - diff --git a/mydefs.py b/mydefs.py index 2fd9ad3..49b6020 100644 --- a/mydefs.py +++ b/mydefs.py @@ -8,15 +8,16 @@ import os from functools import wraps from django.http import HttpResponse, Http404, HttpResponseRedirect from django.shortcuts import redirect -from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.db import models from django.conf import settings - PAGINATION_ITEMS_PER_PAGE = getattr(settings, 'PAGINATION_ITEMS_PER_PAGE', 10) DEBUG = getattr(settings, 'DEBUG', False) -ip_addr_regex = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' +ip_addr_regex = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ + r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ + r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ + r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' def ip2int(addr): @@ -61,19 +62,6 @@ def res_error(request, text): raise Http404(text) -# Pagination -def pag_mn(request, objs, count_per_page=PAGINATION_ITEMS_PER_PAGE): - page = request.GET.get('p') - pgn = Paginator(objs, count_per_page) - try: - objs = pgn.page(page) - except PageNotAnInteger: - objs = pgn.page(1) - except EmptyPage: - objs = pgn.page(pgn.num_pages) - return objs - - class MyGenericIPAddressField(models.GenericIPAddressField): description = "Int32 notation ip address" @@ -143,7 +131,6 @@ def ping(hostname, count=1): # Русифицированный вывод timedelta class RuTimedelta(timedelta): - def __new__(cls, tm): if isinstance(tm, timedelta): return timedelta.__new__( @@ -154,19 +141,19 @@ class RuTimedelta(timedelta): ) def __str__(self): - #hours, remainder = divmod(self.seconds, 3600) - #minutes, seconds = divmod(remainder, 60) - #text_date = "%d:%d" % ( + # hours, remainder = divmod(self.seconds, 3600) + # minutes, seconds = divmod(remainder, 60) + # text_date = "%d:%d" % ( # hours, # minutes - #) + # ) if self.days > 1: ru_days = 'дней' if 5 > self.days > 1: ru_days = 'дня' elif self.days == 1: ru_days = 'день' - #text_date = '%d %s %s' % (self.days, ru_days, text_date) + # text_date = '%d %s %s' % (self.days, ru_days, text_date) text_date = '%d %s' % (self.days, ru_days) else: text_date = '' @@ -179,17 +166,18 @@ def require_ssl(view): the page. from: https://gist.github.com/ckinsey/9709984 """ + @wraps(view) def wrapper(request, *args, **kwargs): if not DEBUG and not request.is_secure(): target_url = "https://" + request.META['HTTP_HOST'] + request.path_info return HttpResponseRedirect(target_url) return view(request, *args, **kwargs) + return wrapper class MultipleException(Exception): - def __init__(self, err_list): if not isinstance(err_list, list): raise TypeError @@ -202,8 +190,10 @@ class LogicError(Exception): def singleton(class_): instances = {} + def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] + return getinstance diff --git a/tariff_app/templates/tariff_app/periodic_pays/list.html b/tariff_app/templates/tariff_app/periodic_pays/list.html index 6bcac38..e9df0f7 100644 --- a/tariff_app/templates/tariff_app/periodic_pays/list.html +++ b/tariff_app/templates/tariff_app/periodic_pays/list.html @@ -57,6 +57,6 @@ - {% include 'toolbar_page.html' with pag=pays %} + {% include 'pagination.html' %} {% endblock %} diff --git a/tariff_app/urls.py b/tariff_app/urls.py index 1eb8d67..1548b9e 100644 --- a/tariff_app/urls.py +++ b/tariff_app/urls.py @@ -10,7 +10,7 @@ urlpatterns = [ url(r'^add$', views.edit_tarif, name='add'), url(r'^del(?P\d+)$', views.del_tarif, name='del'), - url(r'^periodic_pays$', views.periodic_pays, name='periodic_pays'), + url(r'^periodic_pays$', views.PeriodicPaysListView.as_view(), name='periodic_pays'), url(r'^periodic_pays/add$', views.periodic_pay, name='periodic_pay_add'), url(r'^periodic_pays/(?P\d+)$', views.periodic_pay, name='periodic_pay_edit') ] diff --git a/tariff_app/views.py b/tariff_app/views.py index ea21bd6..1e51fee 100644 --- a/tariff_app/views.py +++ b/tariff_app/views.py @@ -74,14 +74,12 @@ def del_tarif(request, tid): return render_to_text('tariff_app/modal_del_warning.html', {'tid': tid}, request=request) -@login_required -@permission_required('tariff_app.can_view_periodic_pay') -def periodic_pays(request): - pays = PeriodicPay.objects.all() - pays = mydefs.pag_mn(request, pays) - return render(request, 'tariff_app/periodic_pays/list.html', { - 'pays': pays - }) +@method_decorator(login_required, name='dispatch') +@method_decorator(permission_required('tariff_app.can_view_periodic_pay'), name='dispatch') +class PeriodicPaysListView(BaseServiceListView): + context_object_name = 'pays' + model = PeriodicPay + template_name = 'tariff_app/periodic_pays/list.html' @login_required diff --git a/templates/toolbar_page.html b/templates/toolbar_page.html deleted file mode 100644 index 58f6d33..0000000 --- a/templates/toolbar_page.html +++ /dev/null @@ -1,26 +0,0 @@ -{% if pag.paginator.num_pages > 1 %} -{% load dpagination %} -
-
- -
-
-{% endif %}