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):
abon = models.ForeignKey('Abon', models.CASCADE)
abon = models.ForeignKey('Abon', on_delete=models.CASCADE)
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)
date = models.DateTimeField(auto_now_add=True)
@ -40,7 +40,7 @@ class AbonLog(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)
@ -72,7 +72,7 @@ class AbonTariff(models.Model):
class AbonStreet(models.Model):
name = models.CharField(max_length=64)
group = models.ForeignKey(Group, models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
def __str__(self):
return self.name
@ -91,7 +91,7 @@ class AbonManager(MyUserManager):
class Abon(BaseAccount):
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)
ip_addresses = models.ManyToManyField(IpLeaseModel, verbose_name=_('Ip addresses'))
description = models.TextField(_('Comment'), null=True, blank=True)
@ -308,7 +308,7 @@ class PassportInfo(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)
amount = models.FloatField(default=0.0)
comment = models.CharField(max_length=128)
@ -353,7 +353,7 @@ class AllTimePayLogManager(models.Manager):
# Log for pay system "AllTime"
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)
date_add = models.DateTimeField(auto_now_add=True)
summ = models.FloatField(default=0.0)
@ -397,7 +397,7 @@ class AbonRawPassword(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(
max_length=16,
verbose_name=_('Telephone'),
@ -422,10 +422,10 @@ class AdditionalTelephone(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)
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):
"""

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
app_name = 'abonapp'
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 = [
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 = [
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
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 typing import Dict, Optional
from datetime import datetime, date
from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied, ValidationError
from django.db import IntegrityError, ProgrammingError, transaction
from django.db.models import Count, Q
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect
from django.contrib import messages
@ -201,11 +200,11 @@ def abonamount(request, gid, uname):
except lib.MultipleException as errs:
for err in errs.err_list:
messages.error(request, err)
return render_to_text('abonapp/modal_abonamount.html', {
return render_to_response('abonapp/modal_abonamount.html', {
'abon': abon,
'group_id': gid,
'form': frm
}, request=request)
})
@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'))
else:
frm = forms.AbonStreetForm(initial={'group': gid})
return render_to_text('abonapp/modal_addstreet.html', {
return render_to_response('abonapp/modal_addstreet.html', {
'form': frm,
'gid': gid
}, request=request)
})
@login_required
@ -861,10 +860,10 @@ def street_edit(request, gid):
street.save()
messages.success(request, _('Streets has been saved'))
else:
return render_to_text('abonapp/modal_editstreet.html', {
return render_to_response('abonapp/modal_editstreet.html', {
'gid': gid,
'streets': models.AbonStreet.objects.filter(group=gid)
}, request=request)
})
except models.AbonStreet.DoesNotExist:
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):
abon = get_object_or_404(models.Abon, username=uname)
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,
'gid': gid,
'uname': uname
}, request=request)
})
@login_required
@ -922,11 +921,11 @@ def tel_add(request, gid, uname):
messages.error(request, _('fix form errors'))
else:
frm = forms.AdditionalTelephoneForm()
return render_to_text('abonapp/modal_add_phone.html', {
return render_to_response('abonapp/modal_add_phone.html', {
'form': frm,
'gid': gid,
'uname': uname
}, request=request)
})
@login_required
@ -958,10 +957,10 @@ def phonebook(request, gid):
for row in telephones:
writer.writerow(row)
return response
return render_to_text('abonapp/modal_phonebook.html', {
return render_to_response('abonapp/modal_phonebook.html', {
'tels': telephones,
'gid': gid
}, request=request)
})
@login_required
@ -993,10 +992,10 @@ def abon_export(request, gid):
return redirect('abonapp:group_list')
else:
frm = forms.ExportUsersForm()
return render_to_text('abonapp/modal_export.html', {
return render_to_response('abonapp/modal_export.html', {
'gid': gid,
'form': frm
}, request=request)
})
@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)
else:
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,
'gid': gid,
'uname': uname
}, request=request)
})
@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
app_name = 'account_app'
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(),
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,
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,
name='set_abon_groups_permission'),
url(r'^(?P<uid>\d+)/manage_responsibility_groups/$',
path('<int:uid>/manage_responsibility_groups/',
views.ManageResponsibilityGroups.as_view(),
name='manage_responsibility_groups')
]

3
chatbot/email_bot.py

@ -1,3 +1,4 @@
from _socket import gaierror
from smtplib import SMTPException
from django.core.mail import send_mail
from django.conf import settings
@ -17,3 +18,5 @@ def send_notify(msg_text, account, tag='none'):
)
except SMTPException as 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):
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)
def __str__(self):
@ -24,7 +24,7 @@ class TelegramBot(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)
date_sent = models.DateTimeField(auto_now_add=True)
@ -51,7 +51,7 @@ class MessageQueueManager(models.Manager):
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)
STATUSES = (
('n', 'New'),

16
clientsideapp/urls.py

@ -1,14 +1,14 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'clientsideapp'
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.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.db import transaction
from django.utils.translation import gettext_lazy as _, gettext
@ -56,10 +55,10 @@ def buy_service(request, srv_id):
abon.nas_sync_self()
messages.success(request, _("The service '%s' wan successfully activated") % service.title)
else:
return render_to_text('clientsideapp/modal_service_buy.html', {
return render_to_response('clientsideapp/modal_service_buy.html', {
'service': service,
'current_service': current_service.tariff if current_service is not None else None
}, request=request)
})
except LogicError as e:
messages.error(request, e)
except NasFailedResult as e:

2
devapp/models.py

@ -109,7 +109,7 @@ class Device(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)
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
app_name = 'devapp'
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'),
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'),
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
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
url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view()),
path('on_device_event/', views.OnDeviceMonitoringEvent.as_view()),
# 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
from ipaddress import ip_address
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.db import IntegrityError
from django.db.models import Q, Count
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.utils.decorators import method_decorator
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()
messages.success(request, _('Port successfully removed'))
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,
'did': device_id,
'port_id': portid
}, request=request)
})
except Port.DoesNotExist:
messages.error(request, _('Port does not exist'))
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)
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,
'did': device_id,
'gid': group_id,
'form': frm
}, request=request)
})
except Port.DoesNotExist:
messages.error(request, _('Port does not exist'))
except (DeviceDBException, DuplicateEntry) as e:
@ -416,11 +415,11 @@ def add_single_port(request, group_id, device_id):
'num': request.GET.get('n'),
'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,
'gid': group_id,
'form': frm
}, request=request)
})
except Device.DoesNotExist:
messages.error(request, _('Device does not exist'))
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
app_name = 'dialing_app'
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 django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.contrib.gis.shortcuts import render_to_text
from django.db import ProgrammingError
from django.shortcuts import redirect
from django.utils.translation import gettext_lazy as _
@ -151,10 +151,10 @@ def send_sms(request):
messages.error(request, _('fix form errors'))
else:
frm = SMSOutForm(initial={'dst': initial_dst})
return render_to_text('modal_send_sms.html', {
return render_to_response('modal_send_sms.html', {
'form': frm,
'path': path
}, request=request)
})
class SmsManager(SecureApiView):

4
djing/fields.py

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

2
djing/global_base_views.py

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

2
djing/settings.py

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

2
djing/templatetags/dpagination.py

@ -6,7 +6,7 @@ register = template.Library()
@register.simple_tag
def url_page_replace(request, field, value):
dict_ = request.GET.copy()
dict_[field] = value
dict_[field] = str(value)
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 .views import home
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
#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(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
app_name = 'group_app'
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
def get_device_kinds():
return ((
resolve_url('ip_pool:networks_%s' % kind_code),
resolve_url('ip_pool:networks_%s/' % kind_code),
kind_descr
)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 models
app_name = 'ip_pool'
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:
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),
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.urls import path
from . import views
app_name = 'mapapp'
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.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, 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.decorators import method_decorator
from django.db.models import Count
@ -138,7 +137,7 @@ def get_dots(request):
@login_required
def modal_add_dot(request):
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':
frm = DotForm(request.POST, request.FILES)
if frm.is_valid():
@ -159,10 +158,10 @@ def modal_add_dot(request):
coords = request.GET.get('coords')
lat, lon = coords.split(',')
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,
'form': frm
}, request=request)
})
@login_required
@ -176,7 +175,7 @@ def preload_devices(request):
dot_devices_ids = tuple(dev.pk for dev in dot_devices.iterator())
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(),
'dot_devices_ids': dot_devices_ids
})
@ -186,7 +185,7 @@ def preload_devices(request):
@login_required
def dot_tooltip(request):
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')
devs, dot = None, None
try:
@ -194,7 +193,7 @@ def dot_tooltip(request):
devs = dot.devices.all()
except Dot.DoesNotExist:
pass
return render_to_text('maps/map_tooltip.html', {
return render_to_response('maps/map_tooltip.html', {
'devs': devs.iterator(),
'dot': dot
})

2
msg_app/context_processors.py

@ -2,7 +2,7 @@ from .models import Conversation
def get_new_messages_count(request):
if request.user.is_anonymous():
if request.user.is_anonymous:
count = 0
else:
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):
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 = (
('new', _('New')),
('old', _('Seen')),
@ -34,8 +34,8 @@ class MessageStatus(models.Model):
class Message(models.Model):
text = models.TextField(_("Body"))
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)
account_status = models.ManyToManyField(UserProfile, through=MessageStatus, through_fields=('msg', 'user'))
@ -73,8 +73,8 @@ class Message(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 = (
('adm', _('Admin')),
('gst', _('Guest')),
@ -82,7 +82,7 @@ class ConversationMembership(models.Model):
('inv', _('Inviter'))
)
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')
def __str__(self):
@ -142,7 +142,7 @@ class Conversation(models.Model):
participants = models.ManyToManyField(UserProfile, related_name='conversations',
through='ConversationMembership',
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)
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
app_name = 'msg_app'
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 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.shortcuts import render, redirect, get_object_or_404, render_to_response
from django.views.generic import ListView
from chatbot.models import MessageQueue
@ -37,9 +37,9 @@ def new_conversation(request):
else:
messages.error(request, _('fix form errors'))
else:
return render_to_text('msg_app/modal_new_conversation.html', {
return render_to_response('msg_app/modal_new_conversation.html', {
'form': frm
}, request=request)
})
except MessageError as e:
messages.error(request, e)
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
@ -6,8 +6,8 @@ app_name = 'nas_app'
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
Django==1.11
Django>=2
Pillow
telepot

4
searchapp/urls.py

@ -1,10 +1,10 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'searchapp'
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)
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)

4
statistics/urls.py

@ -1,9 +1,9 @@
from django.conf.urls import url
from django.urls import path
from . import views
app_name = 'statistics'
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
app_name = 'tariff_app'
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):
task = models.ForeignKey('Task', models.CASCADE)
task = models.ForeignKey('Task', on_delete=models.CASCADE)
ACT_CHOICES = (
('e', _('Change task')),
('c', _('Create task')),
@ -49,7 +49,7 @@ class ChangeLog(models.Model):
)
act_type = models.CharField(max_length=1, choices=ACT_CHOICES)
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):
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])
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])
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:
db_table = 'task'
@ -119,8 +119,8 @@ class Task(models.Model):
class ExtraComment(models.Model):
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)
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
app_name = 'taskapp'
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'),
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