Dmitry 9 years ago
parent
commit
b5414ecf64
  1. 14
      abonapp/models.py
  2. 291
      abonapp/views.py
  3. 19
      accounts_app/models.py
  4. 6
      accounts_app/urls.py
  5. 80
      accounts_app/views.py
  6. 3
      clientsideapp/urls.py
  7. 24
      clientsideapp/views.py
  8. 18
      devapp/views.py
  9. 16
      ip_pool/views.py
  10. 22
      tariff_app/views.py
  11. 9
      taskapp/views.py
  12. 6
      templates/abonapp/abonamount.html
  13. 4
      templates/abonapp/activate_service.html
  14. 4
      templates/abonapp/addAbon.html
  15. 4
      templates/abonapp/addGroup.html
  16. 1
      templates/abonapp/addInvoice.html
  17. 8
      templates/abonapp/buy_tariff.html
  18. 9
      templates/abonapp/complete_service.html
  19. 1
      templates/abonapp/debtors.html
  20. 7
      templates/abonapp/editAbon.html
  21. 7
      templates/abonapp/ext.htm
  22. 3
      templates/abonapp/group_list.html
  23. 1
      templates/abonapp/log.html
  24. 1
      templates/abonapp/peoples.html
  25. 18
      templates/abonapp/services.html
  26. 2
      templates/accounts/acc_list.html
  27. 5
      templates/accounts/create_acc.html
  28. 1
      templates/accounts/ext.htm
  29. 4
      templates/accounts/group.html
  30. 3
      templates/accounts/group_list.html
  31. 3
      templates/accounts/login.html
  32. 7
      templates/accounts/settings/ch_info.html
  33. 2
      templates/accounts/settings/ext.htm
  34. 7
      templates/accounts/settings/permissions.html
  35. 6
      templates/clientsideapp/debt_buy.html
  36. 12
      templates/clientsideapp/ext.html
  37. 8
      templates/clientsideapp/service_buy.html
  38. 74
      templates/clientsideapp/services.html
  39. 6
      templates/devapp/dev.html
  40. 1
      templates/devapp/devices.html
  41. 1
      templates/devapp/ext.htm
  42. 6
      templates/ip_pool/add_pool.html
  43. 4
      templates/tariff_app/editTarif.html
  44. 1
      templates/tariff_app/tarifs.html
  45. 7
      templates/taskapp/add_edit_task.html
  46. 7
      templates/taskapp/ext.htm
  47. 7
      templates/taskapp/tasklist_all.html
  48. 2
      templates/taskapp/view.html

14
abonapp/models.py

@ -15,15 +15,15 @@ from accounts_app.models import UserProfile
class LogicError(Exception):
def __init__(self, value, err_id=None):
self.value = value
self.message = value
if err_id:
self.err_id = err_id
def __unicode__(self):
return repr(self.value)
return repr(self.message)
def __str__(self):
return repr(self.value)
return repr(self.message)
class AbonGroup(models.Model):
@ -123,7 +123,7 @@ class AbonTariff(models.Model):
def activate(self, current_user):
amnt = self.calc_amount_service()
# если не хватает денег
if self.abon.ballance > amnt:
if self.abon.ballance < amnt:
raise LogicError(u'Не хватает денег на счету')
# дата активации услуги
self.time_start = timezone.now()
@ -359,6 +359,9 @@ def abon_del_signal(sender, instance, **kwargs):
def abontariff_post_save(sender, instance, **kwargs):
# Тут или подключение абону услуги, или изменение приоритета
if not kwargs['created']:
# если изменение приоритета то не говорим об этом NAS'у
return
agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut)
agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf)
tm = Transmitter()
@ -367,6 +370,9 @@ def abontariff_post_save(sender, instance, **kwargs):
def abontariff_del_signal(sender, instance, **kwargs):
if not instance.is_started():
# если удаляем не активную услугу то говорить об этом NAS'у не обязательно
return
agent_trf = TariffStruct(instance.tariff.id, instance.tariff.speedIn, instance.tariff.speedOut)
agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf)
tm = Transmitter()

291
abonapp/views.py

@ -7,9 +7,9 @@ from django.db.models import Count
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.contrib.auth.decorators import login_required, permission_required
from django.utils import timezone
from django.template.context_processors import csrf
from django.http import HttpResponse, Http404
from django.contrib.auth import get_user_model
from django.contrib import messages
from ip_pool.models import IpPoolItem
from tariff_app.models import Tariff
@ -42,19 +42,22 @@ def peoples(request, gid):
@login_required
@permission_required('abonapp.add_abongroup')
def addgroup(request):
warntext = ''
frm = forms.AbonGroupForm()
if request.method == 'POST':
frm = forms.AbonGroupForm(request.POST)
if frm.is_valid():
frm.save()
return redirect('abonapp:group_list')
else:
warntext = u'Исправьте ошибки'
try:
if request.method == 'POST':
frm = forms.AbonGroupForm(request.POST)
if frm.is_valid():
frm.save()
messages.success(request, u'Группа успешно создана')
return redirect('abonapp:group_list')
else:
messages.error(request, u'Исправьте ошибки')
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.error(request, e.message)
return render(request, 'abonapp/addGroup.html', {
'csrf_token': csrf(request)['csrf_token'],
'form': frm,
'warntext': warntext
'form': frm
})
@ -80,17 +83,20 @@ def grouplist(request):
@login_required
@permission_required('abonapp.delete_abongroup')
def delgroup(request):
agd = mydefs.safe_int(request.GET.get('id'))
get_object_or_404(models.AbonGroup, id=agd).delete()
return mydefs.res_success(request, 'abonapp:group_list')
try:
agd = mydefs.safe_int(request.GET.get('id'))
get_object_or_404(models.AbonGroup, id=agd).delete()
return mydefs.res_success(request, 'abonapp:group_list')
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.error(request, e.message)
return mydefs.res_error(request, 'abonapp:group_list')
@login_required
@mydefs.only_admins
# @permission_required('abonapp.add_abon')
# @permission_required('abonapp.change_abon')
@permission_required('abonapp.add_abon')
def addabon(request, gid):
warning_text = ''
frm = None
group = None
try:
@ -104,18 +110,16 @@ def addabon(request, gid):
prf.save()
return redirect('abonapp:people_list', group.id)
else:
warning_text = u'Некоторые поля заполнены не правильно, проверте ещё раз'
except IntegrityError, e:
warning_text = "%s: %s" % (warning_text, e)
messages.error(request, u'Некоторые поля заполнены не правильно, проверте ещё раз')
except IntegrityError as e:
messages.error(request, e.message)
except models.LogicError as e:
warning_text = e.value
messages.error(request, e.message)
except NasFailedResult as e:
warning_text = e.message
messages.error(request, e.message)
except NasNetworkError as e:
warning_text = e.message
messages.error(request, e.message)
if not frm:
frm = forms.AbonForm(initial={
@ -124,8 +128,6 @@ def addabon(request, gid):
})
return render(request, 'abonapp/addAbon.html', {
'warntext': warning_text,
'csrf_token': csrf(request)['csrf_token'],
'form': frm,
'abon_group': group
})
@ -137,38 +139,47 @@ def delentity(request):
typ = request.GET.get('t')
uid = request.GET.get('id')
if typ == 'a':
if not request.user.has_perm('abonapp.delete_abon'):
raise PermissionDenied
abon = get_object_or_404(models.Abon, id=uid)
gid = abon.group.id
abon.delete()
return mydefs.res_success(request, resolve_url('abonapp:people_list', gid))
elif typ == 'g':
if not request.user.has_perm('abonapp.delete_abongroup'):
raise PermissionDenied
get_object_or_404(models.AbonGroup, id=uid).delete()
return mydefs.res_success(request, 'abonapp:group_list')
try:
if typ == 'a':
if not request.user.has_perm('abonapp.delete_abon'):
raise PermissionDenied
abon = get_object_or_404(models.Abon, id=uid)
gid = abon.group.id
abon.delete()
return mydefs.res_success(request, resolve_url('abonapp:people_list', gid))
elif typ == 'g':
if not request.user.has_perm('abonapp.delete_abongroup'):
raise PermissionDenied
get_object_or_404(models.AbonGroup, id=uid).delete()
return mydefs.res_success(request, 'abonapp:group_list')
except NasNetworkError as e:
messages.error(request, e.message)
except NasFailedResult as e:
messages.error(request, e.message)
return redirect('abonapp:group_list')
@login_required
@permission_required('abonapp.can_add_ballance')
def abonamount(request, gid, uid):
warning_text = ''
abon = get_object_or_404(models.Abon, id=uid)
if request.method == 'POST':
abonid = mydefs.safe_int(request.POST.get('abonid'))
if abonid == int(uid):
amnt = mydefs.safe_float(request.POST.get('amount'))
abon.add_ballance(request.user, amnt)
abon.save(update_fields=['ballance'])
return redirect('abonapp:abon_home', gid=gid, uid=uid)
else:
warning_text = u'Не правильно выбран абонент как цель для пополнения'
try:
if request.method == 'POST':
abonid = mydefs.safe_int(request.POST.get('abonid'))
if abonid == int(uid):
amnt = mydefs.safe_float(request.POST.get('amount'))
abon.add_ballance(request.user, amnt)
abon.save(update_fields=['ballance'])
messages.success(request, u'Счёт успешно пополнен на %d' % amnt)
return redirect('abonapp:abon_home', gid=gid, uid=uid)
else:
messages.error(request, u'Не могу разобрать id абонента')
except NasNetworkError as e:
messages.error(request, e.message)
except NasFailedResult as e:
messages.error(request, e.message)
return render(request, 'abonapp/abonamount.html', {
'abon': abon,
'abon_group': get_object_or_404(models.AbonGroup, id=gid),
'warntext': warning_text
'abon_group': get_object_or_404(models.AbonGroup, id=gid)
})
@ -219,7 +230,6 @@ def abon_services(request, gid, uid):
def abonhome(request, gid, uid):
abon = get_object_or_404(models.Abon, id=uid)
abon_group = get_object_or_404(models.AbonGroup, id=gid)
warntext = ''
ballance = abon.ballance
frm = None
init_frm_dat = {
@ -248,24 +258,23 @@ def abonhome(request, gid, uid):
# return redirect('abonapp:abon_home', gid, uid)
else:
warntext = u'Не правильные значения, проверте поля и попробуйте ещё'
messages.warning(request, u'Не правильные значения, проверте поля и попробуйте ещё')
else:
frm = forms.AbonForm(initial=init_frm_dat)
except IntegrityError, e:
warntext = u'Проверте введённые вами значения, скорее всего такой ip уже у кого-то есть. А вообще: %s' % e
except IntegrityError as e:
messages.error(request, u'Проверте введённые вами значения, скорее всего такой ip уже у кого-то есть. А вообще: %s' % e.message)
frm = forms.AbonForm(initial=init_frm_dat)
except Http404:
warntext = u'Ip адрес не найден в списке IP адресов'
messages.error(request, u'Ip адрес не найден в списке IP адресов')
frm = forms.AbonForm(initial=init_frm_dat)
except NasFailedResult as e:
warntext = e.message
messages.error(request, e.message)
except NasNetworkError as e:
warntext = e.message
messages.error(request, e.message)
return render(request, 'abonapp/editAbon.html', {
'warntext': warntext,
'form': frm or forms.AbonForm(initial=init_frm_dat),
'abon': abon,
'ballance': ballance,
@ -293,34 +302,37 @@ def add_invoice(request, gid, uid):
abon = get_object_or_404(models.Abon, id=uid)
grp = get_object_or_404(models.AbonGroup, id=gid)
if request.method == 'POST':
curr_amount = mydefs.safe_int(request.POST.get('curr_amount'))
comment = request.POST.get('comment')
newinv = models.InvoiceForPayment()
newinv.abon = abon
newinv.amount = curr_amount
newinv.comment = comment
if request.POST.get('status') == u'on':
newinv.status = True
newinv.author = request.user
newinv.save()
return redirect('abonapp:abon_home', gid=gid, uid=uid)
else:
return render(request, 'abonapp/addInvoice.html', {
'csrf_token': csrf(request)['csrf_token'],
'abon': abon,
'invcount': models.InvoiceForPayment.objects.filter(abon=abon).count(),
'abon_group': grp
})
try:
if request.method == 'POST':
curr_amount = mydefs.safe_int(request.POST.get('curr_amount'))
comment = request.POST.get('comment')
newinv = models.InvoiceForPayment()
newinv.abon = abon
newinv.amount = curr_amount
newinv.comment = comment
if request.POST.get('status') == u'on':
newinv.status = True
newinv.author = request.user
newinv.save()
return redirect('abonapp:abon_home', gid=gid, uid=uid)
except NasNetworkError as e:
messages.error(request, e.message)
except NasFailedResult as e:
messages.error(request, e.message)
return render(request, 'abonapp/addInvoice.html', {
'abon': abon,
'invcount': models.InvoiceForPayment.objects.filter(abon=abon).count(),
'abon_group': grp
})
@login_required
@permission_required('abonapp.can_buy_tariff')
def buy_tariff(request, gid, uid):
warntext = ''
frm = None
grp = get_object_or_404(models.AbonGroup, id=gid)
abon = get_object_or_404(models.Abon, id=uid)
@ -331,21 +343,20 @@ def buy_tariff(request, gid, uid):
cd = frm.cleaned_data
abon.buy_tariff(cd['tariff'], request.user)
abon.save()
return redirect('abonapp:abon_home', gid=gid, uid=abon.id)
return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
else:
warntext = u'Что-то не так при покупке услуги, проверьте и попробуйте ещё'
messages.error(request, u'Что-то не так при покупке услуги, проверьте и попробуйте ещё')
else:
frm = forms.BuyTariff()
except models.LogicError as e:
warntext = e.value
messages.error(request, e.message)
except NasFailedResult as e:
warntext = e.message + u', но услуга уже подключена, она будет применена когда будет восстановлен доступ к NAS серверу.' \
u' <a href="%s">Вернуться</a>' % resolve_url('abonapp:abon_home', gid=gid, uid=abon.id)
messages.error(request, e.message)
except NasNetworkError as e:
warntext = e.message
messages.error(request, e.message)
return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
return render(request, 'abonapp/buy_tariff.html', {
'warntext': warntext,
'form': frm or forms.BuyTariff(),
'abon': abon,
'abon_group': grp
@ -360,10 +371,15 @@ def chpriority(request, gid, uid):
current_abon_tariff = get_object_or_404(models.AbonTariff, id=t)
if act == 'up':
current_abon_tariff.priority_up()
elif act == 'down':
current_abon_tariff.priority_down()
try:
if act == 'up':
current_abon_tariff.priority_up()
elif act == 'down':
current_abon_tariff.priority_down()
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.error(request, e.message)
return redirect('abonapp:abon_home', gid=gid, uid=uid)
@ -375,7 +391,7 @@ def complete_service(request, gid, uid, srvid):
if abtar.abon.id != int(uid):
return HttpResponse('<h1>uid not equal uid from service</h1>')
time_use = None
try:
if request.method == 'POST':
# досрочно завершаем услугу
@ -383,9 +399,10 @@ def complete_service(request, gid, uid, srvid):
if finish_confirm == 'yes':
# удаляем запись о текущей услуге.
abtar.delete()
messages.success(request, u'Услуга успешно завершена')
return redirect('abonapp:abon_home', gid, uid)
else:
raise models.LogicError('Действие не подтверждено')
raise models.LogicError(u'Действие не подтверждено')
time_use = timezone.now() - abtar.time_start
time_use = {
@ -393,24 +410,19 @@ def complete_service(request, gid, uid, srvid):
'hours': time_use.seconds / 3600,
'minutes': time_use.seconds / 60 % 60
}
return render(request, 'abonapp/complete_service.html', {
'abtar': abtar,
'abon': abtar.abon,
'time_use': time_use,
'abon_group': get_object_or_404(models.AbonGroup, id=gid)
})
except models.LogicError as e:
warntext = e.value
messages.error(request, e.message)
except NasFailedResult as e:
warntext = e.message
messages.error(request, e.message)
except NasNetworkError as e:
warntext = e.message
messages.warning(request, e.message)
return redirect('abonapp:abon_home', gid, uid)
return render(request, 'abonapp/complete_service.html', {
'abtar': abtar,
'abon': abtar.abon,
'warntext': warntext,
'time_use': time_use,
'abon_group': get_object_or_404(models.AbonGroup, id=gid)
})
@ -419,15 +431,22 @@ def complete_service(request, gid, uid, srvid):
@permission_required('abonapp.can_activate_service')
def activate_service(request, gid, uid, srvid):
abtar = get_object_or_404(models.AbonTariff, id=srvid)
amount = abtar.calc_amount_service()
if request.method == 'POST':
if request.POST.get('finish_confirm') != 'yes':
return HttpResponse('<h1>Request not confirmed</h1>')
try:
if request.method == 'POST':
if request.POST.get('finish_confirm') != 'yes':
return HttpResponse('<h1>Request not confirmed</h1>')
abtar.activate(request.user)
return redirect('abonapp:abon_home', gid, uid)
abtar.activate(request.user)
return redirect('abonapp:abon_home', gid, uid)
amount = abtar.calc_amount_service()
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.warning(request, e.message)
except models.LogicError as e:
messages.error(request, e.message)
return render(request, 'abonapp/activate_service.html', {
'abon': abtar.abon,
'abon_group': abtar.abon.group,
@ -440,7 +459,12 @@ def activate_service(request, gid, uid, srvid):
@login_required
@permission_required('abonapp.delete_abontariff')
def unsubscribe_service(request, gid, uid, srvid):
get_object_or_404(models.AbonTariff, id=int(srvid)).delete()
try:
get_object_or_404(models.AbonTariff, id=int(srvid)).delete()
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.warning(request, e.message)
return redirect('abonapp:abon_home', gid=gid, uid=uid)
@ -474,22 +498,27 @@ def debtors(request):
@mydefs.only_admins
def update_nas(request, group_id):
users = models.Abon.objects.filter(group=group_id)
tm = Transmitter()
for usr in users:
if usr.ip_address:
user_ip = usr.ip_address.int_ip()
else:
continue
tariff = usr.active_tariff()
if tariff:
agent_trf = TariffStruct(tariff.id, tariff.speedIn, tariff.speedOut)
else:
agent_trf = TariffStruct()
agent_abon = AbonStruct(usr.id, user_ip, agent_trf)
try:
tm.update_user(agent_abon)
except NasFailedResult:
tm.add_user(agent_abon)
try:
tm = Transmitter()
for usr in users:
if usr.ip_address:
user_ip = usr.ip_address.int_ip()
else:
continue
tariff = usr.active_tariff()
if tariff:
agent_trf = TariffStruct(tariff.id, tariff.speedIn, tariff.speedOut)
else:
agent_trf = TariffStruct()
agent_abon = AbonStruct(usr.id, user_ip, agent_trf)
try:
tm.update_user(agent_abon)
except NasFailedResult:
tm.add_user(agent_abon)
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.warning(request, e.message)
return redirect('abonapp:people_list', gid=group_id)

19
accounts_app/models.py

@ -59,10 +59,7 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
REQUIRED_FIELDS = ['telephone']
def get_full_name(self):
if self.fio:
return "%s: %s" % (self.username, self.fio)
else:
return self.username
return self.fio if self.fio else self.username
def get_short_name(self):
return self.username or self.telephone
@ -91,17 +88,3 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
def __unicode__(self):
return self.get_full_name()
# from django.db.models.signals import post_save
'''def create_custom_user(sender, instance, created, **kwargs):
if created:
values = {}
for field in sender._meta.local_fields:
values[field.attname] = getattr(instance, field.attname)
user = UserProfile(**values)
user.save()'''
#post_save.connect(create_custom_user, User)

6
accounts_app/urls.py

@ -18,8 +18,8 @@ urlpatterns = [
url(r'^settings$', views.ch_info, name='setup_info'),
url(r'^settings/change_ava$', views.ch_ava, name='setup_avatar'),
url(r'^(?P<id>\d+)$', views.profile_show, name='other_profile'),
url(r'^(?P<id>\d+)/perms$', views.perms, name='setup_perms'),
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+)/chgroup$', views.chgroup, name='profile_setup_group'),
url(r'^(?P<uid>\d+)/del$', views.delete_profile, name='delete_profile'),
@ -27,6 +27,6 @@ urlpatterns = [
url(r'^(?P<uid>\d+)/appoint_task$', views.appoint_task, name='appoint_task'),
url(r'^group/$', views.groups, name='groups_list'),
url(r'^group/(?P<id>\d+)$', views.group, name='group_link')
url(r'^group/(?P<uid>\d+)$', views.group, name='group_link')
]

80
accounts_app/views.py

@ -1,11 +1,12 @@
# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required # , permission_required
from django.contrib.auth.decorators import login_required, permission_required
from django.contrib.auth import authenticate, login, logout
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import NoReverseMatch
from django.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.template.context_processors import csrf
from django.http import Http404
from django.contrib.auth.models import Group, Permission
from django.contrib import messages
from abonapp.models import AbonGroup
from photo_app.models import Photo
@ -54,13 +55,14 @@ def sign_out(request):
@login_required
@mydefs.only_admins
def profile_show(request, id=0):
id = mydefs.safe_int(id)
def profile_show(request, uid=0):
uid = mydefs.safe_int(uid)
if id == 0:
return redirect('acc_app:other_profile', id=request.user.id)
if uid == 0:
print type(request.user.id), request.user.id
return redirect('acc_app:other_profile', uid=request.user.id)
usr = get_object_or_404(UserProfile, id=id)
usr = get_object_or_404(UserProfile, id=uid)
if request.method == 'POST':
usr.username = request.POST.get('username')
usr.fio = request.POST.get('fio')
@ -68,10 +70,10 @@ def profile_show(request, id=0):
usr.is_active = request.POST.get('stat')
usr.is_admin = request.POST.get('is_admin')
usr.save()
return redirect('acc_app:other_profile', id=id)
return redirect('acc_app:other_profile', uid=uid)
return render(request, 'accounts/index.html', {
'uid': id,
'uid': uid,
'userprofile': usr
})
@ -119,7 +121,6 @@ def ch_ava(request):
@login_required
@mydefs.only_admins
def ch_info(request):
warntext = ''
if request.method == 'POST':
user = request.user
user.username = request.POST.get('username')
@ -133,19 +134,17 @@ def ch_info(request):
newpasswd = request.POST.get('newpasswd')
user.set_password(newpasswd)
else:
warntext = u'Неправильный пароль'
messages.error(request, u'Неправильный пароль')
user.save()
request.user = user
return render(request, 'accounts/settings/ch_info.html', {
'user': request.user,
'warntext': warntext
'user': request.user
})
@login_required
@mydefs.only_admins
##@permission_required('accounts_app.add_userprofile')
@permission_required('acc_app.add_userprofile')
def create_profile(request):
if request.method == 'POST':
username = request.POST.get('username')
@ -160,17 +159,10 @@ def create_profile(request):
passwd = request.POST.get('passwd')
conpasswd = request.POST.get('conpasswd')
if not passwd:
return render(request, 'accounts/create_acc.html', {
'warntext': u'Забыли указать пароль для нового аккаунта',
'csrf_token': csrf(request)['csrf_token'],
'newuser': user
})
messages.error(request, u'Забыли указать пароль для нового аккаунта')
if not conpasswd:
return render(request, 'accounts/create_acc.html', {
'warntext': u'Забыли повторить пароль для нового аккаунта',
'csrf_token': csrf(request)['csrf_token'],
'newuser': user
})
messages.error(request, u'Забыли повторить пароль для нового аккаунта')
if passwd == conpasswd:
user_qs = UserProfile.objects.filter(username=username)[:1]
@ -179,24 +171,21 @@ def create_profile(request):
user.save()
return redirect('acc_app:accounts_list')
else:
return render(request, 'accounts/create_acc.html', {
'warntext': u'Пользователь с таким именем уже есть',
'csrf_token': csrf(request)['csrf_token'],
'newuser': user
})
messages.error(request, u'Пользователь с таким именем уже есть')
else:
return render(request, 'accounts/create_acc.html', {
'warntext': u'Пароли не совпадают, попробуйте ещё раз',
'csrf_token': csrf(request)['csrf_token'],
'newuser': user
})
return render(request, 'accounts/create_acc.html', {'csrf_token': csrf(request)['csrf_token'], })
messages.error(request, u'Пароли не совпадают, попробуйте ещё раз')
return render(request, 'accounts/create_acc.html', {
'newuser': user
})
return render(request, 'accounts/create_acc.html')
@login_required
@mydefs.only_admins
# @permission_required('accounts_app.del_userprofile')
def delete_profile(request, uid):
if uid != request.user.id:
if not request.user.has_perm('acc_app.delete_userprofile'):
raise PermissionDenied
prf = get_object_or_404(UserProfile, id=uid)
prf.delete()
return redirect('acc_app:accounts_list')
@ -216,13 +205,12 @@ def acc_list(request):
@login_required
@mydefs.only_admins
# @permission_required('accounts_app.change_userprofile')
def perms(request, id):
profile = get_object_or_404(UserProfile, id=id)
def perms(request, uid):
profile = get_object_or_404(UserProfile, id=uid)
own_permissions = UserProfile.get_all_permissions(profile)
return render(request, 'accounts/settings/permissions.html', {
'uid': id,
'uid': uid,
'own_permissions': own_permissions
})
@ -241,10 +229,9 @@ def groups(request):
@login_required
@mydefs.only_admins
# @permission_required('auth.change_group')
def group(request, id):
id = mydefs.safe_int(id)
grp = get_object_or_404(Group, id=id)
def group(request, uid):
uid = mydefs.safe_int(uid)
grp = get_object_or_404(Group, id=uid)
if request.method == 'POST':
group_rights = filter(lambda x: x[0] == 'group_rights', request.POST.lists())[0][1]
@ -253,7 +240,7 @@ def group(request, id):
rid = mydefs.safe_int(grr)
grp.permissions.add(rid)
grp.save()
return redirect('acc_app:profile_group_link', id=id)
return redirect('acc_app:profile_group_link', id=uid)
grp_rights = grp.permissions.all()
all_rights = Permission.objects.exclude(group=grp)
@ -263,7 +250,6 @@ def group(request, id):
# print u"%s | %s" % (pr.name, pr.codename)
return render(request, 'accounts/group.html', {
'csrf_token': csrf(request)['csrf_token'],
'group': grp,
'all_rights': all_rights,
'grp_rights': grp_rights

3
clientsideapp/urls.py

@ -7,7 +7,8 @@ import views
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^pays$', views.pays, name='pays'),
url(r'^buy$', views.buy_service, name='buy'),
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')
]

24
clientsideapp/views.py

@ -1,10 +1,12 @@
# coding=utf-8
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from abonapp.models import AbonLog, AbonTariff, InvoiceForPayment, Abon, LogicError
from tariff_app.models import Tariff
from mydefs import pag_mn
from agent import NasFailedResult, NasNetworkError
@login_required
@ -22,21 +24,27 @@ def pays(request):
@login_required
def buy_service(request):
def services(request):
all_tarifs = Tariff.objects.all()
own_abon_tariffs = AbonTariff.objects.filter(abon_id=request.user.id)
current_service = own_abon_tariffs.exclude(time_start=None)
current_service = current_service[0] if current_service.count() > 0 else None
return render(request, 'clientsideapp/buy.html', {
return render(request, 'clientsideapp/services.html', {
'tarifs': all_tarifs,
'own_abon_tariffs': own_abon_tariffs,
'current_service': current_service
})
@login_required
def buy_service(request, srv_id):
service = get_object_or_404(Tariff, id=srv_id)
return render(request, 'clientsideapp/service_buy.html', {
'service': service
})
@login_required
def debts_list(request):
debts = InvoiceForPayment.objects.filter(abon=request.user)
@ -47,7 +55,6 @@ def debts_list(request):
@login_required
def debt_buy(request, d_id):
warntext = u''
debt = get_object_or_404(InvoiceForPayment, id=d_id)
abon = get_object_or_404(Abon, id=request.user.id)
if request.method == 'POST':
@ -64,9 +71,12 @@ def debt_buy(request, d_id):
debt.save(update_fields=['status', 'date_pay'])
return redirect('client_side:debts')
except LogicError, e:
warntext = e.value
messages.error(request, e.value)
except NasFailedResult as e:
messages.error(request, e.message)
except NasNetworkError as e:
messages.error(request, e.message)
return render(request, 'clientsideapp/debt_buy.html', {
'warntext': warntext,
'debt': debt,
'amount': debt.amount,
'ballance_after': abon.ballance - debt.amount

18
devapp/views.py

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required, permission_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from models import Device
from mydefs import pag_mn, res_success, res_error, only_admins
@ -19,7 +21,7 @@ def devices(request):
@login_required
@only_admins
@permission_required('devapp.delete_device')
def devdel(request, did):
try:
get_object_or_404(Device, id=did).delete()
@ -31,21 +33,25 @@ def devdel(request, did):
@login_required
@only_admins
def dev(request, devid=0):
warntext = ''
devinst = get_object_or_404(Device, id=devid) if devid != 0 else None
if request.method == 'POST':
if devid == 0:
if not request.user.has_perm('devapp.add_device'):
raise PermissionDenied
else:
if not request.user.has_perm('devapp.change_device'):
raise PermissionDenied
frm = DeviceForm(request.POST, instance=devinst)
if frm.is_valid():
frm.save()
return redirect('devapp:devs')
else:
warntext = u'Ошибка в данных, проверте их ещё раз'
messages.error(request, u'Ошибка в данных, проверте их ещё раз')
else:
frm = DeviceForm(instance=devinst)
return render(request, 'devapp/dev.html', {
'warntext': warntext,
'form': frm,
'devid': devid
})
@ -54,11 +60,9 @@ def dev(request, devid=0):
@login_required
@only_admins
def devview(request, did):
warntext = ''
dev = get_object_or_404(Device, id=did)
return render(request, 'devapp/ports.html', {
'warntext': warntext,
'dev': dev
})

16
ip_pool/views.py

@ -1,5 +1,7 @@
from django.contrib.auth.decorators import login_required
# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from forms import PoolForm
from models import IpPoolItem
@ -39,7 +41,7 @@ def ips(request):
@login_required
@mydefs.only_admins
@permission_required('ip_pool.delete_ippoolitem')
def del_pool(request):
ip_start = request.GET.get('ips')
ip_end = request.GET.get('ipe')
@ -54,7 +56,7 @@ def del_pool(request):
@login_required
@mydefs.only_admins
@permission_required('ip_pool.add_ippoolitem')
def add_pool(request):
if request.method == 'POST':
frm = PoolForm(request.POST)
@ -63,18 +65,16 @@ def add_pool(request):
IpPoolItem.objects.add_pool(cd['start_ip'], cd['end_ip'])
return redirect('ip_pool:home')
else:
warntext = u'Form is not valid'
messages.error(request, u'Исправьте ошибки')
else:
frm = PoolForm()
warntext = ''
return render(request, 'ip_pool/add_pool.html', {
'form': frm,
'warntext': warntext
'form': frm
})
@login_required
@mydefs.only_admins
@permission_required('ip_pool.delete_ippoolitem')
def delip(request):
ipid = request.GET.get('id')
get_object_or_404(IpPoolItem, id=ipid).delete()

22
tariff_app/views.py

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required, permission_required
from django.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from models import Tariff
import mydefs
@ -13,7 +15,7 @@ def tarifs(request):
tars = Tariff.objects.all()
# фильтр
dir, field = mydefs.order_helper(request)
direct, field = mydefs.order_helper(request)
if field:
tars = tars.order_by(field)
@ -21,24 +23,29 @@ def tarifs(request):
return render(request, 'tariff_app/tarifs.html', {
'tariflist': tars,
'dir': dir,
'dir': direct,
'order_by': request.GET.get('order_by')
})
@login_required
@mydefs.only_admins
def edit_tarif(request, tarif_id=0):
tarif_id = mydefs.safe_int(tarif_id)
warntext = ''
if tarif_id == 0:
if not request.user.has_perm('tariff_app.add_tariff'):
raise PermissionDenied
else:
if not request.user.has_perm('tariff_app.change_tariff'):
raise PermissionDenied
if request.method == 'POST':
frm = forms.TariffForm(request.POST)
if frm.is_valid():
frm.save()
return redirect('tarifs:home')
else:
warntext = u'Не все поля заполнены правильно, проверте и попробуйте ещё раз'
messages.warning(request, u'Не все поля заполнены правильно, проверте и попробуйте ещё раз')
else:
if tarif_id == 0:
tarif = Tariff()
@ -47,14 +54,13 @@ def edit_tarif(request, tarif_id=0):
frm = forms.TariffForm(instance=tarif)
return render(request, 'tariff_app/editTarif.html', {
'warntext': warntext,
'form': frm,
'tarif_id': tarif_id
})
@login_required
@mydefs.only_admins
@permission_required('tariff_app.delete_tariff')
def del_tarif(request, id):
tar_id = mydefs.safe_int(id)
get_object_or_404(Tariff, id=tar_id).delete()

9
taskapp/views.py

@ -2,6 +2,7 @@
from django.contrib.auth.decorators import login_required, permission_required
from django.core.exceptions import PermissionDenied
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from abonapp.models import Abon
from datetime import date
from models import Task
@ -102,7 +103,6 @@ def view(request, task_id):
@only_admins
def task_add_edit(request, task_id=0):
task_id = safe_int(task_id)
warntext = ''
uid = request.GET.get('uid')
selected_abon = None
frm = TaskFrm()
@ -147,14 +147,13 @@ def task_add_edit(request, task_id=0):
task_instance.save()
return redirect('taskapp:home')
else:
warntext=u'Нет ответственных за группу, в которой находится выбранный абонент'
messages.error(request, u'Нет ответственных за группу, в которой находится выбранный абонент')
else:
warntext=u'Нужно выбрать абонента'
messages.error(request, u'Нужно выбрать абонента')
else:
warntext = u'Ошибка в полях формы в задаче'
messages.error(request, u'Ошибка в полях формы в задаче')
return render(request, 'taskapp/add_edit_task.html', {
'warntext': warntext,
'form': frm,
'task_id': tsk.id,
'selected_abon': selected_abon

6
templates/abonapp/abonamount.html

@ -3,12 +3,6 @@
<legend>Начисление средств на счёт</legend>
{% if warntext %}
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ warntext }}
</div>
{% endif %}
<div class="row">

4
templates/abonapp/activate_service.html

@ -10,15 +10,13 @@
<li class="active">Активировать услугу</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Активировать услугу</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'abonapp:activate_service' abon_group.id abon.id abtar.id %}"
method="post">{% csrf_token %}
<input name="finish_confirm" value="yes" type="hidden">

4
templates/abonapp/addAbon.html

@ -8,15 +8,13 @@
<li class="active">Добавить абонента</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Добавьте аккаунт абонента</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'abonapp:add_abon' abon_group.id %}" method="post">{% csrf_token %}
<div class="form-group">
<label for="login">Логин абонента</label>

4
templates/abonapp/addGroup.html

@ -8,15 +8,13 @@
<li class="active">Добавить группу</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Добавьте группу абонентов</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'abonapp:add_group' %}" method="post">{% csrf_token %}
<div class="form-group">
<label for="gtitle">Название группы</label>

1
templates/abonapp/addInvoice.html

@ -10,6 +10,7 @@
<li class="active">Добавить долг</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">

8
templates/abonapp/buy_tariff.html

@ -10,7 +10,7 @@
<li class="active">Заказать услугу</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
@ -19,12 +19,6 @@
</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button class="close" type="button" aria-hidden="true" data-dismiss="alert">&times;</button>
<strong>Внимание!</strong> {{ warntext|safe }}
</div>
{% endif %}
<form role="form" action="{% url 'abonapp:buy_tariff' abon_group.id abon.id %}"
method="post">{% csrf_token %}
<div class="form-group">

9
templates/abonapp/complete_service.html

@ -10,18 +10,15 @@
<li class="active">Завершить услугу</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Завершить услугу</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'abonapp:compl_srv' abon_group.id abon.id abtar.id %}"
method="post">{% csrf_token %}
<form role="form" action="{% url 'abonapp:compl_srv' abon_group.id abon.id abtar.id %}" method="post">{% csrf_token %}
<input name="finish_confirm" value="yes" type="hidden">
<p>Досрочное завершение текущей услуги приведёт к тому что пользователю будет запрещён доступ к ресурсам

1
templates/abonapp/debtors.html

@ -8,6 +8,7 @@
<li class="active">Должники</li>
</ol>
{% include 'message_block.html' %}
<h3>Народ, у которого есть неоплаченные услуги</h3>
<div class="table-responsive">

7
templates/abonapp/editAbon.html

@ -2,13 +2,6 @@
{% block content %}
{% if warntext %}
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ warntext }}
</div>
{% endif %}
<div class="row">
<div class="col-sm-4">
<form role="form" action="{% url 'abonapp:abon_home' abon_group.id abon.id %}" method="post"> {% csrf_token %}

7
templates/abonapp/ext.htm

@ -8,12 +8,7 @@
<li class="active">{{ abon.fio }}</li>
</ol>
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<strong>Предупреждение!</strong> {{ warntext }}
</div>
{% endif %}
{% include 'message_block.html' %}
<div class="page-header">
<h2>{{ abon.fio|default:"Имя абонента" }}

3
templates/abonapp/group_list.html

@ -7,9 +7,10 @@
<li class="active">Группы абонентов</li>
</ol>
<h3>Группы абонентов</h3>
{% include 'message_block.html' %}
<div class="table-responsive">
<table class="table table-striped table-bordered">
<thead>

1
templates/abonapp/log.html

@ -7,6 +7,7 @@
<li class="active">История действий абонентов</li>
</ol>
{% include 'message_block.html' %}
<h3>История абонента</h3>
<div class="table-responsive">

1
templates/abonapp/peoples.html

@ -8,6 +8,7 @@
<li class="active">{{ abon_group.title }}</li>
</ol>
{% include 'message_block.html' %}
<h3>Народ в выбранной группе</h3>
<div class="table-responsive">

18
templates/abonapp/services.html

@ -33,23 +33,27 @@
<i class="glyphicon glyphicon-shopping-cart"></i>
</a>
{% endif %}
<a href="{% url 'abonapp:chpriority_tariff' abon_group.id abon.id %}?t={{ trf.id }}&a=up"
class="btn btn-default btn-sm" title="Повысить приоритет">
<!-- "{ % url 'abonapp:chpriority_tariff' abon_group.id abon.id % }?t={ { trf.id } }&a=up" -->
<a href="#"
class="btn btn-default btn-sm disabled" title="Повысить приоритет">
<i class="glyphicon glyphicon-hand-up"></i>
</a>
<a href="{% url 'abonapp:chpriority_tariff' abon_group.id abon.id %}?t={{ trf.id }}&a=down"
class="btn btn-default btn-sm" title="Понизить приоритет">
<!-- "{ % url 'abonapp:chpriority_tariff' abon_group.id abon.id % }?t={ { trf.id } }&a=down" -->
<a href="#"
class="btn btn-default btn-sm disabled" title="Понизить приоритет">
<i class="glyphicon glyphicon-hand-down"></i>
</a>
<a href="{% url 'abonapp:unsubscribe_service' abon_group.id abon.id trf.id %}"
class="btn btn-danger btn-sm" title="Удалить услугу">
<i class="glyphicon glyphicon-remove"></i>
</a>
</td>
{% else %}
<td>
<a href="{% url 'abonapp:compl_srv' abon_group.id abon.id trf.id %}"
title="Завершить услугу досрочно" class="btn btn-danger btn-sm">
<td> <!--{ % url 'abonapp:compl_srv' abon_group.id abon.id trf.id % }-->
<a href="#" title="Завершить услугу досрочно" class="btn btn-danger btn-sm disabled">
<i class="glyphicon glyphicon-remove"></i> Завершить
</a>
</td>

2
templates/accounts/acc_list.html

@ -6,6 +6,8 @@
<li class="active">Администраторы</li>
</ol>
{% include 'message_block.html' %}
<h3>Список аккаунтов администраторов</h3>
<div class="table-responsive">
<table class="table table-striped table-bordered">

5
templates/accounts/create_acc.html

@ -7,6 +7,8 @@
<li class="active">Добавить</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Создайте новый аккаунт</h3>
@ -23,9 +25,6 @@
</div>
</div>
<div class="col-sm-9">
{% if warntext %}
<div class="alert-info">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'acc_app:create_profile' %}" method="post">{% csrf_token %}
<div class="form-group">

1
templates/accounts/ext.htm

@ -7,6 +7,7 @@
<li class="active">{{ userprofile.username }}</li>
</ol>
{% include 'message_block.html' %}
<div class="row">
<div class="col-sm-3">

4
templates/accounts/group.html

@ -9,15 +9,13 @@
<li class="active">{{ group.name }}</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Действующее распределение прав для группы <b>{{ group.name }}</b></h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'acc_app:group_link' group.id %}" method="post">{% csrf_token %}
<div class="choice_wrapper">

3
templates/accounts/group_list.html

@ -8,10 +8,9 @@
<li class="active">Группы</li>
</ol>
<h3>Список групп администраторов</h3>
{% include 'message_block.html' %}
<div class="table-responsive">
<table class="table table-striped table-bordered">

3
templates/accounts/login.html

@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8">
<title>Аутентификация</title>
<meta name="robots" content="noindex">
<link rel="shortcut icon" href="/static/img/favicon_m.ico">
<style>
h3, h4, label {
@ -47,7 +48,7 @@
</style>
</head>
<body>
<form id="frm" action="{% url 'acc_app:login' %}?next={{ next }}" method="POST" accept-charset="utf-8">{% csrf_token %}
<form action="{% url 'acc_app:login' %}{% if next %}?next={{ next }}{% endif %}" method="POST">{% csrf_token %}
{% if errmsg %}
<div class="err">
<h4>{{ errmsg }}</h4>

7
templates/accounts/settings/ch_info.html

@ -1,13 +1,6 @@
{% extends request.is_ajax|yesno:'nullcont.htm,accounts/settings/ext.htm' %}
{% block content %}
{% if warntext %}
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ warntext }}
</div>
{% endif %}
<form role="form" action="{% url 'acc_app:setup_info' %}" method="post">{% csrf_token %}
<div class="form-group">

2
templates/accounts/settings/ext.htm

@ -8,6 +8,8 @@
<li class="active">Настройки</li>
</ol>
{% include 'message_block.html' %}
<div class="row">
<div class="col-sm-3">
<form action="{% url 'acc_app:setup_avatar' %}" method="post" class="thumbnail"

7
templates/accounts/settings/permissions.html

@ -1,13 +1,6 @@
{% extends request.is_ajax|yesno:'nullcont.htm,accounts/settings/ext.htm' %}
{% block content %}
{% if warntext %}
<div class="alert alert-warning alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ warntext }}
</div>
{% endif %}
<form role="form" action="{% url 'acc_app:setup_perms' uid %}" method="post">{% csrf_token %}
{% for perm, pname in form.user_permissions.field.choices %}
<div class="checkbox">

6
templates/clientsideapp/debt_buy.html

@ -3,12 +3,6 @@
<div class="page-header">
<h3>Задолженность</h3>
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button class="close" type="button" aria-hidden="true" data-dismiss="alert">&times;</button>
<strong>Ошибка!</strong> {{ warntext|safe }}
</div>
{% endif %}
</div>
<div class="panel panel-default">

12
templates/clientsideapp/ext.html

@ -37,9 +37,9 @@
<a href="{{ client_side_pays }}">Платежи</a>
</li>
{% url 'client_side:buy' as client_side_buy %}
<li{% if client_side_buy == request.path %} class="active"{% endif %}>
<a href="{{ client_side_buy }}">Подключить услугу</a>
{% url 'client_side:services' as client_side_services %}
<li{% if client_side_services == request.path %} class="active"{% endif %}>
<a href="{{ client_side_services }}">Услуги</a>
</li>
<li>
@ -60,7 +60,7 @@
<li class="divider"></li>
<li class="dropdown-header">Nav header</li>
<li><a href="#">Separated link</a></li>
<li><a href="{% url 'logout_link' %}">Выйти</a></li>
<li><a href="{% url 'acc_app:logout' %}">Выйти</a></li>
</ul>
</li>
</ul>
@ -82,12 +82,14 @@
</div>
{% endif %}
{% include 'message_block.html' %}
{% block client_main %}{% endblock %}
</div>
<div id="footer">
<div class="container">
<p class="text-muted">DN&copy;</p>
<p class="text-muted">&copy;DN</p>
</div>
</div>

8
templates/clientsideapp/buy.html → templates/clientsideapp/service_buy.html

@ -2,13 +2,12 @@
{% block client_main %}
<div class="page-header">
<h3>Заказать услугу</h3>
<h3>Вы уверены что хотите заказать услугу</h3>
{% if current_service %}
<p>Ваша текущая услуга <a href="#dv">{{ current_service.tariff.title }}</a>
за <b>{{ current_service.tariff.amount }}</b> руб.</p>
{% else %}
<p>У вас нет активной услуги, для использования ресурсов приобретите нужную услугу из представленных
ниже.<br>
<p>У вас нет активной услуги, для использования ресурсов приобретите нужную услугу из представленных ниже.<br>
А если уже заказали то просто активируйте услугу из списка заказанных.</p>
{% endif %}
</div>
@ -52,7 +51,7 @@
<p>Входящая скорость: {{ tarif.speedIn }} MBit/s<br>
Исходящая скорость: {{ tarif.speedOut }} MBit/s<br>
Стоимость: {{ tarif.amount }} руб.</p>
<a href="#" class="btn btn-primary">
<a href="{% url 'client_side:buy_service' tarif.id %}" class="btn btn-primary">
<span class="glyphicon glyphicon-shopping-cart"></span> Заказать
</a>
</div>
@ -65,7 +64,6 @@
</div>
</div>
</div>
</div>

74
templates/clientsideapp/services.html

@ -0,0 +1,74 @@
{% extends 'clientsideapp/ext.html' %}
{% block client_main %}
<div class="page-header">
<h3>Управление услугами</h3>
{% if current_service %}
<p>Ваша текущая услуга <a href="#dv">{{ current_service.tariff.title }}</a>
за <b>{{ current_service.tariff.amount }}</b> руб.</p>
{% else %}
<p>У вас нет активной услуги, для использования ресурсов приобретите нужную услугу из представленных
ниже.<br>
А если уже заказали то просто активируйте услугу из списка заказанных.</p>
{% endif %}
</div>
<div class="container">
<div class="row">
<div class="col-lg-4">
<h4>Ваши заказанные услуги</h4>
<ul class="list-group">
{% for abon_tariff in own_abon_tariffs %}
<li class="list-group-item">
<div class="btn-group">
<a href="#sdf" class="btn btn-xs btn-success disabled" title="Активировать">
<span class="glyphicon glyphicon-fire"></span>
</a>
<a href="#del" class="btn btn-xs btn-danger disabled" title="Удалить услугу из списка">
<span class="glyphicon glyphicon-remove"></span>
</a>
</div>
<span class="badge">{{ abon_tariff.tariff.amount }}</span>
<a href="#sdv">
{% if abon_tariff.is_started %}<b>{{ abon_tariff.tariff.title }}</b>
{% else %}{{ abon_tariff.tariff.title }}{% endif %}
</a>
</li>
{% empty %}
<li class="list-group-item">У вас нет заказанных услуг</li>
{% endfor %}
</ul>
</div>
<div class="col-lg-8">
<h4>Выберите ещё услугу</h4>
<div class="container-fluid">
<div class="row">
{% for tarif in tarifs %}
<div class="col-lg-4">
<h3>{{ tarif.title }}</h3>
<p>{{ tarif.descr }}</p>
<p>Входящая скорость: {{ tarif.speedIn }} MBit/s<br>
Исходящая скорость: {{ tarif.speedOut }} MBit/s<br>
Стоимость: {{ tarif.amount }} руб.</p>
<!-- { % url 'client_side:buy_service' tarif.id % } -->
<a href="#" class="btn btn-primary disabled">
<span class="glyphicon glyphicon-shopping-cart"></span> Заказать
</a>
</div>
{% empty %}
<div class="col-lg-4">
<h3 class="panel-title">Нет доступных услуг для заказа</h3>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}

6
templates/devapp/dev.html

@ -1,14 +1,14 @@
{% extends request.is_ajax|yesno:'bajax.html,base.html' %}
{% block main %}
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Инфа о железке</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="
{% if devid == 0 %}
{% url 'devapp:add' %}

1
templates/devapp/devices.html

@ -7,6 +7,7 @@
<li class="active">Устройства</li>
</ol>
{% include 'message_block.html' %}
<h3>Устройства</h3>
<div class="table-responsive">

1
templates/devapp/ext.htm

@ -7,6 +7,7 @@
<li class="active">{{ dev.ip_address }}</li>
</ol>
{% include 'message_block.html' %}
<div class="page-header">
<h2>{{ dev.comment|default:'Без названия' }}</h2>

6
templates/ip_pool/add_pool.html

@ -8,16 +8,14 @@
<li class="active">Добавить</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Добавить IP пул</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'ip_pool:add' %}" method="post">{% csrf_token %}
<div class="form-group">
<label for="start_ip">Начальный ip</label>

4
templates/tariff_app/editTarif.html

@ -14,15 +14,13 @@
</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">{% if tarif_id == 0 %}Создать{% else %}Редактировать{% endif %} тариф</h3>
</div>
<div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action="{% url 'tarifs:edit' tarif_id %}" method="post">{% csrf_token %}
<div class="form-group">

1
templates/tariff_app/tarifs.html

@ -7,6 +7,7 @@
<li class="active">Тарифы</li>
</ol>
{% include 'message_block.html' %}
<h3>Список тарифов</h3>
<div class="table-responsive">

7
templates/taskapp/add_edit_task.html

@ -7,12 +7,7 @@
<li class="active">{% if task_id %}Редактировать{% else %}Создать{% endif %}</li>
</ol>
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
{{ warntext }}
</div>
{% endif %}
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">

7
templates/taskapp/ext.htm

@ -7,12 +7,7 @@
</ol>
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<strong>Предупреждение!</strong> {{ warntext }}
</div>
{% endif %}
{% include 'message_block.html' %}
<div class="page-header">
<h2>Задачи, которые необходимо выполнить</h2>

7
templates/taskapp/tasklist_all.html

@ -7,12 +7,7 @@
<li class="active">Все задачи</li>
</ol>
{% if warntext %}
<div class="alert alert-danger alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<strong>Важно!</strong> {{ warntext }}
</div>
{% endif %}
{% include 'message_block.html' %}
<div class="page-header">
<h2>Лог всех задач в системе</h2>

2
templates/taskapp/view.html

@ -7,6 +7,8 @@
<li class="active">#{{ task.id }}</li>
</ol>
{% include 'message_block.html' %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Описание задачи</h3>

Loading…
Cancel
Save