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): class LogicError(Exception):
def __init__(self, value, err_id=None): def __init__(self, value, err_id=None):
self.value = value
self.message = value
if err_id: if err_id:
self.err_id = err_id self.err_id = err_id
def __unicode__(self): def __unicode__(self):
return repr(self.value)
return repr(self.message)
def __str__(self): def __str__(self):
return repr(self.value)
return repr(self.message)
class AbonGroup(models.Model): class AbonGroup(models.Model):
@ -123,7 +123,7 @@ class AbonTariff(models.Model):
def activate(self, current_user): def activate(self, current_user):
amnt = self.calc_amount_service() amnt = self.calc_amount_service()
# если не хватает денег # если не хватает денег
if self.abon.ballance > amnt:
if self.abon.ballance < amnt:
raise LogicError(u'Не хватает денег на счету') raise LogicError(u'Не хватает денег на счету')
# дата активации услуги # дата активации услуги
self.time_start = timezone.now() self.time_start = timezone.now()
@ -359,6 +359,9 @@ def abon_del_signal(sender, instance, **kwargs):
def abontariff_post_save(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_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) agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf)
tm = Transmitter() tm = Transmitter()
@ -367,6 +370,9 @@ def abontariff_post_save(sender, instance, **kwargs):
def abontariff_del_signal(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_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) agent_abon = AbonStruct(instance.abon.id, instance.abon.ip_address.int_ip(), agent_trf)
tm = Transmitter() 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.shortcuts import render, redirect, get_object_or_404, resolve_url
from django.contrib.auth.decorators import login_required, permission_required from django.contrib.auth.decorators import login_required, permission_required
from django.utils import timezone from django.utils import timezone
from django.template.context_processors import csrf
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib import messages
from ip_pool.models import IpPoolItem from ip_pool.models import IpPoolItem
from tariff_app.models import Tariff from tariff_app.models import Tariff
@ -42,19 +42,22 @@ def peoples(request, gid):
@login_required @login_required
@permission_required('abonapp.add_abongroup') @permission_required('abonapp.add_abongroup')
def addgroup(request): def addgroup(request):
warntext = ''
frm = forms.AbonGroupForm() 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', { 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 @login_required
@permission_required('abonapp.delete_abongroup') @permission_required('abonapp.delete_abongroup')
def delgroup(request): 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 @login_required
@mydefs.only_admins
# @permission_required('abonapp.add_abon')
# @permission_required('abonapp.change_abon')
@permission_required('abonapp.add_abon')
def addabon(request, gid): def addabon(request, gid):
warning_text = ''
frm = None frm = None
group = None group = None
try: try:
@ -104,18 +110,16 @@ def addabon(request, gid):
prf.save() prf.save()
return redirect('abonapp:people_list', group.id) return redirect('abonapp:people_list', group.id)
else: 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: except models.LogicError as e:
warning_text = e.value
messages.error(request, e.message)
except NasFailedResult as e: except NasFailedResult as e:
warning_text = e.message
messages.error(request, e.message)
except NasNetworkError as e: except NasNetworkError as e:
warning_text = e.message
messages.error(request, e.message)
if not frm: if not frm:
frm = forms.AbonForm(initial={ frm = forms.AbonForm(initial={
@ -124,8 +128,6 @@ def addabon(request, gid):
}) })
return render(request, 'abonapp/addAbon.html', { return render(request, 'abonapp/addAbon.html', {
'warntext': warning_text,
'csrf_token': csrf(request)['csrf_token'],
'form': frm, 'form': frm,
'abon_group': group 'abon_group': group
}) })
@ -137,38 +139,47 @@ def delentity(request):
typ = request.GET.get('t') typ = request.GET.get('t')
uid = request.GET.get('id') 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 @login_required
@permission_required('abonapp.can_add_ballance') @permission_required('abonapp.can_add_ballance')
def abonamount(request, gid, uid): def abonamount(request, gid, uid):
warning_text = ''
abon = get_object_or_404(models.Abon, id=uid) 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', { return render(request, 'abonapp/abonamount.html', {
'abon': abon, '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): def abonhome(request, gid, uid):
abon = get_object_or_404(models.Abon, id=uid) abon = get_object_or_404(models.Abon, id=uid)
abon_group = get_object_or_404(models.AbonGroup, id=gid) abon_group = get_object_or_404(models.AbonGroup, id=gid)
warntext = ''
ballance = abon.ballance ballance = abon.ballance
frm = None frm = None
init_frm_dat = { init_frm_dat = {
@ -248,24 +258,23 @@ def abonhome(request, gid, uid):
# return redirect('abonapp:abon_home', gid, uid) # return redirect('abonapp:abon_home', gid, uid)
else: else:
warntext = u'Не правильные значения, проверте поля и попробуйте ещё'
messages.warning(request, u'Не правильные значения, проверте поля и попробуйте ещё')
else: else:
frm = forms.AbonForm(initial=init_frm_dat) 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) frm = forms.AbonForm(initial=init_frm_dat)
except Http404: except Http404:
warntext = u'Ip адрес не найден в списке IP адресов'
messages.error(request, u'Ip адрес не найден в списке IP адресов')
frm = forms.AbonForm(initial=init_frm_dat) frm = forms.AbonForm(initial=init_frm_dat)
except NasFailedResult as e: except NasFailedResult as e:
warntext = e.message
messages.error(request, e.message)
except NasNetworkError as e: except NasNetworkError as e:
warntext = e.message
messages.error(request, e.message)
return render(request, 'abonapp/editAbon.html', { return render(request, 'abonapp/editAbon.html', {
'warntext': warntext,
'form': frm or forms.AbonForm(initial=init_frm_dat), 'form': frm or forms.AbonForm(initial=init_frm_dat),
'abon': abon, 'abon': abon,
'ballance': ballance, 'ballance': ballance,
@ -293,34 +302,37 @@ def add_invoice(request, gid, uid):
abon = get_object_or_404(models.Abon, id=uid) abon = get_object_or_404(models.Abon, id=uid)
grp = get_object_or_404(models.AbonGroup, id=gid) 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 @login_required
@permission_required('abonapp.can_buy_tariff') @permission_required('abonapp.can_buy_tariff')
def buy_tariff(request, gid, uid): def buy_tariff(request, gid, uid):
warntext = ''
frm = None frm = None
grp = get_object_or_404(models.AbonGroup, id=gid) grp = get_object_or_404(models.AbonGroup, id=gid)
abon = get_object_or_404(models.Abon, id=uid) abon = get_object_or_404(models.Abon, id=uid)
@ -331,21 +343,20 @@ def buy_tariff(request, gid, uid):
cd = frm.cleaned_data cd = frm.cleaned_data
abon.buy_tariff(cd['tariff'], request.user) abon.buy_tariff(cd['tariff'], request.user)
abon.save() abon.save()
return redirect('abonapp:abon_home', gid=gid, uid=abon.id)
return redirect('abonapp:abon_services', gid=gid, uid=abon.id)
else: else:
warntext = u'Что-то не так при покупке услуги, проверьте и попробуйте ещё'
messages.error(request, u'Что-то не так при покупке услуги, проверьте и попробуйте ещё')
else: else:
frm = forms.BuyTariff() frm = forms.BuyTariff()
except models.LogicError as e: except models.LogicError as e:
warntext = e.value
messages.error(request, e.message)
except NasFailedResult as e: 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: 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', { return render(request, 'abonapp/buy_tariff.html', {
'warntext': warntext,
'form': frm or forms.BuyTariff(), 'form': frm or forms.BuyTariff(),
'abon': abon, 'abon': abon,
'abon_group': grp 'abon_group': grp
@ -360,10 +371,15 @@ def chpriority(request, gid, uid):
current_abon_tariff = get_object_or_404(models.AbonTariff, id=t) 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) 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): if abtar.abon.id != int(uid):
return HttpResponse('<h1>uid not equal uid from service</h1>') return HttpResponse('<h1>uid not equal uid from service</h1>')
time_use = None
try: try:
if request.method == 'POST': if request.method == 'POST':
# досрочно завершаем услугу # досрочно завершаем услугу
@ -383,9 +399,10 @@ def complete_service(request, gid, uid, srvid):
if finish_confirm == 'yes': if finish_confirm == 'yes':
# удаляем запись о текущей услуге. # удаляем запись о текущей услуге.
abtar.delete() abtar.delete()
messages.success(request, u'Услуга успешно завершена')
return redirect('abonapp:abon_home', gid, uid) return redirect('abonapp:abon_home', gid, uid)
else: else:
raise models.LogicError('Действие не подтверждено')
raise models.LogicError(u'Действие не подтверждено')
time_use = timezone.now() - abtar.time_start time_use = timezone.now() - abtar.time_start
time_use = { time_use = {
@ -393,24 +410,19 @@ def complete_service(request, gid, uid, srvid):
'hours': time_use.seconds / 3600, 'hours': time_use.seconds / 3600,
'minutes': time_use.seconds / 60 % 60 '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: except models.LogicError as e:
warntext = e.value
messages.error(request, e.message)
except NasFailedResult as e: except NasFailedResult as e:
warntext = e.message
messages.error(request, e.message)
except NasNetworkError as e: 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', { return render(request, 'abonapp/complete_service.html', {
'abtar': abtar, 'abtar': abtar,
'abon': abtar.abon, 'abon': abtar.abon,
'warntext': warntext,
'time_use': time_use,
'abon_group': get_object_or_404(models.AbonGroup, id=gid) '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') @permission_required('abonapp.can_activate_service')
def activate_service(request, gid, uid, srvid): def activate_service(request, gid, uid, srvid):
abtar = get_object_or_404(models.AbonTariff, id=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', { return render(request, 'abonapp/activate_service.html', {
'abon': abtar.abon, 'abon': abtar.abon,
'abon_group': abtar.abon.group, 'abon_group': abtar.abon.group,
@ -440,7 +459,12 @@ def activate_service(request, gid, uid, srvid):
@login_required @login_required
@permission_required('abonapp.delete_abontariff') @permission_required('abonapp.delete_abontariff')
def unsubscribe_service(request, gid, uid, srvid): 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) return redirect('abonapp:abon_home', gid=gid, uid=uid)
@ -474,22 +498,27 @@ def debtors(request):
@mydefs.only_admins @mydefs.only_admins
def update_nas(request, group_id): def update_nas(request, group_id):
users = models.Abon.objects.filter(group=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) return redirect('abonapp:people_list', gid=group_id)

19
accounts_app/models.py

@ -59,10 +59,7 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
REQUIRED_FIELDS = ['telephone'] REQUIRED_FIELDS = ['telephone']
def get_full_name(self): 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): def get_short_name(self):
return self.username or self.telephone return self.username or self.telephone
@ -91,17 +88,3 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
def __unicode__(self): def __unicode__(self):
return self.get_full_name() 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$', views.ch_info, name='setup_info'),
url(r'^settings/change_ava$', views.ch_ava, name='setup_avatar'), 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+)/chgroup$', views.chgroup, name='profile_setup_group'),
url(r'^(?P<uid>\d+)/del$', views.delete_profile, name='delete_profile'), 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'^(?P<uid>\d+)/appoint_task$', views.appoint_task, name='appoint_task'),
url(r'^group/$', views.groups, name='groups_list'), 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 -*- # -*- 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.contrib.auth import authenticate, login, logout
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import NoReverseMatch from django.core.urlresolvers import NoReverseMatch
from django.shortcuts import render, redirect, get_object_or_404, resolve_url 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.http import Http404
from django.contrib.auth.models import Group, Permission from django.contrib.auth.models import Group, Permission
from django.contrib import messages
from abonapp.models import AbonGroup from abonapp.models import AbonGroup
from photo_app.models import Photo from photo_app.models import Photo
@ -54,13 +55,14 @@ def sign_out(request):
@login_required @login_required
@mydefs.only_admins @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': if request.method == 'POST':
usr.username = request.POST.get('username') usr.username = request.POST.get('username')
usr.fio = request.POST.get('fio') 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_active = request.POST.get('stat')
usr.is_admin = request.POST.get('is_admin') usr.is_admin = request.POST.get('is_admin')
usr.save() usr.save()
return redirect('acc_app:other_profile', id=id)
return redirect('acc_app:other_profile', uid=uid)
return render(request, 'accounts/index.html', { return render(request, 'accounts/index.html', {
'uid': id,
'uid': uid,
'userprofile': usr 'userprofile': usr
}) })
@ -119,7 +121,6 @@ def ch_ava(request):
@login_required @login_required
@mydefs.only_admins @mydefs.only_admins
def ch_info(request): def ch_info(request):
warntext = ''
if request.method == 'POST': if request.method == 'POST':
user = request.user user = request.user
user.username = request.POST.get('username') user.username = request.POST.get('username')
@ -133,19 +134,17 @@ def ch_info(request):
newpasswd = request.POST.get('newpasswd') newpasswd = request.POST.get('newpasswd')
user.set_password(newpasswd) user.set_password(newpasswd)
else: else:
warntext = u'Неправильный пароль'
messages.error(request, u'Неправильный пароль')
user.save() user.save()
request.user = user request.user = user
return render(request, 'accounts/settings/ch_info.html', { return render(request, 'accounts/settings/ch_info.html', {
'user': request.user,
'warntext': warntext
'user': request.user
}) })
@login_required @login_required
@mydefs.only_admins
##@permission_required('accounts_app.add_userprofile')
@permission_required('acc_app.add_userprofile')
def create_profile(request): def create_profile(request):
if request.method == 'POST': if request.method == 'POST':
username = request.POST.get('username') username = request.POST.get('username')
@ -160,17 +159,10 @@ def create_profile(request):
passwd = request.POST.get('passwd') passwd = request.POST.get('passwd')
conpasswd = request.POST.get('conpasswd') conpasswd = request.POST.get('conpasswd')
if not passwd: 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: 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: if passwd == conpasswd:
user_qs = UserProfile.objects.filter(username=username)[:1] user_qs = UserProfile.objects.filter(username=username)[:1]
@ -179,24 +171,21 @@ def create_profile(request):
user.save() user.save()
return redirect('acc_app:accounts_list') return redirect('acc_app:accounts_list')
else: else:
return render(request, 'accounts/create_acc.html', {
'warntext': u'Пользователь с таким именем уже есть',
'csrf_token': csrf(request)['csrf_token'],
'newuser': user
})
messages.error(request, u'Пользователь с таким именем уже есть')
else: 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 @login_required
@mydefs.only_admins @mydefs.only_admins
# @permission_required('accounts_app.del_userprofile')
def delete_profile(request, uid): 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 = get_object_or_404(UserProfile, id=uid)
prf.delete() prf.delete()
return redirect('acc_app:accounts_list') return redirect('acc_app:accounts_list')
@ -216,13 +205,12 @@ def acc_list(request):
@login_required @login_required
@mydefs.only_admins @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) own_permissions = UserProfile.get_all_permissions(profile)
return render(request, 'accounts/settings/permissions.html', { return render(request, 'accounts/settings/permissions.html', {
'uid': id,
'uid': uid,
'own_permissions': own_permissions 'own_permissions': own_permissions
}) })
@ -241,10 +229,9 @@ def groups(request):
@login_required @login_required
@mydefs.only_admins @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': if request.method == 'POST':
group_rights = filter(lambda x: x[0] == 'group_rights', request.POST.lists())[0][1] 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) rid = mydefs.safe_int(grr)
grp.permissions.add(rid) grp.permissions.add(rid)
grp.save() 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() grp_rights = grp.permissions.all()
all_rights = Permission.objects.exclude(group=grp) all_rights = Permission.objects.exclude(group=grp)
@ -263,7 +250,6 @@ def group(request, id):
# print u"%s | %s" % (pr.name, pr.codename) # print u"%s | %s" % (pr.name, pr.codename)
return render(request, 'accounts/group.html', { return render(request, 'accounts/group.html', {
'csrf_token': csrf(request)['csrf_token'],
'group': grp, 'group': grp,
'all_rights': all_rights, 'all_rights': all_rights,
'grp_rights': grp_rights 'grp_rights': grp_rights

3
clientsideapp/urls.py

@ -7,7 +7,8 @@ import views
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, name='home'), url(r'^$', views.home, name='home'),
url(r'^pays$', views.pays, name='pays'), 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$', views.debts_list, name='debts'),
url(r'^debts/(?P<d_id>\d+)$', views.debt_buy, name='debt_buy') url(r'^debts/(?P<d_id>\d+)$', views.debt_buy, name='debt_buy')
] ]

24
clientsideapp/views.py

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

18
devapp/views.py

@ -1,6 +1,8 @@
# -*- coding: utf-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.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from models import Device from models import Device
from mydefs import pag_mn, res_success, res_error, only_admins from mydefs import pag_mn, res_success, res_error, only_admins
@ -19,7 +21,7 @@ def devices(request):
@login_required @login_required
@only_admins
@permission_required('devapp.delete_device')
def devdel(request, did): def devdel(request, did):
try: try:
get_object_or_404(Device, id=did).delete() get_object_or_404(Device, id=did).delete()
@ -31,21 +33,25 @@ def devdel(request, did):
@login_required @login_required
@only_admins @only_admins
def dev(request, devid=0): def dev(request, devid=0):
warntext = ''
devinst = get_object_or_404(Device, id=devid) if devid != 0 else None devinst = get_object_or_404(Device, id=devid) if devid != 0 else None
if request.method == 'POST': 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) frm = DeviceForm(request.POST, instance=devinst)
if frm.is_valid(): if frm.is_valid():
frm.save() frm.save()
return redirect('devapp:devs') return redirect('devapp:devs')
else: else:
warntext = u'Ошибка в данных, проверте их ещё раз'
messages.error(request, u'Ошибка в данных, проверте их ещё раз')
else: else:
frm = DeviceForm(instance=devinst) frm = DeviceForm(instance=devinst)
return render(request, 'devapp/dev.html', { return render(request, 'devapp/dev.html', {
'warntext': warntext,
'form': frm, 'form': frm,
'devid': devid 'devid': devid
}) })
@ -54,11 +60,9 @@ def dev(request, devid=0):
@login_required @login_required
@only_admins @only_admins
def devview(request, did): def devview(request, did):
warntext = ''
dev = get_object_or_404(Device, id=did) dev = get_object_or_404(Device, id=did)
return render(request, 'devapp/ports.html', { return render(request, 'devapp/ports.html', {
'warntext': warntext,
'dev': dev '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.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from forms import PoolForm from forms import PoolForm
from models import IpPoolItem from models import IpPoolItem
@ -39,7 +41,7 @@ def ips(request):
@login_required @login_required
@mydefs.only_admins
@permission_required('ip_pool.delete_ippoolitem')
def del_pool(request): def del_pool(request):
ip_start = request.GET.get('ips') ip_start = request.GET.get('ips')
ip_end = request.GET.get('ipe') ip_end = request.GET.get('ipe')
@ -54,7 +56,7 @@ def del_pool(request):
@login_required @login_required
@mydefs.only_admins
@permission_required('ip_pool.add_ippoolitem')
def add_pool(request): def add_pool(request):
if request.method == 'POST': if request.method == 'POST':
frm = PoolForm(request.POST) frm = PoolForm(request.POST)
@ -63,18 +65,16 @@ def add_pool(request):
IpPoolItem.objects.add_pool(cd['start_ip'], cd['end_ip']) IpPoolItem.objects.add_pool(cd['start_ip'], cd['end_ip'])
return redirect('ip_pool:home') return redirect('ip_pool:home')
else: else:
warntext = u'Form is not valid'
messages.error(request, u'Исправьте ошибки')
else: else:
frm = PoolForm() frm = PoolForm()
warntext = ''
return render(request, 'ip_pool/add_pool.html', { return render(request, 'ip_pool/add_pool.html', {
'form': frm,
'warntext': warntext
'form': frm
}) })
@login_required @login_required
@mydefs.only_admins
@permission_required('ip_pool.delete_ippoolitem')
def delip(request): def delip(request):
ipid = request.GET.get('id') ipid = request.GET.get('id')
get_object_or_404(IpPoolItem, id=ipid).delete() get_object_or_404(IpPoolItem, id=ipid).delete()

22
tariff_app/views.py

@ -1,6 +1,8 @@
# -*- coding: utf-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.shortcuts import render, get_object_or_404, redirect
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from models import Tariff from models import Tariff
import mydefs import mydefs
@ -13,7 +15,7 @@ def tarifs(request):
tars = Tariff.objects.all() tars = Tariff.objects.all()
# фильтр # фильтр
dir, field = mydefs.order_helper(request)
direct, field = mydefs.order_helper(request)
if field: if field:
tars = tars.order_by(field) tars = tars.order_by(field)
@ -21,24 +23,29 @@ def tarifs(request):
return render(request, 'tariff_app/tarifs.html', { return render(request, 'tariff_app/tarifs.html', {
'tariflist': tars, 'tariflist': tars,
'dir': dir,
'dir': direct,
'order_by': request.GET.get('order_by') 'order_by': request.GET.get('order_by')
}) })
@login_required @login_required
@mydefs.only_admins
def edit_tarif(request, tarif_id=0): def edit_tarif(request, tarif_id=0):
tarif_id = mydefs.safe_int(tarif_id) 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': if request.method == 'POST':
frm = forms.TariffForm(request.POST) frm = forms.TariffForm(request.POST)
if frm.is_valid(): if frm.is_valid():
frm.save() frm.save()
return redirect('tarifs:home') return redirect('tarifs:home')
else: else:
warntext = u'Не все поля заполнены правильно, проверте и попробуйте ещё раз'
messages.warning(request, u'Не все поля заполнены правильно, проверте и попробуйте ещё раз')
else: else:
if tarif_id == 0: if tarif_id == 0:
tarif = Tariff() tarif = Tariff()
@ -47,14 +54,13 @@ def edit_tarif(request, tarif_id=0):
frm = forms.TariffForm(instance=tarif) frm = forms.TariffForm(instance=tarif)
return render(request, 'tariff_app/editTarif.html', { return render(request, 'tariff_app/editTarif.html', {
'warntext': warntext,
'form': frm, 'form': frm,
'tarif_id': tarif_id 'tarif_id': tarif_id
}) })
@login_required @login_required
@mydefs.only_admins
@permission_required('tariff_app.delete_tariff')
def del_tarif(request, id): def del_tarif(request, id):
tar_id = mydefs.safe_int(id) tar_id = mydefs.safe_int(id)
get_object_or_404(Tariff, id=tar_id).delete() 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.contrib.auth.decorators import login_required, permission_required
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from abonapp.models import Abon from abonapp.models import Abon
from datetime import date from datetime import date
from models import Task from models import Task
@ -102,7 +103,6 @@ def view(request, task_id):
@only_admins @only_admins
def task_add_edit(request, task_id=0): def task_add_edit(request, task_id=0):
task_id = safe_int(task_id) task_id = safe_int(task_id)
warntext = ''
uid = request.GET.get('uid') uid = request.GET.get('uid')
selected_abon = None selected_abon = None
frm = TaskFrm() frm = TaskFrm()
@ -147,14 +147,13 @@ def task_add_edit(request, task_id=0):
task_instance.save() task_instance.save()
return redirect('taskapp:home') return redirect('taskapp:home')
else: else:
warntext=u'Нет ответственных за группу, в которой находится выбранный абонент'
messages.error(request, u'Нет ответственных за группу, в которой находится выбранный абонент')
else: else:
warntext=u'Нужно выбрать абонента'
messages.error(request, u'Нужно выбрать абонента')
else: else:
warntext = u'Ошибка в полях формы в задаче'
messages.error(request, u'Ошибка в полях формы в задаче')
return render(request, 'taskapp/add_edit_task.html', { return render(request, 'taskapp/add_edit_task.html', {
'warntext': warntext,
'form': frm, 'form': frm,
'task_id': tsk.id, 'task_id': tsk.id,
'selected_abon': selected_abon 'selected_abon': selected_abon

6
templates/abonapp/abonamount.html

@ -3,12 +3,6 @@
<legend>Начисление средств на счёт</legend> <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"> <div class="row">

4
templates/abonapp/activate_service.html

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

4
templates/abonapp/addAbon.html

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

4
templates/abonapp/addGroup.html

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

1
templates/abonapp/addInvoice.html

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

8
templates/abonapp/buy_tariff.html

@ -10,7 +10,7 @@
<li class="active">Заказать услугу</li> <li class="active">Заказать услугу</li>
</ol> </ol>
{% include 'message_block.html' %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
@ -19,12 +19,6 @@
</h3> </h3>
</div> </div>
<div class="panel-body"> <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 %}" <form role="form" action="{% url 'abonapp:buy_tariff' abon_group.id abon.id %}"
method="post">{% csrf_token %} method="post">{% csrf_token %}
<div class="form-group"> <div class="form-group">

9
templates/abonapp/complete_service.html

@ -10,18 +10,15 @@
<li class="active">Завершить услугу</li> <li class="active">Завершить услугу</li>
</ol> </ol>
{% include 'message_block.html' %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Завершить услугу</h3> <h3 class="panel-title">Завершить услугу</h3>
</div> </div>
<div class="panel-body"> <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"> <input name="finish_confirm" value="yes" type="hidden">
<p>Досрочное завершение текущей услуги приведёт к тому что пользователю будет запрещён доступ к ресурсам <p>Досрочное завершение текущей услуги приведёт к тому что пользователю будет запрещён доступ к ресурсам

1
templates/abonapp/debtors.html

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

7
templates/abonapp/editAbon.html

@ -2,13 +2,6 @@
{% block content %} {% 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="row">
<div class="col-sm-4"> <div class="col-sm-4">
<form role="form" action="{% url 'abonapp:abon_home' abon_group.id abon.id %}" method="post"> {% csrf_token %} <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> <li class="active">{{ abon.fio }}</li>
</ol> </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"> <div class="page-header">
<h2>{{ abon.fio|default:"Имя абонента" }} <h2>{{ abon.fio|default:"Имя абонента" }}

3
templates/abonapp/group_list.html

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

1
templates/abonapp/log.html

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

1
templates/abonapp/peoples.html

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

18
templates/abonapp/services.html

@ -33,23 +33,27 @@
<i class="glyphicon glyphicon-shopping-cart"></i> <i class="glyphicon glyphicon-shopping-cart"></i>
</a> </a>
{% endif %} {% 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> <i class="glyphicon glyphicon-hand-up"></i>
</a> </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> <i class="glyphicon glyphicon-hand-down"></i>
</a> </a>
<a href="{% url 'abonapp:unsubscribe_service' abon_group.id abon.id trf.id %}" <a href="{% url 'abonapp:unsubscribe_service' abon_group.id abon.id trf.id %}"
class="btn btn-danger btn-sm" title="Удалить услугу"> class="btn btn-danger btn-sm" title="Удалить услугу">
<i class="glyphicon glyphicon-remove"></i> <i class="glyphicon glyphicon-remove"></i>
</a> </a>
</td> </td>
{% else %} {% 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> Завершить <i class="glyphicon glyphicon-remove"></i> Завершить
</a> </a>
</td> </td>

2
templates/accounts/acc_list.html

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

5
templates/accounts/create_acc.html

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

1
templates/accounts/ext.htm

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

4
templates/accounts/group.html

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

3
templates/accounts/group_list.html

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

3
templates/accounts/login.html

@ -3,6 +3,7 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Аутентификация</title> <title>Аутентификация</title>
<meta name="robots" content="noindex">
<link rel="shortcut icon" href="/static/img/favicon_m.ico"> <link rel="shortcut icon" href="/static/img/favicon_m.ico">
<style> <style>
h3, h4, label { h3, h4, label {
@ -47,7 +48,7 @@
</style> </style>
</head> </head>
<body> <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 %} {% if errmsg %}
<div class="err"> <div class="err">
<h4>{{ errmsg }}</h4> <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' %} {% extends request.is_ajax|yesno:'nullcont.htm,accounts/settings/ext.htm' %}
{% block content %} {% 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 %} <form role="form" action="{% url 'acc_app:setup_info' %}" method="post">{% csrf_token %}
<div class="form-group"> <div class="form-group">

2
templates/accounts/settings/ext.htm

@ -8,6 +8,8 @@
<li class="active">Настройки</li> <li class="active">Настройки</li>
</ol> </ol>
{% include 'message_block.html' %}
<div class="row"> <div class="row">
<div class="col-sm-3"> <div class="col-sm-3">
<form action="{% url 'acc_app:setup_avatar' %}" method="post" class="thumbnail" <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' %} {% extends request.is_ajax|yesno:'nullcont.htm,accounts/settings/ext.htm' %}
{% block content %} {% 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 %} <form role="form" action="{% url 'acc_app:setup_perms' uid %}" method="post">{% csrf_token %}
{% for perm, pname in form.user_permissions.field.choices %} {% for perm, pname in form.user_permissions.field.choices %}
<div class="checkbox"> <div class="checkbox">

6
templates/clientsideapp/debt_buy.html

@ -3,12 +3,6 @@
<div class="page-header"> <div class="page-header">
<h3>Задолженность</h3> <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>
<div class="panel panel-default"> <div class="panel panel-default">

12
templates/clientsideapp/ext.html

@ -37,9 +37,9 @@
<a href="{{ client_side_pays }}">Платежи</a> <a href="{{ client_side_pays }}">Платежи</a>
</li> </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>
<li> <li>
@ -60,7 +60,7 @@
<li class="divider"></li> <li class="divider"></li>
<li class="dropdown-header">Nav header</li> <li class="dropdown-header">Nav header</li>
<li><a href="#">Separated link</a></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> </ul>
</li> </li>
</ul> </ul>
@ -82,12 +82,14 @@
</div> </div>
{% endif %} {% endif %}
{% include 'message_block.html' %}
{% block client_main %}{% endblock %} {% block client_main %}{% endblock %}
</div> </div>
<div id="footer"> <div id="footer">
<div class="container"> <div class="container">
<p class="text-muted">DN&copy;</p>
<p class="text-muted">&copy;DN</p>
</div> </div>
</div> </div>

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

@ -2,13 +2,12 @@
{% block client_main %} {% block client_main %}
<div class="page-header"> <div class="page-header">
<h3>Заказать услугу</h3>
<h3>Вы уверены что хотите заказать услугу</h3>
{% if current_service %} {% if current_service %}
<p>Ваша текущая услуга <a href="#dv">{{ current_service.tariff.title }}</a> <p>Ваша текущая услуга <a href="#dv">{{ current_service.tariff.title }}</a>
за <b>{{ current_service.tariff.amount }}</b> руб.</p> за <b>{{ current_service.tariff.amount }}</b> руб.</p>
{% else %} {% else %}
<p>У вас нет активной услуги, для использования ресурсов приобретите нужную услугу из представленных
ниже.<br>
<p>У вас нет активной услуги, для использования ресурсов приобретите нужную услугу из представленных ниже.<br>
А если уже заказали то просто активируйте услугу из списка заказанных.</p> А если уже заказали то просто активируйте услугу из списка заказанных.</p>
{% endif %} {% endif %}
</div> </div>
@ -52,7 +51,7 @@
<p>Входящая скорость: {{ tarif.speedIn }} MBit/s<br> <p>Входящая скорость: {{ tarif.speedIn }} MBit/s<br>
Исходящая скорость: {{ tarif.speedOut }} MBit/s<br> Исходящая скорость: {{ tarif.speedOut }} MBit/s<br>
Стоимость: {{ tarif.amount }} руб.</p> Стоимость: {{ 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> Заказать <span class="glyphicon glyphicon-shopping-cart"></span> Заказать
</a> </a>
</div> </div>
@ -65,7 +64,6 @@
</div> </div>
</div> </div>
</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' %} {% extends request.is_ajax|yesno:'bajax.html,base.html' %}
{% block main %} {% block main %}
{% include 'message_block.html' %}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title">Инфа о железке</h3> <h3 class="panel-title">Инфа о железке</h3>
</div> </div>
<div class="panel-body"> <div class="panel-body">
{% if warntext %}
<div class="alert-danger">{{ warntext }}</div>
{% endif %}
<form role="form" action=" <form role="form" action="
{% if devid == 0 %} {% if devid == 0 %}
{% url 'devapp:add' %} {% url 'devapp:add' %}

1
templates/devapp/devices.html

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

1
templates/devapp/ext.htm

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

6
templates/ip_pool/add_pool.html

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

4
templates/tariff_app/editTarif.html

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

1
templates/tariff_app/tarifs.html

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

7
templates/taskapp/add_edit_task.html

@ -7,12 +7,7 @@
<li class="active">{% if task_id %}Редактировать{% else %}Создать{% endif %}</li> <li class="active">{% if task_id %}Редактировать{% else %}Создать{% endif %}</li>
</ol> </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 panel-default">
<div class="panel-heading"> <div class="panel-heading">

7
templates/taskapp/ext.htm

@ -7,12 +7,7 @@
</ol> </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"> <div class="page-header">
<h2>Задачи, которые необходимо выполнить</h2> <h2>Задачи, которые необходимо выполнить</h2>

7
templates/taskapp/tasklist_all.html

@ -7,12 +7,7 @@
<li class="active">Все задачи</li> <li class="active">Все задачи</li>
</ol> </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"> <div class="page-header">
<h2>Лог всех задач в системе</h2> <h2>Лог всех задач в системе</h2>

2
templates/taskapp/view.html

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

Loading…
Cancel
Save