diff --git a/abonapp/models.py b/abonapp/models.py
index 08b58b5..a258e3a 100644
--- a/abonapp/models.py
+++ b/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()
diff --git a/abonapp/views.py b/abonapp/views.py
index b03ad49..e0e1c54 100644
--- a/abonapp/views.py
+++ b/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' Вернуться' % 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('
uid not equal uid from service
')
-
+ 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('Request not confirmed
')
+ try:
+ if request.method == 'POST':
+ if request.POST.get('finish_confirm') != 'yes':
+ return HttpResponse('Request not confirmed
')
- 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)
diff --git a/accounts_app/models.py b/accounts_app/models.py
index 9d33b67..637d5bd 100644
--- a/accounts_app/models.py
+++ b/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)
diff --git a/accounts_app/urls.py b/accounts_app/urls.py
index 81812c7..ece0703 100644
--- a/accounts_app/urls.py
+++ b/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\d+)$', views.profile_show, name='other_profile'),
- url(r'^(?P\d+)/perms$', views.perms, name='setup_perms'),
+ url(r'^(?P\d+)$', views.profile_show, name='other_profile'),
+ url(r'^(?P\d+)/perms$', views.perms, name='setup_perms'),
url(r'^(?P\d+)/chgroup$', views.chgroup, name='profile_setup_group'),
url(r'^(?P\d+)/del$', views.delete_profile, name='delete_profile'),
@@ -27,6 +27,6 @@ urlpatterns = [
url(r'^(?P\d+)/appoint_task$', views.appoint_task, name='appoint_task'),
url(r'^group/$', views.groups, name='groups_list'),
- url(r'^group/(?P\d+)$', views.group, name='group_link')
+ url(r'^group/(?P\d+)$', views.group, name='group_link')
]
\ No newline at end of file
diff --git a/accounts_app/views.py b/accounts_app/views.py
index 825cf40..99d4bf8 100644
--- a/accounts_app/views.py
+++ b/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
diff --git a/clientsideapp/urls.py b/clientsideapp/urls.py
index 9de984a..dd0b107 100644
--- a/clientsideapp/urls.py
+++ b/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\d+)/buy$', views.buy_service, name='buy_service'),
url(r'^debts$', views.debts_list, name='debts'),
url(r'^debts/(?P\d+)$', views.debt_buy, name='debt_buy')
]
diff --git a/clientsideapp/views.py b/clientsideapp/views.py
index 9d2a7cc..da2f1c4 100644
--- a/clientsideapp/views.py
+++ b/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
diff --git a/devapp/views.py b/devapp/views.py
index 8c27df3..c4bfb86 100644
--- a/devapp/views.py
+++ b/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
})
diff --git a/ip_pool/views.py b/ip_pool/views.py
index c84b774..9e2d947 100644
--- a/ip_pool/views.py
+++ b/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()
diff --git a/tariff_app/views.py b/tariff_app/views.py
index 77fb7e7..95ee66c 100644
--- a/tariff_app/views.py
+++ b/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()
diff --git a/taskapp/views.py b/taskapp/views.py
index dfc793d..6921351 100644
--- a/taskapp/views.py
+++ b/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
diff --git a/templates/abonapp/abonamount.html b/templates/abonapp/abonamount.html
index b9579ec..733375b 100644
--- a/templates/abonapp/abonamount.html
+++ b/templates/abonapp/abonamount.html
@@ -3,12 +3,6 @@
- {% if warntext %}
-
-
- {{ warntext }}
-
- {% endif %}
diff --git a/templates/abonapp/activate_service.html b/templates/abonapp/activate_service.html
index 9ac6902..14c2827 100644
--- a/templates/abonapp/activate_service.html
+++ b/templates/abonapp/activate_service.html
@@ -10,15 +10,13 @@
Активировать услугу
+ {% include 'message_block.html' %}
Активировать услугу
- {% if warntext %}
-
{{ warntext }}
- {% endif %}