瀏覽代碼

passi in avanti nella gestione dei diritti su amministratore,
azienda,sede.
ora e' possibile aggiungere le tre voci, i diritti amministratore.
manca da completare i diritti azienda, sede e altri dettagli minori.

mauro 6 月之前
父節點
當前提交
1d72c0f2e1

+ 25 - 9
amministratore/forms.py

@@ -49,30 +49,46 @@ class FormCancellaPermessiXAmministratore(forms.Form):
 
 class FormAziendaMancante(forms.Form):
   choices = list()
+
   def __init__(self,*args,**kwargs):
     forms.Form.__init__(self,*args,**kwargs)
-    self.fields['aziendadaaggiungere'] = forms.ChoiceField(required=True,choices=self.choices)
+    self.fields['aziendadaaggiungere'] = forms.ChoiceField(required=True,choices=self.c(azienda))
+
+  def c(self,azienda):
+    for u in azienda:
+      self.choices.append((u.id,u.nome),)
+    print('choices',len(self.choices))
+    return self.choices
+
+class FormAziendaDaAggiungere(forms.Form):
+
+  def __init__(self,*args,azienda=[],**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['ListaAziendaDaAggiungere'] = forms.ChoiceField(required=True,choices=self.c(azienda))
 
   def c(self,azienda):
+    choices=list()
     print("aziende passate a fam",len(azienda))
     for a in azienda:
-      print(a.id,a.nome)
-      self.choices.append((a.id,a.id),)
-    print('choices',self.choices,len(self.choices))
+      choices.append((a.id,a.id),)
+    return choices
 
 class FormPermessoDaAggiungere(forms.Form):
   choices = list()
   def __init__(self,*args,**kwargs):
     forms.Form.__init__(self,*args,**kwargs)
-    self.fields['ListaPermessiDaAggiungere'] = forms.ChoiceField(widget=forms.CheckboxSelectMultiple,required=True,choices=self.choices)
-#    self.fields['select'] = forms.MultipleChoiceField(required=False,widget=forms.CheckboxSelectMultiple(),choices=self.choices)
+    self.fields['ListaPermessiDaAggiungere'] = forms.ChoiceField(required=True,choices=self.choices)
 
   def c(self,azp):
     print("permessi passati",len(azp))
     for a in azp:
-      print(a.id,a.nome)
-      self.choices.append((a.id,a.id),)
-    print('choices',self.choices,len(self.choices))
+      self.choices.append((a.id,a.nome),)
+    print('choices',len(self.choices))
+
+class FormPermessoDaRimuovere(forms.Form):
+  def __init__(self,*args,**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['ConfermaCancellazionePermesso'] = forms.IntegerField(required=True)
 
 class FormSedeMancante(forms.Form):
   choices = []

+ 119 - 0
amministratore/templates/amministratore.edit.AMP.html

@@ -0,0 +1,119 @@
+{% extends 'base.html' %}
+
+{% block body %}
+
+ <div class="error">
+  <!-- errori form sede -->
+  {% if azienda.errors %}
+    <div class="alert alert-danger">
+    {{ azienda.errors }}
+    </div>
+  {% endif %}
+  <!-- fine zona errori -->
+  </div>
+
+  <div>
+    Lista Permessi Amministrativi Assegnati
+  </div> 
+  <div>
+  Questa lista contiene i permessi assegnati a livello di amministratore.
+  i permessi di livello inferiore (azienda, sede,documento, utente) se assegnati a questo livello valgono per tutte le situazioni a seguire.
+  </div>
+
+  <form name='amministratorepermessiform' method='POST'>
+  {% csrf_token %}
+  <ul class="list-group list-group-flush">
+    <li class="list-group-item">
+      <table class='table table-striped table-hover'>
+        <thead class='thead-dark'>
+          <tr>
+            <th scope='col'>Nome</th>
+	    <th scope='col'>D</th>
+          </tr>
+          </thead>
+          <tbody>
+            {% for a in listapermessiassegnati %}
+              <tr>
+                <td> {{ a.nome }} </td>
+		<td><button type='button' class='btn btn-primary' data-bs-toggle='modal' data-bs-target='#ConfirmDeleteModal{{ a.id }}' value='{{ a.id }}'>D</button></td>
+              </tr>
+
+              <!-- Modal -->
+              <div class="modal fade" id="ConfirmUpdateModal{{ a.id }}" tabindex="-1" role="dialog" aria-labelledby="ConfirmUpdateLabel{{ a.id }}" aria-hidden="true">
+                <div class="modal-dialog" role="document">
+              <div class="modal-content">
+                <div class="modal-header">
+                  <h5 class="modal-title" id="ConfirmUpdateLabel">Aggiornamento Diritti Amministratore</h5>
+                   <span aria-hidden="true"></span>
+                  </button>
+                </div>
+                <div class="modal-body">
+	          <select name="ListaPermessiDaRimuovere" class="form-select" multiple aria-label="Selezione Multipla Permessi" >
+		    {% for lp in listapermesso %}
+  		      <option value={{ lp.permesso.id }}>{{ lp.permesso.nome }} - {{ lp.descrizione }}</option>
+                    {% endfor %}
+		  </select>
+                </div>
+                <div class="modal-body">
+                  <select name="ListaPermessiDaAggiungere" class="form-select" multiple aria-label="Seleziona Permessi Disponibili">
+                    {% for lp in dirittiAZIENDA %}
+                      <option value="{{ lp.id }}">{{ lp.nome }}</option>
+                    {% endfor %}
+                  </select>
+                </div>
+                <div class="modal-footer">
+                  <button type="submit" name="AziendaPermessoDeleteButton" value='{{ a.id }}' class="btn btn-primary">Rimuovi Permessi</button>
+                  <button type="submit" name="AziendaPermessoUpdateButton" value='{{ a.id }}' class="btn btn-primary">Aggiungi Permessi</button>
+                  <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Chiudi/Annulla</button>
+                </div>
+              </div>
+            </div>
+          </div>
+          <!-- end modal -->
+
+          <!-- Modal -->
+            <div class="modal fade" id="ConfirmDeleteModal{{ a.id }}" tabindex="-1" role="dialog" aria-labelledby="ConfirmDeleteLabel{{ a.id }}" aria-hidden="true">
+              <div class="modal-dialog" role="document">
+                <div class="modal-content">
+                  <div class="modal-header">
+                    <h5 class="modal-title" id="ConfirmDeleteLabel">Conferma Cancellazione Diritti</h5>
+                      <span aria-hidden="true"></span>
+                    </button>
+                  </div>
+                  <div class="modal-body">
+                    Confermando si procede all'immediata rimozione del permesso indicato?
+                </div>
+                <div class="modal-footer">
+                    {% csrf_token %}
+                    <button type="submit" name="ConfermaCancellazionePermesso" value='{{ a.id }}' class="btn btn-primary">Cancella Permesso</button>
+                    <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Chiudi/Annulla</button>
+                </div>
+              </div>
+            </div>
+          <!-- end modal -->
+            {% endfor %}
+
+	    <tr>
+                {% csrf_token %}
+	      <td>
+                <select class="form-select" name="ListaPermessiDaAggiungere" id="ListaPermessiDaAggiungere">
+		  <option value="">-- Scegli il permesso da Aggiungere --</option>
+	          {% for lp in listapermessiassegnabili  %}
+		  <option value="{{ lp.id }}">{{ lp.nome }}</option>
+                    {% endfor %}
+                </select>
+	      </td>
+	      <td>
+		<button type='submit' name="PermessoDaAggiungereButton" class='btn btn-primary'>Aggiungi</button>
+	      </td>
+	    </tr>
+          </tbody>
+        </table>
+      </li>
+    </ul>
+    <div class="btn-group">
+      <input type='submit' name="AmministratoreButton" class="btn btn-primary" value="Torna a profilo Amministratore">
+      <input type='submit' name="AmministratoreReturnButton" class="btn btn-primary" value="Esci">
+    <div>
+    </form>
+{% endblock %}

+ 2 - 2
amministratore/templates/amministratore.edit.AZP.html

@@ -17,7 +17,7 @@
   </div> 
   <div>
   Questa lista contiene le aziende a cui l'amministratore è autorizzato ad accedere. L'accesso è concesso in prima battuta solo in lettura.
-  usare il tasto "E" per consentire anche altre operazionie.
+  usare il tasto "E" per consentire anche altre operazioni.
   </div>
 
   <form name='aziendapermessiform' method='POST'>
@@ -105,7 +105,7 @@
 	    <tr>
                 {% csrf_token %}
 	      <td>
-                <select class="form-select" name="aziendadaaggiungere" id="aziendadaaggiungere">
+  	        <select class="form-select" name="ListaAziendaDaAggiungere" id="ListaAziendaDaAggiungere">
 		  <option value="">-- Scegli l'azienda da Aggiungere --</option>
 	          {% for lp in listaaziendadiff  %}
 		  <option value="{{ lp.id }}">{{ lp.nome }} - {{ lp.partitaiva}}</option>

+ 3 - 3
amministratore/templates/amministratore.edit.SEP.html

@@ -13,16 +13,16 @@
   </div>
 
   <div>
-    Lista Aziende Autorizzate
+    Lista Sedi Autorizzate
   </div> 
   <div>
   Questa lista contiene le sedi a cui l'amministratore è autorizzato ad accedere. L'accesso è concesso in prima battuta solo in lettura.
-  usare il tasto "E" per consentire anche altre operazioni.<br>
+  usare il tasto "E" per consentire anche altre operazioni.<br><br>
   amministratore: {{ amministratore.login }} - {{ amministratore.nome }}.<br>
   azienda in corso di elaborazione: {{ aziendaOnWork.nome }}
   </div>
 
-  <form name='sedepermessiform' method='POST'>
+  <form name='listasedeform' method='POST'>
   {% csrf_token %}
   <ul class="list-group list-group-flush">
     <li class="list-group-item">

+ 2 - 1
amministratore/templates/amministratore.edit.html

@@ -41,7 +41,8 @@
       <br>
       <input type='submit' name="AmministratoreUpdateButton" class="btn btn-primary" value='Aggiorna'>
       {# ordine: azienda, sede, amministratore #}
-      <input type='submit' name="AmministratoreDirittiAziendaButton" class="btn btn-primary" value="Avanti">
+      <input type='submit' name='AmministratoreDirittiAmministratoreButton' class='btn btn-primary' value="Diritti Amministratore">
+      <input type='submit' name="AmministratoreDirittiAziendaButton" class="btn btn-primary" value="Aziende">
       <input type='submit' class="btn btn-primary" name="indietro" value="Indietro">
     </div>
   </form>

+ 1 - 0
amministratore/urls.py

@@ -5,6 +5,7 @@ app_name='amministratore'
 urlpatterns = [
   path('welcome',views.welcome,name='welcome'),
   path('edit',views.edit,name='edit'),
+  path('editAMP',views.editAMP,name='editAMP'),
   path('editAZP',views.editAZP,name='editAZP'),
   path('editSEP',views.editSEP,name="editSEP"),
   path('editAmministratore',views.editAmministratore,name='editAmministratore'),

+ 110 - 11
amministratore/views.py

@@ -8,6 +8,7 @@ from django.http import HttpResponse,HttpResponseRedirect
 from django.urls import reverse
 from sicurezza.views import *
 from config.datafunc import *
+from django.db.models import Q
 
 def welcome(request):
   if not 'AdminId' in request.session:
@@ -159,7 +160,10 @@ def edit(request):
   
     if 'indietro' in request.POST:
       return HttpResponseRedirect(reverse("amministratore:welcome"))
-    print('aa')
+
+    if 'AmministratoreDirittiAmministratoreButton' in request.POST:
+      print("Un tasto è stato premuto 'AmministratoreDirittiAmministratoreButton'")
+      return HttpResponseRedirect(reverse("amministratore:editAMP"))
 
     if 'AmministratoreCancellaButton' in request.POST:
       print('editAmministratore: premuto "AmministratoreCancellaButton"')
@@ -227,6 +231,81 @@ def edit(request):
  
   return render(request,'amministratore.edit.html',data)
 
+def editAMP(request):
+  ### consente di aggiornare i diritti a livello di amministratore ###
+
+  if not 'AdminId' in request.session:
+    return HttpResponseRedirect(reverse("login:start"))
+
+  ### funzioni esterne ###
+  d = DataDict()
+  data = d.getData()
+  data['NavBar']=True
+  data['ShowSelectAzienda'] = False
+  data['ShowSelectSede'] = False
+
+  define = Define(request)
+  data['admin'] = define.getAdmin()
+  data['azienda'] = define.getAzienda()
+  data['AziendaId'] = define.getAziendaId()
+  data['sede'] = define.getSede()
+  data['SedeId'] = define.getSedeId()
+  ### funzioni esterne fine ###
+
+  if 'AdminId' in request.session:
+    data['AdminId'] = request.session['AdminId']
+    admin = Amministratore.objects.get(pk=data['AdminId'])
+    data['admin'] = admin
+    print('admin',admin.id,admin.nome)
+    data['permesso'] = getAMP(admin)[0]
+
+  amministratore = None
+  if 'AmministratoreEditId' in request.session:
+    amministratoreEditId = request.session.get('AmministratoreEditId')
+    try:
+      amministratore = Amministratore.objects.get(pk=amministratoreEditId)
+    except Amministratore.DoesNotExist as dne:
+      return HttpResponseRedirect(reverse("amministratore:edit"))
+
+  print('amministratore',amministratore.id,amministratore.login,amministratore.nome)
+  data['amministratore'] = amministratore
+
+  data['listapermessiassegnati'] = getAMP(data['amministratore'])[1]
+  print('listapermessiassegnati',data['listapermessiassegnati'])
+  data['listapermessiassegnabili'] = Permesso.objects.all()
+  print('listapermessiassegnabili',data['listapermessiassegnabili'])
+
+  if request.method == 'POST':
+
+    if 'AmministratoreButton' in request.POST:
+      print("Un tasto è stato premuto 'AmministratoreButton'")
+      return HttpResponseRedirect(reverse("amministratore:edit"))
+
+    formpermessodaaggiungere = FormPermessoDaAggiungere(request.POST)
+    formpermessodaaggiungere.c(data['listapermessiassegnabili'])
+
+    if formpermessodaaggiungere.is_valid():
+      print('formpermessodaaggiungere valido')
+      permesso = formpermessodaaggiungere.cleaned_data.get('ListaPermessiDaAggiungere')
+
+      print('*' * 10)
+      setAMP(amministratore,int(permesso))
+      print('*' * 10)
+
+    formpermessodarimuovere = FormPermessoDaRimuovere(request.POST)
+    if formpermessodarimuovere.is_valid():
+      print('formpermessodacancellare valido')
+      permesso = formpermessodarimuovere.cleaned_data.get('ConfermaCancellazionePermesso')
+      print('ConfermaCancellazionePermesso',permesso)
+      delAMP(amministratore,permesso)
+
+  data['listapermessiassegnati'] = getAMP(data['amministratore'])[1]
+  print('listapermessiassegnati',data['listapermessiassegnati'])
+  data['listapermessiassegnabili'] = Permesso.objects.all()
+  print('listapermessiassegnabili',data['listapermessiassegnabili'])
+
+  return render(request,'amministratore.edit.AMP.html',data)
+
 def editAZP(request):
   ### edit diritti associati all'azienda.
   ### in questa sezione procediamo con l'assegnare o rimuovere i diritti di questo amministratore 
@@ -257,17 +336,19 @@ def editAZP(request):
     print('admin',admin.id,admin.nome)
     data['permesso'] = getAMP(admin)[0]
 
+  listaaziendatutte = Azienda.objects.all()
+
   amministratore = None
   if 'AmministratoreEditId' in request.session:
     amministratoreEditId = request.session.get('AmministratoreEditId')
     try:
       amministratore = Amministratore.objects.get(pk=amministratoreEditId)
     except Amministratore.DoesNotExist as dne:
-      amministratore = Amministratore()
-      amministratore.pin = str(randint(100000,999999))
-    print('amministratore',amministratore.id,amministratore.nome)
+      return HttpResponseRedirect(reverse("amministratore:edit"))
+
+  print('amministratore',amministratore.id,amministratore.login,amministratore.nome)
+  data['amministratore'] = amministratore
 
-  listaaziendatutte = Azienda.objects.all()
   if amministratore: 
     data['listaazienda'] = listaAZP(amministratore)[0]
     data['listaaziendadiff'] = list(set(listaaziendatutte)-set(data['listaazienda']))
@@ -275,7 +356,7 @@ def editAZP(request):
     data['listaaziendadiff'] = list(set(listaaziendatutte))
 
   #parliamo di diritti assegnati all'azienda.
-  data['dirittiAZIENDA'] = Permesso.objects.filter(classe='AZI')
+  data['dirittiAZIENDA'] = Permesso.objects.filter(Q(classe='AZI')|Q(classe='SED'))
   print('dirittiAZIENDA',len(data['dirittiAZIENDA']))
 
   if request.method == 'POST':
@@ -289,6 +370,17 @@ def editAZP(request):
       print("Un tasto è stato premuto 'AmministratoreButton'")
       return HttpResponseRedirect(reverse("amministratore:edit"))
 
+    if 'AziendaDaAggiungereButton' in request.POST:
+      print('un tasto è stato premuto AziendaDaAggiungereButton')
+      formaziendadaaggiungere = FormAziendaDaAggiungere(request.POST,azienda=listaaziendatutte)
+      if formaziendadaaggiungere.is_valid():
+        print('AziendaDaAggiungere, form valida')
+        azienda = formaziendadaaggiungere.cleaned_data.get('ListaAziendaDaAggiungere')
+        print(azienda)
+        setAZP(azienda,amministratore,'AZIENDA')
+      else:
+        print('AziendaDaAggiungere, form non valido')
+
     if 'SedeButton' in request.POST:
       print("Un tasto è stato premuto 'SedeButton'")
       azienda = request.POST.get('SedeButton')
@@ -302,10 +394,16 @@ def editAZP(request):
       formpermessodaaggiungere.c(Permesso.objects.filter(classe="SED"))
       if formpermessodaaggiungere.is_valid():
         print('formpermessodaaggiungere è valido')
+        print("cazzo cazzo")
       else:
         print('errore',formpermessodaaggiungere) 
       #formpermessoupdate = form.PermessoUpdate(request.POST)
       
+  if amministratore: 
+    data['listaazienda'] = listaAZP(amministratore)[0]
+    data['listaaziendadiff'] = list(set(listaaziendatutte)-set(data['listaazienda']))
+  else:
+    data['listaaziendadiff'] = list(set(listaaziendatutte))
 
   return render(request,'amministratore.edit.AZP.html',data)
 
@@ -357,14 +455,15 @@ def editSEP(request):
   print('azienda',azienda.nome)
   data['aziendaOnWork'] = azienda
 
-  listasedetutte = azienda.sede_set.all()
-  print('listasedetutte - lunghezza',len(listasedetutte))
-
   data['listasede'] = listaSEP(azienda,amministratore.id,"SEDE")[0]
-  print("data['listasede']",data['listasede'])
+  print("data['listasede']",len(data['listasede']))
+
+  listasedetutte = azienda.sede_set.all()
+  print('listasedetutte',len(listasedetutte))
 
-  print('amministratore',amministratore.nome)
   data['listasedediff'] = list(set(listasedetutte)-set(data['listasede']))
+  #data['listasedediff'] = listasedetutte
+  print("data['listasedediff']",len(data['listasedediff']))
 
   # parliamo di diritti relativi alle sedi
   data['dirittiSEDE'] = Permesso.objects.filter(classe='SED')

+ 49 - 16
sicurezza/views.py

@@ -46,8 +46,6 @@ def getP(azienda=None,sede=None,amministratore=None,permesso=None):
   elif isinstance(azienda,int):
     print('azienda: int')
     azi = Azienda.objects.get(pk=azienda)
-  else:
-    azi = None
             
   ### permessi inizio ###
   data = list()
@@ -64,6 +62,7 @@ def getP(azienda=None,sede=None,amministratore=None,permesso=None):
         if t not in data:
           data.append(t)
   print("getP Permessi:",data)
+
   return data
   
 # getAMP: riporta l'elenco dei permessi per amministratore
@@ -81,10 +80,11 @@ def getAMP(amministratore=None):
   oggettoPermesso = list()
   oggettoAMM = list()
 
-  for p in amm.amp_set.all():
-    permessi.append(p.permesso.nome)
-    oggettoPermesso.append(p.permesso)
-    oggettoAMM.append(p)
+  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,)
@@ -453,41 +453,72 @@ def setAMP(amministratore=None,permesso=None):
     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 per or not amm:
+    return False
+
+  p = None
+  try:
+    p = AMP.objects.filter(amministratore=amm).filter(permesso=per)
+  except AMP.DoesNotExist as dne:
+    print('errore: record non trovato')
+    return False
+  p.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):
-    print('azienda: istanza')
     azi=azienda
+  if isinstance(azienda,str):
+    try:
+      azienda = int(azienda)
+    except ValueError as ve:
+      print(ve)
   if isinstance(azienda,int):
-    print('azienda: int')
     azi = Azienda.objects.get(pk=azienda)
 
   amm=None
   if isinstance(amministratore,Amministratore):
-    print('amministratore: istanza')
     amm = amministratore
-
   if isinstance(amministratore,str):
     try:
       amministratore = int(amministratore)
     except ValueError as ve:
       print(ve)
-  
   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('permesso: istanza')
     per = permesso
   if isinstance(permesso,int):
-    print('permesso: int')
     per = Permesso.objects.get(pk=permesso)
   if isinstance(permesso,str):
-    print('permesso: str')
     per = Permesso.objects.get(nome=permesso)
     
   if not azi: print("Errore opzione azi")
@@ -495,11 +526,13 @@ def setAZP(azienda=None,amministratore=None,permesso=None):
   if not per: print("Errore opzione per")
 
   # aggiungiamo il permesso necessario
-  print('in fase di salvataggio',azi,amm,per)
+  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: