ソースを参照

modificato: amministratore/admin.py
modificato: amministratore/models.py
modificato: azienda/models.py
modificato: azienda/templates/azienda.editAzienda.html
modificato: azienda/templates/azienda.editSede.html
modificato: comunicazione/models.py
modificato: config/models.py
modificato: db/db.sqlite3
modificato: documento/models.py
modificato: documento/templates/documento.welcome.html
modificato: documento/urls.py
modificato: documento/views.py
modificato: gd/settings.py
modificato: utente/models.py
modificato: utente/templates/utente.welcome.html

Mauro 11 ヶ月 前
コミット
54eb46c16a

+ 4 - 1
amministratore/admin.py

@@ -1,6 +1,9 @@
 from django.contrib import admin
+from .models import *
 
 # Register your models here.
+@admin.register(Amministratore)
 class AmministratoreAdmin(admin.ModelAdmin):
-  list_display = ['login','nome','pin','sola_lettura','crea_azienda','crea_sede','crea_utente','crea_documento',]
+  list_display = ['login','nome','pin','sola_lettura','crea_azienda','crea_sede','crea_utente','crea_documento','crea_comunicazione',
+                  'edit_azienda','edit_utente','edit_documento','edit_comunicazione',]
 

+ 18 - 10
amministratore/models.py

@@ -2,15 +2,23 @@ from django.db import models
 from django.utils import timezone
 
 class Amministratore(models.Model):
-    login = models.CharField(max_length=64,null=False)
-    nome = models.CharField(max_length=128,null=False,unique=True)
-    mail = models.CharField(max_length=128,null=False,default="")
-    pin = models.CharField(max_length=64,null=False)
-    uuid = models.CharField(max_length=32,null=False,default="")
-    sola_lettura = models.BooleanField(default=False)
-    crea_azienda = models.BooleanField(default=True)
-    crea_sede = models.BooleanField(default=True)
-    crea_utente = models.BooleanField(default=True)
-    crea_documento = models.BooleanField(default=True)
+  login = models.CharField(max_length=64,null=False)
+  nome = models.CharField(max_length=128,null=False,unique=True)
+  mail = models.CharField(max_length=128,null=False,default="")
+  pin = models.CharField(max_length=64,null=False)
+  uuid = models.CharField(max_length=32,null=False,default="")
+  sola_lettura = models.BooleanField(default=False)
+  crea_azienda = models.BooleanField(default=True)
+  crea_sede = models.BooleanField(default=True)
+  crea_utente = models.BooleanField(default=True)
+  crea_documento = models.BooleanField(default=True)
+  crea_comunicazione = models.BooleanField(default=True)
+  edit_azienda = models.BooleanField(default=True)
+  edit_sede = models.BooleanField(default=True)
+  edit_utente = models.BooleanField(default=True)
+  edit_documento = models.BooleanField(default=True)
+  edit_comunicazione = models.BooleanField(default=True)
 
+  def __str__(self):
+    return f"{self.id}: {self.nome}"
 

+ 12 - 3
azienda/models.py

@@ -12,17 +12,19 @@ class Azienda(models.Model):
    comm=models.CharField(max_length=256,null=False,default="") # email usata come mittente per le comunicazioni
    cambiopassword = models.BooleanField(null=False,default=False)
    forzanuovapassword = models.BooleanField(null=False,default=False)
+   otppassword = models.BooleanField(null=False,default=False)
 
    # cambiopassword = e' consentito il cambio password agli utenti
    # forzanuovapassword = obbligatorio il cambio password al primo login
+   # otppassword = l'utente puo' accedere con otp
+
+   def __str__(self):
+       return f"{self.id}: {self.nome}"
 
    class Meta:
      constraints = [ models.UniqueConstraint(fields=['nome','partitaiva'], name="unique-azienda") ]
      indexes = [ models.Index(fields=['partitaiva','nome']) ]
 
-   def __str__(self):
-       return f"{self.id}: {self.nome}"
-
 class Sede(models.Model):
     '''
     'ogni azienda ha almeno una sede'.
@@ -32,6 +34,7 @@ class Sede(models.Model):
     azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
     cambiopassword = models.BooleanField(null=False,default=False)
     forzanuovapassword = models.BooleanField(null=False,default=False)
+    otppassword = models.BooleanField(null=False,default=False)
 
     def __str__(self):
         return f"{self.id}: {self.nome}"
@@ -44,8 +47,14 @@ class AssegnazioneAzienda(models.Model):
   azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT,null=True)
   amministratore = models.ForeignKey(Amministratore,on_delete=models.PROTECT,null=True)
 
+  def __str__(self):
+    return f"{self.id}: {self.azienda} - {self.amministratore}"
+
 class AssegnazioneSede(models.Model):
   sede = models.ForeignKey(Sede,on_delete=models.PROTECT,null=True)
   azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT,null=True)
   amministratore = models.ForeignKey(Amministratore,on_delete=models.PROTECT,null=True)
 
+  def __str__(self):
+    return f"{self.id}: {self.sede} - {self.azienda} - {self.amministratore}"
+

+ 58 - 18
azienda/templates/azienda.editAzienda.html

@@ -11,7 +11,7 @@
 
 {% block body %}
 
-  <!-- errori utente -->
+  <!-- errori form azienda -->
   {% if azienda.errors %}
     {{ azienda.errors }}
     {% for field in azienda %}
@@ -32,37 +32,77 @@
   {% endif %}
   <!-- fine zona errori -->
 
-  <!-- profilo utente -->
+  <!-- profilo azienda -->
   <form name='AziendaEdit' method='post'>
     {% csrf_token %}
     <div class='form-group'>
       <label for="nome">Nome Azienda</label>
-      <input type='text' class='form-control form-control-lg' name='nome' id='nome' value='{{ azienda.nome.value }}'>
+      <input type='text' class='form-control form-control-lg' name='nome' id='nome' value='{{ azienda.nome.value }}' {% if admin.sola_lettura %} disabled {% endif %}>
     </div>
     <div class='form-group'>
       <label for="partitaiva">Partita IVA</label>
-      <input type='text' class='form-control' name='partitaiva' id='partitaiva' value='{{ azienda.partitaiva.value }}'>
+      <input type='text' class='form-control' name='partitaiva' id='partitaiva' value='{{ azienda.partitaiva.value }}' {% if admin.sola_lettura %} disabled {% endif %}>
     </div>
     <div class='form-group'>
       <label for="mail" class="form-control-label">Email</label>
-      <input type='mail' class='form-control' name='mail' id='mail' value='{{ azienda.mail.value }}'>
-    </div>
-    <div class='form-check'>
-      <input class="form-check-input" type="checkbox" {% if azienda.cambiopassword.value %} checked {% endif %} id="cambiopassword" name="cambiopassword">
-      <label for='cambiopassword' class='form-control-label'>Il dipendente può aggiornare la password</label>
+      <input type='mail' class='form-control' name='mail' id='mail' value='{{ azienda.mail.value }}' {% if admin.sola_lettura %} disabled {% endif %}>
     </div>
+    <br>
+    <div class="card">
+      <div class="card-header">
+        Opzioni Comuni
+      </div>
+      <ul class="list-group list-group-flush">
+      <li class="list-group-item">
+        <div class='form-check'>
+          <input class="form-check-input" type="checkbox" {% if azienda.cambiopassword.value %} checked {% endif %} id="cambiopassword" name="cambiopassword" {% if admin.sola_lettura %} disabled {% endif %}>
+          <label for='cambiopassword' class='form-control-label'>Il dipendente può aggiornare la password</label>
+        </div>
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" id="cambiopasswordreplica" name="cambiopasswordreplica" {% if admin.sola_lettura %} disabled {% endif %}/>
+          <label for='cambiopasswordreplica' class='form-control-label'>Applica immediatamente anche a tutte le sedi associate e a tutti i dipendenti gia' presenti</label>
+        </div>
+
+      </li>
+      <!-- blocco automazione cambio password al primo accesso -->
+      <li class="list-group-item">
+        <div class='form-check'>
+          <input class="form-check-input" type="checkbox" {% if azienda.forzanuovapassword.value %} checked {% endif %} id="forzanuovapassword" name="forzanuovapassword" {% if admin.sola_lettura %} disabled {% endif %}/>
+          <label for='forzanuovapassword' class='form-control-label'>Il dipendente deve cambiare la password al primo login. (Opzione valida per i nuovi inserimenti) </label>
+          </div>
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" id="forzanuovapasswordreplica" name="forzanuovapasswordreplica" {% if admin.sola_lettura %} disabled {% endif %}/>
+          <label for='forzanuovapasswordreplica' class='form-control-label'>Applica immediatamente anche a tutte le sedi associate e a tutti i dipendenti gia' presenti</label>
+        </div>
+      </li>
 
-    <div class='form-check'>
-      <input class="form-check-input" type="checkbox" {% if azienda.forzanuovapassword.value %} checked {% endif %} id="forzanuovapassword" name="forzanuovapassword">
-      <label for='forzanuovapassword' class='form-control-label'>Il dipendente deve cambiare la password al primo login</label>
+      <!-- blocco automazione OTP accesso -->
+      <li class="list-group-item">
+        <div class='form-check'>
+          <input class="form-check-input" type="checkbox" {% if azienda.otppassword.value %} checked {% endif %} id="otppassword" name="otppassword" {% if admin.sola_lettura %} disabled {% endif %}/>
+          <label for='otppassword' class='form-control-label'>Il dipendente riceve un OTP a conferma del login. (Opzione valida per i nuovi inserimenti) </label>
+          </div>
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" id="otppasswordreplica" name="otppasswordreplica" {% if admin.sola_lettura %} disabled {% endif %}/>
+          <label for='otppasswordreplica' class='form-control-label'>Applica immediatamente anche a tutte le sedi associate e a tutti i dipendenti gia' presenti</label>
+        </div>
+      </li>
+
+      <!-- cancellazione azienda -->
+      <li class="list-group-item">
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" value="{{ azienda.cancellaazienda.value }}" id="cancellaazienda" name="cancellaazienda" {% if admin.sola_lettura %} disabled {% endif %}>
+          <label class="form-check-label" for="cancellaazienda">Cancella Azienda!</label>
+        </div>
+      </li>
+
+    </ul>
     </div>
-    <div class="form-check">
-      <input class="form-check-input" type="checkbox" value="{{ azienda.cancellaazienda.value }}" id="cancellaazienda" name="cancellaazienda">
-      <label class="form-check-label" for="cancellaazienda">Cancella Azienda!</label>
+    <br>
+    <div class="btn-group">
+      <input type='submit' class="btn btn-secondary" value='Aggiorna' {% if admin.sola_lettura %} disabled {% endif %}>
+      <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
     </div>
-
-    <input type='submit' class="btn btn-secondary" value='Aggiorna'>
-    <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
   </form>
 
 </div>{% endblock %}

+ 60 - 18
azienda/templates/azienda.editSede.html

@@ -11,7 +11,7 @@
 
 {% block body %}
 
-  <!-- errori utente -->
+  <!-- errori form sede -->
   {% if sede.errors %}
     {{ sede.errors }}
     {% for field in sede %}
@@ -32,34 +32,76 @@
   {% endif %}
   <!-- fine zona errori -->
 
-  <!-- profilo utente -->
+  <!-- profilo sede -->
   <form name='SedeEdit' method='post'>
     {% csrf_token %}
     <div class='form-group'>
       <label for="nome">Nome Sede</label>
-      <input type='text' class='form-control form-control-lg' name='nome' id='nome' value='{{ sede.nome.value }}'>
+      <input type='text' class='form-control form-control-lg' name='nome' id='nome' value='{{ sede.nome.value }}' {% if admin.sola_lettura %}readonly{% endif %}>
     </div>
     <div class='form-group'>
-      <label for="info">Info</label>
-      <input type='text' class='form-control form-control-lg' name='info' id='info' value='{{ sede.info.value }}'>
-    </div>
-    <div class='form-check'>
-      <input class="form-check-input" type="checkbox" {% if sede.cambiopassword.value %} checked {% endif %} id="cambiopassword" name="cambiopassword">
-      <label for='cambiopassword' class='form-control-label'>Il dipendente puo' cambiare la password autonomamente</label>
+     <label for="info">Info</label>
+      <input type='text' class='form-control form-control-lg' name='info' id='info' value='{{ sede.info.value }}' {% if admin.sola_lettura %}readonly{% endif %}>
     </div>
 
-    <div class='form-check'>
-      <input class="form-check-input" type="checkbox" {% if sede.forzanuovapassword.value %} checked {% endif %} id="forzanuovapassword" name="forzanuovapassword">
-      <label for='forzanuovapassword' class='form-control-label'>Il dipendente deve cambiare la password al primo login</label>
+    <br>
+    <div class="card">
+      <div class="card-header">
+        Opzioni Comuni
+      </div>
+      <ul class="list-group list-group-flush">
+      <li class="list-group-item">
+        <div class='form-check'>
+          <input class="form-check-input" type="checkbox" {% if sede.cambiopassword.value %} checked {% endif %} id="cambiopassword" name="cambiopassword" {% if admin.sola_lettura %} readonly {% endif %}>
+          <label for='cambiopassword' class='form-control-label'>Il dipendente può aggiornare la password</label>
+        </div>
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" id="cambiopasswordreplica" name="cambiopasswordreplica" {% if admin.sola_lettura %}readonly{% endif %}/>
+          <label for='cambiopasswordreplica' class='form-control-label'>Applica immediatamente anche a tutte le sedi associate e a tutti i dipendenti gia' presenti</label>
+        </div>
+
+      </li>
+      <!-- blocco automazione cambio password al primo accesso -->
+      <li class="list-group-item">
+        <div class='form-check'>
+          <input class="form-check-input" type="checkbox" {% if sede.forzanuovapassword.value %} checked {% endif %} id="forzanuovapassword" name="forzanuovapassword" {% if admin.sola_lettura %}readonly{% endif %}/>
+          <label for='forzanuovapassword' class='form-control-label'>Il dipendente deve cambiare la password al primo login. (Opzione valida per i nuovi inserimenti) </label>
+          </div>
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" id="forzanuovapasswordreplica" name="forzanuovapasswordreplica" {% if admin.sola_lettura %}readonly{% endif %}/>
+          <label for='forzanuovapasswordreplica' class='form-control-label'>Applica immediatamente anche a tutte le sedi associate e a tutti i dipendenti gia' presenti</label>
+        </div>
+      </li>
+
+      <!-- blocco automazione OTP accesso -->
+      <li class="list-group-item">
+        <div class='form-check'>
+          <input class="form-check-input" type="checkbox" {% if sede.otppassword.value %} checked {% endif %} id="otppassword" name="otppassword" {% if admin.sola_lettura %}readonly{% endif %}/>
+          <label for='otppassword' class='form-control-label'>Il dipendente riceve un OTP a conferma del login. (Opzione valida per i nuovi inserimenti) </label>
+          </div>
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" id="otppasswordreplica" name="otppasswordreplica" {% if admin.sola_lettura %}readonly{% endif %}/>
+          <label for='otppasswordreplica' class='form-control-label'>Applica immediatamente anche a tutte le sedi associate e a tutti i dipendenti gia' presenti</label>
+        </div>
+      </li>
+
+      <!-- cancellazione azienda -->
+      <li class="list-group-item">
+        <div class="form-check">
+          <input class="form-check-input" type="checkbox" value="{{ azienda.cancellaazienda.value }}" id="cancellaazienda" name="cancellaazienda" {% if admin.sola_lettura %}readonly{% endif %}>
+          <label class="form-check-label" for="cancellaazienda">Cancella Azienda!</label>
+        </div>
+      </li>
+
+    </ul>
     </div>
 
-    <div class="form-check">
-      <input class="form-check-input" type="checkbox" value="{{ sede.cancellasede.value }}" id="cancellasede" name="cancellasede">
-      <label class="form-check-label" for="cancellasede">Cancella Azienda!</label>
+    <br>
+    <div class="btn-group">
+      <input type='submit' class="btn btn-secondary" value='Aggiorna' {% if admin.sola_lettura %} disable {% endif %}>
+      <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
     </div>
 
-    <input type='submit' class="btn btn-secondary" value='Aggiorna'>
-    <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
   </form>
 
-</div>{% endblock %}
+</div>{% endblock %>

+ 6 - 0
comunicazione/models.py

@@ -10,7 +10,13 @@ class Comunicazione(models.Model):
   soggetto = models.CharField(max_length=256,null=True)
   corpo = models.CharField(max_length=2048,null=True)
   azienda = models.ForeignKey(Azienda,default=0,on_delete=models.CASCADE)
+
+  def __str__(self):
+    return f"{self.id}: {self.soggetto}"
+
   class Meta:
     ordering = ['soggetto']
     constraints = [ models.UniqueConstraint(fields=['soggetto'], name="unique-comunicazionesoggetto") ]
     indexes = [ models.Index(fields=['soggetto']) ]
+
+

+ 6 - 0
config/models.py

@@ -4,6 +4,12 @@ class Config(models.Model):
     indice = models.CharField(max_length=32,null=False)
     valore = models.CharField(max_length=128,null=True)
     nota = models.CharField(max_length=256,null=True)
+
+    def __str__(self):
+       return f"{self.id}: {self.nome}"
+
     class Meta:
       constraints = [ models.UniqueConstraint(fields=['indice'], name="unique-indice") ]
       indexes = [ models.Index(fields=['indice']) ]
+
+

BIN
db/db.sqlite3


+ 5 - 2
documento/models.py

@@ -5,14 +5,17 @@ from comunicazione.models import *
 
 class Documento(models.Model):
   utente = models.ForeignKey(Utente,on_delete=models.CASCADE)
-  azienda = models.ForeignKey(Azienda,default=0,on_delete=models.CASCADE)
   documento = models.CharField(max_length=256,null=True,default="")
   storage = models.CharField(max_length=256,null=True,default="")
   dataupload = models.DateField(null=True,default=datetime.date.today)
   crc = models.CharField(max_length=256,null=False,default="")
   descrizione = models.CharField(max_length=128,null=False,default="")
-  
+
+  def __str__(self):
+    return f"{self.id}: {self.documento}"
+ 
   class Meta:
     constraints = [ models.UniqueConstraint(fields=['documento'], name="unique-documento") ]
     #indexes = [ models.Index(fields=['documento','utente']) ]
 
+

+ 71 - 60
documento/templates/documento.welcome.html

@@ -12,38 +12,45 @@
     </div>
 
     <!-- tasti per il ritorno e altre funzioni generiche -->
-  <div class='card'>
-    <div class='card-body'>
-      <h5 class="card-title">Upload Indici e Documenti</h5>
-      <form name='upload' method='post' enctype='multipart/form-data'>
-        {% csrf_token %}
-	<div class='form-group form-inline'>
-	  <label for='indice'>Indice Utenti:&nbsp;</label>
-          <input type='file' class="btn btn-primary" name='indice' id='indice' value='{{ uf.indice }}' accept='text/csv'>
-          <label for='allegati'>Allegati:</label>
-          <input type='file' class="btn btn-primary" name='allegati' id='allegati' value='{{ uf.allegati }}' accept='application/pdf' multiple>
-        </div>
-        <div><br></div>
-        <div class='form-check'>
-          <label for='pertutti' class='form-check-label'>Documento in comune (un singolo documento a disposizione di tutti gli utenti)</label>
-          <input type='checkbox' class="form-check-input" name='pertutti' id='pertutti'>
-        </div>
-	<div><br></div>
-	<div class='form-group form-inline'>
-          <label for='descrizione'>Descrizione:&nbsp;</label>
-          <input type='text' name='descrizione' id='descrizione' value='' maxlength='120' size='80'>
-        </div>
-	<div><br></div>
-	<div class='form-group form-inline'>
-	  <input type='submit' class="btn btn-primary" name='Ritorna' value='Ritorna'>
-	  <input type='submit' class="btn btn-primary" value='Carica Nuovi Documenti'>
-          <button type='button' class='btn btn-primary' data-bs-toggle='modal' data-bs-target='#ConfirmDocumentDeleteModal'>Elimina Vecchi Documenti</button></td>
+    {% if admin.crea_documento %}
+      <div class='card'>
+        <div class='card-body'>
+          <h5 class="card-title">Upload Indici e Documenti</h5>
+          <form name='upload' method='post' enctype='multipart/form-data'>
+            {% csrf_token %}
+	    <div class='form-group form-inline'>
+	      <label for='indice'>Indice Utenti:&nbsp;</label>
+              <input type='file' class="btn btn-primary" name='indice' id='indice' value='{{ uf.indice }}' accept='text/csv'>
+              <label for='allegati'>Allegati:</label>
+              <input type='file' class="btn btn-primary" name='allegati' id='allegati' value='{{ uf.allegati }}' accept='application/pdf' multiple>
+            </div>
+
+            <div><br></div>
+
+            <div class='form-check'>
+              <label for='pertutti' class='form-check-label'>Documento in comune (un singolo documento a disposizione di tutti gli utenti)</label>
+              <input type='checkbox' class="form-check-input" name='pertutti' id='pertutti'>
+            </div>
+
+            <div><br></div>
+
+   	    <div class='form-group form-inline'>
+              <label for='descrizione'>Descrizione:&nbsp;</label>
+              <input type='text' name='descrizione' id='descrizione' value='' maxlength='120' size='80'>
+            </div>
+
+  	    <div><br></div>
+
+  	    <div class='form-group form-inline'>
+	      <input type='submit' class="btn btn-primary" name='Ritorna' value='Ritorna'>
+	      <input type='submit' class="btn btn-primary" value='Carica Nuovi Documenti'>
+              <button type='button' class='btn btn-primary' data-bs-toggle='modal' data-bs-target='#ConfirmDocumentDeleteModal'>Elimina Vecchi Documenti</button></td>
+            </div>
+          </form>
         </div>
-      </form>
-    </div>
-  </div>
+      </div>
     <!-- fine barra tasti ritorno e utilita' -->
-
+    {% endif %}
 {% endblock %}
 
 {% block body %}
@@ -64,7 +71,7 @@
     {% endif %}
 
   
-  {% if ElencoDocumentiPerAzienda %}
+  {% if ElencoDocumenti %}
     <table class='table table-striped table-hover'>
       <thead class='thead-dark'>
       <tr>
@@ -74,11 +81,11 @@
         <th scope='col'>Documento</th>
         <th scope='col'>Descrizione</th>
         <th scope='col'>Inserimento</th>
-        <th scope='col'>Cancella</th>
+        {% if admin.edit_documento %} <th scope='col'>Cancella</th> {% endif %}
       </tr>
       </thead>
       <tbody>
-        {% for documento in ElencoDocumentiPerAzienda %}
+        {% for documento in ElencoDocumenti %}
         <tr>
           <td><input type='checkbox' class='form-check-input' value='{{ documento.id }}' name='selezione'></td>
           <td> <button type='button' class='btn btn-primary btn-block btn-lg mb-2 active' onclick="window.open('{% url "documento:finalize" documento.id documento.utente.id%}')">Vedi</button></td>
@@ -86,34 +93,37 @@
 	  <td> {{ documento.documento }}<br>{{ documento.storage }} </td>
           <td> {{ documento.descrizione }} </td>
           <td> {{ documento.dataupload | date:'d/m/Y' }} </td>
-          <td><button type='button' class='btn btn-secondary' data-bs-toggle='modal' data-bs-target='#ConfirmDeleteModal{{ documento.id }}' value='{{ documento.id }}'>Elimina</button></td>
+          {% if admin.edit_documento %}
+            <td><button type='button' class='btn btn-secondary' data-bs-toggle='modal' data-bs-target='#ConfirmDeleteModal{{ documento.id }}' value='{{ documento.id }}'>Elimina</button></td>
+          {% endif %}
         </tr>
-        <!-- Modal -->
-       <div class="modal fade" id="ConfirmDeleteModal{{ documento.id }}" tabindex="-1" role="dialog" aria-labelledby="ConfirmDeleteLabel{{ document.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</h5>
-              <button type="button" class="close" data-bs-dismiss="modal" aria-label="Chiudi">
-                <span aria-hidden="true">&times;</span>
-              </button>
+        {% if admin.edit_documento %}
+          <!-- Modal -->
+          <div class="modal fade" id="ConfirmDeleteModal{{ documento.id }}" tabindex="-1" role="dialog" aria-labelledby="ConfirmDeleteLabel{{ document.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</h5>
+                  <button type="button" class="close" data-bs-dismiss="modal" aria-label="Chiudi">
+                   <span aria-hidden="true">&times;</span>
+                  </button>
+                </div>
+                <div class="modal-body">
+                  Confermi la cancellazione di {{ documento.documento }}?<br>
+                  La cancellazione del documento è definitiva,immediata e non recuperabile.
+                </div>
+                <div class="modal-footer">
+                  <form name='ConfirmDeleteModal' method='POST'>
+                    {% csrf_token %}
+                    <button type="submit" name="DeleteDocument" value='{{ documento.id }}' class="btn btn-primary">Cancella</button>
+                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Chiudi</button>
+                  </form>
+                </div>
+              </div>
             </div>
-            <div class="modal-body">
-            Confermi la cancellazione di {{ documento.documento }}?<br>
-            La cancellazione del documento è definitiva,immediata e non recuperabile.
-           </div>
-           <div class="modal-footer">
-             <form name='ConfirmDeleteModal' method='POST'>
-               {% csrf_token %}
-               <button type="submit" name="DeleteDocument" value='{{ documento.id }}' class="btn btn-primary">Annulla</button>
-             </form>
-            <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Chiudi</button>
-
-           </div>
-         </div>
-       </div>
-     </div>
-     <!-- end modal -->
+          </div>
+          <!-- end modal -->
+          {% endif %}
         {% endfor %}
       </tbody>
     </table>
@@ -125,6 +135,7 @@
   <br>
   </div>
 
+  {% if admin.edit_documento %}
   <!-- Modal -->
   <div class="modal fade" id="ConfirmDocumentDeleteModal" tabindex="-1" role="dialog" aria-labelledby="ConfirmDocumentDeleteLabel{{ document.id }}" aria-hidden="true">
          <div class="modal-dialog" role="document">
@@ -153,7 +164,7 @@
        </div>
      </div>
      <!-- end modal -->
- 
+   {% endif %}
   <div><br></div>
 
 

+ 2 - 1
documento/urls.py

@@ -3,7 +3,8 @@ from . import views
 
 app_name='documento'
 urlpatterns = [
-  path('welcome',views.welcome,name='welcome'),
+  path('welcome/',views.welcome,name='welcome'),
+  path('welcome/<int:utente>',views.welcome,name='welcome'),
   path('finalize/<int:did>',views.finalize_download,name='finalize'),
   path('finalize/<int:did>/<int:uid>',views.finalize_download,name='finalize'),
   ]

+ 23 - 6
documento/views.py

@@ -16,7 +16,7 @@ from att.views import *
 from datetime import datetime,timedelta
 from comunicazione.views import ServizioMail
 
-def welcome(request):
+def welcome(request,utente=None):
   '''
   punto di ingresso.
   vengono mostrati tutti i documenti presenti
@@ -64,9 +64,11 @@ def welcome(request):
   #filtro:
   # selezionare tutti gli utenti per AziendaId
   admin = Amministratore.objects.get(pk=data['AdminId'])
-  data['admin'] = admin
+  data['admin'] = admin 
+
   azienda = Azienda.objects.get(pk=data['AziendaId'])
   data['azienda'] = azienda
+
   utenti = Utente.objects.filter(azienda = azienda)  
   data['utenti'] = utenti
 
@@ -102,7 +104,7 @@ def welcome(request):
           delete_file(i)
           i.delete()
 
-    if 'DeleteDocument' in request.POST:
+    if 'DeleteDocument' in request.POST and request.POST.get('DeleteDocument'):
       print('Richiesta cancellazione Documento',request.POST)
       documento = request.POST['DeleteDocument']  # perche' lo considera una lista e non un singolo valore?
       print('richiesta cancellazione documento:',documento)
@@ -136,9 +138,24 @@ def welcome(request):
         data['listaok'] = listaok
         data['listanotok'] = listanotok
 
-  ElencoDocumentiPerAzienda = Documento.objects.filter(azienda=azienda).order_by("utente__nome","documento")
-  data['ElencoDocumentiPerAzienda'] = ElencoDocumentiPerAzienda
-  print("Numero documenti associati",len(ElencoDocumentiPerAzienda))
+  ElencoDocumenti = list()
+  if utente: #visualizza i documenti per l'utente
+    ElencoDocumenti = Documento.objects.filter(utente=utente).order_by("utente__nome","documento") 
+  elif sede:
+    tmpUtenti = sede.utente_set.all()
+    for t in tmpUtenti:
+      d = t.documento_set.all()
+      for id in d:
+        ElencoDocumenti.append(id)
+  else:
+    tmpUtenti = azienda.utente_set.all()
+    for t in tmpUtenti:
+      d = t.documento_set.all()
+      for id in d:
+        ElencoDocumenti.append(id)
+
+  data['ElencoDocumenti'] = ElencoDocumenti
+  print("Numero documenti associati",len(ElencoDocumenti),len(data['ElencoDocumenti']))
 
   return render(request,'documento.welcome.html',data)
 

+ 1 - 1
gd/settings.py

@@ -131,7 +131,7 @@ STATIC_URL = 'static/'
 
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 
-FORCE_SCRIPT_NAME = '/gd'
+#FORCE_SCRIPT_NAME = '/gd'
 
 #la sessione comunque scade alla chiusura del browser
 SESSION_EXPIRE_AT_BROWSER_CLOSE=True

+ 4 - 0
utente/models.py

@@ -27,3 +27,7 @@ class Utente(models.Model):
     class Meta:
       constraints = [ models.UniqueConstraint(fields=['nome','codicefiscale'], name="unique-utente") ]
       indexes = [ models.Index(fields=['codicefiscale','nome']) ]
+
+      def __str__(self):
+        return f"{self.id}: {self.nome}"
+

+ 19 - 9
utente/templates/utente.welcome.html

@@ -3,8 +3,12 @@
 {% block body %}
   <form name="inputUtente" method="POST">
   <div class='form-control'>
-    <input type='submit' class="btn btn-secondary" name='scelta' value='Nuovo Dipendente' {% if admin.crea_utente %} disable {% endif %}>
-    <input type='submit' class="btn btn-secondary" name='CaricamentiMultipli' value='Caricamenti Multipli' {% if admin.crea_documento %} disable {% endif %}>
+    {% if admin.edit_utente %}
+      <input type='submit' class="btn btn-secondary" name='scelta' value='Nuovo Dipendente' {% if admin.crea_utente %} disable {% endif %}>
+    {% endif %}
+    {% if admin.edit_documento %}
+      <input type='submit' class="btn btn-secondary" name='CaricamentiMultipli' value='Caricamenti Multipli' {% if admin.crea_documento %} disable {% endif %}>
+    {% endif %}
      <input type='submit' class="btn btn-primary" name="ritorna" value="Ritorna">
   </div>
 
@@ -12,15 +16,17 @@
   <table class='table table-striped table-hover'>
     <thead class='thead-dark'>
       <tr>
-        <th scope='col'>Id</th>
+        {% if admin.edit_utente %}<th scope='col'>*</th>{% endif %}
         <th scope='col'>Nome</th>
         <th scope='col'>Codice Fiscale</th>
         <th scope='col'>Sede</th>
         <th scope='col'>Data di Nascita</th>
 	<th scope='col'>Luogo di Nascita</th>
 	<th scope='col'>documenti</th>
-        <th scope='col'>Mail</th>
-	<th scope='col'>Pin</th>
+        {% if admin.edit_utente %}
+          <th scope='col'>Mail</th>
+  	  <th scope='col'>Pin</th>
+        {% endif %}
         <th scope='col'>Inserimento</th>
       </tr>
     </thead>
@@ -28,15 +34,19 @@
       {% csrf_token %}
       {% for uu in utenti %}
         <tr>
-		<td> <button type='submit' class='btn btn-primary btn-block btn-lg mb-2 active' name='scelta' value='{{ uu.id }}' {% if admin.crea_utente %}disable{% endif %}>Edit</button></td>
+          {% if admin.edit_utente %}
+            <td> <button type='submit' class='btn btn-primary btn-block btn-lg mb-2 active' name='scelta' value='{{ uu.id }}' {% if admin.crea_utente %}disable{% endif %}>Edit</button></td>
+          {% endif %}
           <td> {{ uu.nome }} </td>
 	  <td> {{ uu.codicefiscale }} </td>
           <td> {{ uu.sede.nome }} </td>
 	  <td> {{ uu.datanascita|date:'d/m/Y' }} </td>
 	  <td> {{ uu.luogonascita }} </td>
-	  <td> {{ uu.documenti }} </td>
-          <td> {{ uu.mail }} </td>
-          <td> {{ uu.pin }} </td>
+	  <td> <a href='{% url 'documento:welcome' uu.id %}'>{{ uu.documenti }}</a></td>
+          {% if admin.edit_utente %}
+            <td> {{ uu.mail }} </td>
+            <td> {{ uu.pin }} </td>
+          {% endif %}
           <td> {{ uu.inserimento|date:'d/m/Y' }} </td>
 	</tr>
       {% endfor %}