Browse Source

First try to upgrade to Django2

devel
Dmitry Novikov 8 years ago
parent
commit
1b9ce7b94f
  1. 20
      abonapp/models.py
  2. 100
      abonapp/urls.py
  3. 35
      abonapp/views.py
  4. 32
      accounts_app/urls.py
  5. 3
      chatbot/email_bot.py
  6. 6
      chatbot/models.py
  7. 16
      clientsideapp/urls.py
  8. 7
      clientsideapp/views.py
  9. 2
      devapp/models.py
  10. 50
      devapp/urls.py
  11. 15
      devapp/views.py
  12. 18
      dialing_app/urls.py
  13. 6
      dialing_app/views.py
  14. 4
      djing/fields.py
  15. 2
      djing/global_base_views.py
  16. 2
      djing/settings.py
  17. 2
      djing/templatetags/dpagination.py
  18. 36
      djing/urls.py
  19. 10
      group_app/urls.py
  20. 2
      ip_pool/templatetags/ip_pool_tags.py
  21. 21
      ip_pool/urls.py
  22. 25
      mapapp/urls.py
  23. 15
      mapapp/views.py
  24. 2
      msg_app/context_processors.py
  25. 16
      msg_app/models.py
  26. 12
      msg_app/urls.py
  27. 8
      msg_app/views.py
  28. 10
      nas_app/urls.py
  29. 2
      requirements.txt
  30. 4
      searchapp/urls.py
  31. 2
      statistics/fields.py
  32. 4
      statistics/urls.py
  33. 16
      tariff_app/urls.py
  34. 10
      taskapp/models.py
  35. 34
      taskapp/urls.py

20
abonapp/models.py

@ -22,9 +22,9 @@ from bitfield import BitField
class AbonLog(models.Model): class AbonLog(models.Model):
abon = models.ForeignKey('Abon', models.CASCADE)
abon = models.ForeignKey('Abon', on_delete=models.CASCADE)
amount = models.FloatField(default=0.0) amount = models.FloatField(default=0.0)
author = models.ForeignKey(UserProfile, models.CASCADE, related_name='+', blank=True, null=True)
author = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='+', blank=True, null=True)
comment = models.CharField(max_length=128) comment = models.CharField(max_length=128)
date = models.DateTimeField(auto_now_add=True) date = models.DateTimeField(auto_now_add=True)
@ -40,7 +40,7 @@ class AbonLog(models.Model):
class AbonTariff(models.Model): class AbonTariff(models.Model):
tariff = models.ForeignKey(Tariff, models.CASCADE, related_name='linkto_tariff')
tariff = models.ForeignKey(Tariff, on_delete=models.CASCADE, related_name='linkto_tariff')
time_start = models.DateTimeField(null=True, blank=True, default=None) time_start = models.DateTimeField(null=True, blank=True, default=None)
@ -72,7 +72,7 @@ class AbonTariff(models.Model):
class AbonStreet(models.Model): class AbonStreet(models.Model):
name = models.CharField(max_length=64) name = models.CharField(max_length=64)
group = models.ForeignKey(Group, models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
def __str__(self): def __str__(self):
return self.name return self.name
@ -91,7 +91,7 @@ class AbonManager(MyUserManager):
class Abon(BaseAccount): class Abon(BaseAccount):
current_tariff = models.ForeignKey(AbonTariff, null=True, blank=True, on_delete=models.SET_NULL) current_tariff = models.ForeignKey(AbonTariff, null=True, blank=True, on_delete=models.SET_NULL)
group = models.ForeignKey(Group, models.SET_NULL, blank=True, null=True, verbose_name=_('User group'))
group = models.ForeignKey(Group, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('User group'))
ballance = models.FloatField(default=0.0) ballance = models.FloatField(default=0.0)
ip_addresses = models.ManyToManyField(IpLeaseModel, verbose_name=_('Ip addresses')) ip_addresses = models.ManyToManyField(IpLeaseModel, verbose_name=_('Ip addresses'))
description = models.TextField(_('Comment'), null=True, blank=True) description = models.TextField(_('Comment'), null=True, blank=True)
@ -308,7 +308,7 @@ class PassportInfo(models.Model):
class InvoiceForPayment(models.Model): class InvoiceForPayment(models.Model):
abon = models.ForeignKey(Abon, models.CASCADE)
abon = models.ForeignKey(Abon, on_delete=models.CASCADE)
status = models.BooleanField(default=False) status = models.BooleanField(default=False)
amount = models.FloatField(default=0.0) amount = models.FloatField(default=0.0)
comment = models.CharField(max_length=128) comment = models.CharField(max_length=128)
@ -353,7 +353,7 @@ class AllTimePayLogManager(models.Manager):
# Log for pay system "AllTime" # Log for pay system "AllTime"
class AllTimePayLog(models.Model): class AllTimePayLog(models.Model):
abon = models.ForeignKey(Abon, models.SET_DEFAULT, blank=True, null=True, default=None)
abon = models.ForeignKey(Abon, on_delete=models.SET_DEFAULT, blank=True, null=True, default=None)
pay_id = models.CharField(max_length=36, unique=True, primary_key=True) pay_id = models.CharField(max_length=36, unique=True, primary_key=True)
date_add = models.DateTimeField(auto_now_add=True) date_add = models.DateTimeField(auto_now_add=True)
summ = models.FloatField(default=0.0) summ = models.FloatField(default=0.0)
@ -397,7 +397,7 @@ class AbonRawPassword(models.Model):
class AdditionalTelephone(models.Model): class AdditionalTelephone(models.Model):
abon = models.ForeignKey(Abon, models.CASCADE, related_name='additional_telephones')
abon = models.ForeignKey(Abon, on_delete=models.CASCADE, related_name='additional_telephones')
telephone = models.CharField( telephone = models.CharField(
max_length=16, max_length=16,
verbose_name=_('Telephone'), verbose_name=_('Telephone'),
@ -422,10 +422,10 @@ class AdditionalTelephone(models.Model):
class PeriodicPayForId(models.Model): class PeriodicPayForId(models.Model):
periodic_pay = models.ForeignKey(PeriodicPay, models.CASCADE, verbose_name=_('Periodic pay'))
periodic_pay = models.ForeignKey(PeriodicPay, on_delete=models.CASCADE, verbose_name=_('Periodic pay'))
last_pay = models.DateTimeField(_('Last pay time'), blank=True, null=True) last_pay = models.DateTimeField(_('Last pay time'), blank=True, null=True)
next_pay = models.DateTimeField(_('Next time to pay')) next_pay = models.DateTimeField(_('Next time to pay'))
account = models.ForeignKey(Abon, models.CASCADE, verbose_name=_('Account'))
account = models.ForeignKey(Abon, on_delete=models.CASCADE, verbose_name=_('Account'))
def payment_for_service(self, author: UserProfile=None, now=None): def payment_for_service(self, author: UserProfile=None, now=None):
""" """

100
abonapp/urls.py

@ -1,65 +1,65 @@
from django.conf.urls import url, include
from django.urls import path, include, re_path
from . import views from . import views
app_name = 'abonapp' app_name = 'abonapp'
subscriber_patterns = [ subscriber_patterns = [
url(r'^$', views.AbonHomeUpdateView.as_view(), name='abon_home'),
url(r'^services/$', views.abon_services, name='abon_services'),
url(r'^amount/$', views.abonamount, name='abon_amount'),
url(r'^debts/$', views.DebtsListView.as_view(), name='abon_debts'),
url(r'^pay/$', views.PayHistoryListView.as_view(), name='abon_phistory'),
url(r'^addinvoice/$', views.add_invoice, name='add_invoice'),
url(r'^pick/$', views.pick_tariff, name='pick_tariff'),
url(r'^passport_view/$', views.PassportUpdateView.as_view(), name='passport_view'),
url(r'^chart/$', views.charts, name='charts'),
url(r'^dials/$', views.DialsListView.as_view(), name='dials'),
# url(r'^reset_ip/$', views.reset_ip, name='reset_ip'),
url(r'^unsubscribe_service(?P<abon_tariff_id>\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'),
url(r'^telephones/$', views.tels, name='telephones'),
url(r'^tel/add/$', views.tel_add, name='telephone_new'),
url(r'^tel/del/$', views.tel_del, name='telephone_del'),
url(r'^markers/$', views.EditSibscriberMarkers.as_view(), name='markers_edit'),
url(r'^session/(?P<lease_id>\d+)/free$', views.user_session_toggle, {'action': 'free'}, name='user_session_free'),
url(r'^session/(?P<lease_id>\d+)/start$', views.user_session_toggle, {'action': 'start'}, name='user_session_start'),
url(r'^periodic_pay$', views.add_edit_periodic_pay, name='add_periodic_pay'),
url(r'^periodic_pay(?P<periodic_pay_id>\d+)/$', views.add_edit_periodic_pay, name='add_periodic_pay'),
url(r'^periodic_pay(?P<periodic_pay_id>\d+)/del/$', views.del_periodic_pay, name='del_periodic_pay'),
url(r'^lease/add/$', views.lease_add, name='lease_add'),
url(r'^ping$', views.abon_ping, name='ping')
path('', views.AbonHomeUpdateView.as_view(), name='abon_home'),
path('services/', views.abon_services, name='abon_services'),
path('amount/', views.abonamount, name='abon_amount'),
path('debts/', views.DebtsListView.as_view(), name='abon_debts'),
path('pay/', views.PayHistoryListView.as_view(), name='abon_phistory'),
path('addinvoice/', views.add_invoice, name='add_invoice'),
path('pick/', views.pick_tariff, name='pick_tariff'),
path('passport_view/', views.PassportUpdateView.as_view(), name='passport_view'),
path('chart/', views.charts, name='charts'),
path('dials/', views.DialsListView.as_view(), name='dials'),
# path('reset_ip/', views.reset_ip, name='reset_ip'),
path('unsubscribe_service/<int:abon_tariff_id>/', views.unsubscribe_service, name='unsubscribe_service'),
path('dev/', views.dev, name='dev'),
path('del/', views.DelAbonDeleteView.as_view(), name='del_abon'),
path('clear_dev/', views.clear_dev, name='clear_dev'),
path('task_log/', views.TaskLogListView.as_view(), name='task_log'),
path('user_dev/', views.save_user_dev_port, name='save_user_dev_port'),
path('telephones/', views.tels, name='telephones'),
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/<int:lease_id>/free/', views.user_session_toggle, {'action': 'free'}, name='user_session_free'),
path('session/<int:lease_id>/start/', views.user_session_toggle, {'action': 'start'}, name='user_session_start'),
path('periodic_pay/', views.add_edit_periodic_pay, name='add_periodic_pay'),
path('periodic_pay/<int:periodic_pay_id>/', views.add_edit_periodic_pay, name='add_periodic_pay'),
path('periodic_pay/<int:periodic_pay_id>/del/', views.del_periodic_pay, name='del_periodic_pay'),
path('lease/add/', views.lease_add, name='lease_add'),
path('ping/', views.abon_ping, name='ping')
] ]
group_patterns = [ group_patterns = [
url(r'^$', views.PeoplesListView.as_view(), name='people_list'),
url(r'^addabon$', views.AbonCreateView.as_view(), name='add_abon'),
url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'),
url(r'^phonebook$', views.phonebook, name='phonebook'),
url(r'^export$', views.abon_export, name='abon_export'),
url(r'^street/add$', views.street_add, name='street_add'),
url(r'^street/edit', views.street_edit, name='street_edit'),
url(r'^street/(?P<sid>\d+)/delete$', views.street_del, name='street_del'),
url(r'^active_networks/$', views.active_nets, name='active_nets'),
url(r'^attach_nas/$', views.attach_nas, name='attach_nas'),
url(r'^(?P<uname>\w{1,127})/', include(subscriber_patterns))
path('', views.PeoplesListView.as_view(), name='people_list'),
path('addabon/', views.AbonCreateView.as_view(), name='add_abon'),
path('services/', views.chgroup_tariff, name='ch_group_tariff'),
path('phonebook/', views.phonebook, name='phonebook'),
path('export/', views.abon_export, name='abon_export'),
path('street/add/', views.street_add, name='street_add'),
path('street/edit', views.street_edit, name='street_edit'),
path('street/<int:sid>/delete/', views.street_del, name='street_del'),
path('active_networks/', views.active_nets, name='active_nets'),
path('attach_nas/', views.attach_nas, name='attach_nas'),
re_path('^(?P<uname>\w{1,127})/', include(subscriber_patterns))
] ]
urlpatterns = [ urlpatterns = [
url(r'^$', views.GroupListView.as_view(), name='group_list'),
url(r'^fin_report$', views.fin_report, name='fin_report'),
url(r'^(?P<gid>\d+)/', include(group_patterns)),
url(r'^log$', views.LogListView.as_view(), name='log'),
url(r'^pay$', views.terminal_pay, name='terminal_pay'),
url(r'^debtors$', views.DebtorsListView.as_view(), name='debtors'),
url(r'^contacts/vcards/$', views.vcards, name='vcards'),
path('', views.GroupListView.as_view(), name='group_list'),
path('fin_report/', views.fin_report, name='fin_report'),
path('<int:gid>/', include(group_patterns)),
path('log/', views.LogListView.as_view(), name='log'),
path('pay/', views.terminal_pay, name='terminal_pay'),
path('debtors/', views.DebtorsListView.as_view(), name='debtors'),
path('contacts/vcards/', views.vcards, name='vcards'),
# Api's # Api's
url(r'^api/abons$', views.abons),
url(r'^api/abon_filter$', views.search_abon),
url(r'^api/dhcp_lever/$', views.DhcpLever.as_view())
path('api/abons/', views.abons),
path('api/abon_filter/', views.search_abon),
path('api/dhcp_lever/', views.DhcpLever.as_view())
] ]

35
abonapp/views.py

@ -1,11 +1,10 @@
from ipaddress import ip_address from ipaddress import ip_address
from typing import Dict, Optional from typing import Dict, Optional
from datetime import datetime, date from datetime import datetime, date
from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied, ValidationError from django.core.exceptions import PermissionDenied, ValidationError
from django.db import IntegrityError, ProgrammingError, transaction from django.db import IntegrityError, ProgrammingError, transaction
from django.db.models import Count, Q from django.db.models import Count, Q
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect
from django.contrib import messages from django.contrib import messages
@ -201,11 +200,11 @@ def abonamount(request, gid, uname):
except lib.MultipleException as errs: except lib.MultipleException as errs:
for err in errs.err_list: for err in errs.err_list:
messages.error(request, err) messages.error(request, err)
return render_to_text('abonapp/modal_abonamount.html', {
return render_to_response('abonapp/modal_abonamount.html', {
'abon': abon, 'abon': abon,
'group_id': gid, 'group_id': gid,
'form': frm 'form': frm
}, request=request)
})
@method_decorator((login_required, lib.decorators.only_admins), name='dispatch') @method_decorator((login_required, lib.decorators.only_admins), name='dispatch')
@ -843,10 +842,10 @@ def street_add(request, gid):
messages.error(request, _('fix form errors')) messages.error(request, _('fix form errors'))
else: else:
frm = forms.AbonStreetForm(initial={'group': gid}) frm = forms.AbonStreetForm(initial={'group': gid})
return render_to_text('abonapp/modal_addstreet.html', {
return render_to_response('abonapp/modal_addstreet.html', {
'form': frm, 'form': frm,
'gid': gid 'gid': gid
}, request=request)
})
@login_required @login_required
@ -861,10 +860,10 @@ def street_edit(request, gid):
street.save() street.save()
messages.success(request, _('Streets has been saved')) messages.success(request, _('Streets has been saved'))
else: else:
return render_to_text('abonapp/modal_editstreet.html', {
return render_to_response('abonapp/modal_editstreet.html', {
'gid': gid, 'gid': gid,
'streets': models.AbonStreet.objects.filter(group=gid) 'streets': models.AbonStreet.objects.filter(group=gid)
}, request=request)
})
except models.AbonStreet.DoesNotExist: except models.AbonStreet.DoesNotExist:
messages.error(request, _('One of these streets has not been found')) messages.error(request, _('One of these streets has not been found'))
@ -899,11 +898,11 @@ def active_nets(request, gid):
def tels(request, gid, uname): def tels(request, gid, uname):
abon = get_object_or_404(models.Abon, username=uname) abon = get_object_or_404(models.Abon, username=uname)
telephones = abon.additional_telephones.all() telephones = abon.additional_telephones.all()
return render_to_text('abonapp/modal_additional_telephones.html', {
return render_to_response('abonapp/modal_additional_telephones.html', {
'telephones': telephones, 'telephones': telephones,
'gid': gid, 'gid': gid,
'uname': uname 'uname': uname
}, request=request)
})
@login_required @login_required
@ -922,11 +921,11 @@ def tel_add(request, gid, uname):
messages.error(request, _('fix form errors')) messages.error(request, _('fix form errors'))
else: else:
frm = forms.AdditionalTelephoneForm() frm = forms.AdditionalTelephoneForm()
return render_to_text('abonapp/modal_add_phone.html', {
return render_to_response('abonapp/modal_add_phone.html', {
'form': frm, 'form': frm,
'gid': gid, 'gid': gid,
'uname': uname 'uname': uname
}, request=request)
})
@login_required @login_required
@ -958,10 +957,10 @@ def phonebook(request, gid):
for row in telephones: for row in telephones:
writer.writerow(row) writer.writerow(row)
return response return response
return render_to_text('abonapp/modal_phonebook.html', {
return render_to_response('abonapp/modal_phonebook.html', {
'tels': telephones, 'tels': telephones,
'gid': gid 'gid': gid
}, request=request)
})
@login_required @login_required
@ -993,10 +992,10 @@ def abon_export(request, gid):
return redirect('abonapp:group_list') return redirect('abonapp:group_list')
else: else:
frm = forms.ExportUsersForm() frm = forms.ExportUsersForm()
return render_to_text('abonapp/modal_export.html', {
return render_to_response('abonapp/modal_export.html', {
'gid': gid, 'gid': gid,
'form': frm 'form': frm
}, request=request)
})
@login_required @login_required
@ -1041,11 +1040,11 @@ def add_edit_periodic_pay(request, gid, uname, periodic_pay_id=0):
return redirect('abonapp:abon_services', gid, uname) return redirect('abonapp:abon_services', gid, uname)
else: else:
frm = forms.PeriodicPayForIdForm(instance=periodic_pay_instance) frm = forms.PeriodicPayForIdForm(instance=periodic_pay_instance)
return render_to_text('abonapp/modal_periodic_pay.html', {
return render_to_response('abonapp/modal_periodic_pay.html', {
'form': frm, 'form': frm,
'gid': gid, 'gid': gid,
'uname': uname 'uname': uname
}, request=request)
})
@login_required @login_required

32
accounts_app/urls.py

@ -1,41 +1,39 @@
from django.conf.urls import url
from django.urls import path, re_path
from . import views from . import views
app_name = 'account_app' app_name = 'account_app'
urlpatterns = [ urlpatterns = [
path('', views.AccountsListView.as_view(), name='accounts_list'),
path('login/', views.to_signin, name='login'),
path('logout/', views.SignOut.as_view(), name='logout'),
url(r'^login/', views.to_signin, name='login'),
url(r'^logout/', views.SignOut.as_view(), name='logout'),
path('me/', views.profile_show, name='profile'),
url(r'^me$', views.profile_show, name='profile'),
path('add/', views.create_profile, name='create_profile'),
url(r'^$', views.AccountsListView.as_view(), name='accounts_list'),
path('settings/', views.ch_info, name='setup_info'),
path('settings/change_ava/', views.AvatarUpdateView.as_view(), name='setup_avatar'),
url(r'^add$', views.create_profile, name='create_profile'),
path('<int:uid>/', views.profile_show, name='other_profile'),
path('<int:uid>/perms/', views.perms, name='setup_perms'),
url(r'^settings$', views.ch_info, name='setup_info'),
url(r'^settings/change_ava$', views.AvatarUpdateView.as_view(), name='setup_avatar'),
url(r'^(?P<uid>\d+)$', views.profile_show, name='other_profile'),
url(r'^(?P<uid>\d+)/perms$', views.perms, name='setup_perms'),
url(r'^(?P<uid>\d+)/perms/(?P<klass_name>[a-z_]+\.[a-zA-Z_]+)$',
re_path('^(?P<uid>\d+)/perms/(?P<klass_name>[a-z_]+\.[a-zA-Z_]+)/',
views.PermissionClassListView.as_view(), views.PermissionClassListView.as_view(),
name='perms_klasses'), name='perms_klasses'),
url(r'^(?P<uid>\d+)/perms/(?P<klass_name>[a-z_]+\.[a-zA-Z_]+)/(?P<obj_id>\d+)$',
re_path('^(?P<uid>\d+)/perms/(?P<klass_name>[a-z_]+\.[a-zA-Z_]+)/(?P<obj_id>\d+)/',
views.perms_edit, views.perms_edit,
name='perms_edit'), name='perms_edit'),
url(r'^(?P<uid>\d+)/del$', views.delete_profile, name='delete_profile'),
path('<int:uid>/del/', views.delete_profile, name='delete_profile'),
url(r'^(?P<uid>\d+)/user_group_access$',
path('<int:uid>/user_group_access/',
views.set_abon_groups_permission, views.set_abon_groups_permission,
name='set_abon_groups_permission'), name='set_abon_groups_permission'),
url(r'^(?P<uid>\d+)/manage_responsibility_groups/$',
path('<int:uid>/manage_responsibility_groups/',
views.ManageResponsibilityGroups.as_view(), views.ManageResponsibilityGroups.as_view(),
name='manage_responsibility_groups') name='manage_responsibility_groups')
] ]

3
chatbot/email_bot.py

@ -1,3 +1,4 @@
from _socket import gaierror
from smtplib import SMTPException from smtplib import SMTPException
from django.core.mail import send_mail from django.core.mail import send_mail
from django.conf import settings from django.conf import settings
@ -17,3 +18,5 @@ def send_notify(msg_text, account, tag='none'):
) )
except SMTPException as e: except SMTPException as e:
raise ChatException('SMTPException: %s' % e) raise ChatException('SMTPException: %s' % e)
except gaierror as e:
raise ChatException('Socket error: %s' % e)

6
chatbot/models.py

@ -10,7 +10,7 @@ class ChatException(Exception):
class TelegramBot(models.Model): class TelegramBot(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE, verbose_name=_('Employee'))
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_('Employee'))
chat_id = models.PositiveIntegerField(_('Telegram chat id'), default=0) chat_id = models.PositiveIntegerField(_('Telegram chat id'), default=0)
def __str__(self): def __str__(self):
@ -24,7 +24,7 @@ class TelegramBot(models.Model):
class MessageHistory(models.Model): class MessageHistory(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE)
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE)
message = models.CharField(max_length=255) message = models.CharField(max_length=255)
date_sent = models.DateTimeField(auto_now_add=True) date_sent = models.DateTimeField(auto_now_add=True)
@ -51,7 +51,7 @@ class MessageQueueManager(models.Manager):
class MessageQueue(models.Model): class MessageQueue(models.Model):
target_employee = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE, verbose_name=_('Target employee'))
target_employee = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_('Target employee'))
message = models.CharField(_('Message'), max_length=255) message = models.CharField(_('Message'), max_length=255)
STATUSES = ( STATUSES = (
('n', 'New'), ('n', 'New'),

16
clientsideapp/urls.py

@ -1,14 +1,14 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'clientsideapp' app_name = 'clientsideapp'
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^pays$', views.pays, name='pays'),
url(r'^services$', views.services, name='services'),
url(r'^services/(?P<srv_id>\d+)/buy$', views.buy_service, name='buy_service'),
url(r'^debts$', views.debts_list, name='debts'),
url(r'^debts/(?P<d_id>\d+)$', views.debt_buy, name='debt_buy'),
url(r'^tasks$', views.task_history, name='task_history')
path('', views.home, name='home'),
path('pays/', views.pays, name='pays'),
path('services/', views.services, name='services'),
path('services/<int:srv_id>/buy/', views.buy_service, name='buy_service'),
path('debts/', views.debts_list, name='debts'),
path('debts/<int:d_id>/', views.debt_buy, name='debt_buy'),
path('tasks/', views.task_history, name='task_history')
] ]

7
clientsideapp/views.py

@ -1,6 +1,5 @@
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.gis.shortcuts import render_to_text
from django.shortcuts import render, get_object_or_404, redirect
from django.shortcuts import render, get_object_or_404, redirect, render_to_response
from django.contrib import messages from django.contrib import messages
from django.db import transaction from django.db import transaction
from django.utils.translation import gettext_lazy as _, gettext from django.utils.translation import gettext_lazy as _, gettext
@ -56,10 +55,10 @@ def buy_service(request, srv_id):
abon.nas_sync_self() abon.nas_sync_self()
messages.success(request, _("The service '%s' wan successfully activated") % service.title) messages.success(request, _("The service '%s' wan successfully activated") % service.title)
else: else:
return render_to_text('clientsideapp/modal_service_buy.html', {
return render_to_response('clientsideapp/modal_service_buy.html', {
'service': service, 'service': service,
'current_service': current_service.tariff if current_service is not None else None 'current_service': current_service.tariff if current_service is not None else None
}, request=request)
})
except LogicError as e: except LogicError as e:
messages.error(request, e) messages.error(request, e)
except NasFailedResult as e: except NasFailedResult as e:

2
devapp/models.py

@ -109,7 +109,7 @@ class Device(models.Model):
class Port(models.Model): class Port(models.Model):
device = models.ForeignKey(Device, models.CASCADE, verbose_name=_('Device'))
device = models.ForeignKey(Device, on_delete=models.CASCADE, verbose_name=_('Device'))
num = models.PositiveSmallIntegerField(_('Number'), default=0) num = models.PositiveSmallIntegerField(_('Number'), default=0)
descr = models.CharField(_('Description'), max_length=60, null=True, blank=True) descr = models.CharField(_('Description'), max_length=60, null=True, blank=True)

50
devapp/urls.py

@ -1,39 +1,39 @@
from django.conf.urls import url
from django.urls import path, re_path
from . import views from . import views
app_name = 'devapp' app_name = 'devapp'
urlpatterns = [ urlpatterns = [
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<group_id>\d+)$', views.DevicesListView.as_view(), name='devs'),
url(r'^(?P<group_id>\d+)/add$', views.DeviceCreateView.as_view(), name='add'),
url(r'^(\d+)/(?P<device_id>\d+)$', views.devview, name='view'),
url(r'^(\d+)/(?P<device_id>\d+)/del$', views.DeviceDeleteView.as_view(), name='del'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/add$', views.add_single_port, name='add_port'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/edit$', views.DeviceUpdate.as_view(), name='edit'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/edit_extra$', views.DeviceUpdateExtra.as_view(), name='extra_data_edit'),
url(r'^(\d+)/(?P<device_id>\d+)/ports$', views.manage_ports, name='manage_ports'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/ports/(?P<port_id>\d+)/fix_port_conflict$', views.fix_port_conflict,
path('', views.GroupsListView.as_view(), name='group_list'),
path('devices_without_groups/', views.DevicesWithoutGroupsListView.as_view(), name='devices_null_group'),
path('fix_onu/', views.fix_onu, name='fix_onu'),
path('<int:group_id>/', views.DevicesListView.as_view(), name='devs'),
path('<int:group_id>/add/', views.DeviceCreateView.as_view(), name='add'),
path('<int>/<int:device_id>/', views.devview, name='view'),
path('<int>/<int:device_id>/del/', views.DeviceDeleteView.as_view(), name='del'),
path('<int:group_id>/<int:device_id>/add/', views.add_single_port, name='add_port'),
path('<int:group_id>/<int:device_id>/edit/', views.DeviceUpdate.as_view(), name='edit'),
path('<int:group_id>/<int:device_id>/edit_extra/', views.DeviceUpdateExtra.as_view(), name='extra_data_edit'),
path('<int>/<int:device_id>/ports/', views.manage_ports, name='manage_ports'),
path('<int:group_id>/<int:device_id>/ports/<int:port_id>/fix_port_conflict/', views.fix_port_conflict,
name='fix_port_conflict'), name='fix_port_conflict'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/ports/(?P<port_id>\d+)/show_subscriber_on_port$',
path('<int:group_id>/<int:device_id>/ports/<int:port_id>/show_subscriber_on_port/',
views.ShowSubscriberOnPort.as_view(), name='show_subscriber_on_port'), views.ShowSubscriberOnPort.as_view(), name='show_subscriber_on_port'),
url(r'^(\d+)/(?P<device_id>\d+)/ports_add/$', views.add_ports, name='add_ports'),
url(r'^(\d+)/(?P<device_id>\d+)/register_device/$', views.register_device, name='dev_register'),
url(r'^(\d+)/(?P<device_id>\d+)/(?P<portid>\d+)_(?P<status>[0-1]{1})$', views.toggle_port, name='port_toggle'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/(?P<portid>\d+)/del$', views.delete_single_port, name='del_port'),
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/(?P<port_id>\d+)/edit$', views.edit_single_port, name='edit_port'),
url(r'^fix_device_group/(?P<device_id>\d+)$', views.fix_device_group, name='fix_device_group'),
url(r'^search_dev$', views.search_dev),
path('<int>/<int:device_id>/ports_add/', views.add_ports, name='add_ports'),
path('<int>/<int:device_id>/register_device/', views.register_device, name='dev_register'),
re_path('^(\d+)/(?P<device_id>\d+)/(?P<portid>\d+)_(?P<status>[0-1]{1})$', views.toggle_port, name='port_toggle'),
path('<int:group_id>/<int:device_id>/<int:portid>/del/', views.delete_single_port, name='del_port'),
path('<int:group_id>/<int:device_id>/<int:portid>/edit/', views.edit_single_port, name='edit_port'),
path('fix_device_group/<int:device_id>/', views.fix_device_group, name='fix_device_group'),
path('search_dev/', views.search_dev),
# ZTE ports under fibers # ZTE ports under fibers
url(r'^(?P<group_id>\d+)/(?P<device_id>\d+)/(?P<fiber_id>\d+)$', views.zte_port_view_uncfg, name='zte_port_view_uncfg'),
path('<int:group_id>/<int:device_id>/<int:fiber_id>/', views.zte_port_view_uncfg, name='zte_port_view_uncfg'),
# Monitoring api # Monitoring api
url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view()),
path('on_device_event/', views.OnDeviceMonitoringEvent.as_view()),
# Nagios mon generate # Nagios mon generate
url(r'^nagios/hosts/$', views.nagios_objects_conf, name='nagios_objects_conf'),
url(r'^api/getall/$', views.DevicesGetListView.as_view(), name='nagios_get_all_hosts')
path('nagios/hosts/', views.nagios_objects_conf, name='nagios_objects_conf'),
path('api/getall/', views.DevicesGetListView.as_view(), name='nagios_get_all_hosts')
] ]

15
devapp/views.py

@ -1,12 +1,11 @@
import re import re
from ipaddress import ip_address from ipaddress import ip_address
from django.contrib.auth.decorators import login_required 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.core.exceptions import PermissionDenied
from django.db import IntegrityError from django.db import IntegrityError
from django.db.models import Q, Count from django.db.models import Q, Count
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response
from django.contrib import messages from django.contrib import messages
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _, gettext from django.utils.translation import gettext_lazy as _, gettext
@ -358,11 +357,11 @@ def delete_single_port(request, group_id, device_id, portid):
Port.objects.get(pk=portid).delete() Port.objects.get(pk=portid).delete()
messages.success(request, _('Port successfully removed')) messages.success(request, _('Port successfully removed'))
else: else:
return render_to_text('devapp/manage_ports/modal_del_port.html', {
return render_to_response('devapp/manage_ports/modal_del_port.html', {
'grp': group_id, 'grp': group_id,
'did': device_id, 'did': device_id,
'port_id': portid 'port_id': portid
}, request=request)
})
except Port.DoesNotExist: except Port.DoesNotExist:
messages.error(request, _('Port does not exist')) messages.error(request, _('Port does not exist'))
except DeviceDBException as e: except DeviceDBException as e:
@ -385,12 +384,12 @@ def edit_single_port(request, group_id, device_id, port_id):
return redirect('devapp:manage_ports', group_id, device_id) return redirect('devapp:manage_ports', group_id, device_id)
frm = PortForm(instance=port) frm = PortForm(instance=port)
return render_to_text('devapp/manage_ports/modal_add_edit_port.html', {
return render_to_response('devapp/manage_ports/modal_add_edit_port.html', {
'port_id': port_id, 'port_id': port_id,
'did': device_id, 'did': device_id,
'gid': group_id, 'gid': group_id,
'form': frm 'form': frm
}, request=request)
})
except Port.DoesNotExist: except Port.DoesNotExist:
messages.error(request, _('Port does not exist')) messages.error(request, _('Port does not exist'))
except (DeviceDBException, DuplicateEntry) as e: except (DeviceDBException, DuplicateEntry) as e:
@ -416,11 +415,11 @@ def add_single_port(request, group_id, device_id):
'num': request.GET.get('n'), 'num': request.GET.get('n'),
'descr': request.GET.get('t') 'descr': request.GET.get('t')
}) })
return render_to_text('devapp/manage_ports/modal_add_edit_port.html', {
return render_to_response('devapp/manage_ports/modal_add_edit_port.html', {
'did': device_id, 'did': device_id,
'gid': group_id, 'gid': group_id,
'form': frm 'form': frm
}, request=request)
})
except Device.DoesNotExist: except Device.DoesNotExist:
messages.error(request, _('Device does not exist')) messages.error(request, _('Device does not exist'))
except (DeviceDBException, DuplicateEntry) as e: except (DeviceDBException, DuplicateEntry) as e:

18
dialing_app/urls.py

@ -1,15 +1,15 @@
from django.conf.urls import url
from django.urls import path, re_path
from . import views from . import views
app_name = 'dialing_app' app_name = 'dialing_app'
urlpatterns = [ urlpatterns = [
url(r'^$', views.LastCallsListView.as_view(), name='home'),
url(r'^filter$', views.DialsFilterListView.as_view(), name='vfilter'),
url(r'^to_abon(?P<tel>\+?\d+)$', views.to_abon, name='to_abon'),
url(r'^requests$', views.VoiceMailRequestsListView.as_view(), name='vmail_request'),
url(r'^reports$', views.VoiceMailReportsListView.as_view(), name='vmail_report'),
url(r'^sms/in$', views.InboxSMSListView.as_view(), name='inbox_sms'),
url(r'^sms/send$', views.send_sms, name='send_sms'),
url(r'^api/sms$', views.SmsManager.as_view())
path('', views.LastCallsListView.as_view(), name='home'),
path('filter/', views.DialsFilterListView.as_view(), name='vfilter'),
re_path('^to_abon(?P<tel>\+?\d+)/$', views.to_abon, name='to_abon'),
path('requests/', views.VoiceMailRequestsListView.as_view(), name='vmail_request'),
path('reports/', views.VoiceMailReportsListView.as_view(), name='vmail_report'),
path('sms/in/', views.InboxSMSListView.as_view(), name='inbox_sms'),
path('sms/send/', views.send_sms, name='send_sms'),
path('api/sms/', views.SmsManager.as_view())
] ]

6
dialing_app/views.py

@ -2,7 +2,7 @@ from datetime import datetime
from subprocess import run from subprocess import run
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib import messages from django.contrib import messages
from django.contrib.gis.shortcuts import render_to_text
from django.db import ProgrammingError from django.db import ProgrammingError
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -151,10 +151,10 @@ def send_sms(request):
messages.error(request, _('fix form errors')) messages.error(request, _('fix form errors'))
else: else:
frm = SMSOutForm(initial={'dst': initial_dst}) frm = SMSOutForm(initial={'dst': initial_dst})
return render_to_text('modal_send_sms.html', {
return render_to_response('modal_send_sms.html', {
'form': frm, 'form': frm,
'path': path 'path': path
}, request=request)
})
class SmsManager(SecureApiView): class SmsManager(SecureApiView):

4
djing/fields.py

@ -63,7 +63,7 @@ class MACAddressField(models.Field):
return 'BigIntegerField' return 'BigIntegerField'
return 'CharField' return 'CharField'
def from_db_value(self, value, expression, connection, context):
def from_db_value(self, value, expression, connection):
return self.to_python(value) return self.to_python(value)
def to_python(self, value): def to_python(self, value):
@ -131,7 +131,7 @@ class MyGenericIPAddressField(models.GenericIPAddressField):
return 'PositiveIntegerField' return 'PositiveIntegerField'
@staticmethod @staticmethod
def from_db_value(value, expression, connection, context):
def from_db_value(value, expression, connection):
if value: if value:
return str(ip_address(value)) return str(ip_address(value))

2
djing/global_base_views.py

@ -35,7 +35,7 @@ class HashAuthView(View):
class AuthenticatedOrHashAuthView(HashAuthView): class AuthenticatedOrHashAuthView(HashAuthView):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
if request.user.is_authenticated:
if request.user.is_admin: if request.user.is_admin:
return View.dispatch(self, request, *args, **kwargs) return View.dispatch(self, request, *args, **kwargs)
else: else:

2
djing/settings.py

@ -70,7 +70,7 @@ MIDDLEWARE = [
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
# 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
] ]

2
djing/templatetags/dpagination.py

@ -6,7 +6,7 @@ register = template.Library()
@register.simple_tag @register.simple_tag
def url_page_replace(request, field, value): def url_page_replace(request, field, value):
dict_ = request.GET.copy() dict_ = request.GET.copy()
dict_[field] = value
dict_[field] = str(value)
return dict_.urlencode() return dict_.urlencode()

36
djing/urls.py

@ -1,27 +1,27 @@
from django.conf.urls import url, include
from django.urls import path, include
from django.conf import settings from django.conf import settings
from .views import home from .views import home
urlpatterns = [ urlpatterns = [
url(r'^$', home),
url(r'^accounts/', include('accounts_app.urls', namespace='acc_app')),
url(r'^abons/', include('abonapp.urls', namespace='abonapp')),
url(r'^tarifs/', include('tariff_app.urls', namespace='tarifs')),
url(r'^search/', include('searchapp.urls', namespace='searchapp')),
url(r'^dev/', include('devapp.urls', namespace='devapp')),
url(r'^map/', include('mapapp.urls', namespace='mapapp')),
url(r'^statistic/', include('statistics.urls', namespace='statistics')),
url(r'^tasks/', include('taskapp.urls', namespace='taskapp')),
url(r'^client/', include('clientsideapp.urls', namespace='client_side')),
url(r'^msg/', include('msg_app.urls', namespace='msg_app')),
url(r'^dialing/', include('dialing_app.urls', namespace='dialapp')),
url(r'^groups/', include('group_app.urls', namespace='group_app')),
url(r'^ip_pool/', include('ip_pool.urls', namespace='ip_pool')),
url(r'^nas/', include('nas_app.urls', namespace='nas_app'))
path('', home),
path('accounts/', include('accounts_app.urls', namespace='acc_app')),
path('abons/', include('abonapp.urls', namespace='abonapp')),
path('tarifs/', include('tariff_app.urls', namespace='tarifs')),
path('search/', include('searchapp.urls', namespace='searchapp')),
path('dev/', include('devapp.urls', namespace='devapp')),
path('map/', include('mapapp.urls', namespace='mapapp')),
path('statistic/', include('statistics.urls', namespace='statistics')),
path('tasks/', include('taskapp.urls', namespace='taskapp')),
path('client/', include('clientsideapp.urls', namespace='client_side')),
path('msg/', include('msg_app.urls', namespace='msg_app')),
path('dialing/', include('dialing_app.urls', namespace='dialapp')),
path('groups/', include('group_app.urls', namespace='group_app')),
path('ip_pool/', include('ip_pool.urls', namespace='ip_pool')),
path('nas/', include('nas_app.urls', namespace='nas_app'))
# Switch language # Switch language
#url(r'^i18n/', include('django.conf.urls.i18n')),
#path(r'i18n/', include('django.conf.urls.i18n')),
] ]
@ -32,4 +32,4 @@ if settings.DEBUG:
urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)) urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT))
urlpatterns.extend(staticfiles_urlpatterns()) urlpatterns.extend(staticfiles_urlpatterns())
urlpatterns.append(url(r'^admin/', admin.site.urls))
urlpatterns.append(path('admin/', admin.site.urls))

10
group_app/urls.py

@ -1,11 +1,11 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'group_app' app_name = 'group_app'
urlpatterns = [ urlpatterns = [
url(r'^$', views.GroupListView.as_view(), name='group_list'),
url(r'^add/$', views.AddGroupView.as_view(), name='add'),
url(r'^(?P<group_id>\d{1,6})/edit/$', views.EditGroupView.as_view(), name='edit'),
url(r'^(?P<group_id>\d{1,6})/del/$', views.DeleteGroupView.as_view(), name='del')
path('', views.GroupListView.as_view(), name='group_list'),
path('add/', views.AddGroupView.as_view(), name='add'),
path('<int:group_id>/edit/', views.EditGroupView.as_view(), name='edit'),
path('<int:group_id>/del/', views.DeleteGroupView.as_view(), name='del')
] ]

2
ip_pool/templatetags/ip_pool_tags.py

@ -9,6 +9,6 @@ register = template.Library()
@register.simple_tag @register.simple_tag
def get_device_kinds(): def get_device_kinds():
return (( return ((
resolve_url('ip_pool:networks_%s' % kind_code),
resolve_url('ip_pool:networks_%s/' % kind_code),
kind_descr kind_descr
)for kind_code, kind_descr in NetworkModel.NETWORK_KINDS) )for kind_code, kind_descr in NetworkModel.NETWORK_KINDS)

21
ip_pool/urls.py

@ -1,21 +1,22 @@
from django.conf.urls import url
from django.urls import path
from ip_pool import views from ip_pool import views
from ip_pool import models from ip_pool import models
app_name = 'ip_pool' app_name = 'ip_pool'
urlpatterns = [ urlpatterns = [
url('^$', views.NetworksListView.as_view(), name='networks'),
url('^network_add/$', views.NetworkCreateView.as_view(), name='net_add'),
url('^(?P<net_id>\d{1,6})/$', views.IpLeasesListView.as_view(), name='ip_leases_list'),
url('^(?P<net_id>\d{1,6})/edit/$', views.NetworkUpdateView.as_view(), name='net_edit'),
url('^(?P<net_id>\d{1,6})/del/$', views.NetworkDeleteView.as_view(), name='net_delete'),
url('^(?P<net_id>\d{1,6})/group_attach/$', views.network_in_groups, name='net_groups')
path('', views.NetworksListView.as_view(), name='networks'),
path('network_add/', views.NetworkCreateView.as_view(), name='net_add'),
path('<int:net_id>/', views.IpLeasesListView.as_view(), name='ip_leases_list'),
path('<int:net_id>/edit/', views.NetworkUpdateView.as_view(), name='net_edit'),
path('<int:net_id>/del/', views.NetworkDeleteView.as_view(), name='net_delete'),
path('<int:net_id>/group_attach/', views.network_in_groups, name='net_groups')
] ]
for dev_kind_code, _ in models.NetworkModel.NETWORK_KINDS: for dev_kind_code, _ in models.NetworkModel.NETWORK_KINDS:
urlpatterns.append(url(
'^networks_%s/$' % dev_kind_code,
_url_name = 'networks_%s/' % dev_kind_code
urlpatterns.append(path(
_url_name,
views.NetworksListView.as_view(device_kind_code=dev_kind_code), views.NetworksListView.as_view(device_kind_code=dev_kind_code),
name='networks_%s' % dev_kind_code
name=_url_name
)) ))

25
mapapp/urls.py

@ -1,22 +1,23 @@
from django.conf.urls import url from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'mapapp' app_name = 'mapapp'
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^options$', views.OptionsListView.as_view(), name='options'),
url(r'^options/add$', views.dot_edit, name='add_dot'),
url(r'^options/(?P<did>\d+)/edit$', views.dot_edit, name='edit_dot'),
url(r'^options/(?P<did>\d+)/remove$', views.remove, name='remove_dot'),
url(r'^options/(?P<did>\d+)/add_dev$', views.add_dev, name='add_dev'),
url(r'^preload_devices$', views.preload_devices, name='preload_devices'),
url(r'^get_dots$', views.get_dots, name='get_dots'),
path('', views.home, name='home'),
path('options/', views.OptionsListView.as_view(), name='options'),
path('options/add/', views.dot_edit, name='add_dot'),
path('options/<int:did>/edit/', views.dot_edit, name='edit_dot'),
path('options/<int:did>/remove/', views.remove, name='remove_dot'),
path('options/<int:did>/add_dev/', views.add_dev, name='add_dev'),
path('preload_devices/', views.preload_devices, name='preload_devices'),
path('get_dots/', views.get_dots, name='get_dots'),
url(r'^modal_add_dot$', views.modal_add_dot, name='modal_add_dot'),
url(r'^j_dot_tooltip$', views.dot_tooltip, name='dot_tooltip'),
url(r'^resolve_dots_by_group(?P<grp_id>\d+)$', views.resolve_dots_by_group, name='resolve_dots_by_group'),
path('modal_add_dot/', views.modal_add_dot, name='modal_add_dot'),
path('j_dot_tooltip/', views.dot_tooltip, name='dot_tooltip'),
path('resolve_dots_by_group/<int:grp_id>/', views.resolve_dots_by_group, name='resolve_dots_by_group'),
url(r'^to_single_dev/$', views.to_single_dev, name='to_single_dev')
path('to_single_dev/', views.to_single_dev, name='to_single_dev')
] ]

15
mapapp/views.py

@ -1,9 +1,8 @@
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import login_required 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.core.exceptions import PermissionDenied
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, HttpResponseBadRequest from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, HttpResponseBadRequest
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response
from django.utils.translation import gettext_lazy as _, gettext from django.utils.translation import gettext_lazy as _, gettext
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.db.models import Count from django.db.models import Count
@ -138,7 +137,7 @@ def get_dots(request):
@login_required @login_required
def modal_add_dot(request): def modal_add_dot(request):
if not request.user.has_perm('mapapp.add_dot'): if not request.user.has_perm('mapapp.add_dot'):
return render_to_text('403_for_modal.html')
return render_to_response('403_for_modal.html')
if request.method == 'POST': if request.method == 'POST':
frm = DotForm(request.POST, request.FILES) frm = DotForm(request.POST, request.FILES)
if frm.is_valid(): if frm.is_valid():
@ -159,10 +158,10 @@ def modal_add_dot(request):
coords = request.GET.get('coords') coords = request.GET.get('coords')
lat, lon = coords.split(',') lat, lon = coords.split(',')
frm = DotForm(initial={'latitude': lat, 'longitude': lon}) frm = DotForm(initial={'latitude': lat, 'longitude': lon})
return render_to_text('maps/modal_add_dot.html', {
return render_to_response('maps/modal_add_dot.html', {
'coords': coords, 'coords': coords,
'form': frm 'form': frm
}, request=request)
})
@login_required @login_required
@ -176,7 +175,7 @@ def preload_devices(request):
dot_devices_ids = tuple(dev.pk for dev in dot_devices.iterator()) dot_devices_ids = tuple(dev.pk for dev in dot_devices.iterator())
del dot_devices del dot_devices
ret = render_to_text('maps/preload_devices_tmpl.html', {
ret = render_to_response('maps/preload_devices_tmpl.html', {
'all_devices': all_devices.iterator(), 'all_devices': all_devices.iterator(),
'dot_devices_ids': dot_devices_ids 'dot_devices_ids': dot_devices_ids
}) })
@ -186,7 +185,7 @@ def preload_devices(request):
@login_required @login_required
def dot_tooltip(request): def dot_tooltip(request):
if not request.user.is_superuser: if not request.user.is_superuser:
return render_to_text('403_for_modal.html')
return render_to_response('403_for_modal.html')
d = request.GET.get('d') d = request.GET.get('d')
devs, dot = None, None devs, dot = None, None
try: try:
@ -194,7 +193,7 @@ def dot_tooltip(request):
devs = dot.devices.all() devs = dot.devices.all()
except Dot.DoesNotExist: except Dot.DoesNotExist:
pass pass
return render_to_text('maps/map_tooltip.html', {
return render_to_response('maps/map_tooltip.html', {
'devs': devs.iterator(), 'devs': devs.iterator(),
'dot': dot 'dot': dot
}) })

2
msg_app/context_processors.py

@ -2,7 +2,7 @@ from .models import Conversation
def get_new_messages_count(request): def get_new_messages_count(request):
if request.user.is_anonymous():
if request.user.is_anonymous:
count = 0 count = 0
else: else:
count = Conversation.objects.get_new_messages_count(request.user) count = Conversation.objects.get_new_messages_count(request.user)

16
msg_app/models.py

@ -10,8 +10,8 @@ class MessageError(Exception):
class MessageStatus(models.Model): class MessageStatus(models.Model):
msg = models.ForeignKey('Message', models.CASCADE, related_name='msg_statuses')
user = models.ForeignKey(UserProfile, models.CASCADE, related_name='usr_msg_status')
msg = models.ForeignKey('Message', on_delete=models.CASCADE, related_name='msg_statuses')
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='usr_msg_status')
MESSAGE_STATES = ( MESSAGE_STATES = (
('new', _('New')), ('new', _('New')),
('old', _('Seen')), ('old', _('Seen')),
@ -34,8 +34,8 @@ class MessageStatus(models.Model):
class Message(models.Model): class Message(models.Model):
text = models.TextField(_("Body")) text = models.TextField(_("Body"))
sent_at = models.DateTimeField(_("sent at"), auto_now_add=True) sent_at = models.DateTimeField(_("sent at"), auto_now_add=True)
author = models.ForeignKey(UserProfile, models.CASCADE, related_name='messages')
conversation = models.ForeignKey('Conversation', models.CASCADE, verbose_name=_('Conversation'))
author = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='messages')
conversation = models.ForeignKey('Conversation', on_delete=models.CASCADE, verbose_name=_('Conversation'))
attachment = models.FileField(upload_to='messages_attachments/%Y_%m_%d', blank=True, null=True) attachment = models.FileField(upload_to='messages_attachments/%Y_%m_%d', blank=True, null=True)
account_status = models.ManyToManyField(UserProfile, through=MessageStatus, through_fields=('msg', 'user')) account_status = models.ManyToManyField(UserProfile, through=MessageStatus, through_fields=('msg', 'user'))
@ -73,8 +73,8 @@ class Message(models.Model):
class ConversationMembership(models.Model): class ConversationMembership(models.Model):
account = models.ForeignKey(UserProfile, models.CASCADE, related_name='memberships')
conversation = models.ForeignKey('Conversation', models.CASCADE)
account = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='memberships')
conversation = models.ForeignKey('Conversation', on_delete=models.CASCADE)
PARTICIPANT_STATUS = ( PARTICIPANT_STATUS = (
('adm', _('Admin')), ('adm', _('Admin')),
('gst', _('Guest')), ('gst', _('Guest')),
@ -82,7 +82,7 @@ class ConversationMembership(models.Model):
('inv', _('Inviter')) ('inv', _('Inviter'))
) )
status = models.CharField(max_length=3, choices=PARTICIPANT_STATUS, default='gst') status = models.CharField(max_length=3, choices=PARTICIPANT_STATUS, default='gst')
who_invite_that_user = models.ForeignKey(UserProfile, models.CASCADE, null=True, blank=True,
who_invite_that_user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, blank=True,
related_name='self_conversations') related_name='self_conversations')
def __str__(self): def __str__(self):
@ -142,7 +142,7 @@ class Conversation(models.Model):
participants = models.ManyToManyField(UserProfile, related_name='conversations', participants = models.ManyToManyField(UserProfile, related_name='conversations',
through='ConversationMembership', through='ConversationMembership',
through_fields=('conversation', 'account')) through_fields=('conversation', 'account'))
author = models.ForeignKey(UserProfile, models.CASCADE)
author = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
date_create = models.DateTimeField(auto_now_add=True) date_create = models.DateTimeField(auto_now_add=True)
def __str__(self): def __str__(self):

12
msg_app/urls.py

@ -1,12 +1,12 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'msg_app' app_name = 'msg_app'
urlpatterns = [ urlpatterns = [
url(r'^$', views.ConversationsListView.as_view(), name='home'),
url(r'^new$', views.new_conversation, name='new_conversation'),
url(r'^(?P<conv_id>\d+)/$', views.to_conversation, name='to_conversation'),
url(r'^(?P<conv_id>\d+)/(?P<msg_id>\d+)/del$', views.remove_msg, name='remove_msg'),
url(r'^check_news$', views.check_news, name='check_news')
path('', views.ConversationsListView.as_view(), name='home'),
path('new/', views.new_conversation, name='new_conversation'),
path('<int:conv_id>/', views.to_conversation, name='to_conversation'),
path('<int:conv_id>/<int:msg_id>/del/', views.remove_msg, name='remove_msg'),
path('check_news/', views.check_news, name='check_news')
] ]

8
msg_app/views.py

@ -1,12 +1,12 @@
from json import dumps from json import dumps
from django.contrib.auth.decorators import login_required 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.core.exceptions import PermissionDenied
from django.http import HttpResponse from django.http import HttpResponse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib import messages from django.contrib import messages
from django.shortcuts import render, redirect, get_object_or_404
from django.shortcuts import render, redirect, get_object_or_404, render_to_response
from django.views.generic import ListView from django.views.generic import ListView
from chatbot.models import MessageQueue from chatbot.models import MessageQueue
@ -37,9 +37,9 @@ def new_conversation(request):
else: else:
messages.error(request, _('fix form errors')) messages.error(request, _('fix form errors'))
else: else:
return render_to_text('msg_app/modal_new_conversation.html', {
return render_to_response('msg_app/modal_new_conversation.html', {
'form': frm 'form': frm
}, request=request)
})
except MessageError as e: except MessageError as e:
messages.error(request, e) messages.error(request, e)
return redirect('msg_app:home') return redirect('msg_app:home')

10
nas_app/urls.py

@ -1,4 +1,4 @@
from django.conf.urls import url
from django.urls import path
from nas_app import views from nas_app import views
@ -6,8 +6,8 @@ app_name = 'nas_app'
urlpatterns = [ urlpatterns = [
url(r'^$', view=views.NasListView.as_view(), name='home'),
url(r'^add$', view=views.NasCreateView.as_view(), name='add'),
url(r'^(?P<nas_id>\d+)/del$', views.NasDeleteView.as_view(), name='del'),
url(r'^(?P<nas_id>\d+)/edit$', views.NasUpdateView.as_view(), name='edit'),
path('', view=views.NasListView.as_view(), name='home'),
path('add/', view=views.NasCreateView.as_view(), name='add'),
path('<int:nas_id>/del/', views.NasDeleteView.as_view(), name='del'),
path('<int:nas_id>/edit/', views.NasUpdateView.as_view(), name='edit'),
] ]

2
requirements.txt

@ -1,5 +1,5 @@
urllib3 urllib3
Django==1.11
Django>=2
Pillow Pillow
telepot telepot

4
searchapp/urls.py

@ -1,10 +1,10 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'searchapp' app_name = 'searchapp'
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'),
path(r'', views.home, name='home'),
] ]

2
statistics/fields.py

@ -49,5 +49,5 @@ class UnixDateTimeField(models.DateTimeField):
val = self._get_val_from_obj(obj) val = self._get_val_from_obj(obj)
return self.to_python(val).strftime(self.DEFAULT_DATETIME_FMT) return self.to_python(val).strftime(self.DEFAULT_DATETIME_FMT)
def from_db_value(self, val, expression, connection, context):
def from_db_value(self, val, expression, connection):
return self.to_python(val) return self.to_python(val)

4
statistics/urls.py

@ -1,9 +1,9 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'statistics' app_name = 'statistics'
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'),
path('', views.home, name='home'),
] ]

16
tariff_app/urls.py

@ -1,16 +1,16 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'tariff_app' app_name = 'tariff_app'
urlpatterns = [ urlpatterns = [
url(r'^$', views.TariffsListView.as_view(), name='home'),
url(r'^(?P<tarif_id>\d+)$', views.edit_tarif, name='edit'),
url(r'^add$', views.edit_tarif, name='add'),
url(r'^del(?P<tid>\d+)$', views.TariffDeleteView.as_view(), name='del'),
path('', views.TariffsListView.as_view(), name='home'),
path('<int:tarif_id>/', views.edit_tarif, name='edit'),
path('add/', views.edit_tarif, name='add'),
path('del/<int:tid>/', views.TariffDeleteView.as_view(), name='del'),
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<pay_id>\d+)$', views.periodic_pay, name='periodic_pay_edit')
path('periodic_pays/', views.PeriodicPaysListView.as_view(), name='periodic_pays'),
path('periodic_pays/add/', views.periodic_pay, name='periodic_pay_add'),
path('periodic_pays/<int:pay_id>/', views.periodic_pay, name='periodic_pay_edit')
] ]

10
taskapp/models.py

@ -39,7 +39,7 @@ TASK_TYPES = (
class ChangeLog(models.Model): class ChangeLog(models.Model):
task = models.ForeignKey('Task', models.CASCADE)
task = models.ForeignKey('Task', on_delete=models.CASCADE)
ACT_CHOICES = ( ACT_CHOICES = (
('e', _('Change task')), ('e', _('Change task')),
('c', _('Create task')), ('c', _('Create task')),
@ -49,7 +49,7 @@ class ChangeLog(models.Model):
) )
act_type = models.CharField(max_length=1, choices=ACT_CHOICES) act_type = models.CharField(max_length=1, choices=ACT_CHOICES)
when = models.DateTimeField(auto_now_add=True) when = models.DateTimeField(auto_now_add=True)
who = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='+')
who = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='+')
def __str__(self): def __str__(self):
return self.get_act_type_display() return self.get_act_type_display()
@ -71,7 +71,7 @@ class Task(models.Model):
state = models.CharField(_('Condition'), max_length=1, choices=TASK_STATES, default=TASK_STATES[0][0]) state = models.CharField(_('Condition'), max_length=1, choices=TASK_STATES, default=TASK_STATES[0][0])
attachment = models.ImageField(_('Attached image'), upload_to='task_attachments/%Y.%m.%d', blank=True, null=True) attachment = models.ImageField(_('Attached image'), upload_to='task_attachments/%Y.%m.%d', blank=True, null=True)
mode = models.CharField(_('The nature of the damage'), max_length=2, choices=TASK_TYPES, default=TASK_TYPES[0][0]) mode = models.CharField(_('The nature of the damage'), max_length=2, choices=TASK_TYPES, default=TASK_TYPES[0][0])
abon = models.ForeignKey(Abon, models.CASCADE, null=True, blank=True, verbose_name=_('Subscriber'))
abon = models.ForeignKey(Abon, on_delete=models.CASCADE, null=True, blank=True, verbose_name=_('Subscriber'))
class Meta: class Meta:
db_table = 'task' db_table = 'task'
@ -119,8 +119,8 @@ class Task(models.Model):
class ExtraComment(models.Model): class ExtraComment(models.Model):
text = models.TextField(_('Text of comment')) text = models.TextField(_('Text of comment'))
task = models.ForeignKey(Task, verbose_name=_('Owner task'))
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('Author'))
task = models.ForeignKey(Task, verbose_name=_('Owner task'), on_delete=models.CASCADE)
author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('Author'), on_delete=models.CASCADE)
date_create = models.DateTimeField(_('Time of create'), auto_now_add=True) date_create = models.DateTimeField(_('Time of create'), auto_now_add=True)
def __str__(self): def __str__(self):

34
taskapp/urls.py

@ -1,25 +1,25 @@
from django.conf.urls import url
from django.urls import path
from . import views from . import views
app_name = 'taskapp' app_name = 'taskapp'
urlpatterns = [ urlpatterns = [
url(r'^$', views.NewTasksView.as_view(), name='home'),
url(r'^(?P<task_id>\d+)$', views.TaskUpdateView.as_view(), name='edit'),
url(r'^(?P<task_id>\d+)/delete$', views.task_delete, name='delete'),
url(r'^(?P<task_id>\d+)/fin$', views.task_finish, name='finish'),
url(r'^(?P<task_id>\d+)/fail$', views.task_failed, name='fail'),
url(r'^(?P<task_id>\d+)/remind', views.remind, name='remind'),
url(r'^(?P<task_id>\d+)/comment/add$', views.NewCommentView.as_view(), name='comment_add'),
url(r'^(?P<task_id>\d+)/comment/(?P<comment_id>\d{1,8})/remove$', views.DeleteCommentView.as_view(),
path('', views.NewTasksView.as_view(), name='home'),
path('<int:task_id>/', views.TaskUpdateView.as_view(), name='edit'),
path('<int:task_id>/delete/', views.task_delete, name='delete'),
path('<int:task_id>/fin/', views.task_finish, name='finish'),
path('<int:task_id>/fail/', views.task_failed, name='fail'),
path('<int:task_id>/remind/', views.remind, name='remind'),
path('<int:task_id>/comment/add/', views.NewCommentView.as_view(), name='comment_add'),
path('<int:task_id>/comment/<int:comment_id>/remove/', views.DeleteCommentView.as_view(),
name='comment_del'), name='comment_del'),
url(r'^add$', views.TaskUpdateView.as_view(), name='add'),
url(r'^failed$', views.FailedTasksView.as_view(), name='failed_tasks'),
url(r'^finished$', views.FinishedTaskListView.as_view(), name='finished_tasks'),
url(r'^own$', views.OwnTaskListView.as_view(), name='own_tasks'),
url(r'^my$', views.MyTaskListView.as_view(), name='my_tasks'),
url(r'^all$', views.AllTasksListView.as_view(), name='all_tasks'),
url(r'^empty$', views.EmptyTasksListView.as_view(), name='empty_tasks'),
url(r'^check_news$', views.check_news, name='check_news')
path('add/', views.TaskUpdateView.as_view(), name='add'),
path('failed/', views.FailedTasksView.as_view(), name='failed_tasks'),
path('finished/', views.FinishedTaskListView.as_view(), name='finished_tasks'),
path('own/', views.OwnTaskListView.as_view(), name='own_tasks'),
path('my/', views.MyTaskListView.as_view(), name='my_tasks'),
path('all/', views.AllTasksListView.as_view(), name='all_tasks'),
path('empty/', views.EmptyTasksListView.as_view(), name='empty_tasks'),
path('check_news/', views.check_news, name='check_news')
] ]
Loading…
Cancel
Save