From 8ccc430d0166a5d6649714845ef6b980533dc4a4 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Fri, 1 Dec 2017 14:18:35 +0300 Subject: [PATCH] Add feautures & fix bugs --- abonapp/locale/ru/LC_MESSAGES/django.po | 8 ++++ abonapp/templates/abonapp/editAbon.html | 9 ++++- abonapp/templates/abonapp/ext.htm | 2 +- abonapp/templates/abonapp/peoples.html | 11 ++++-- abonapp/urls_abon.py | 2 + abonapp/views.py | 39 ++++++++++++++++++- accounts_app/templates/accounts/acc_list.html | 21 ++++------ accounts_app/templates/accounts/index.html | 2 +- chatbot/telebot.py | 3 ++ .../templates/clientsideapp/ext.html | 3 +- .../templates/clientsideapp/services.html | 12 ++++-- clientsideapp/views.py | 12 ++++-- devapp/views.py | 2 +- dialing_app/locale/ru/LC_MESSAGES/django.po | 13 ++----- dialing_app/templates/ext.html | 12 +++++- dialing_app/templates/vmail.html | 10 +---- dialing_app/urls.py | 3 +- dialing_app/views.py | 15 ++++++- taskapp/handle.py | 2 - taskapp/locale/ru/LC_MESSAGES/django.po | 6 +++ taskapp/models.py | 2 + 21 files changed, 133 insertions(+), 56 deletions(-) diff --git a/abonapp/locale/ru/LC_MESSAGES/django.po b/abonapp/locale/ru/LC_MESSAGES/django.po index fe28b1a..f06f1f4 100644 --- a/abonapp/locale/ru/LC_MESSAGES/django.po +++ b/abonapp/locale/ru/LC_MESSAGES/django.po @@ -1012,3 +1012,11 @@ msgstr "Может видеть дополнительные телефоны" msgid "IP Conflict! %d/%d results" msgstr "IP Конфликт! ping %d из %d" +msgid "Phonebook" +msgstr "Телефонная книга" + +msgid "Reset ip" +msgstr "Сбросить ip" + +msgid "Export to csv" +msgstr "Сохранить в csv" diff --git a/abonapp/templates/abonapp/editAbon.html b/abonapp/templates/abonapp/editAbon.html index e219ecb..e5b21e4 100644 --- a/abonapp/templates/abonapp/editAbon.html +++ b/abonapp/templates/abonapp/editAbon.html @@ -49,7 +49,14 @@
- +
+ + + + + + +
diff --git a/abonapp/templates/abonapp/ext.htm b/abonapp/templates/abonapp/ext.htm index 92c9876..35877fb 100644 --- a/abonapp/templates/abonapp/ext.htm +++ b/abonapp/templates/abonapp/ext.htm @@ -14,7 +14,7 @@ diff --git a/abonapp/templates/abonapp/peoples.html b/abonapp/templates/abonapp/peoples.html index 8c465ff..7ccc764 100644 --- a/abonapp/templates/abonapp/peoples.html +++ b/abonapp/templates/abonapp/peoples.html @@ -102,7 +102,7 @@ {% else %}——— {% endif %} - {{ human.ballance }} + {{ human.ballance|floatformat:2 }} {% if can_del_trf %} @@ -125,15 +125,18 @@ - + {% if perms.abonapp.add_abon %} - + {% trans 'Add abon' %} {% endif %} - + {% trans 'Tariffs in groups' %} + + {% trans 'Phonebook' %} + diff --git a/abonapp/urls_abon.py b/abonapp/urls_abon.py index d37a86c..1bbf288 100644 --- a/abonapp/urls_abon.py +++ b/abonapp/urls_abon.py @@ -6,6 +6,7 @@ urlpatterns = [ url(r'^$', views.peoples, name='people_list'), url(r'^addabon$', views.addabon, name='add_abon'), url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'), + url(r'^phonebook$', views.phonebook, name='phonebook'), url(r'^street/add$', views.street_add, name='street_add'), url(r'^street/edit', views.street_edit, name='street_edit'), url(r'^street/(?P\d+)/delete$', views.street_del, name='street_del'), @@ -21,6 +22,7 @@ urlpatterns = [ 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+)/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'), url(r'^(?P\d+)/extra_field/edit$', views.extra_field_change, name='extra_field_edit'), diff --git a/abonapp/views.py b/abonapp/views.py index c5a860d..47a9302 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -3,7 +3,7 @@ from json import dumps from django.contrib.gis.shortcuts import render_to_text from django.core.exceptions import PermissionDenied from django.db import IntegrityError, ProgrammingError -from django.db.models import Count, Q +from django.db.models import Count, Q, signals from django.db.transaction import atomic from django.shortcuts import render, redirect, get_object_or_404, resolve_url from django.contrib.auth.decorators import login_required @@ -870,6 +870,43 @@ def tel_del(request, gid, uid): return redirect('abonapp:abon_home', gid, uid) +@login_required +@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')) +def phonebook(request, gid): + res_format = request.GET.get('f') + t1 = models.Abon.objects.filter(group__id=int(gid)).only('telephone', 'fio').values_list('telephone', 'fio') + t2 = models.AdditionalTelephone.objects.filter(abon__group__id=gid).only('telephone', 'owner_name').values_list('telephone', 'owner_name') + tels = list(t1) + list(t2) + if res_format == 'csv': + import csv + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = 'attachment; filename="phones.csv"' + writer = csv.writer(response, quoting=csv.QUOTE_NONNUMERIC) + for row in tels: + writer.writerow(row) + return response + return render_to_text('abonapp/modal_phonebook.html', { + 'tels': tels, + 'gid': gid + }, request=request) + + +@login_required +@permission_required('abonapp.change_abon') +@permission_required('abonapp.can_view_abongroup', (models.AbonGroup, 'pk', 'gid')) +def reset_ip(request, gid, uid): + abon = get_object_or_404(models.Abon, pk=uid) + signals.post_save.disconnect(models.abon_post_save, sender=models.Abon) + abon.ip_address = None + abon.save(update_fields=['ip_address']) + signals.post_save.connect(models.abon_post_save, sender=models.Abon) + return HttpResponse(dumps({ + 'status': 0, + 'dat': "" + })) + + + # API's def abons(request): diff --git a/accounts_app/templates/accounts/acc_list.html b/accounts_app/templates/accounts/acc_list.html index 1704218..7bb82f8 100644 --- a/accounts_app/templates/accounts/acc_list.html +++ b/accounts_app/templates/accounts/acc_list.html @@ -34,27 +34,20 @@ Нету{% endif %} {% if usr.email %}{{ usr.email }}{% else %} Нету{% endif %} - - - - - - - - - {% if usr.id == request.user.id or perms.acc_app.delete_userprofile %} + {% if usr.id == request.user.id or perms.acc_app.delete_userprofile %} + - {% else %} + + {% else %} + - {% endif %} + + {% endif %} - {% empty %} diff --git a/accounts_app/templates/accounts/index.html b/accounts_app/templates/accounts/index.html index db5f796..35b8034 100644 --- a/accounts_app/templates/accounts/index.html +++ b/accounts_app/templates/accounts/index.html @@ -3,7 +3,7 @@ {% block content %}
- +
diff --git a/chatbot/telebot.py b/chatbot/telebot.py index 5e9acb6..c5f31ee 100755 --- a/chatbot/telebot.py +++ b/chatbot/telebot.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from telepot import helper, glance, Bot +from telepot.exception import TelegramError import os import socket import collections @@ -142,4 +143,6 @@ def send_notify(msg_text, account): raise ChatException(_("Recipient '%s' does not subscribed on notifications") % account.get_full_name()) except ProtocolError as e: raise ChatException(e) + except TelegramError as e: + raise ChatException("%s - %s" % (e, tb.user.get_full_name())) diff --git a/clientsideapp/templates/clientsideapp/ext.html b/clientsideapp/templates/clientsideapp/ext.html index 1d74f13..bdd7c4d 100644 --- a/clientsideapp/templates/clientsideapp/ext.html +++ b/clientsideapp/templates/clientsideapp/ext.html @@ -49,6 +49,7 @@ Услуги + diff --git a/clientsideapp/templates/clientsideapp/services.html b/clientsideapp/templates/clientsideapp/services.html index 9646d95..9eaca3d 100644 --- a/clientsideapp/templates/clientsideapp/services.html +++ b/clientsideapp/templates/clientsideapp/services.html @@ -6,7 +6,7 @@
-
+
{% if current_service %}
@@ -27,6 +27,8 @@

{{ current_service.tariff.descr }}

+ + {% else %} {% endif %}
-
+
Доступные для заказа услуги @@ -66,12 +68,15 @@
-
+ {% include 'clientsideapp/services_ext.txt' %}
+ + +
@@ -89,5 +94,4 @@
- {% endblock %} diff --git a/clientsideapp/views.py b/clientsideapp/views.py index 9666e8a..173e056 100644 --- a/clientsideapp/views.py +++ b/clientsideapp/views.py @@ -28,12 +28,16 @@ def pays(request): @login_required def services(request): - abon = Abon.objects.get(pk=request.user.pk) - all_tarifs = abon.group.tariffs.filter(is_admin=False) - + try: + abon = Abon.objects.get(pk=request.user.pk) + all_tarifs = abon.group.tariffs.filter(is_admin=False) + current_service = abon.active_tariff() + except: + all_tarifs = None + current_service = None return render(request, 'clientsideapp/services.html', { 'tarifs': all_tarifs, - 'current_service': abon.active_tariff() + 'current_service': current_service }) diff --git a/devapp/views.py b/devapp/views.py index dc0fa33..43168f1 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -357,7 +357,7 @@ def toggle_port(request, did, portid, status=0): try: if ping(dev.ip_address): if dev.man_passw: - manager = dev.get_manager_klass()(dev.ip_address, dev.man_passw) + manager = dev.get_manager_object() ports = manager.get_ports() if status: ports[portid - 1].enable() diff --git a/dialing_app/locale/ru/LC_MESSAGES/django.po b/dialing_app/locale/ru/LC_MESSAGES/django.po index 4889f2b..7e810aa 100644 --- a/dialing_app/locale/ru/LC_MESSAGES/django.po +++ b/dialing_app/locale/ru/LC_MESSAGES/django.po @@ -95,14 +95,9 @@ msgstr "Несколько абонентов с указанным номеро msgid "User with the telephone number not found" msgstr "Абонент с таким номером телефона не найден" -msgid "Voice mail" -msgstr "Оставленные сообщения" +msgid "Voice mail request" +msgstr "Заявки на подключение" -msgid "Type" -msgstr "Тип" +msgid "Voice mail report" +msgstr "Заявки на поломки" -msgid "Request" -msgstr "Заявка" - -msgid "Report" -msgstr "Поломка" \ No newline at end of file diff --git a/dialing_app/templates/ext.html b/dialing_app/templates/ext.html index 5d01acc..a5c9401 100644 --- a/dialing_app/templates/ext.html +++ b/dialing_app/templates/ext.html @@ -22,13 +22,21 @@ - {% url 'dialapp:vmail' as dialmail %} + {% url 'dialapp:vmail_request' as dialmail %} - {% trans 'Voice mail' %} + {% trans 'Voice mail request' %} + {% url 'dialapp:vmail_report' as dialmail %} + + + {% trans 'Voice mail report' %} + + + +
diff --git a/dialing_app/templates/vmail.html b/dialing_app/templates/vmail.html index fb4169a..f995ca0 100644 --- a/dialing_app/templates/vmail.html +++ b/dialing_app/templates/vmail.html @@ -10,7 +10,6 @@
- @@ -21,7 +20,7 @@ {% for vmail in vmessages %} - - @@ -45,7 +39,7 @@ {% empty %} - + {% endfor %} diff --git a/dialing_app/urls.py b/dialing_app/urls.py index 3e81add..6dc3fe8 100644 --- a/dialing_app/urls.py +++ b/dialing_app/urls.py @@ -6,5 +6,6 @@ urlpatterns = [ url(r'^$', views.home, name='home'), url(r'^filter$', views.vfilter, name='vfilter'), url(r'^to_abon(?P\+?\d+)$', views.to_abon, name='to_abon'), - url(r'^voicemail$', views.vmail, name='vmail') + url(r'^requests$', views.vmail_request, name='vmail_request'), + url(r'^reports$', views.vmail_report, name='vmail_report') ] diff --git a/dialing_app/views.py b/dialing_app/views.py index f3ceebd..4386a07 100644 --- a/dialing_app/views.py +++ b/dialing_app/views.py @@ -42,8 +42,8 @@ def to_abon(request, tel): @login_required @only_admins -def vmail(request): - title = _('Voice mail') +def vmail_request(request): + title = _('Voice mail request') cdr = AsteriskCDR.objects.filter(userfield='request').order_by('-calldate') cdr = pag_mn(request, cdr) return render(request, 'vmail.html', { @@ -51,6 +51,17 @@ def vmail(request): 'vmessages': cdr }) +@login_required +@only_admins +def vmail_report(request): + title = _('Voice mail report') + cdr = AsteriskCDR.objects.filter(userfield='report').order_by('-calldate') + cdr = pag_mn(request, cdr) + return render(request, 'vmail.html', { + 'title': title, + 'vmessages': cdr + }) + @login_required @only_admins diff --git a/taskapp/handle.py b/taskapp/handle.py index e31303f..b00a62c 100644 --- a/taskapp/handle.py +++ b/taskapp/handle.py @@ -35,8 +35,6 @@ def handle(task, author, recipients, abon_group): fulltext += _('Task type - %s.') % task.get_mode_display() + '\n' fulltext += task.descr if task.descr else '' - print('task.state:', task.state) - if task.state == 'F' or task.state == 'C': # Если задача завершена или провалена то отправляем одно оповещение автору try: diff --git a/taskapp/locale/ru/LC_MESSAGES/django.po b/taskapp/locale/ru/LC_MESSAGES/django.po index 25e6bec..78af563 100644 --- a/taskapp/locale/ru/LC_MESSAGES/django.po +++ b/taskapp/locale/ru/LC_MESSAGES/django.po @@ -378,3 +378,9 @@ msgstr "Задачи, которые необходимо выполнить" msgid "locality %s. Task type - %s. " msgstr "с. %s. Тип задачи - %s. " + +msgid "ip conflict" +msgstr "Ip конфликт" + +msgid "Internet crash" +msgstr "Нет интернета" diff --git a/taskapp/models.py b/taskapp/models.py index 37e30f6..1ed1742 100644 --- a/taskapp/models.py +++ b/taskapp/models.py @@ -23,6 +23,7 @@ TASK_STATES = ( TASK_TYPES = ( ('na', _('not chosen')), + ('ic', _('ip conflict')), ('yt', _('yellow triangle')), ('rc', _('red cross')), ('ls', _('weak speed')), @@ -32,6 +33,7 @@ TASK_TYPES = ( ('cr', _('router setup')), ('co', _('configure onu')), ('fc', _('crimp cable')), + ('ni', _('Internet crash')), ('ot', _('other')) )
{% trans 'Telephone' %} {% trans 'Play' %} {% trans 'calldate' %} {% trans 'src' %}{% trans 'Type' %} {% trans 'duration' %} {% trans 'start' %} {% trans 'answer' %}
+ {{ vmail.calldate|date:'d E Y, H:i:s' }} {{ vmail.src|abon_if_telephone|safe }} - {% if vmail.userfield == 'request' %}{% trans 'Request' %} - {% elif vmail.userfield == 'report' %}{% trans 'Report' %} - {% else %}{{ vmail.userfield }}{% endif %} - {{ vmail.duration }} {{ vmail.start|date:'d E Y, H:i:s' }} {{ vmail.answer|date:'d E Y, H:i:s' }}
{% trans 'Calls was not found' %}{% trans 'Calls was not found' %}