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 sicurezza.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 ''' 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")) 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") #### il vecchio codice era qui 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)[0]) for t in getSEP(data['sede'],admin)[0]: 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') print('request.POST',request.POST) if 'MultipleDocumentSelect' in request.POST: print(len(data['ElencoDocumenti'])) SelectResponse = formMultipleCheckBox(request.POST,lista=data['ElencoDocumenti']) print("SelectResponse",SelectResponse) if SelectResponse.is_valid(): select = SelectResponse.cleaned_data.get('MultipleDocumentSelect') 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 '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) 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') privato = filecaricati.cleaned_data.get('privato') 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,listanotass = 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,listanotass = 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,listanotass = 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,listanotass = 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('doc listaok',listaok) data['listaoklen']=len(data['listaok']) print('doc listanotok',listanotok) data['listanotok'] = listanotok data['listanotoklen'] = len(data['listanotok']) data['listanotass'] = listanotass data['listanotasslen'] = len(data['listanotass']) 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 if len(u.utente.mail) > 0: sm.add_to(u.utente.mail) sm.set_soggetto(comunicazione.soggetto) sm.set_corpo(comunicazione.corpo) sm_data = dict() tmp_utente=dict() #adattamento campo utente tmp_utente['nome'] = u.utente.nome tmp_utente['mail'] = u.utente.mail tmp_utente['sito'] = getConfig('DefaultSite') tmp_utente['titolo'] = getConfig('HeaderTitle') sm_data['utente'] = tmp_utente sm.set_data(sm_data) sm.send() ### comunicazioni ###a else: print('impossibile inviare, mail non valida') 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() print('filtro temporaneo',data['permesso']) 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) 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') data['DISABLEOPTIONS'] = True 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'] #filtro: # selezionare tutti gli utenti per AziendaId admin = Amministratore.objects.get(pk=data['AdminId']) data['admin'] = admin eol = getConfig('DocEol') data['eol'] = eol ElencoDocumenti = list() if not utente: print("Generazione utente speciale per {}".format(azienda.nome)) utente = Utente() utente.azienda = azienda utente.special = True utente.login = azienda.nome utente.codicefiscale = azienda.partitaiva utente.nome = "Document Store: {}".format(azienda.nome) utente.pin = str(randint(100000,999999)) try: utente.save() print('utente speciale salvato') except IntegrityError as ie: print(ie) ElencoDocumenti = Documento.objects.filter(utente=utente).order_by("utente__nome","documento") ''' if utente: #visualizza i documenti per l'utente # 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] data['aziendaview']=True 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() 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('richiesta ricevuta',request.POST) 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 '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 '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 '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)[0]) for t in getSEP(data['sede'],admin)[0]: 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,cazzo') print('request.POST',request.POST) if 'MultipleDocumentSelect' in request.POST: SelectResponse = formMultipleCheckBox(request.POST,lista=data['ElencoDocumenti']) print("SelectResponse",SelectResponse) if SelectResponse.is_valid(): select = SelectResponse.cleaned_data.get('MultipleDocumentSelect') 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') privato = filecaricati.cleaned_data.get('privato') 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,listanoass = 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,listanoass = 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,listanotass = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,sede,descrizione,admin.nome,pertutti,ignoraAzienda=ignoraAzienda) data['listaok'] = listaok data['listanotok'] = listanotok data['listanotass'] = listanotass else: # questa scelta vale nel singolo utente. u = Utente.objects.get(pk=uu) listaok,listanotok,listanotass = save_and_load_file_single(listadocumenti,request,u,data['azienda'],data['sede'],filecaricati.cleaned_data['descrizione'],data['admin']) data['listaok'] = listaok data['listnotok'] = listanotok data['listanotass'] = listanotass print('listaok',listaok) data['listaoklen']=len(data['listaok']) data['listaoklen'] = len(data['listaok']) print('listanotok',listanotok) data['listanotok'] = listanotok data['listanotoklen'] = len(data['listanotok']) print('listanotass',listanotass) data['listanotass'] = listanotass data['listanotasslen'] = len(data['listanotass']) 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 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,'documento.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,'documento.error.html',data) mime_type, _ = mimetypes.guess_type(fl_completa) fl = fl_completa print('fl',fl,mime_type) # deve essere un file pdf #response = HttpResponse(open(fl,'rb')) response = FileResponse(open(fl,'rb'), content_type='application/pdf') response['Content-Disposition'] = "inline; filename=%s" % documento.documento #with open(fl,'rb') as pdf: # response = HttpResponse(pdf.read(), content_type='application/pdf') # response['Content-Disposition'] = 'inline;filename=%s' % documento.documento #setNewLog(3,{'utente':utente,'documento':documento,'azienda':utente.azienda}) #if not 'AdminId' in request.session: #setLog(3,azienda=utente.azienda,utente=utente,documento=documento) if 'AdminId' in request.session: admin = Amministratore.objects.get(pk=request.session.get('AdminId')) setNewLog(12,amministratore=admin,documento=documento) else: setNewLog(3,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