Browse Source

aggiornamenti nel modulo getSEP

Mauro 9 tháng trước cách đây
mục cha
commit
36445cb0fc
1 tập tin đã thay đổi với 91 bổ sung46 xóa
  1. 91 46
      sicurezza/views.py

+ 91 - 46
sicurezza/views.py

@@ -7,19 +7,77 @@ from att.views import *
 from config.views import *
 from django.db import IntegrityError
 
-# riporta tutti i permessi mixando i tre livelli
-def getP(azienda=None,sede=None,amministratore=None):
-  if isinstance(jolly,Azienda):
-    pass
+def getP(azienda=None,sede=None,amministratore=None,permesso=None):
+  '''
+  getP: ritorna una lista con i permessi assegnati a tutti i livelli possibili
+  '''
+  print('getP',azienda,sede,amministratore,permesso)
+  
+  sed = None
+  if isinstance(sede,Sede):
+    print('Sede: instanza Sede')
+    sed = sede
+  elif isinstance(sede,int):
+    print('Sede: istanza int')
+    try:
+      sed = Sede.objects.get(pk=sede)
+    except Sede.DoesNotExist as dne:
+      print('Sed: errore sed non valido')
+
+  per = None
+  if isinstance(permesso,Permesso):
+    print('Permesso: instanza Permesso')
+    per = permesso
+  elif isinstance(permesso,int):
+    print('Permesso: istanza int')
+    per = Permesso.objects.get(pk=permesso)
+    
+  amm=None
+  if isinstance(amministratore,Amministratore):
+    print('si tratta di una istanza, quindi possiamo direttamente accedere')
+    amm = amministratore
+  elif isinstance(amministratore,int):
+    print('si tratta di un int, quindi dobbiamo cercare il valore')
+    amm = Amministratore.objects.get(pk=amministratore)
 
+  azi = None
+  if isinstance(azienda,Azienda):
+    print('azienda: azienda')
+    azi=azienda
+    print(azi.id)
+    if not azi.id:
+      azi=None
+  elif isinstance(azienda,int):
+    print('azienda: int')
+    azi = Azienda.objects.get(pk=azienda)
+  else:
+    azi = None
+            
+  ### permessi inizio ###
+  data = list()
+  data = getAMP(amm)[0]
+  print("******",data)
+  if azi:
+    print('**** azienda presente ****')
+    for t in getAZP(azi,amm)[0]:
+      if t not in data:
+        data.append(t)
+    if sed:
+      print('**** sede presente ****')
+      for t in getSEP(sed,amm):
+        if t not in data:
+          data.append(t)
+  print("getP Permessi:",data)
+  return data
+  
 # riporta l'elenco dei permessi per amministratore
 def getAMP(amministratore=None):
+  print("getAMP",amministratore)
   amm=None
-  print('getAMP',amministratore)
   if isinstance(amministratore,Amministratore):
     print('si tratta di una istanza, quindi possiamo direttamente accedere')
     amm = amministratore
-  if isinstance(amministratore,int):
+  elif isinstance(amministratore,int):
     print('si tratta di un int, quindi dobbiamo cercare il valore')
     amm = Amministratore.objects.get(pk=amministratore)
 
@@ -47,7 +105,6 @@ def getAZP(azienda=None,amministratore=None):
     print(azi.id)
     if not azi.id:
       azi=None
-
   elif isinstance(azienda,int):
     print('azienda: int')
     azi = Azienda.objects.get(pk=azienda)
@@ -82,29 +139,6 @@ def getAZP(azienda=None,amministratore=None):
   #for i in permessi: print(i,)
   return (permessi,oggettoPermesso,oggettoAZP)
 
-'''
-# riporta l'elenco dei permessi per amministratore versione oggetto (adatta all'editing)
-def listaAMP(amministratore=None):
-  amm=None
-  print('listaAMP',amministratore)
-  if isinstance(amministratore,Amministratore):
-    print('si tratta di una istanza, quindi possiamo direttamente accedere')
-    amm = amministratore
-  if isinstance(amministratore,int):
-    print('si tratta di un int, quindi dobbiamo cercare il valore')
-    amm = Amministratore.objects.get(pk=amministratore)
-
-  permessi = list()
-  oggetto = list()
-  for p in amm.amp_set.all():
-    permessi.append(p.permesso)
-    oggetto.append(p)
-
-  print('permessi disponibili',len(permessi))
-  #for i in permessi: print(i,)
-  return (permessi,oggetto)
-'''
-
 #ottiene la lista degli amministratori per azienda
 def listaAMMperAzienda(azienda=None,permesso=None):
 
@@ -153,12 +187,13 @@ def listaAMMperAzienda(azienda=None,permesso=None):
 
 #ottiene la lista degli amministratori per sede
 def listaAMMperSede(sede=None,permesso=None):
-
+  print("listaAMMperSede",sede,permesso)
+  
   sed = None
   if isinstance(sede,Sede):
     print('Sede: instanza Sede')
     sed = sede
-  if isinstance(sede,int):
+  elif isinstance(sede,int):
     print('Sede: istanza int')
     try:
       sed = Sede.objects.get(pk=sede)
@@ -169,8 +204,7 @@ def listaAMMperSede(sede=None,permesso=None):
   if isinstance(permesso,Permesso):
     print('Permesso: instanza Permesso')
     per = permesso
-  
-  if isinstance(permesso,int):
+  elif isinstance(permesso,int):
     print('Permesso: istanza int')
     per = Permesso.objects.get(pk=permesso)
 
@@ -244,7 +278,7 @@ def listaSEP(azienda=None,amministratore=None,permesso=None):
   if isinstance(azienda,Azienda):
     print('Azienda: instanza Azienda')
     azi = azienda
-  if isinstance(azienda,int):
+  elif isinstance(azienda,int):
     print('Azienda: istanza int')
     azi = Azienda.objects.get(pk=azienda)
 
@@ -252,7 +286,7 @@ def listaSEP(azienda=None,amministratore=None,permesso=None):
   if isinstance(amministratore,Amministratore):
     print('amministratore: instanza Amministratore')
     amm = amministratore
-  if isinstance(amministratore,int):
+  elif isinstance(amministratore,int):
     print('amministratore: istanza int')
     amm = Amministratore.objects.get(pk=amministratore)
 
@@ -261,10 +295,10 @@ def listaSEP(azienda=None,amministratore=None,permesso=None):
   if isinstance(permesso,Permesso):
     print('si tratta di una istanza, possiamo passarla direttamente')
     per = permesso
-  if isinstance(permesso,int):
+  elif isinstance(permesso,int):
     print('si tratta di un int, quindi dobbiamo cercare il valore')
     per = Permesso.objects.get(pk=permesso)
-  if isinstance(permesso,str):
+  elif isinstance(permesso,str):
     print('si tratta di una str, quindi dobbiamo cercare il valore')
     per = Permesso.objects.get(nome=permesso)
 
@@ -276,6 +310,9 @@ def listaSEP(azienda=None,amministratore=None,permesso=None):
     print('problema con la definizione di azienda')
     return []
 
+  # ottiene l'elenco dei permessi gia' assegnati per l'amministratore
+  permessi_assegnati=getP(amministratore=amm,azienda=azi)
+  
   print('dati rilevati',amm.id,amm.login)
 
   # devo ottenere la lista delle sedi, filtrate per azienda autorizzate per amministratore
@@ -287,17 +324,25 @@ def listaSEP(azienda=None,amministratore=None,permesso=None):
   print("sedix len",len(sedix))
   lam = list()
   
-  for s in sedix:
-    tmp = SEP.objects.filter(sede=s).filter(amministratore=amm).filter(permesso=per)
-    #print(len(tmp))
-    for n in tmp:
-      lam.append(n)
-    
+  if per.nome not in permessi_assegnati:
+    for s in sedix:
+      tmp = SEP.objects.filter(sede=s).filter(amministratore=amm).filter(permesso=per)
+      #print(len(tmp))
+      for n in tmp:
+        lam.append(n)
+  else:
+    #abbiamo un diritto di livello superiore
+    tmp = list()
+    for s in sedix:
+      print(s,per.nome)
+      tmp.append({'sede':s,'permesso':per},)
+    lam = tmp        
   print("lam",len(lam))
+  print(lam)
   
   for p in lam:
-    #print(p,type(p),p.sede)
-    sedi.append(p.sede)
+    print(p,type(p),p)
+    sedi.append(p.permesso)
     oggetto.append(p)
 
   sedi = sorted(sedi, key = lambda x: x.nome,reverse=False)