From 974040c2b00d51e8f325e09812a7fdaecc660f3d Mon Sep 17 00:00:00 2001 From: bashmak Date: Wed, 10 May 2017 09:43:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D0=BF=D1=80=D0=B5=D0=B4=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B3=D1=80=D0=B0=D1=84=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- abonapp/views.py | 51 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/abonapp/views.py b/abonapp/views.py index 69c3dcf..2fba1e5 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -2,7 +2,7 @@ from json import dumps from django.contrib.gis.shortcuts import render_to_text from django.core.exceptions import PermissionDenied, MultipleObjectsReturned -from django.db import IntegrityError +from django.db import IntegrityError, ProgrammingError from django.db.models import Count from django.shortcuts import render, redirect, get_object_or_404, resolve_url from django.contrib.auth.decorators import login_required, permission_required @@ -554,14 +554,15 @@ def log_page(request): @mydefs.only_admins def debtors(request): # peoples_list = models.Abon.objects.filter(invoiceforpayment__status=True) - #peoples_list = mydefs.pag_mn(request, peoples_list) + # peoples_list = mydefs.pag_mn(request, peoples_list) invs = models.InvoiceForPayment.objects.filter(status=True) invs = mydefs.pag_mn(request, invs) return render(request, 'abonapp/debtors.html', { - #'peoples': peoples_list + # 'peoples': peoples_list 'invoices': invs }) + @login_required @mydefs.only_admins def update_nas(request, group_id): @@ -644,6 +645,48 @@ def chgroup_tariff(request, gid): }) +@login_required +@mydefs.only_admins +def charts(request, gid, uid): + from statistics.models import getModel + from datetime import datetime, date, time, timedelta + try: + StatElem = getModel() + abon = models.Abon.objects.get(pk=uid) + if abon.group is None: + abon.group = models.AbonGroup.objects.get(pk=gid) + abon.save(update_fields=['group']) + abongroup = abon.group + + if abon.ip_address is None: + charts_data = None + else: + charts_data = StatElem.objects.filter(ip=abon.ip_address.ip) + oct_limit = StatElem.percentile([cd.octets for cd in charts_data], 0.05) + charts_data = ["{x:%d,y:%d}" % (cd.cur_time.timestamp(), cd.octets) for cd in charts_data if + cd.octets < oct_limit and cd.octets > 102400] + + except models.Abon.DoesNotExist: + messages.error(request, _('Abon does not exist')) + return redirect('abonapp:people_list', gid) + except models.AbonGroup.DoesNotExist: + messages.error(request, _("Group what you want doesn't exist")) + return redirect('abonapp:group_list') + except ProgrammingError as e: + messages.error(request, e) + return redirect('abonapp:abon_home', gid=gid, uid=uid) + + midnight = datetime.combine(date.today(), time.min) + + return render(request, 'abonapp/charts.html', { + 'abon_group': abongroup, + 'abon': abon, + 'charts_data': ','.join(charts_data), + 'time_min': midnight.timestamp(), + 'time_max': (midnight + timedelta(hours=23, minutes=59, seconds=59)).timestamp() + }) + + # API's def abons(request): @@ -671,5 +714,5 @@ def abons(request): def search_abon(request): word = request.GET.get('s') results = models.Abon.objects.filter(fio__icontains=word)[:8] - results = [{'id':usr.pk, 'name':usr.username, 'fio':usr.fio} for usr in results] + results = [{'id': usr.pk, 'name': usr.username, 'fio': usr.fio} for usr in results] return HttpResponse(dumps(results, ensure_ascii=False))