from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect,FileResponse from django.urls import reverse from django.db import IntegrityError from .models import * from .forms import * from documento.forms import * from documento.managefile import * from att.views import * from comunicazione.views import ServizioMail from sicurezza.views import getAMP,getAZP,getSEP,setAZP,setSEP from random import randint from config.views import * import re import csv from io import StringIO from codicefiscale import codicefiscale from collections import Counter def OrdinaUtenti(rq=None,ou=None): def checkSede(x): try: return x.sede.nome except AttributeError as ae: print("Errore",ae) return "- - -" tmp=None print("len(ou)",len(ou)) if rq.method == "POST" and 'utUP' in rq.POST: print('utUP') rq.session['docOrder'] = 'utUP' if rq.method == "POST" and 'utDW' in rq.POST: print('utDW') rq.session['docOrder'] = 'utDW' if 'docOrder' in rq.session and 'utDW' in rq.session.get('docOrder'): tmp = sorted(ou, key = lambda x: x.nome,reverse=False) print(len(tmp)) if 'docOrder' in rq.session and 'utUP' in rq.session.get('docOrder'): tmp = sorted(ou, key = lambda x: x.nome,reverse=True) print(len(tmp)) if rq.method == "POST" and 'seUP' in rq.POST: print('seUP') rq.session['docOrder'] = 'seUP' if rq.method == "POST" and 'seDW' in rq.POST: print('seDW') rq.session['docOrder'] = 'seDW' if 'docOrder' in rq.session and 'seDW' in rq.session.get('docOrder'): tmp = sorted(ou, key = lambda x: checkSede(x),reverse=False) print(len(tmp)) if 'docOrder' in rq.session and 'seUP' in rq.session.get('docOrder'): tmp = sorted(ou, key = lambda x: checkSede(x),reverse=True) print(len(tmp)) if not tmp: return ou return tmp def welcome(request): 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['Navbar']=False if not 'AziendaId' in request.session: return HttpResponseRedirect(reverse("login:start")) else: data['AziendaId'] = request.session['AziendaId'] data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) # ottiene tutti gli utenti relativi all'azienda data['utenti'] = data['azienda'].utente_set.all().order_by('nome').filter(special=False) data['numeroRecordAzienda'] = len(data['utenti']) if 'AdminId' in request.session: data['AdminId'] = request.session['AdminId'] admin = Amministratore.objects.get(pk=data['AdminId']) data['admin'] = admin print('admin',admin.id,admin.nome) if 'SedeId' in request.session and request.session['SedeId'] > 0: print('presente SedeId',request.session['SedeId']) data['SedeId'] = request.session['SedeId'] data['sede'] = Sede.objects.get(pk=request.session['SedeId']) data['utenti'] = data['sede'].utente_set.all().order_by('nome').filter(special=False) else: data['sede'] = None print("data data data",data) #print("Sede id",data['SedeId']) #print("Sede nome",data['sede'].nome) print("quanti utenti",len(data['utenti'])) if 'UserId' in request.session: data['UserId'] = request.session['UserId'] data['utenti'] = OrdinaUtenti(request,data['utenti']) try: data['numeroRecordAttuali'] = len(data['utenti']) except TypeError as te: data['numeroRecordAttuali'] = 0 data['permesso'] = getAMP(admin)[0] for t in getAZP(data['AziendaId'],admin): if t not in data['permesso']: data['permesso'].append(t) for t in getSEP(data['sede'],admin)[0]: if t not in data['permesso']: data['permesso'].append(t) if request.method == 'POST': print('qualcuno ha premuto un tasto') if 'indietro' in request.POST: return HttpResponseRedirect(reverse("azienda:welcome")) if "UTENTE.CREA" in data['permesso']: if 'scelta' in request.POST: scelta = request.POST['scelta'] request.session['UserEditId'] = scelta print('scelta effettuata',scelta) return HttpResponseRedirect(reverse("utente:edit")) if "UTENTE.CREA" in data['permesso']: if 'CaricaIndice' in request.POST: fileindicecaricato = formIndiceUpload(request.POST,request.FILES) print(fileindicecaricato) if fileindicecaricato.is_valid(): print('record filecaricati validi') print('presente file indice') fileindiceottenuto = fileindicecaricato.cleaned_data.get('indice') listaok,listanotok,listanotass,count = save_and_load_file_indice(request,fileindiceottenuto,data['azienda'],data['sede']) data['listaok'] = listaok data['listaoklen'] = len(listaok) data['listanotok'] = listanotok data['listanotoklen'] = len(listanotok) data['listanotass'] = listanotass data['listanotasslen'] = len(listanotass) data['count'] = count #totale dei record letti else: print('request non valida') if 'cerca' in request.POST: print('premuto tasto cerca') formcerca = formCerca(request.POST) if formcerca.is_valid(): valoredacercare = formcerca.cleaned_data.get('valoredacercare') else: print('form non valida') print('richiesta da cercare',valoredacercare) try: nome = data['utenti'].filter(nome__icontains=valoredacercare) codicefiscale = data['utenti'].filter(codicefiscale__icontains=valoredacercare) data['utenti'] = dict(Counter(nome) + Counter(codicefiscale)) except AttributeError as ae: print("Errore, la lista utenti e' vuota") data['utenti'] = dic() data['formcerca'] = formcerca if 'MultipleCSVSelect' in request.POST: #validiamo i dati passati SelectResponse = formMultipleCheckBoxCSVDOC(request.POST,lista=data['utenti']) poppo = dir(SelectResponse) print("SelectResponse",SelectResponse) if SelectResponse.is_valid(): selectCSV = SelectResponse.cleaned_data.get('MultipleCSVSelect') selectDOC = SelectResponse.cleaned_data.get('MultipleDOCSelect') selectCSVType=type(selectCSV) selectDOCType=type(selectDOC) print('select CSV',selectCSV,selectCSVType) print('select DOC',selectCSV,selectDOCType) response = None if selectCSV: # la lista selectCSV è valida e contiene l'elenco degli utenti. tmplist = list() tmplist.append(["Azienda","Nome e Cognome","Data Nascita","Luogo di Nascita","Codice Fiscale","Pin","Sede","Email"]) for i in selectCSV: print("utente",i) if i == '0': continue u = Utente.objects.get(pk=int(i)) #tmplist.append([u.codicefiscale,u.nome,u.pin]) try: tmplist.append([u.azienda.nome,u.nome,u.datanascita,u.luogonascita,u.codicefiscale,u.pin,u.sede.nome,u.mail]) except AttributeError as ae: tmplist.append([u.azienda.nome,u.nome,u.datanascita,u.luogonascita,u.codicefiscale,u.pin,"",u.mail]) print('errore - manca la sede e il relativo nome') print("lunghezza tmplist",len(tmplist)) f = StringIO() csv.writer(f,delimiter=';').writerows(tmplist) print(f.getvalue()) # scarica il file response = FileResponse(f.getvalue(),content_type='application/csv',as_attachment=False) response['Content-Disposition'] = 'attachment; filename="lista_dipendenti.csv"' return response return render(request,'utente.welcome.html',data) def edit(request): 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 'AdminId' in request.session: data['AdminId'] = request.session['AdminId'] admin = Amministratore.objects.get(pk=data['AdminId']) data['admin'] = admin print('admin',admin.id,admin.nome) if not 'AziendaId' in request.session: return HttpResponseRedirect(reverse("login:start")) data['AziendaId']=request.session['AziendaId'] data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) 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("non esiste") data['sede'] = sede data['permesso'] = getAMP(admin)[0] for t in getAZP(data['AziendaId'],admin): if t not in data['permesso']: data['permesso'].append(t) if 'sede' in data and data['sede']: print('sede presente:',sede) for t in getSEP(data['sede'],admin)[0]: if t not in data['permesso']: data['permesso'].append(t) if 'UserId' in request.session: data['UserId'] = request.session['UserId'] if not'UserEditId' in request.session: return HttpResponseRedirect(reverse("login:start")) data['UserEditId'] = request.session['UserEditId'] #filtro: # selezionare tutti gli utenti per AziendaId data['admin'] = Amministratore.objects.get(pk=data['AdminId']) data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) data['listasede'] = data['azienda'].sede_set.all().order_by('nome') print('quante sedi ci sono',len(data['listasede'])) utente = None if data['UserEditId'] == "Nuovo Dipendente": utente = Utente() utente.enabled = True utente.pin = str(randint(100000,999999)) utente.azienda = data['azienda'] utente.forzanuovapassword = data['azienda'].forzanuovapassword utente.cambiopassword = data['azienda'].cambiopassword utente.otppassword = data['azienda'].otppassword if 'sede' in data and data['sede']: utente.sede = data['sede'] utente.forzanuovapassword = data['sede'].forzanuovapassword utente.cambiopassword = data['sede'].cambiopassword utente.otppassword = data['sede'].otppassword else: try: utente = Utente.objects.get(pk=data['UserEditId']) #data['documentiUtente'] = utente.documento_set.all() data['ElencoDocumenti'] = utente.documento_set.all() data['listaAttivita'] = getLogxAmministrazione(utente) data['uid']=utente.id except Utente.DoesNotExist as dne: print('strana richiesta, utente inesistente') flagDne=True utente=None print("Non ci siamo, manca l'utente") if request.method == 'POST': if "indietro" in request.POST: return HttpResponseRedirect(reverse("utente:welcome")) print('request.method x edit utente') 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 'DeleteDocument' in request.POST: documento = request.POST['DeleteDocument'] print('documento da rimuovere',documento) d = Documento.objects.get(pk=documento) if d: delete_file(d) #rimozione fisica del documento d.delete() fu = formUtente(request.POST) if fu.is_valid(): print('formUtente: form valida') cancellautente = fu.cleaned_data.get('cancellautente') if cancellautente: print('richiesta cancellazione utente, passo la chiamata') return HttpResponseRedirect(reverse("utente:cancellautente")) print('i dati sono grosso modo coerenti, salviamoli') old_utente_codicefiscale = utente.codicefiscale utente.nome = fu.cleaned_data['nome'].title() utente.codicefiscale = fu.cleaned_data['codicefiscale'].upper() utente.luogonascita = fu.cleaned_data['luogonascita'].title() utente.datanascita = fu.cleaned_data['datanascita'] utente.mail = fu.cleaned_data['mail'].lower() utente.pin = fu.cleaned_data['pin'] utente.cambiopassword = fu.cleaned_data['cambiopassword'] utente.forzanuovapassword = fu.cleaned_data['forzanuovapassword'] utente.otppassword = fu.cleaned_data['otppassword'] utente.enabled = fu.cleaned_data['enabled'] tmp_sede = fu.cleaned_data['sede'] print('tmp_sede',tmp_sede) try: cercasede = Sede.objects.get(pk=tmp_sede) utente.sede = cercasede except Sede.DoesNotExist as dne: print('sede non valida',tmp_sede) print('utente da registrare',utente.nome,utente.sede_id) setLog(7,utente=utente) new_utente_codicefiscale = None statusSave=False try: utente.save() statusSave=True print('utente, salvo record {}'.format(utente.codicefiscale)) new_utente_codicefiscale = utente.codicefiscale print('new_utente.codicefiscale',new_utente_codicefiscale,old_utente_codicefiscale) if new_utente_codicefiscale: if new_utente_codicefiscale != old_utente_codicefiscale: print('codice fiscale diverso:',old_utente_codicefiscale,new_utente_codicefiscale) rename_dir(utente,old_utente_codicefiscale,new_utente_codicefiscale) except IntegrityError as ie: print('utente: errore utente presente: {}'.format(utente.codicefiscale)) utenteIE = Utente.objects.get(codicefiscale=fu.cleaned_data['codicefiscale']) print(utenteIE.nome) data['IntegrityError']=utenteIE utenteesistente = Utente.objects.get(codicefiscale=utente.codicefiscale) data['codicefiscaleesistente'] = utenteesistente.azienda.nome if statusSave: print("UserEditId",utente.id) request.session['UserEditId'] = utente.id return HttpResponseRedirect(reverse("utente:edit")) print('Form non valida,altro ciclo') try: utente = Utente.objects.get(pk=data['UserEditId']) except ValueError as ve: print('errore nella definizione dell id',ve) tmp = dict() tmp['nome'] = utente.nome tmp['codicefiscale'] = utente.codicefiscale tmp['datanascita'] = utente.datanascita tmp['luogonascita'] = utente.luogonascita tmp['sede'] = utente.sede_id tmp['mail'] = utente.mail tmp['pin'] = utente.pin tmp['cambiopassword'] = utente.cambiopassword tmp['forzanuovapassword'] = utente.forzanuovapassword tmp['otppassword'] = utente.otppassword tmp['enabled'] = utente.enabled print('utente.sede_id',utente.sede_id) tmp['sede'] = utente.sede_id print('tmp su form non valida',tmp) data['utente'] = formUtente(tmp) if 'InserisciDocumentoButton' in request.POST: data['tabtab']='document-tab' print('tabtab',data['tabtab']) filecaricati = AdminUpload(request.POST,request.FILES) if filecaricati.is_valid(): flagcomunicazione = filecaricati.cleaned_data.get('comunicazione') if filecaricati.cleaned_data.get('allegati'): print('presenti documenti da allegare') listadocumenti = filecaricati.cleaned_data['allegati'] print(listadocumenti) print('descrizione',filecaricati.cleaned_data['descrizione']) privato = filecaricati.cleaned_data['privato'] print('stato privato:',privato) listaok,listanotok,listanotass = save_and_load_file_single(listadocumenti,request,utente,data['azienda'],data['sede'],filecaricati.cleaned_data['descrizione'],data['admin'],_privato=privato) data['listaok'] = listaok data['listanotok'] = listanotok data['listanotass'] = listanotass data['listaoklen'] = len(listaok) data['listnotoklen'] = len(listanotok) data['listanotasslen'] = len(listanotass) print('listaok dopo caricamento',data['listaok']) print('listanotok dopo caricamento',data['listanotok']) print('listanotass dopo caricamento', data['listanotass']) data['documentiUtente'] = utente.documento_set.all() #print('filecaricati',filecaricati,flagcomunicazione) if flagcomunicazione: ### comunicazioni ### sm = ServizioMail(debug=True) try: comunicazione = Comunicazione.objects.get(pk=7) except Comunicazione.DoesNotExist as dne: print("Record comunicazione inesistente",dne) sm.set_mailfrom=comunicazione.mittente sm.add_to(u.mail) sm.set_soggetto(comunicazione.soggetto) sm.set_corpo(comunicazione.corpo) sm_data = dict() utente=dict() #adattamento campo utente utente['nome'] = utente.nome utente['mail'] = utente.mail utente['sito'] = getConfig('DefaultSite') utente['titolo'] = getConfig('HeaderTitle') sm_data['utente'] = utente sm.set_data(sm_data) sm.send() ### comunicazioni ### else: print('Request non valida,utente:',utente.id) tmp = dict() tmp['nome'] = utente.nome tmp['codicefiscale'] = utente.codicefiscale tmp['datanascita'] = utente.datanascita tmp['luogonascita'] = utente.luogonascita tmp['mail'] = utente.mail tmp['pin'] = utente.pin tmp['forzanuovapassword'] = utente.forzanuovapassword tmp['cambiopassword'] = utente.cambiopassword tmp['otppassword'] = utente.otppassword tmp['sede'] = utente.sede_id tmp['enabled'] = utente.enabled print("tmp su request non valida",tmp) data['utente'] = formUtente(tmp) # verifica bonta' mail. regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b' if(not re.fullmatch(regex, utente.mail)): print("Mail non valida") data['mailnonvalida']=True #verifica bonta' codicefiscale if not codicefiscale.is_valid(utente.codicefiscale): print('codice fiscale tecnicamente non valido') data['codicefiscalenonvalido'] = True return render(request,'utente.edit.html',data) def download(request): ''' questa funzione permette di fare un po di cose: scaricare i documenti cambiare la password aggiornare la mail ''' print('area download') data=dict() data['HeaderTitle'] = getConfig('HeaderTitle') if not 'UserId' in request.session: print("Non rilevo UserId in request.session") return HttpResponseRedirect(reverse("login:start")) data['UserId'] = request.session['UserId'] #filtro: # avendo il dato utente... vediamo come muoverci #data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) #recuperiamo i dati dell'utente e i file che puo' scaricare. utente = None try: utente = Utente.objects.get(pk=data['UserId']) except Utente.DoesNotExist as dne: print('dillo che ci hai provato, fasullo!') return HttpResponseRedirect(reverse("login:start")) data['utente'] = utente data['documentiUtente'] = utente.documento_set.all() data['listaAttivita'] = getLogxUtente(utente) if request.method == 'POST': print('qualcosa è stato richiesto',request.POST) if 'indietro' in request.POST: print('richiesto logout') return HttpResponseRedirect(reverse('login:start')) if 'ScaricaSelezionati' in request.POST: print('Premuto tasto Scarica Selezionati') formelementidownload = formElementiDownload(request.POST,lista=data['documentiUtente']) if formelementidownload.is_valid(): print('form valida') select = formelementidownload.cleaned_data.get('MultipleDocumentSelect') print('documenti da scaricare',len(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 'aggiorna' in request.POST: print('Richiesto Aggiornamento mail ') # salvataggio password e mail pinmail = formPinMail(request.POST) if pinmail.is_valid(): print('pinmail valid') utente.pin = pinmail.cleaned_data['pin'] utente.mail = pinmail.cleaned_data['mail'] utente.save() print('utente aggiornato',utente.id) setLog(6,utente=utente) # verifica bonta' mail. regex = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,7}\b' if(not re.fullmatch(regex, utente.mail)): print("Mail non valida") data['mailnonvalida']=True else: print("Mail valida") return render(request,'utente.download.html',data) def updatePasswordFromLogin(request,uuid): ''' la form che segue, serve per aggiornare la propria password/pin dal login ''' data = dict() data['HeaderTitle'] = getConfig('HeaderTitle') data['uuid'] = uuid print('uuid',uuid) a = None d = None # 1 tentativo su codice fiscale try: a = Utente.objects.get(uuid=uuid) d = 'u' except Utente.DoesNotExist as dne: print('informazione non trovata tra gli utente') try: a = Amministratore.objects.get(uuid=uuid) d = 'a' except Amministratore.DoesNotExist as dne: print('informazione non trovata tra i login amministratotore') if d == 'u': print('utente',a.codicefiscale) elif d == 'a': print('amministratore',a.login) else: print("Furbata: l'uuid non si trova",uuid) return HttpResponseRedirect(reverse("login:start")) print('record',a.id,a.nome,a.uuid,d) # ora effettuiamo il controllo if request.method == 'POST': print('updatePasswordFromLogin: un tasto è stato premuto') formupdatepasswordlogin = formUpdatePasswordLogin(request.POST) if formupdatepasswordlogin.is_valid(): pin1 = formupdatepasswordlogin.cleaned_data.get('pin1') pin2 = formupdatepasswordlogin.cleaned_data.get('pin2') uuidl = formupdatepasswordlogin.cleaned_data.get('uuid') print('stato',pin1,pin2,uuidl) if uuidl == a.uuid: print('uuid corrisponde',uuidl,uuid) a.pin = pin1 a.uuid = "" a.lostpin = False a.save() ### comunicazioni ### if len(a.mail) > 0: comunicazione = None try: comunicazione = Comunicazione.objects.get(pk=5) except Comunicazione.DoesNotExist as dne: print('comunicazione non valida',dne) if comunicazione: sm = ServizioMail(debug=True) sm.set_mailfrom=comunicazione.mittente sm.add_to(a.mail) sm.set_soggetto(comunicazione.soggetto) sm.set_corpo(comunicazione.corpo) sm_data = dict() sm_data['utente'] = a sm.set_data(sm_data) sm.send() ### comunicazioni ### else: print('form non valida, errore uuid') data['informazione'] = formUpdatePasswordLogin(request.POST) return HttpResponseRedirect(reverse("login:start")) else: print('form not valid') data['informazione'] = formUpdatePasswordLogin(request.POST) else: print('request non valida', request.POST) tmp = dict() tmp['uuid'] = uuid tmp['pin1'] = "" tmp['pin2'] = "" data['informazione'] = formUpdatePasswordLogin(tmp) print(data) return render(request,'utente.edit.password.login.html',data) def forceUpdatePassword(request,uuid): ''' la form che segue, serve per aggiornare la propria password/pin dal login ''' data = dict() data['HeaderTitle'] = getConfig('HeaderTitle') data['uuid'] = uuid print('uuid',uuid) if request.method == 'POST': print('forceUpdatePassword: un tasto è stato premuto') formupdatepasswordlogin = formUpdatePasswordPrimoLogin(request.POST) if formupdatepasswordlogin.is_valid(): cfisc = formupdatepasswordlogin.cleaned_data.get('cfisc') pin0 = formupdatepasswordlogin.cleaned_data.get('pin0') pin1 = formupdatepasswordlogin.cleaned_data.get('pin1') pin2 = formupdatepasswordlogin.cleaned_data.get('pin2') print('stato',cfisc,pin1,pin2) a = None d = None # 1 tentativo su codice fiscale try: a = Utente.objects.get(codicefiscale=cfisc.upper()) d = 'u' except Utente.DoesNotExist as dne: print('informazione non trovata tra i codici fiscali utente') try: a = Utente.objects.get(mail=cfisc.lower()) d = 'u' except Utente.DoesNotExist as dne: print('informazione non trovata tra le email') try: a = Amministratore.objects.get(login=cfisc.lower()) d = 'a' except Amministratore.DoesNotExist as dne: print('informazione non trovata tra i login amministratotore') oldpwd = False print('record',a.id,a.nome,a.uuid,d) if d == 'u': print('utente',a.codicefiscale) if a.pin == pin0: oldpwd = True print('verificata la vecchia password') if d == 'a': print('amministratore',a.login) if oldpwd: print('password vecchia ok') a.pin = pin1 a.uuid = "" a.forzanuovapassword = False a.lostpassword = False a.save() ### comunicazioni ### if len(a.mail) > 0: comunicazione = None try: comunicazione = Comunicazione.objects.get(pk=5) except Comunicazione.DoesNotExist as dne: print('comunicazione non valida',dne) if comunicazione: sm = ServizioMail(debug=True) sm.set_mailfrom=comunicazione.mittente sm.add_to(a.mail) sm.set_soggetto(comunicazione.soggetto) sm.set_corpo(comunicazione.corpo) sm_data = dict() sm_data['utente'] = a sm.set_data(sm_data) sm.send() ### comunicazioni ### return HttpResponseRedirect(reverse("login:start")) else: print('form not valid nella validazione vecchia password',a.pin,pin0) data['informazione'] = formUpdatePasswordPrimoLogin(request.POST) else: print('form not valid') data['informazione'] = formUpdatePasswordPrimoLogin(request.POST) else: print('request non valida', request.POST) tmp = dict() tmp['cfisc'] = "" tmp['uuid'] = uuid tmp['pin0'] = "" tmp['pin1'] = "" tmp['pin2'] = "" data['informazione'] = formUpdatePasswordPrimoLogin(tmp) print(data) return render(request,'utente.edit.password.primologin.html',data) def cancellautente(request): print('richiesta cancellazione definitiva utente') # direi che la funzione lavori in due fasi: # 1: viene richiesta conferma della cancellazione # 2: in caso di affermazione positiva, si procede 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 'AdminId' in request.session: data['AdminId'] = request.session['AdminId'] admin = Amministratore.objects.get(pk=data['AdminId']) data['admin'] = admin print('admin',admin.id,admin.nome) if not 'AziendaId' in request.session: return HttpResponseRedirect(reverse("login:start")) data['AziendaId']=request.session['AziendaId'] data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) 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("non esiste") data['sede'] = sede if 'UserId' in request.session: data['UserId'] = request.session['UserId'] if not'UserEditId' in request.session: return HttpResponseRedirect(reverse("login:start")) data['UserEditId'] = request.session['UserEditId'] if request.method == 'POST': cu = formCancellaUtente(request.POST) if 'indietro' in request.POST: return HttpResponseRedirect(reverse("utente:welcome")) if cu.is_valid() and cu.cleaned_data.get('ConfermaCancellazioneUtente'): # tutto ok, # procedo alla cancellazione utente = Utente.objects.get(pk=data['UserEditId']) print('utente',utente.codicefiscale) lista_documenti = utente.documento_set.all() print('quanti documenti',len(lista_documenti)) # step1 cancellazione dei documenti. for i in lista_documenti: # rimuove documento fisicamente delete_file(i) # e poi lo rimuove dall'archivio i.delete() # step2 cancellazione dell'utente utente.delete() # step3 ritorno alla lista degli utenti return HttpResponseRedirect(reverse("utente:welcome")) return render(request,'utente.conferma.cancellazione.html',data)