@ -3,7 +3,7 @@ from json import dumps
from django.contrib.gis.shortcuts import render_to_text
from django.contrib.gis.shortcuts import render_to_text
from django.core.exceptions import PermissionDenied
from django.core.exceptions import PermissionDenied
from django.db import IntegrityError , ProgrammingError , transaction
from django.db import IntegrityError , ProgrammingError , transaction
from django.db.models import Count , Q , signals
from django.db.models import Count , Q
from django.shortcuts import render , redirect , get_object_or_404 , resolve_url
from django.shortcuts import render , redirect , get_object_or_404 , resolve_url
from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse , Http404
from django.http import HttpResponse , Http404
@ -24,6 +24,7 @@ from datetime import datetime, date, timedelta
from taskapp.models import Task
from taskapp.models import Task
from dialing_app.models import AsteriskCDR
from dialing_app.models import AsteriskCDR
from statistics.models import getModel
from statistics.models import getModel
from group_app.models import Group
from guardian.shortcuts import get_objects_for_user , assign_perm
from guardian.shortcuts import get_objects_for_user , assign_perm
from guardian.decorators import permission_required_or_403 as permission_required
from guardian.decorators import permission_required_or_403 as permission_required
from djing.global_base_views import OrderingMixin , BaseListWithFiltering
from djing.global_base_views import OrderingMixin , BaseListWithFiltering
@ -69,85 +70,39 @@ class PeoplesListView(BaseAbonListView):
def get_context_data ( self , * * kwargs ) :
def get_context_data ( self , * * kwargs ) :
gid = mydefs . safe_int ( self . kwargs . get ( ' gid ' ) )
gid = mydefs . safe_int ( self . kwargs . get ( ' gid ' ) )
if gid == 0 :
if gid == 0 :
return Http404 ( ' group id is broken ' )
abon_ group = get_object_or_404 ( models . Abon Group, pk = gid )
if not self . request . user . has_perm ( ' abonapp.can_view_abon group' , abon_ group) :
return HttpResponseBadRequest ( ' group id is broken ' )
group = get_object_or_404 ( Group , pk = gid )
if not self . request . user . has_perm ( ' group_app.can_view_ group' , group ) :
raise PermissionDenied
raise PermissionDenied
context = super ( PeoplesListView , self ) . get_context_data ( * * kwargs )
context = super ( PeoplesListView , self ) . get_context_data ( * * kwargs )
context [ ' streets ' ] = models . AbonStreet . objects . filter ( group = gid )
context [ ' streets ' ] = models . AbonStreet . objects . filter ( group = gid )
context [ ' street_id ' ] = mydefs . safe_int ( self . request . GET . get ( ' street ' ) )
context [ ' street_id ' ] = mydefs . safe_int ( self . request . GET . get ( ' street ' ) )
context [ ' abon_ group' ] = abon_ group
context [ ' group ' ] = group
return context
return context
@login_required
@permission_required ( ' abonapp.add_abongroup ' )
def addgroup ( request ) :
frm = forms . AbonGroupForm ( )
try :
if request . method == ' POST ' :
frm = forms . AbonGroupForm ( request . POST )
if frm . is_valid ( ) :
grp = frm . save ( )
assign_perm ( ' abonapp.can_view_abongroup ' , request . user , grp )
assign_perm ( ' abonapp.delete_abongroup ' , request . user , grp )
assign_perm ( ' abonapp.change_abongroup ' , request . user , grp )
messages . success ( request , _ ( ' create group success msg ' ) )
return redirect ( ' abonapp:group_list ' )
else :
messages . error ( request , _ ( ' fix form errors ' ) )
except ( NasFailedResult , NasNetworkError ) as e :
messages . error ( request , e )
except mydefs . MultipleException as errs :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
return render ( request , ' abonapp/addGroup.html ' , {
' form ' : frm
} )
class GroupListView ( BaseAbonListView ) :
class GroupListView ( BaseAbonListView ) :
context_object_name = ' groups '
context_object_name = ' groups '
template_name = ' abonapp/group_list.html '
template_name = ' abonapp/group_list.html '
queryset = models . Abon Group. objects . annotate ( usercount = Count ( ' abon ' ) ) . order_by ( ' title ' )
queryset = Group . objects . annotate ( usercount = Count ( ' abon ' ) )
def get_queryset ( self ) :
def get_queryset ( self ) :
queryset = super ( GroupListView , self ) . get_queryset ( )
queryset = super ( GroupListView , self ) . get_queryset ( )
queryset = get_objects_for_user ( self . request . user , ' abonapp.can_view_abon group' , klass = queryset ,
queryset = get_objects_for_user ( self . request . user , ' group_app.can_view_group ' , klass = queryset ,
accept_global_perms = False )
accept_global_perms = False )
return queryset
return queryset
@login_required
def delgroup ( request ) :
try :
agd = mydefs . safe_int ( request . GET . get ( ' id ' ) )
abon_group = models . AbonGroup . objects . get ( pk = agd )
if not request . user . has_perm ( ' abonapp.delete_abongroup ' , abon_group ) :
raise PermissionDenied
abon_group . delete ( )
messages . success ( request , _ ( ' delete group success msg ' ) )
return mydefs . res_success ( request , ' abonapp:group_list ' )
except ( NasFailedResult , NasNetworkError ) as e :
messages . error ( request , e )
except mydefs . MultipleException as errs :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
except models . AbonGroup . DoesNotExist :
return mydefs . res_error ( request , ' Group with id= %d does not exist ' % agd )
return mydefs . res_error ( request , ' abonapp:group_list ' )
@login_required
@login_required
@permission_required ( ' abonapp.add_abon ' )
@permission_required ( ' abonapp.add_abon ' )
def addabon ( request , gid ) :
def addabon ( request , gid ) :
frm = None
frm = None
group = None
group = None
try :
try :
group = get_object_or_404 ( models . Abon Group, pk = gid )
if not request . user . has_perm ( ' abonapp.can_view_abon group' , group ) :
group = get_object_or_404 ( Group , pk = gid )
if not request . user . has_perm ( ' group_app.can_view_group ' , group ) :
raise PermissionDenied
raise PermissionDenied
if request . method == ' POST ' :
if request . method == ' POST ' :
frm = forms . AbonForm ( request . POST , initial = { ' group ' : group } )
frm = forms . AbonForm ( request . POST , initial = { ' group ' : group } )
@ -158,6 +113,7 @@ def addabon(request, gid):
assign_perm ( " abonapp.can_buy_tariff " , request . user , abon )
assign_perm ( " abonapp.can_buy_tariff " , request . user , abon )
assign_perm ( " abonapp.can_view_passport " , request . user , abon )
assign_perm ( " abonapp.can_view_passport " , request . user , abon )
assign_perm ( ' abonapp.can_add_ballance ' , request . user , abon )
assign_perm ( ' abonapp.can_add_ballance ' , request . user , abon )
abon . sync_with_nas ( created = True )
messages . success ( request , _ ( ' create abon success msg ' ) )
messages . success ( request , _ ( ' create abon success msg ' ) )
return redirect ( ' abonapp:abon_home ' , group . id , abon . pk )
return redirect ( ' abonapp:abon_home ' , group . id , abon . pk )
else :
else :
@ -167,7 +123,7 @@ def addabon(request, gid):
messages . error ( request , e )
messages . error ( request , e )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
if not frm :
if not frm :
frm = forms . AbonForm ( initial = {
frm = forms . AbonForm ( initial = {
@ -178,7 +134,7 @@ def addabon(request, gid):
return render ( request , ' abonapp/addAbon.html ' , {
return render ( request , ' abonapp/addAbon.html ' , {
' form ' : frm ,
' form ' : frm ,
' abon_ group' : group
' group ' : group
} )
} )
@ -189,10 +145,11 @@ def del_abon(request):
try :
try :
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
if not request . user . has_perm ( ' abonapp.delete_abon ' ) or not request . user . has_perm (
if not request . user . has_perm ( ' abonapp.delete_abon ' ) or not request . user . has_perm (
' abonapp.can_view_abon group' , abon . group ) :
' group_app.can_view_ group' , abon . group ) :
raise PermissionDenied
raise PermissionDenied
gid = abon . group . id
gid = abon . group . id
abon . delete ( )
abon . delete ( )
abon . sync_with_nas ( created = False )
messages . success ( request , _ ( ' delete abon success msg ' ) )
messages . success ( request , _ ( ' delete abon success msg ' ) )
return mydefs . res_success ( request , resolve_url ( ' abonapp:people_list ' , gid = gid ) )
return mydefs . res_success ( request , resolve_url ( ' abonapp:people_list ' , gid = gid ) )
@ -202,7 +159,7 @@ def del_abon(request):
messages . error ( request , _ ( " NAS says: ' %s ' " ) % e )
messages . error ( request , _ ( " NAS says: ' %s ' " ) % e )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
return redirect ( ' abonapp:group_list ' )
return redirect ( ' abonapp:group_list ' )
@ -226,14 +183,14 @@ def abonamount(request, gid, uid):
messages . error ( request , e )
messages . error ( request , e )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
return render_to_text ( ' abonapp/modal_abonamount.html ' , {
return render_to_text ( ' abonapp/modal_abonamount.html ' , {
' abon ' : abon ,
' abon ' : abon ,
' abon_ group' : get_object_or_404 ( models . AbonGroup , pk = g id )
' group_id ' : gid
} , request = request )
} , request = request )
@method_decorator ( permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) ) , name = ' dispatch ' )
@method_decorator ( permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) ) , name = ' dispatch ' )
class DebtsListView ( BaseAbonListView ) :
class DebtsListView ( BaseAbonListView ) :
context_object_name = ' invoices '
context_object_name = ' invoices '
template_name = ' abonapp/invoiceForPayment.html '
template_name = ' abonapp/invoiceForPayment.html '
@ -245,12 +202,12 @@ class DebtsListView(BaseAbonListView):
def get_context_data ( self , * * kwargs ) :
def get_context_data ( self , * * kwargs ) :
context = super ( DebtsListView , self ) . get_context_data ( * * kwargs )
context = super ( DebtsListView , self ) . get_context_data ( * * kwargs )
context [ ' abon_ group' ] = self . abon . group
context [ ' group ' ] = self . abon . group
context [ ' abon ' ] = self . abon
context [ ' abon ' ] = self . abon
return context
return context
@method_decorator ( permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) ) , name = ' dispatch ' )
@method_decorator ( permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) ) , name = ' dispatch ' )
class PayHistoryListView ( BaseAbonListView ) :
class PayHistoryListView ( BaseAbonListView ) :
context_object_name = ' pay_history '
context_object_name = ' pay_history '
template_name = ' abonapp/payHistory.html '
template_name = ' abonapp/payHistory.html '
@ -263,7 +220,7 @@ class PayHistoryListView(BaseAbonListView):
def get_context_data ( self , * * kwargs ) :
def get_context_data ( self , * * kwargs ) :
context = super ( PayHistoryListView , self ) . get_context_data ( * * kwargs )
context = super ( PayHistoryListView , self ) . get_context_data ( * * kwargs )
context [ ' abon_ group' ] = self . abon . group
context [ ' group ' ] = self . abon . group
context [ ' abon ' ] = self . abon
context [ ' abon ' ] = self . abon
return context
return context
@ -271,8 +228,8 @@ class PayHistoryListView(BaseAbonListView):
@login_required
@login_required
@mydefs.only_admins
@mydefs.only_admins
def abon_services ( request , gid , uid ) :
def abon_services ( request , gid , uid ) :
grp = get_object_or_404 ( models . Abon Group, pk = gid )
if not request . user . has_perm ( ' abonapp.can_view_abon group' , grp ) :
grp = get_object_or_404 ( Group , pk = gid )
if not request . user . has_perm ( ' group_app.can_view_ group' , grp ) :
raise PermissionDenied
raise PermissionDenied
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
@ -288,8 +245,8 @@ def abon_services(request, gid, uid):
return render ( request , ' abonapp/service.html ' , {
return render ( request , ' abonapp/service.html ' , {
' abon ' : abon ,
' abon ' : abon ,
' abon_tariff ' : abon . current_tariff ,
' abon_tariff ' : abon . current_tariff ,
' abon_ group' : abon . group ,
' services ' : grp . tariffs . all ( ) ,
' group ' : abon . group ,
' services ' : Tariff . objects . get_tariffs_by_group ( abon . group . pk ) ,
' periodic_pay ' : periodic_pay
' periodic_pay ' : periodic_pay
} )
} )
@ -298,8 +255,8 @@ def abon_services(request, gid, uid):
@mydefs.only_admins
@mydefs.only_admins
def abonhome ( request , gid , uid ) :
def abonhome ( request , gid , uid ) :
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
abon_ group = get_object_or_404 ( models . Abon Group, pk = gid )
if not request . user . has_perm ( ' abonapp.can_view_abon group' , abon_ group) :
group = get_object_or_404 ( Group , pk = gid )
if not request . user . has_perm ( ' group_app.can_view_ group' , group ) :
raise PermissionDenied
raise PermissionDenied
frm = None
frm = None
passw = None
passw = None
@ -312,7 +269,8 @@ def abonhome(request, gid, uid):
newip = request . POST . get ( ' ip ' )
newip = request . POST . get ( ' ip ' )
if newip :
if newip :
abon . ip_address = newip
abon . ip_address = newip
frm . save ( )
abon = frm . save ( )
abon . sync_with_nas ( created = False )
messages . success ( request , _ ( ' edit abon success msg ' ) )
messages . success ( request , _ ( ' edit abon success msg ' ) )
else :
else :
messages . warning ( request , _ ( ' fix form errors ' ) )
messages . warning ( request , _ ( ' fix form errors ' ) )
@ -332,13 +290,13 @@ def abonhome(request, gid, uid):
messages . warning ( request , _ ( ' User has not have password, and cannot login ' ) )
messages . warning ( request , _ ( ' User has not have password, and cannot login ' ) )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
if request . user . has_perm ( ' abonapp.change_abon ' ) :
if request . user . has_perm ( ' abonapp.change_abon ' ) :
return render ( request , ' abonapp/editAbon.html ' , {
return render ( request , ' abonapp/editAbon.html ' , {
' form ' : frm or forms . AbonForm ( instance = abon , initial = { ' password ' : passw } ) ,
' form ' : frm or forms . AbonForm ( instance = abon , initial = { ' password ' : passw } ) ,
' abon ' : abon ,
' abon ' : abon ,
' abon_ group' : abon_ group,
' group ' : group ,
' ip ' : abon . ip_address ,
' ip ' : abon . ip_address ,
' is_bad_ip ' : getattr ( abon , ' is_bad_ip ' , False ) ,
' is_bad_ip ' : getattr ( abon , ' is_bad_ip ' , False ) ,
' device ' : abon . device ,
' device ' : abon . device ,
@ -347,7 +305,7 @@ def abonhome(request, gid, uid):
else :
else :
return render ( request , ' abonapp/viewAbon.html ' , {
return render ( request , ' abonapp/viewAbon.html ' , {
' abon ' : abon ,
' abon ' : abon ,
' abon_ group' : abon_ group,
' group ' : group ,
' ip ' : abon . ip_address ,
' ip ' : abon . ip_address ,
' passw ' : passw
' passw ' : passw
} )
} )
@ -365,7 +323,7 @@ def terminal_pay(request):
def add_invoice ( request , gid , uid ) :
def add_invoice ( request , gid , uid ) :
uid = mydefs . safe_int ( uid )
uid = mydefs . safe_int ( uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
grp = get_object_or_404 ( models . Abon Group, pk = gid )
grp = get_object_or_404 ( Group , pk = gid )
try :
try :
if request . method == ' POST ' :
if request . method == ' POST ' :
@ -389,21 +347,22 @@ def add_invoice(request, gid, uid):
messages . error ( request , e )
messages . error ( request , e )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
return render ( request , ' abonapp/addInvoice.html ' , {
return render ( request , ' abonapp/addInvoice.html ' , {
' abon ' : abon ,
' abon ' : abon ,
' invcount ' : models . InvoiceForPayment . objects . filter ( abon = abon ) . count ( ) ,
' invcount ' : models . InvoiceForPayment . objects . filter ( abon = abon ) . count ( ) ,
' abon_ group' : grp
' group ' : grp
} )
} )
@login_required
@login_required
@mydefs.only_admins
@permission_required ( ' abonapp.can_buy_tariff ' )
@permission_required ( ' abonapp.can_buy_tariff ' )
@transaction.atomic
@transaction.atomic
def pick_tariff ( request , gid , uid ) :
def pick_tariff ( request , gid , uid ) :
grp = get_object_or_404 ( models . Abon Group, pk = gid )
grp = get_object_or_404 ( Group , pk = gid )
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
tariffs = grp . tariffs . all ( )
tariffs = Tariff . objects . get_tariffs_by_group ( grp . pk )
try :
try :
if request . method == ' POST ' :
if request . method == ' POST ' :
trf = Tariff . objects . get ( pk = request . POST . get ( ' tariff ' ) )
trf = Tariff . objects . get ( pk = request . POST . get ( ' tariff ' ) )
@ -417,6 +376,7 @@ def pick_tariff(request, gid, uid):
deadline = datetime . strptime ( deadline , ' % Y- % m- %d ' )
deadline = datetime . strptime ( deadline , ' % Y- % m- %d ' )
deadline + = timedelta ( hours = 23 , minutes = 59 , seconds = 59 )
deadline + = timedelta ( hours = 23 , minutes = 59 , seconds = 59 )
abon . pick_tariff ( trf , request . user , deadline = deadline , comment = log_comment )
abon . pick_tariff ( trf , request . user , deadline = deadline , comment = log_comment )
abon . sync_with_nas ( created = False )
messages . success ( request , _ ( ' Tariff has been picked ' ) )
messages . success ( request , _ ( ' Tariff has been picked ' ) )
return redirect ( ' abonapp:abon_services ' , gid = gid , uid = abon . id )
return redirect ( ' abonapp:abon_services ' , gid = gid , uid = abon . id )
except ( mydefs . LogicError , NasFailedResult ) as e :
except ( mydefs . LogicError , NasFailedResult ) as e :
@ -428,14 +388,14 @@ def pick_tariff(request, gid, uid):
messages . error ( request , _ ( ' Tariff your picked does not exist ' ) )
messages . error ( request , _ ( ' Tariff your picked does not exist ' ) )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
except ValueError as e :
except ValueError as e :
messages . error ( request , " %s : %s " % ( _ ( ' fix form errors ' ) , e ) )
messages . error ( request , " %s : %s " % ( _ ( ' fix form errors ' ) , e ) )
return render ( request , ' abonapp/buy_tariff.html ' , {
return render ( request , ' abonapp/buy_tariff.html ' , {
' tariffs ' : tariffs ,
' tariffs ' : tariffs ,
' abon ' : abon ,
' abon ' : abon ,
' abon_ group' : grp ,
' group ' : grp ,
' selected_tariff ' : mydefs . safe_int ( request . GET . get ( ' selected_tariff ' ) )
' selected_tariff ' : mydefs . safe_int ( request . GET . get ( ' selected_tariff ' ) )
} )
} )
@ -444,7 +404,9 @@ def pick_tariff(request, gid, uid):
@permission_required ( ' abonapp.delete_abontariff ' )
@permission_required ( ' abonapp.delete_abontariff ' )
def unsubscribe_service ( request , gid , uid , abon_tariff_id ) :
def unsubscribe_service ( request , gid , uid , abon_tariff_id ) :
try :
try :
abon = get_object_or_404 ( models . Abon , pk = uid )
abon_tariff = get_object_or_404 ( models . AbonTariff , pk = int ( abon_tariff_id ) )
abon_tariff = get_object_or_404 ( models . AbonTariff , pk = int ( abon_tariff_id ) )
abon . sync_with_nas ( created = False )
abon_tariff . delete ( )
abon_tariff . delete ( )
messages . success ( request , _ ( ' User has been detached from service ' ) )
messages . success ( request , _ ( ' User has been detached from service ' ) )
except NasFailedResult as e :
except NasFailedResult as e :
@ -453,7 +415,7 @@ def unsubscribe_service(request, gid, uid, abon_tariff_id):
messages . warning ( request , e )
messages . warning ( request , e )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
return redirect ( ' abonapp:abon_services ' , gid = gid , uid = uid )
return redirect ( ' abonapp:abon_services ' , gid = gid , uid = uid )
@ -478,7 +440,7 @@ class DebtorsListView(ListView):
@method_decorator ( login_required , name = ' dispatch ' )
@method_decorator ( login_required , name = ' dispatch ' )
@method_decorator ( permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) ) , name = ' dispatch ' )
@method_decorator ( permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) ) , name = ' dispatch ' )
class TaskLogListView ( ListView ) :
class TaskLogListView ( ListView ) :
paginate_by = PAGINATION_ITEMS_PER_PAGE
paginate_by = PAGINATION_ITEMS_PER_PAGE
http_method_names = [ ' get ' ]
http_method_names = [ ' get ' ]
@ -492,7 +454,7 @@ class TaskLogListView(ListView):
def get_context_data ( self , * * kwargs ) :
def get_context_data ( self , * * kwargs ) :
context = super ( TaskLogListView , self ) . get_context_data ( * * kwargs )
context = super ( TaskLogListView , self ) . get_context_data ( * * kwargs )
context [ ' abon_ group' ] = self . abon . group
context [ ' group ' ] = self . abon . group
context [ ' abon ' ] = self . abon
context [ ' abon ' ] = self . abon
return context
return context
@ -500,8 +462,8 @@ class TaskLogListView(ListView):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_passport ' )
@permission_required ( ' abonapp.can_view_passport ' )
def passport_view ( request , gid , uid ) :
def passport_view ( request , gid , uid ) :
abon = get_object_or_404 ( models . Abon , pk = uid )
try :
try :
abon = models . Abon . objects . get ( pk = uid )
if request . method == ' POST ' :
if request . method == ' POST ' :
try :
try :
passport_instance = models . PassportInfo . objects . get ( abon = abon )
passport_instance = models . PassportInfo . objects . get ( abon = abon )
@ -526,7 +488,7 @@ def passport_view(request, gid, uid):
messages . warning ( request , _ ( ' Passport info for the user does not exist ' ) )
messages . warning ( request , _ ( ' Passport info for the user does not exist ' ) )
frm = forms . PassportForm ( )
frm = forms . PassportForm ( )
return render ( request , ' abonapp/passport_view.html ' , {
return render ( request , ' abonapp/passport_view.html ' , {
' abon_ group' : get_object_or_404 ( models . Abon Group, pk = gid ) ,
' group ' : get_object_or_404 ( Group , pk = gid ) ,
' abon ' : abon ,
' abon ' : abon ,
' frm ' : frm
' frm ' : frm
} )
} )
@ -535,17 +497,21 @@ def passport_view(request, gid, uid):
@login_required
@login_required
@mydefs.only_admins
@mydefs.only_admins
def chgroup_tariff ( request , gid ) :
def chgroup_tariff ( request , gid ) :
grp = get_object_or_404 ( models . Abon Group, pk = gid )
if not request . user . has_perm ( ' abonapp.change_abon group' , grp ) :
grp = get_object_or_404 ( Group , pk = gid )
if not request . user . has_perm ( ' group_app.change_ group' , grp ) :
raise PermissionDenied
raise PermissionDenied
if request . method == ' POST ' :
if request . method == ' POST ' :
tr = request . POST . getlist ( ' tr ' )
tr = request . POST . getlist ( ' tr ' )
grp . tariffs . clear ( )
grp . tariffs . add ( * [ int ( d ) for d in tr ] )
grp . tariff_ set . clear ( )
grp . tariff_ set . add ( * [ int ( d ) for d in tr ] )
grp . save ( )
grp . save ( )
messages . success ( request , _ ( ' Successfully saved ' ) )
return redirect ( ' abonapp:ch_group_tariff ' , gid )
tariffs = Tariff . objects . all ( )
tariffs = Tariff . objects . all ( )
seleted_tariffs_id = [ pk [ 0 ] for pk in grp . tariff_set . only ( ' pk ' ) . values_list ( ' pk ' ) ]
return render ( request , ' abonapp/group_tariffs.html ' , {
return render ( request , ' abonapp/group_tariffs.html ' , {
' abon_group ' : grp ,
' group ' : grp ,
' seleted_tariffs ' : seleted_tariffs_id ,
' tariffs ' : tariffs
' tariffs ' : tariffs
} )
} )
@ -570,7 +536,7 @@ def dev(request, gid, uid):
messages . error ( request , _ ( ' Abon does not exist ' ) )
messages . error ( request , _ ( ' Abon does not exist ' ) )
return redirect ( ' abonapp:people_list ' , gid = gid )
return redirect ( ' abonapp:people_list ' , gid = gid )
return render ( request , ' abonapp/modal_dev.html ' , {
return render ( request , ' abonapp/modal_dev.html ' , {
' devices ' : Device . objects . filter ( user_ group= gid ) ,
' devices ' : Device . objects . filter ( group = gid ) ,
' dev ' : abon_dev ,
' dev ' : abon_dev ,
' gid ' : gid , ' uid ' : uid
' gid ' : gid , ' uid ' : uid
} )
} )
@ -578,7 +544,7 @@ def dev(request, gid, uid):
@login_required
@login_required
@permission_required ( ' abonapp.change_abon ' )
@permission_required ( ' abonapp.change_abon ' )
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def clear_dev ( request , gid , uid ) :
def clear_dev ( request , gid , uid ) :
try :
try :
abon = models . Abon . objects . get ( pk = uid )
abon = models . Abon . objects . get ( pk = uid )
@ -593,7 +559,7 @@ def clear_dev(request, gid, uid):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def charts ( request , gid , uid ) :
def charts ( request , gid , uid ) :
high = 100
high = 100
@ -607,9 +573,8 @@ def charts(request, gid, uid):
StatElem = getModel ( wandate )
StatElem = getModel ( wandate )
abon = models . Abon . objects . get ( pk = uid )
abon = models . Abon . objects . get ( pk = uid )
if abon . group is None :
if abon . group is None :
abon . group = models . Abon Group. objects . get ( pk = gid )
abon . group = Group . objects . get ( pk = gid )
abon . save ( update_fields = [ ' group ' ] )
abon . save ( update_fields = [ ' group ' ] )
abongroup = abon . group
if abon . ip_address is None :
if abon . ip_address is None :
charts_data = None
charts_data = None
@ -630,7 +595,7 @@ def charts(request, gid, uid):
except models . Abon . DoesNotExist :
except models . Abon . DoesNotExist :
messages . error ( request , _ ( ' Abon does not exist ' ) )
messages . error ( request , _ ( ' Abon does not exist ' ) )
return redirect ( ' abonapp:people_list ' , gid )
return redirect ( ' abonapp:people_list ' , gid )
except models . Abon Group. DoesNotExist :
except Group . DoesNotExist :
messages . error ( request , _ ( " Group what you want doesn ' t exist " ) )
messages . error ( request , _ ( " Group what you want doesn ' t exist " ) )
return redirect ( ' abonapp:group_list ' )
return redirect ( ' abonapp:group_list ' )
except ProgrammingError as e :
except ProgrammingError as e :
@ -638,7 +603,7 @@ def charts(request, gid, uid):
return redirect ( ' abonapp:abon_home ' , gid = gid , uid = uid )
return redirect ( ' abonapp:abon_home ' , gid = gid , uid = uid )
return render ( request , ' abonapp/charts.html ' , {
return render ( request , ' abonapp/charts.html ' , {
' abon_ group' : abongroup ,
' group ' : abon . group ,
' abon ' : abon ,
' abon ' : abon ,
' charts_data ' : ' , \n ' . join ( charts_data ) if charts_data is not None else None ,
' charts_data ' : ' , \n ' . join ( charts_data ) if charts_data is not None else None ,
' high ' : high ,
' high ' : high ,
@ -668,7 +633,7 @@ def make_extra_field(request, gid, uid):
frm = forms . ExtraFieldForm ( )
frm = forms . ExtraFieldForm ( )
except mydefs . MultipleException as errs :
except mydefs . MultipleException as errs :
for err in errs . err_list :
for err in errs . err_list :
messages . add_message ( request , messages . constants . ERROR , err )
messages . error ( request , err )
frm = forms . ExtraFieldForm ( )
frm = forms . ExtraFieldForm ( )
return render_to_text ( ' abonapp/modal_extra_field.html ' , {
return render_to_text ( ' abonapp/modal_extra_field.html ' , {
' abon ' : abon ,
' abon ' : abon ,
@ -724,14 +689,17 @@ def abon_ping(request):
else :
else :
if type ( ping_result ) is tuple :
if type ( ping_result ) is tuple :
loses_percent = ( ping_result [ 0 ] / ping_result [ 1 ] if ping_result [ 1 ] != 0 else 1 )
loses_percent = ( ping_result [ 0 ] / ping_result [ 1 ] if ping_result [ 1 ] != 0 else 1 )
ping_result = { ' all ' : ping_result [ 0 ] , ' return ' : ping_result [ 1 ] }
ping_result = { ' all ' : ping_result [ 0 ] , ' return ' : ping_result [ 1 ] }
if loses_percent > 1.0 :
if loses_percent > 1.0 :
text = ' <span class= " glyphicon glyphicon-exclamation-sign " ></span> %s ' % _ ( ' IP Conflict! %(all)d / %(return)d results ' ) % ping_result
text = ' <span class= " glyphicon glyphicon-exclamation-sign " ></span> %s ' % _ (
' IP Conflict! %(all)d / %(return)d results ' ) % ping_result
elif loses_percent > 0.5 :
elif loses_percent > 0.5 :
text = ' <span class= " glyphicon glyphicon-ok " ></span> %s ' % _ ( ' ok ping, %(all)d / %(return)d loses ' ) % ping_result
text = ' <span class= " glyphicon glyphicon-ok " ></span> %s ' % _ (
' ok ping, %(all)d / %(return)d loses ' ) % ping_result
status = True
status = True
else :
else :
text = ' <span class= " glyphicon glyphicon-exclamation-sign " ></span> %s ' % _ ( ' no ping, %(all)d / %(return)d loses ' ) % ping_result
text = ' <span class= " glyphicon glyphicon-exclamation-sign " ></span> %s ' % _ (
' no ping, %(all)d / %(return)d loses ' ) % ping_result
else :
else :
text = ' <span class= " glyphicon glyphicon-ok " ></span> %s ' % _ ( ' ping ok ' ) + ' ' + str ( ping_result )
text = ' <span class= " glyphicon glyphicon-ok " ></span> %s ' % _ ( ' ping ok ' ) + ' ' + str ( ping_result )
status = True
status = True
@ -753,7 +721,7 @@ class DialsListView(BaseAbonListView):
def get_queryset ( self ) :
def get_queryset ( self ) :
abon = get_object_or_404 ( models . Abon , pk = self . kwargs . get ( ' uid ' ) )
abon = get_object_or_404 ( models . Abon , pk = self . kwargs . get ( ' uid ' ) )
if not self . request . user . has_perm ( ' abonapp.can_view_abon group' , abon . group ) :
if not self . request . user . has_perm ( ' group_app.can_view_ group' , abon . group ) :
raise PermissionDenied
raise PermissionDenied
self . abon = abon
self . abon = abon
if abon . telephone is not None and abon . telephone != ' ' :
if abon . telephone is not None and abon . telephone != ' ' :
@ -767,7 +735,7 @@ class DialsListView(BaseAbonListView):
def get_context_data ( self , * * kwargs ) :
def get_context_data ( self , * * kwargs ) :
context = super ( DialsListView , self ) . get_context_data ( * * kwargs )
context = super ( DialsListView , self ) . get_context_data ( * * kwargs )
context [ ' abon_ group' ] = get_object_or_404 ( models . Abon Group, pk = self . kwargs . get ( ' gid ' ) )
context [ ' group ' ] = get_object_or_404 ( Group , pk = self . kwargs . get ( ' gid ' ) )
context [ ' abon ' ] = self . abon
context [ ' abon ' ] = self . abon
return context
return context
@ -776,6 +744,15 @@ class DialsListView(BaseAbonListView):
return redirect ( ' abonapp:dials ' , self . abon . group . pk , self . abon . pk )
return redirect ( ' abonapp:dials ' , self . abon . group . pk , self . abon . pk )
return super ( DialsListView , self ) . render_to_response ( context , * * response_kwargs )
return super ( DialsListView , self ) . render_to_response ( context , * * response_kwargs )
def get ( self , request , * args , * * kwargs ) :
try :
return super ( DialsListView , self ) . get ( request , * args , * * kwargs )
except ProgrammingError as e :
messages . error ( request , e )
return redirect ( ' abonapp:abon_home ' ,
self . kwargs . get ( ' gid ' ) ,
self . kwargs . get ( ' uid ' ) )
@login_required
@login_required
@permission_required ( ' abonapp.change_abon ' )
@permission_required ( ' abonapp.change_abon ' )
@ -796,16 +773,17 @@ def save_user_dev_port(request, gid, uid):
other_abon = models . Abon . objects . get ( device = abon . device , dev_port = port )
other_abon = models . Abon . objects . get ( device = abon . device , dev_port = port )
if other_abon != abon :
if other_abon != abon :
user_url = resolve_url ( ' abonapp:abon_home ' , other_abon . group . id , other_abon . id )
user_url = resolve_url ( ' abonapp:abon_home ' , other_abon . group . id , other_abon . id )
messages . error ( request , _ ( " <a href= ' %(user_url)s ' > %(user_name)s </a> already pinned to this port on this device " ) % {
' user_url ' : user_url ,
' user_name ' : other_abon . get_full_name ( )
} )
messages . error ( request , _ (
" <a href= ' %(user_url)s ' > %(user_name)s </a> already pinned to this port on this device " ) % {
' user_url ' : user_url ,
' user_name ' : other_abon . get_full_name ( )
} )
return redirect ( ' abonapp:abon_home ' , gid , uid )
return redirect ( ' abonapp:abon_home ' , gid , uid )
except models . Abon . DoesNotExist :
except models . Abon . DoesNotExist :
pass
pass
except models . Abon . MultipleObjectsReturned :
except models . Abon . MultipleObjectsReturned :
messages . error ( request , _ ( ' Multiple users on the same device port ' ) )
messages . error ( request , _ ( ' Multiple users on the same device port ' ) )
return redirect ( ' devapp:manage_ports ' , abon . device . user_ group. pk , abon . device . pk )
return redirect ( ' devapp:manage_ports ' , abon . device . group . pk , abon . device . pk )
abon . dev_port = port
abon . dev_port = port
if abon . is_dynamic_ip != is_dynamic_ip :
if abon . is_dynamic_ip != is_dynamic_ip :
@ -826,7 +804,7 @@ def save_user_dev_port(request, gid, uid):
@login_required
@login_required
@permission_required ( ' abonapp.add_abonstreet ' )
@permission_required ( ' abonapp.add_abonstreet ' )
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def street_add ( request , gid ) :
def street_add ( request , gid ) :
if request . method == ' POST ' :
if request . method == ' POST ' :
frm = forms . AbonStreetForm ( request . POST )
frm = forms . AbonStreetForm ( request . POST )
@ -846,7 +824,7 @@ def street_add(request, gid):
@login_required
@login_required
@permission_required ( ' abonapp.change_abonstreet ' )
@permission_required ( ' abonapp.change_abonstreet ' )
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def street_edit ( request , gid ) :
def street_edit ( request , gid ) :
try :
try :
if request . method == ' POST ' :
if request . method == ' POST ' :
@ -871,7 +849,7 @@ def street_edit(request, gid):
@login_required
@login_required
@permission_required ( ' abonapp.delete_abonstreet ' )
@permission_required ( ' abonapp.delete_abonstreet ' )
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def street_del ( request , gid , sid ) :
def street_del ( request , gid , sid ) :
try :
try :
models . AbonStreet . objects . get ( pk = sid , group = gid ) . delete ( )
models . AbonStreet . objects . get ( pk = sid , group = gid ) . delete ( )
@ -883,7 +861,7 @@ def street_del(request, gid, sid):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_additionaltelephones ' )
@permission_required ( ' abonapp.can_view_additionaltelephones ' )
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def tels ( request , gid , uid ) :
def tels ( request , gid , uid ) :
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
telephones = abon . additional_telephones . all ( )
telephones = abon . additional_telephones . all ( )
@ -931,11 +909,12 @@ def tel_del(request, gid, uid):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def phonebook ( request , gid ) :
def phonebook ( request , gid ) :
res_format = request . GET . get ( ' f ' )
res_format = request . GET . get ( ' f ' )
t1 = models . Abon . objects . filter ( group__id = int ( gid ) ) . only ( ' telephone ' , ' fio ' ) . values_list ( ' telephone ' , ' fio ' )
t1 = models . Abon . objects . filter ( group__id = int ( gid ) ) . only ( ' telephone ' , ' fio ' ) . values_list ( ' telephone ' , ' fio ' )
t2 = models . AdditionalTelephone . objects . filter ( abon__group__id = gid ) . only ( ' telephone ' , ' owner_name ' ) . values_list ( ' telephone ' , ' owner_name ' )
t2 = models . AdditionalTelephone . objects . filter ( abon__group__id = gid ) . only ( ' telephone ' , ' owner_name ' ) . values_list (
' telephone ' , ' owner_name ' )
tels = list ( t1 ) + list ( t2 )
tels = list ( t1 ) + list ( t2 )
if res_format == ' csv ' :
if res_format == ' csv ' :
import csv
import csv
@ -952,7 +931,7 @@ def phonebook(request, gid):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def abon_export ( request , gid ) :
def abon_export ( request , gid ) :
res_format = request . GET . get ( ' f ' )
res_format = request . GET . get ( ' f ' )
@ -988,13 +967,11 @@ def abon_export(request, gid):
@login_required
@login_required
@permission_required ( ' abonapp.change_abon ' )
@permission_required ( ' abonapp.change_abon ' )
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def reset_ip ( request , gid , uid ) :
def reset_ip ( request , gid , uid ) :
abon = get_object_or_404 ( models . Abon , pk = uid )
abon = get_object_or_404 ( models . Abon , pk = uid )
signals . post_save . disconnect ( models . abon_post_save , sender = models . Abon )
abon . ip_address = None
abon . ip_address = None
abon . save ( update_fields = [ ' ip_address ' ] )
abon . save ( update_fields = [ ' ip_address ' ] )
signals . post_save . connect ( models . abon_post_save , sender = models . Abon )
return HttpResponse ( dumps ( {
return HttpResponse ( dumps ( {
' status ' : 0 ,
' status ' : 0 ,
' dat ' : " <span class= ' glyphicon glyphicon-refresh ' ></span> "
' dat ' : " <span class= ' glyphicon glyphicon-refresh ' ></span> "
@ -1020,7 +997,7 @@ def fin_report(request):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
def add_edit_periodic_pay ( request , gid , uid , periodic_pay_id = 0 ) :
def add_edit_periodic_pay ( request , gid , uid , periodic_pay_id = 0 ) :
if periodic_pay_id == 0 :
if periodic_pay_id == 0 :
if not request . user . has_perm ( ' abonapp.add_periodicpayforid ' ) :
if not request . user . has_perm ( ' abonapp.add_periodicpayforid ' ) :
@ -1051,7 +1028,7 @@ def add_edit_periodic_pay(request, gid, uid, periodic_pay_id=0):
@login_required
@login_required
@permission_required ( ' abonapp.can_view_abon group' , ( models . Abon Group, ' pk ' , ' gid ' ) )
@permission_required ( ' group_app.can_view_ group' , ( Group , ' pk ' , ' gid ' ) )
@permission_required ( ' abonapp.delete_periodicpayforid ' )
@permission_required ( ' abonapp.delete_periodicpayforid ' )
def del_periodic_pay ( request , gid , uid , periodic_pay_id ) :
def del_periodic_pay ( request , gid , uid , periodic_pay_id ) :
periodic_pay_instance = get_object_or_404 ( models . PeriodicPayForId , pk = periodic_pay_id )
periodic_pay_instance = get_object_or_404 ( models . PeriodicPayForId , pk = periodic_pay_id )
@ -1082,12 +1059,12 @@ class EditSibscriberMarkers(UpdateView):
return context
return context
def form_invalid ( self , form ) :
def form_invalid ( self , form ) :
messages . add_message ( self . request , messages . ERROR , _ ( ' fix form errors ' ) )
messages . error ( self . request , _ ( ' fix form errors ' ) )
return super ( EditSibscriberMarkers , self ) . form_invalid ( form )
return super ( EditSibscriberMarkers , self ) . form_invalid ( form )
def form_valid ( self , form ) :
def form_valid ( self , form ) :
v = super ( EditSibscriberMarkers , self ) . form_valid ( form )
v = super ( EditSibscriberMarkers , self ) . form_valid ( form )
messages . add_message ( self . request , messages . SUCCESS , _ ( ' User flags has changed successfully ' ) )
messages . success ( self . request , _ ( ' User flags has changed successfully ' ) )
return v
return v
@ -1095,17 +1072,17 @@ class EditSibscriberMarkers(UpdateView):
def abons ( request ) :
def abons ( request ) :
ablist = [ {
ablist = [ {
' id ' : abn . pk ,
' tarif_id ' : abn . active_tariff ( ) . tariff . pk if abn . active_tariff ( ) is not None else 0 ,
' ip ' : abn . ip_address . int_ip ( ) ,
' is_active ' : abn . is_active
} for abn in models . Abon . objects . all ( ) ]
' id ' : abn . pk ,
' tarif_id ' : abn . active_tariff ( ) . tariff . pk if abn . active_tariff ( ) is not None else 0 ,
' ip ' : abn . ip_address . int_ip ( ) ,
' is_active ' : abn . is_active
} for abn in models . Abon . objects . all ( ) ]
tarlist = [ {
tarlist = [ {
' id ' : trf . pk ,
' speedIn ' : trf . speedIn ,
' speedOut ' : trf . speedOut
} for trf in Tariff . objects . all ( ) ]
' id ' : trf . pk ,
' speedIn ' : trf . speedIn ,
' speedOut ' : trf . speedOut
} for trf in Tariff . objects . all ( ) ]
data = {
data = {
' subscribers ' : ablist ,
' subscribers ' : ablist ,