from django.shortcuts import render from .models import * from att.views import * from config.views import * from django.db import IntegrityError # getP: ritorna una lista con i permessi assegnati a tutti i livelli possibili def getP(azienda=None,sede=None,amministratore=None,permesso=None): 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) ### 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)[0]: if t not in data: data.append(t) print("getP Permessi:",data) return data # getAMP: riporta l'elenco dei permessi per amministratore def getAMP(amministratore=None): print("getAMP",amministratore) 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) permessi = list() oggettoPermesso = list() oggettoAMM = list() if amm: for p in amm.amp_set.all(): permessi.append(p.permesso.nome) oggettoPermesso.append(p.permesso) oggettoAMM.append(p) print('permessi disponibili',len(permessi)) #for i in permessi: print(i,) return (permessi,oggettoPermesso,oggettoAMM) # getAZP: riporta l'elenco dei permessi per azienda, filtrato per amministratore def getAZP(azienda=None,amministratore=None): print('getAZP',azienda,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 amm=None if isinstance(amministratore,Amministratore): print('amministratore: amministratore') amm = amministratore elif isinstance(amministratore,int): print('amministratore: int') amm = Amministratore.objects.get(pk=amministratore) else: amm = None if not amm: return ([],[],[],) if not azi: return ([],[],[],) permessi = list() oggettoPermesso = list() oggettoAZP = list() for p in azi.azp_set.all().filter(amministratore=amm): permessi.append(p.permesso.nome) oggettoPermesso.append(p.permesso) oggettoAZP.append(p) print('permessi disponibili',len(permessi)) #for i in permessi: print(i,) return (permessi,oggettoPermesso,oggettoAZP) # listaAMMperAzienda: ottiene la lista degli amministratori per azienda def listaAMMperAzienda(azienda=None,permesso=None): azi = None if isinstance(azienda,Azienda): print('Azienda: instanza Azienda') azi = azienda if isinstance(azienda,int): print('Azienda: istanza int') azi = Azienda.objects.get(pk=azienda) per = None if isinstance(permesso,Permesso): print('Permesso: instanza Permesso') per = permesso if isinstance(permesso,int): print('Permesso: istanza int') per = Permesso.objects.get(pk=permesso) if not azi: print('problema con la definizione di azienda') return [] print('dati rilevati',azi.id,azi.nome) laz = list() if not per: #tutti i permessi p = Permesso.objects.all() for tmp in p: t = azi.azp_set.filter(permesso__nome=tmp.nome) for tmp2 in t: laz.append(tmp2) else: t = azi.azp_set.filter(permesso__nome=per_nome) for tmp in t: laz.append(tmp) amministratore = list() oggetto = list() for p in laz: amministratore.append(p.amministratore) oggetto.append(p) print('amministratori disponibili',len(amministratore)) return (amministratore,oggetto) # listaAMMperSede: 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 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) if not sed: print('problema con la definizione di sede') return ([],[],) print('dati rilevati',sed.id,sed.nome) lse = list() if not per: #tutti i permessi p = Permesso.objects.all() for tmp in p: t = sed.sep_set.filter(permesso__nome=tmp.nome) for tmp2 in t: lse.append(tmp2) else: t = sed.sep_set.filter(permesso__nome=per_nome) for tmp in t: lse.append(tmp) print('lunghezza LSE',len(lse)) amministratore = list() oggetto = list() for p in lse: #print(p.amministratore.nome) amministratore.append(p.amministratore) oggetto.append(p) print('amministratori disponibili',len(amministratore)) return (amministratore,oggetto) #listaAZP: riporta la lista delle aziende in base all'amministratore def listaAZP(amministratore=None): print('Parametro amministratore',amministratore,type(amministratore)) amm = None if isinstance(amministratore,Amministratore): print('amministratore: instanza Amministratore') amm=amministratore if isinstance(amministratore,int): print('amministratore: istanza int') amm = Amministratore.objects.get(pk=amministratore) if amm == None: print('problema con la definizione di amministratore') return [] print('dati rilevati',amm.id,amm.login) lam = amm.azp_set.filter(permesso__nome="AZIENDA") print('lunghezza LAM',len(lam)) aziende = list() oggetto = list() for p in lam: aziende.append(p.azienda) oggetto.append(p) # prima di restituire mettiamo in ordine aziende = sorted(aziende, key = lambda x: x.nome,reverse=False) print('aziende disponibili',len(aziende)) return (aziende,oggetto) # listaSEP: ritorna la lista delle sedi per azienda e amministratore def listaSEP(azienda=None,amministratore=None,permesso=None): print("listaSEP",azienda,amministratore,permesso) azi = None if isinstance(azienda,Azienda): print('Azienda: instanza Azienda') azi = azienda elif isinstance(azienda,int): print('Azienda: istanza int') azi = Azienda.objects.get(pk=azienda) amm = None if isinstance(amministratore,Amministratore): print('amministratore: instanza Amministratore') amm = amministratore elif isinstance(amministratore,int): print('amministratore: istanza int') amm = Amministratore.objects.get(pk=amministratore) per=None print('listaSEP',permesso) if isinstance(permesso,Permesso): print('si tratta di una istanza, possiamo passarla direttamente') per = permesso elif isinstance(permesso,int): print('si tratta di un int, quindi dobbiamo cercare il valore') per = Permesso.objects.get(pk=permesso) elif isinstance(permesso,str): print('si tratta di una str, quindi dobbiamo cercare il valore') per = Permesso.objects.get(nome=permesso) print('permesso trovato',per.nome) else: per = None if not amm: print('problema con la definizione di amministratore') return [] if not azi: 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 sedix = azi.sede_set.all() print("sedix len",len(sedix)) lam = list() print(per) ### delicatissimo ### verificare che in lam venga effettivamente inserita solo la sede e non altri componenti ### sia che ci siano che non ci siano i permessi assegnati if per: print('per.nome',per.nome) print('per.asse',permessi_assegnati) if per.nome not in permessi_assegnati: print("per.nome non in permessi assegnati") for s in sedix: tmp = SEP.objects.filter(sede=s).filter(amministratore=amm).filter(permesso=per) for n in tmp: #lam.append({'sede':n,'permesso':per}) print("s:",n,per.nome,type(n)) lam.append(n.sede) else: print("per.nome in permessi assegnati") #abbiamo un diritto di livello superiore for s in sedix: print("s:",s,per.nome,type(s)) lam.append(s) #tmp.append({'sede':s,'permesso':per}) #tmp.append(s) #lam = tmp print("lam",len(lam),type(lam)) print(lam) print("****") sedi = list() oggetto = list() for p in lam: print("p:",p,type(p),p) sedi.append(p) oggetto.append({'sede':p,'permesso':per}) #print("sedi",sedi) #print("oggetto",oggetto) #print("sede 0",sedi[0].nome) sedi = sorted(sedi, key = lambda x: x.nome,reverse=False) print('sedi disponibili',len(sedi)) return (sedi,oggetto) # getSEP: riporta l'elenco dei permessi per sede filtrato per amministratore def getSEP(sede=None,amministratore=None,permesso=None): print('getSEP',sede,amministratore) sed=None if isinstance(sede,Sede): print('sede: si tratta di una istanza sede') sed=sede if isinstance(sede,str): print('sede: si tratta di una instanza int') try: sede = int(sede) except ValueError as ve: print('Errore conversione sede') if isinstance(sede,int): print('sede: istanza int') sed = Sede.objects.get(pk=sede) amm=None if isinstance(amministratore,Amministratore): print('si tratta di una istanza amministratore, quindi possiamo direttamente accedere') amm = amministratore print('amministratore',amm.nome) if isinstance(amministratore,int): print('si tratta di un int, quindi dobbiamo cercare il valore') amm = Amministratore.objects.get(pk=amministratore) per=None if isinstance(permesso,Permesso): print('si tratta di una istanza permesso') per = permesso print('permesso',per.nome) if isinstance(permesso,str): print('si tratta di una str, quindi dobbiamo cercare il valore') per = Permesso.objects.get(nome=permesso) if isinstance(permesso,int): print('si tratta di un int, quindi cerchiamo per chiave') per = Permesso.objects.get(pk=permesso) if not sed: print('sede non presente') return ([],[],{},) if not amm: print('amministratore non presente') return ([],[],{},) permessi = list() oggettopermessi = list() oggettoSEP = list() if not permesso: for p in sed.sep_set.all().filter(amministratore=amm): print(p.amministratore.nome,p.permesso.nome) permessi.append(p.permesso.nome) oggettopermessi.append(p.permesso) oggettoSEP.append(p) else: for p in sed.sep_set.all().filter(amministratore=amm).filter(permesso=per): print(p.amministratore.nome,p.permesso.nome) permessi.append(p.permesso.nome) oggettopermessi.append(p.permesso) oggettoSEP.append(p) print('permessi disponibili',len(permessi)) return (permessi,oggettopermessi,oggettoSEP) #### for p in azi.azp_set.all().filter(amministratore=amm): permessi.append(p.permesso.nome) oggettoPermesso.append(p.permesso) oggettoAZP.append(p) print('permessi disponibili',len(permessi)) #for i in permessi: print(i,) return (permessi,oggettoPermesso,oggettoAZP) #### # riporta un permesso (generico) o tutti i permessi def getPermesso(permesso=None): if permesso: try: p = Permesso.objects.get(nome=permesso) except Permesso.DoesNotExist as dne: p = None print("Errore:",dne) else: p = Permesso.objects.all() return p # da questa parte si impostano i permessi def setDefault(amministratore=None): pass # setAMP: imposta i permessi a livello azienda def setAMP(amministratore=None,permesso=None): 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): print('si tratta di un int, quindi dobbiamo cercare il valore') amm = Amministratore.objects.get(pk=amministratore) per=None print('getAMP',permesso) if isinstance(permesso,Permesso): print('si tratta di una istanza, possiamo passarla direttamente') per = permesso if isinstance(permesso,int): print('si tratta di un int, quindi dobbiamo cercare il valore') per = Permesso.objects.get(pk=permesso) if isinstance(permesso,str): print('si tratta di una str, quindi dobbiamo cercare il valore') per = Permesso.objects.get(nome=permesso) # aggiungiamo il permesso necessario p = AMP() p.permesso=per p.amministratore=amm try: p.save() except IntegrityError as ie: print(ie) return [p,] def delAMP(amministratore=None,permesso=None): # rimuovere un permesso a un 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) per=None print('getAMP',permesso) if isinstance(permesso,Permesso): print('si tratta di una istanza, possiamo passarla direttamente') per = permesso if isinstance(permesso,int): print('si tratta di un int, quindi dobbiamo cercare il valore') per = Permesso.objects.get(pk=permesso) if isinstance(permesso,str): print('si tratta di una str, quindi dobbiamo cercare il valore') per = Permesso.objects.get(nome=permesso) if not amm: return False if per: p = AMP.objects.filter(amministratore=amm).filter(permesso=per) for i in p: i.delete() else: p = AMP.objects.filter(amministratore=amm) for i in p: i.delete() return True # setAZP: imposta i permessi a livello azienda def setAZP(azienda=None,amministratore=None,permesso=None): print('setAZP:',azienda,amministratore,permesso) azi = None if isinstance(azienda,Azienda): azi=azienda if isinstance(azienda,str): try: azienda = int(azienda) except ValueError as ve: print(ve) if isinstance(azienda,int): azi = Azienda.objects.get(pk=azienda) amm=None if isinstance(amministratore,Amministratore): amm = amministratore if isinstance(amministratore,str): try: amministratore = int(amministratore) except ValueError as ve: print(ve) if isinstance(amministratore,int): amm = Amministratore.objects.get(pk=amministratore) per=None if isinstance(permesso,Permesso): per = permesso if isinstance(permesso,int): per = Permesso.objects.get(pk=permesso) if isinstance(permesso,str): per = Permesso.objects.get(nome=permesso) if not azi: print("Errore opzione azi") if not amm: print("Errore opzione amm") if not per: print("Errore opzione per") # aggiungiamo il permesso necessario print('in fase di salvataggio',azi,type(azi),amm,type(amm),per,type(per)) p = AZP() p.permesso=per p.amministratore=amm p.azienda=azi try: p.save() except IntegrityError as ie: print(ie) return [p,] def delAZP(azienda=None, amministratore=None,permesso=None): # rimuovere un permesso a un amministratore if isinstance(azienda,Azienda): print('si tratta di una instanza, quindi possiamo direttamente accedere') azi = azienda if isinstance(azienda,int): print('si tratta di un int, quindi dobbiamo cercare il valore') azi = Azienda.objects.get(pk=azienda) 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) per=None print('getAMP',permesso) if isinstance(permesso,Permesso): print('si tratta di una istanza, possiamo passarla direttamente') per = permesso if isinstance(permesso,int): print('si tratta di un int, quindi dobbiamo cercare il valore') per = Permesso.objects.get(pk=permesso) if isinstance(permesso,str): print('si tratta di una str, quindi dobbiamo cercare il valore') per = Permesso.objects.get(nome=permesso) if not azi or not amm: return False if per: #permesso presente, quindi si rimuove solo quel permesso p = None p = AZP.objects.filter(amministratore=amm).filter(azienda=azi).filter(permesso=per) for i in p: p.delete() else: #si rimuovo tutti i permessi per quell'azienda p = AZP.objects.filter(amministratore=amm).filter(azienda=azi) for i in p: i.delete() return True # setSEP: imposta i permessi a livello sede def setSEP(sede=None,amministratore=None,permesso=None): print('setSEP',sede,type(sede),amministratore,type(amministratore),permesso,type(permesso)) sed=None if isinstance(sede,Sede): print('si tratta di una istanza sede') sed=sede if isinstance(sede,str): print('si tratta di una instanza str') try: sede = int(sede) except ValueError as ve: print('impossibile convetire sede',sede,ve) if isinstance(sede,int): print('sede: istanza int') sed = Sede.objects.get(pk=sede) print('sed',sed.nome) amm=None if isinstance(amministratore,Amministratore): print('si tratta di una istanza, quindi possiamo direttamente accedere') amm = amministratore if isinstance(amministratore,str): print("Amministratore: str") amministratore = int(amministratore) if isinstance(amministratore,int): print('Amministratore: int') amm = Amministratore.objects.get(pk=amministratore) per=None if isinstance(permesso,Permesso): print('si tratta di una istanza, possiamo passarla direttamente') per = permesso if isinstance(permesso,int): print('si tratta di un int, quindi dobbiamo cercare il valore') per = Permesso.objects.get(pk=permesso) if isinstance(permesso,str): print('si tratta di una str, quindi dobbiamo cercare il valore') per = Permesso.objects.get(nome=permesso) if not sed: print("Errore opzione sed") if not amm: print("Errore opzione amm") if not per: print("Errore opzione per") # aggiungiamo il permesso necessario p = SEP() p.permesso=per p.amministratore=amm p.sede=sed try: p.save() print('setSEP ok',p.id) except IntegrityError as ie: print(ie) return [p,]