Bläddra i källkod

abilitata gestione flag privato

Mauro 3 månader sedan
förälder
incheckning
c974217832

+ 4 - 2
documento/managefile.py

@@ -171,7 +171,7 @@ def associafile_a_utente(singolodocumento,request,utente,azienda=None,sede=None,
 
 ##################################################################################
 # carica file multipli. Utilizzato prevalentemente dalla gestione documenti.
-def save_and_load_file_multiple(listadocumenti,request,utente,azienda=None,sede=None,descrizione=None,amministratore=None,pertutti=False,ignoraAzienda=False,ignoraSede=False):
+def save_and_load_file_multiple(listadocumenti,request,utente,azienda=None,sede=None,descrizione=None,amministratore=None,pertutti=False,ignoraAzienda=False,ignoraSede=False,privato=False):
   listaok = list()
   listanotok = list()
 
@@ -180,6 +180,7 @@ def save_and_load_file_multiple(listadocumenti,request,utente,azienda=None,sede=
   print("Ignora le aziende",ignoraAzienda)
   print("Ignora le sedi",ignoraSede)
   print("Per tutti",pertutti)
+  privato("Privato",privato)
 
   for singolodocumento in listadocumenti:
     print('singolodocumento:',singolodocumento)
@@ -217,7 +218,7 @@ def save_and_load_file_multiple(listadocumenti,request,utente,azienda=None,sede=
   return (listaok,listanotok)
 
 #carica un singolofile - utilizzato prevalentemente nella pagina utente
-def save_and_load_file_single(listadocumenti,request,utente,azienda=None,sede=None,descrizione=None,amministratore=None):
+def save_and_load_file_single(listadocumenti,request,utente,azienda=None,sede=None,descrizione=None,amministratore=None,privato=False):
   """
   listadocumenti  da caricare 
   request: i documenti vengono caricati via web
@@ -242,6 +243,7 @@ def save_and_load_file_single(listadocumenti,request,utente,azienda=None,sede=No
     documento.documento = singolodocumento.name
     #documento.storage = risultato
     documento.descrizione = descrizione
+    documento.privato = privato
     try:
       documento.save()
       setLog(8,azienda=azienda,sede=sede,utente=utente,documento=documento,amministratore=amministratore)

+ 55 - 3
documento/templates/documento.welcome.lista.html

@@ -46,12 +46,63 @@
 	  {% endif %}
 	  <td>{{ documento.documento }}<br>{{ documento.descrizione }} </td>
           <td>{{ documento.dataupload | date:'d/m/Y' }} </td>
-	  <td>{% if documento.privato %}Pvt{% endif %}</td>
+	  <td>{% if documento.privato %}
+                <button type='button' class='btn btn-primary btn-sm' data-bs-toggle='modal' data-bs-target='#UnsetPrivateModal{{ documento.id }}' value='{{ documento.id }}'>Pvt</button>
+              {% else %}
+                <button type='button' class='btn btn-primary btn-sm' data-bs-toggle='modal' data-bs-target='#SetPrivateModal{{ documento.id }}' value='{{ documento.id }}'>Pub</button>
+              {% endif %}</td>
             {% if 'DOCUMENTO.EDIT' in permesso %}
             <td><button type='button' class='btn btn-primary btn-sm' data-bs-toggle='modal' data-bs-target='#ConfirmDeleteModal{{ documento.id }}' value='{{ documento.id }}'>Elimina</button></td>
             {% endif %}
   	  <td><input class="form-check-input" type="checkbox" form="ElencoDocumenti" id="select-{{ documento.id }}" name="MultipleDocumentSelect" value='{{ documento.id }}'/></td>
         </tr>
+
+          <!-- Modal -->
+          <div class="modal fade" id="UnsetPrivateModal{{ documento.id }}" tabindex="-1" role="dialog" aria-labelledby="UnsetPrivateLabel{{ document.id }}" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+              <div class="modal-content">
+                <div class="modal-header">
+                  <h5 class="modal-title" id="UnsetPrivateLabel">Rimuove flag Privato</h5>
+                </div>
+                <div class="modal-body">
+                  Il documento sarà disponibile al dipendente e agli amministratori
+                </div>
+                <div class="modal-footer">
+                  <form name='ConfirmUnsetPRivateModal' method='POST'>
+                    {% csrf_token %}
+                    <button type="submit" name="UnsetPrivateDocument" value='{{ documento.id }}' class="btn btn-primary">Togli Privato</button>
+                    <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Chiudi/Annulla</button>
+                  </form>
+                </div>
+              </div>
+            </div>
+          </div>
+          <!-- end modal -->
+
+        {% endif %}
+
+          <!-- Modal -->
+          <div class="modal fade" id="SetPrivateModal{{ documento.id }}" tabindex="-1" role="dialog" aria-labelledby="SetPrivateLabel{{ document.id }}" aria-hidden="true">
+            <div class="modal-dialog" role="document">
+              <div class="modal-content">
+                <div class="modal-header">
+                  <h5 class="modal-title" id="SetPrivateLabel">Il documento viene reso privato</h5>
+                </div>
+                <div class="modal-body">
+                 Il documento è visibile solo al dipendente 
+                </div>
+                <div class="modal-footer">
+                  <form name='ConfirmSetPrivateModal' method='POST'>
+                    {% csrf_token %}
+                    <button type="submit" name="SetPrivateDocument" value='{{ documento.id }}' class="btn btn-primary">Rendi Privato</button>
+                    <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Chiudi/Annulla</button>
+                  </form>
+                </div>
+              </div>
+            </div>
+          </div>
+          <!-- end modal -->
+
           <!-- 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">
@@ -69,7 +120,7 @@
                 <div class="modal-footer">
                   <form name='ConfirmDeleteModal' method='POST'>
                     {% csrf_token %}
-                    <button type="submit" name="DeleteDocument" value='{{ documento.id }}' class="btn btn-primary">Cancella Documento</button>
+                    <button type="submit" name="DeleteDocument" value='{{ documento.id }}' class="btn btn-primary">Rimuove Privato</button>
                     <button type="button" class="btn btn-primary" data-bs-dismiss="modal">Chiudi/Annulla</button>
                   </form>
                 </div>
@@ -77,7 +128,8 @@
             </div>
           </div>
           <!-- end modal -->
-        {% endif %}
+
+
         {% endfor %}
       </tbody>
     </table>

+ 117 - 75
documento/views.py

@@ -103,78 +103,7 @@ def welcome(request,utente=None):
   print('permesso generale:',data['permesso'])
   print("CAZZO CAZZO CAZZO")
 
-  #####
-  # filtro temporaneo, non mostra i documenti che iniziano per EMO
-  #####
-  tmp = list()
-  if not "DOCUMENTO.MOSTRA.PRIVATO" in data['permesso']:
-    for ed in ElencoDocumenti:
-       if "emo_" not in ed.documento.lower() and not ed.privato:
-         tmp.append(ed)
-  else:
-    tmp = ElencoDocumenti     
-    
-  print('ElencoDocumenti/tmp',len(ElencoDocumenti),len(tmp))
-    
-  ### sequenza di ordinamento ####
-  print('Sequenza di ordinamento - lettura tasti ')
-  print(request.POST)
-  if request.method == "POST" and 'uteUP' in request.POST:
-    print('uteUP')
-    request.session['docOrder'] = 'uteUP'
-    
-  if request.method == "POST" and 'uteDW' in request.POST:
-    print('uteDW')
-    request.session['docOrder'] = 'uteDW'
-    
-  if request.method == "POST" and 'docUP' in request.POST:
-    print('docUP')
-    request.session['docOrder'] = 'docUP'
-        
-  if request.method == "POST" and 'docDW' in request.POST:
-    print('docDW')
-    request.session['docOrder'] = 'docDW'
-
-  if request.method == "POST" and 'seUP' in request.POST:
-    print('seUP')
-    request.session['docOrder'] = 'seUP'
-        
-  if request.method == "POST" and 'seDW' in request.POST:
-    print('seDW')
-    request.session['docOrder'] = 'seDW'
-
-  if request.method == "POST" and 'carUP' in request.POST:
-    print('carUP')
-    request.session['docOrder'] = 'carUP'
-        
-  if request.method == "POST" and 'carDW' in request.POST:
-    print('carDW')
-    request.session['docOrder'] = 'carDW'
-
-  print('Fine Sequenza di ordinamento - lettura tasti')
-
-  res = None
-  if 'docOrder' in request.session and 'uteDW' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.utente.nome,reverse=False)
-  if 'docOrder' in request.session and 'uteUP' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.utente.nome,reverse=True)
-  if 'docOrder' in request.session and 'docDW' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.documento ,reverse=False)
-  if 'docOrder' in request.session and 'docUP' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.documento,reverse=True)
-  if 'docOrder' in request.session and 'seDW' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.utente.sede.nome ,reverse=False)
-  if 'docOrder' in request.session and 'seUP' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.utente.sede.nome,reverse=True)
-  if 'docOrder' in request.session and 'carDW' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.dataupload ,reverse=False)
-  if 'docOrder' in request.session and 'carUP' in request.session.get('docOrder'):
-    res = sorted(tmp, key = lambda x: x.dataupload,reverse=True)
-
-  if not res:
-    data['ElencoDocumenti'] = tmp     
-  else:
-    data['ElencoDocumenti'] = res 
+  #### il vecchio codice era qui
 
   if 'AziendaId' in data:
     print('livello azienda',getAZP(data['AziendaId'],admin)[0])
@@ -196,7 +125,6 @@ def welcome(request,utente=None):
       print("AdminId",request.session['AdminId'])
       return HttpResponseRedirect(reverse("azienda:welcome"))
 
-
     if 'ScaricaSelezionati' in request.POST:
       print('Premuto tasto Scarica Selezionati')
       print('request.POST',request.POST)
@@ -249,6 +177,29 @@ def welcome(request,utente=None):
       except Documento.DoesNotExist as dne:
         print('il documento non esiste')
 
+    if 'SetPrivateDocument' in request.POST and request.POST.get('SetPrivateDocument'):
+      print('Richiesta setPrivate',request.POST)
+      documento = request.POST['SetPrivateDocument']  # perche' lo considera una lista e non un singolo valore?
+      print('richiesta SetPrivateDocument documento:',documento)
+
+      try:
+        d = Documento.objects.get(pk=documento)
+        d.privato = True
+        d.save()
+      except Documento.DoesNotExist as dne:
+        print('il documento non esiste')
+
+    if 'UnsetPrivateDocument' in request.POST and request.POST.get('UnsetPrivateDocument'):
+      print('Richiesta UnsetPrivate',request.POST)
+      documento = request.POST['UnsetPrivateDocument']  # perche' lo considera una lista e non un singolo valore?
+      print('richiesta UnsetPrivateDocument documento:',documento)
+      try:
+        d = Documento.objects.get(pk=documento)
+        d.privato = False 
+        d.save()
+      except Documento.DoesNotExist as dne:
+        print('il documento non esiste')
+
     if "CaricaDocumentoButton" in request.POST:
       print("Premuto CaricaDocumentoButton")
       filecaricati = AdminUpload(request.POST,request.FILES)
@@ -263,6 +214,7 @@ def welcome(request,utente=None):
         comunicazione = filecaricati.cleaned_data.get('comunicazione')
         ignoraAzienda = filecaricati.cleaned_data.get('ignoraAzienda')
         ignoraSede = filecaricati.cleaned_data.get('ignoraSede')
+        privato = filecaricati.cleaned_data.get('privato')
 
         if 'allegati' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('allegati'):
           print('presenti documenti da allegare')
@@ -275,11 +227,11 @@ def welcome(request,utente=None):
             # effettua una scelta nel caso venga indicata di caricare il documento ignorando azienda e sede e cercando il codice fiscale ovunque
             if ignoraAzienda:
               # ignoraAzienda: cerca ovunque, in tutte le aziende
-              listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,Utente.objects.filter(special=False),azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda)
+              listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,Utente.objects.filter(special=False),azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda,privato=privato)
               # e non va bene: dovrebbe cercare in tutte le aziende autorizzate per quell'amministratore
             elif ignoraSede:
               # ignora sede: cerca in tutta l'azienda ignorando le sedi (sempre che ci siano)
-              listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,azienda.utente_set.filter(special=False),azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda)
+              listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,azienda.utente_set.filter(special=False),azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda,privato=privato)
             else:
               # carica solo per l'utente.
               listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda)
@@ -327,6 +279,96 @@ def welcome(request,utente=None):
             sm.send()
             ### comunicazioni ###
 
+  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)
+
+  #####
+  # filtro temporaneo, non mostra i documenti che iniziano per EMO
+  #####
+  tmp = list()
+  if not "DOCUMENTO.MOSTRA.PRIVATO" in data['permesso']:
+    for ed in ElencoDocumenti:
+       if "emo_" not in ed.documento.lower() and not ed.privato:
+         tmp.append(ed)
+  else:
+    tmp = ElencoDocumenti     
+    
+  print('ElencoDocumenti/tmp',len(ElencoDocumenti),len(tmp))
+    
+  ### sequenza di ordinamento ####
+  print('Sequenza di ordinamento - lettura tasti ')
+  print(request.POST)
+  if request.method == "POST" and 'uteUP' in request.POST:
+    print('uteUP')
+    request.session['docOrder'] = 'uteUP'
+    
+  if request.method == "POST" and 'uteDW' in request.POST:
+    print('uteDW')
+    request.session['docOrder'] = 'uteDW'
+    
+  if request.method == "POST" and 'docUP' in request.POST:
+    print('docUP')
+    request.session['docOrder'] = 'docUP'
+        
+  if request.method == "POST" and 'docDW' in request.POST:
+    print('docDW')
+    request.session['docOrder'] = 'docDW'
+
+  if request.method == "POST" and 'seUP' in request.POST:
+    print('seUP')
+    request.session['docOrder'] = 'seUP'
+        
+  if request.method == "POST" and 'seDW' in request.POST:
+    print('seDW')
+    request.session['docOrder'] = 'seDW'
+
+  if request.method == "POST" and 'carUP' in request.POST:
+    print('carUP')
+    request.session['docOrder'] = 'carUP'
+        
+  if request.method == "POST" and 'carDW' in request.POST:
+    print('carDW')
+    request.session['docOrder'] = 'carDW'
+
+  print('Fine Sequenza di ordinamento - lettura tasti')
+
+  res = None
+  if 'docOrder' in request.session and 'uteDW' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.utente.nome,reverse=False)
+  if 'docOrder' in request.session and 'uteUP' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.utente.nome,reverse=True)
+  if 'docOrder' in request.session and 'docDW' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.documento ,reverse=False)
+  if 'docOrder' in request.session and 'docUP' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.documento,reverse=True)
+  if 'docOrder' in request.session and 'seDW' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.utente.sede.nome ,reverse=False)
+  if 'docOrder' in request.session and 'seUP' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.utente.sede.nome,reverse=True)
+  if 'docOrder' in request.session and 'carDW' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.dataupload ,reverse=False)
+  if 'docOrder' in request.session and 'carUP' in request.session.get('docOrder'):
+    res = sorted(tmp, key = lambda x: x.dataupload,reverse=True)
+
+  if not res:
+    data['ElencoDocumenti'] = tmp     
+  else:
+    data['ElencoDocumenti'] = res 
+
   print("Numero documenti associati",len(ElencoDocumenti),len(data['ElencoDocumenti']))
 
   return render(request,'documento.welcome.html',data)

+ 3 - 0
utente/templates/utente.edit.document.html

@@ -18,6 +18,9 @@
               <td><label for='descrizione'>Descrizione:&nbsp;</label>
                   <input type='text' name='descrizione' id='descrizione' value=''>
                   <input type='file' class="btn btn-primary" name='allegati' id='allegati' value='{{ uf.allegati }}' accept='application/pdf' multiple></td>
+              <td><label for='pertutti' class='form-check-label'>Documento Privato (Visibile solo dal Dipendente).<br>File che iniziano con Emo, sempre privati!</label>
+ <input type='checkbox' class="form-check-input" name='privato' id='privato'></td>
+
 	      <td><input class="btn btn-primary" type='submit' value='Inserisci'></td>
             </tr>
           </table>

+ 3 - 3
utente/templates/utente.welcome.html

@@ -103,10 +103,10 @@ function toggleCSV(source) {
                      <tr>
                        <td>Nome Cognome</td>
                        <td>Codice Fiscale</td>
-                       <td>Data di Nascita</td>
-                       <td>Luogo di Nascita</td>
+                       <td>Data Nascita</td>
+                       <td>Luogo Nascita</td>
 		       <td>email</td>
-		       <td>Sede</td>
+		       <td>Sede Indentificativo</td>
                      </tr>
                    </tbody>
                  </table><br>

+ 3 - 1
utente/views.py

@@ -338,7 +338,9 @@ def edit(request):
         listadocumenti = filecaricati.cleaned_data['allegati']
         print(listadocumenti)
         print('descrizione',filecaricati.cleaned_data['descrizione'])
-        listaok,listanotok = save_and_load_file_single(listadocumenti,request,utente,data['azienda'],data['sede'],filecaricati.cleaned_data['descrizione'],data['admin'])
+        privato = filecaricati.cleaned_data['privato']
+        print('stato privato:',privato)
+        listaok,listanotok = save_and_load_file_single(listadocumenti,request,utente,data['azienda'],data['sede'],filecaricati.cleaned_data['descrizione'],data['admin'],privato=privato)
         print('stato caricamenti',listaok,listanotok)
         data['listaok'] = listaok
         data['listanotok'] = listanotok