|
|
@@ -24,6 +24,8 @@ def welcome(request,utente=None):
|
|
|
/ vengono mostrati tutti i documenti presenti
|
|
|
'''
|
|
|
|
|
|
+ print('** ** **',uu,'** ** **')
|
|
|
+
|
|
|
if not 'AdminId' in request.session or 'UserId' in request.session:
|
|
|
print("Non rilevo presensa UserId e AdminId in request.session")
|
|
|
return HttpResponseRedirect(reverse("login:start"))
|
|
|
@@ -326,6 +328,332 @@ def welcome(request,utente=None):
|
|
|
|
|
|
return render(request,'documento.welcome.html',data)
|
|
|
|
|
|
+
|
|
|
+def azienda(request,utente=None):
|
|
|
+ uu = utente
|
|
|
+ '''
|
|
|
+ punto di ingresso.
|
|
|
+/ vengono mostrati tutti i documenti presenti
|
|
|
+ '''
|
|
|
+
|
|
|
+ print('** ** **',uu,'** ** **')
|
|
|
+
|
|
|
+ '''
|
|
|
+ un piccolo controllo: non mi piace l'idea di passare un parametro via url perche' potrebbe venir alterato.
|
|
|
+ pero', aggiungendo una piccola verifica, potremo fregare l'eventuale furbetto
|
|
|
+ '''
|
|
|
+
|
|
|
+ #prendiamo l'azienda
|
|
|
+ test = Utente.objects.get(pk=uu)
|
|
|
+ az = test.azienda
|
|
|
+ # tiriamo fuori l'utente speciale aziendale
|
|
|
+ check = az.utente_set.get(special=True)
|
|
|
+ if uu != check.id:
|
|
|
+ print('cazzo, ci hai provato! Non corrisponde')
|
|
|
+ return HttpResponseRedirect(reverse("login:start"))
|
|
|
+
|
|
|
+ if not 'AdminId' in request.session or 'UserId' in request.session:
|
|
|
+ print("Non rilevo presensa UserId e AdminId in request.session")
|
|
|
+ return HttpResponseRedirect(reverse("login:start"))
|
|
|
+
|
|
|
+ data = dict()
|
|
|
+ data['HeaderTitle'] = getConfig('HeaderTitle')
|
|
|
+
|
|
|
+ if not 'AziendaId' in request.session:
|
|
|
+ print('manca azienda')
|
|
|
+ return HttpResponseRedirect(reverse("login:start"))
|
|
|
+
|
|
|
+ azienda = None
|
|
|
+ data['AziendaId'] = request.session['AziendaId']
|
|
|
+ AziendaId = request.session['AziendaId']
|
|
|
+ print('AziendaId',AziendaId)
|
|
|
+ azienda = Azienda.objects.get(pk=AziendaId)
|
|
|
+ data['azienda'] = azienda
|
|
|
+
|
|
|
+ data['AdminId'] = request.session['AdminId']
|
|
|
+ admin = Amministratore.objects.get(pk=data['AdminId'])
|
|
|
+ data['admin'] = admin
|
|
|
+ print('admin',admin.id,admin.nome)
|
|
|
+
|
|
|
+ sede = None
|
|
|
+ if 'SedeId' in request.session:
|
|
|
+ SedeId = request.session['SedeId']
|
|
|
+ print('SedeId',SedeId)
|
|
|
+ try:
|
|
|
+ sede = Sede.objects.get(pk=SedeId)
|
|
|
+ except Sede.DoesNotExist as dne:
|
|
|
+ print("sede non esistente")
|
|
|
+ data['sede'] = sede
|
|
|
+
|
|
|
+ if 'UserId' in request.session:
|
|
|
+ data['UserId'] = request.session['UserId']
|
|
|
+
|
|
|
+ data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
|
|
|
+ data['utenti'] = data['azienda'].utente_set.all()
|
|
|
+
|
|
|
+ #filtro:
|
|
|
+ # selezionare tutti gli utenti per AziendaId
|
|
|
+ admin = Amministratore.objects.get(pk=data['AdminId'])
|
|
|
+ data['admin'] = admin
|
|
|
+
|
|
|
+ azienda = Azienda.objects.get(pk=data['AziendaId'])
|
|
|
+ data['azienda'] = azienda
|
|
|
+
|
|
|
+ utenti = Utente.objects.filter(azienda = azienda)
|
|
|
+ data['utenti'] = utenti
|
|
|
+
|
|
|
+ eol = getConfig('DocEol')
|
|
|
+ data['eol'] = eol
|
|
|
+
|
|
|
+ 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)
|
|
|
+
|
|
|
+ # lettura permessi - da rivedere!
|
|
|
+ print('inizio sequenza permessi')
|
|
|
+ ### permessi inizio ###
|
|
|
+ data['permesso'] = getAMP(admin)[0]
|
|
|
+ print('permesso generale:',data['permesso'])
|
|
|
+ print("CAZZO CAZZO CAZZO e di nuovo 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():
|
|
|
+ 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
|
|
|
+
|
|
|
+ if 'AziendaId' in data:
|
|
|
+ print('livello azienda',getAZP(data['AziendaId'],admin)[0])
|
|
|
+ for t in getAZP(data['AziendaId'],admin)[0]:
|
|
|
+ if t not in data['permesso']:
|
|
|
+ data['permesso'].append(t)
|
|
|
+
|
|
|
+ if 'sede' in data:
|
|
|
+ print('livello sede',getSEP(data['sede'],admin))
|
|
|
+ for t in getSEP(data['sede'],admin):
|
|
|
+ if t not in data['permesso']:
|
|
|
+ data['permesso'].append(t)
|
|
|
+ print('Stato permessi:',data['permesso'])
|
|
|
+ ### permessi fine ###
|
|
|
+
|
|
|
+ if request.method == 'POST':
|
|
|
+ if 'indietro' in request.POST:
|
|
|
+ print("AziendaId",request.session['AziendaId'])
|
|
|
+ print("AdminId",request.session['AdminId'])
|
|
|
+ return HttpResponseRedirect(reverse("azienda:welcome"))
|
|
|
+
|
|
|
+ if 'ScaricaSelezionati' in request.POST:
|
|
|
+ print('Premuto tasto Scarica Selezionati')
|
|
|
+ if 'select' in request.POST:
|
|
|
+ SelectResponse = formMultipleCheckBox(request.POST)
|
|
|
+ SelectResponse.c(data['ElencoDocumenti'])
|
|
|
+ print("SelectResponse",SelectResponse)
|
|
|
+
|
|
|
+ if SelectResponse.is_valid():
|
|
|
+ select = SelectResponse.cleaned_data.get('select')
|
|
|
+ print('select',select,type(select))
|
|
|
+ (pathzipfile,filePreparato) = PrepareZipFile(select)
|
|
|
+ # scarica il file
|
|
|
+ response = None
|
|
|
+ with open(os.path.join(pathzipfile,filePreparato),'rb') as f:
|
|
|
+ response = HttpResponse(f.read(),content_type='application/zip')
|
|
|
+ response['Content-Disposition'] = 'attachment; filename={}'.format(filePreparato)
|
|
|
+ os.unlink(os.path.join(pathzipfile,filePreparato))
|
|
|
+ return response
|
|
|
+
|
|
|
+ if 'DeleteOldDocuments' in request.POST:
|
|
|
+ print('Richiesta di eliminazione vecchi documenti')
|
|
|
+ dods = DeleteOldDocuments(request.POST)
|
|
|
+ if dods.is_valid():
|
|
|
+ print('dods',dods.cleaned_data)
|
|
|
+ print('effettuata scelta di cancellazione vecchi documenti')
|
|
|
+ # costuire una lista dei documenti più vecchi
|
|
|
+ limite = int(request.POST['limite'])
|
|
|
+ print('limite',limite)
|
|
|
+ d = datetime.now()
|
|
|
+ r = d - timedelta(days=limite)
|
|
|
+ print(r)
|
|
|
+ oldDocs = Documento.objects.filter(azienda=azienda)
|
|
|
+ oldDocs1 = oldDocs.filter(dataupload__lt=r)
|
|
|
+ print('lista documenti',len(oldDocs1))
|
|
|
+ for i in oldDocs1:
|
|
|
+ print('documento',i.documento)
|
|
|
+ delete_file(i)
|
|
|
+ i.delete()
|
|
|
+
|
|
|
+ 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)
|
|
|
+ try:
|
|
|
+ d = Documento.objects.get(pk=documento)
|
|
|
+ delete_file(d) #rimozione fisica del documento
|
|
|
+ d.delete()
|
|
|
+ except Documento.DoesNotExist as dne:
|
|
|
+ print('il documento non esiste')
|
|
|
+
|
|
|
+ if "CaricaDocumentoButton" in request.POST:
|
|
|
+ print("Premuto CaricaDocumentoButton")
|
|
|
+ filecaricati = AdminUpload(request.POST,request.FILES)
|
|
|
+ if filecaricati.is_valid():
|
|
|
+ pertutti = filecaricati.cleaned_data.get('pertutti')
|
|
|
+
|
|
|
+ print('stato -pertutti-',pertutti," ",filecaricati.cleaned_data.get('pertutti'))
|
|
|
+ #pertutti: il documento viene messo a disposizione a tutti gli utenti, non rientra nel filtro x utente, ma solo nel filtro x azienda
|
|
|
+
|
|
|
+ print('record filecaricati validi')
|
|
|
+
|
|
|
+ comunicazione = filecaricati.cleaned_data.get('comunicazione')
|
|
|
+ ignoraAzienda = filecaricati.cleaned_data.get('ignoraAzienda')
|
|
|
+ ignoraSede = filecaricati.cleaned_data.get('ignoraSede')
|
|
|
+
|
|
|
+ if 'allegati' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('allegati'):
|
|
|
+ print('presenti documenti da allegare')
|
|
|
+ listadocumenti = filecaricati.cleaned_data.get('allegati')
|
|
|
+ descrizione = filecaricati.cleaned_data.get('descrizione')
|
|
|
+ print(listadocumenti)
|
|
|
+ print("azienda interessata",azienda.id,azienda.nome)
|
|
|
+
|
|
|
+ if not utente:
|
|
|
+ # 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)
|
|
|
+ # 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)
|
|
|
+ else:
|
|
|
+ # carica solo per l'utente.
|
|
|
+ listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda)
|
|
|
+ data['listaok'] = listaok
|
|
|
+ data['listanotok'] = listanotok
|
|
|
+ else:
|
|
|
+ # questa scelta vale nel singolo utente.
|
|
|
+ u = Utente.objects.get(pk=uu)
|
|
|
+ listaok,listanotok = save_and_load_file_single(listadocumenti,request,u,data['azienda'],data['sede'],filecaricati.cleaned_data['descrizione'],data['admin'])
|
|
|
+ data['listaok'] = listaok
|
|
|
+ data['listnotok'] = listanotok
|
|
|
+
|
|
|
+ print('listaok',listaok)
|
|
|
+ data['listaoklen']=len(data['listaok'])
|
|
|
+ print('listanotok',listanotok)
|
|
|
+ data['listanotok'] = listanotok
|
|
|
+ data['listanotoklen'] = len(data['listanotok'])
|
|
|
+
|
|
|
+ if comunicazione:
|
|
|
+ ### comunicazioni ###
|
|
|
+ sm = ServizioMail(debug=True)
|
|
|
+
|
|
|
+ try:
|
|
|
+ comunicazione = Comunicazione.objects.get(pk=7)
|
|
|
+ except Comunicazione.DoesNotExist as dne:
|
|
|
+ print("Record comunicazione inesistente",dne)
|
|
|
+
|
|
|
+ for u in listaok: # piglia l'elenco dei nominativi dalla lista caricata correttamente
|
|
|
+ sm.set_mailfrom=comunicazione.mittente
|
|
|
+ sm.add_to(u.mail)
|
|
|
+
|
|
|
+ sm.set_soggetto(comunicazione.soggetto)
|
|
|
+ sm.set_corpo(comunicazione.corpo)
|
|
|
+
|
|
|
+ sm_data = dict()
|
|
|
+ tmp_utente=dict() #adattamento campo utente
|
|
|
+
|
|
|
+ tmp_utente['nome'] = u.nome
|
|
|
+ tmp_utente['mail'] = u.mail
|
|
|
+ tmp_utente['sito'] = getConfig('DefaultSite')
|
|
|
+ tmp_utente['titolo'] = getConfig('HeaderTitle')
|
|
|
+ sm_data['utente'] = tmp_utente
|
|
|
+
|
|
|
+ sm.set_data(sm_data)
|
|
|
+ sm.send()
|
|
|
+ ### comunicazioni ###
|
|
|
+
|
|
|
+ print("Numero documenti associati",len(ElencoDocumenti),len(data['ElencoDocumenti']))
|
|
|
+
|
|
|
+ return render(request,'documento.azienda.html',data)
|
|
|
+
|
|
|
def finalize_download(request,did,uid=None):
|
|
|
'''
|
|
|
viene comunicato l'utente
|