from django.shortcuts import render from .models import * from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect,FileResponse from django.urls import reverse from django.conf import settings from .models import * from .forms import * from config.views import * from .managefile import * from att.views import * from datetime import datetime,timedelta from comunicazione.views import ServizioMail def welcome(request,utente=None): uu = utente ''' punto di ingresso. vengono mostrati tutti i documenti presenti ''' 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) data['ElencoDocumenti'] = ElencoDocumenti 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') print('request',request.POST) 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('request',request.POST) print('dods',dods.cleaned_data) print(request.POST['limite']) 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') 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') if 'allegati' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('allegati'): print('presenti documenti da allegare') listadocumenti = filecaricati.cleaned_data['allegati'] print(listadocumenti) print(type(azienda)) print(azienda.id) if not utente: listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,sede,filecaricati.cleaned_data['descrizione'],admin.nome,pertutti) data['listaok'] = listaok data['listanotok'] = listanotok else: 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']) print('stato caricamenti',listaok,listanotok) data['listaok'] = listaok data['listnotok'] = listaok print('listaok',listaok) print('listanotok',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) u = Utente.objects.get(pk=uu) 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 ### ''' 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 if request.method == "POST": if 'ScaricaSelezionati' in request.POST: print('Premuto tasto Scarica Selezionati') print('request',request.POST) 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 ''' print("Numero documenti associati",len(ElencoDocumenti),len(data['ElencoDocumenti'])) return render(request,'documento.welcome.html',data) def finalize_download(request,did,uid=None): ''' viene comunicato l'utente viene cercato il file memorizzato e viene riconsegnato con il nome originale did: documento id uid: user id ''' UserId = None if not did: return HttpResponseRedirect(reverse("login:start")) if not 'AdminId' in request.session and not 'UserId' in request.session: print("Non rilevo UserId in request.session") return HttpResponseRedirect(reverse("login:start")) if 'UserId' in request.session: UserId = request.session['UserId'] print('UserId in request session',UserId) else: print('UserId passed by func',uid) UserId = uid utente = Utente.objects.get(pk=UserId) documento = Documento.objects.get(pk=did) fl_completa = os.path.join(settings.BASE_DIR,getConfig('DocPath'),utente.azienda.partitaiva,utente.codicefiscale,documento.storage) print('path completa',fl_completa) if documento.storage and os.path.isfile(fl_completa): try: fl = open(fl_completa, 'rb') except Exception as er: print('errore',er) data=dict() data['errore']="File non esistente o non ancora disponibile" data['utente'] = utente data['documento'] = documento return render(request,'welcome.error.html',data) else: print('il file non esiste in document,download') data=dict() data['errore']='File non esistente o non ancora disponibile' data['utente'] = utente data['documento'] = documento return render(request,'welcome.error.html',data) mime_type, _ = mimetypes.guess_type(fl_completa) fl = fl_completa print('fl',fl,mime_type) response = FileResponse(open(fl,'rb'),content_type='application/pdf',as_attachment=False) #response['Content-Disposition'] = "attachment; filename=%s" % documento.documento #setNewLog(3,{'utente':utente,'documento':documento,'azienda':utente.azienda}) setLog(3,azienda=utente.azienda,utente=utente,documento=documento) ### comunicazioni ### if len(utente.mail) > 0: comunicazione = None try: comunicazione = Comunicazione.objects.get(pk=3) except Comunicazione.DoesNotExist as dne: print('comunicazione non valida',dne) if comunicazione: sm = ServizioMail(debug=True) sm.set_mailfrom=comunicazione.mittente sm.add_to(utente.mail) sm.set_soggetto(comunicazione.soggetto) sm.set_corpo(comunicazione.corpo) sm_data = dict() sm_data['utente'] = utente sm_data['azienda'] = utente.azienda sm_data['documento'] = documento sm.set_data(sm_data) sm.send() ### comunicazioni ### return response