from django.shortcuts import render from django.http import HttpResponse,HttpResponseRedirect,FileResponse from django.urls import reverse 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 def OrdinaUtenti(rq=None,ou=None): 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) 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: x.sede.nome,reverse=False) if 'docOrder' in rq.session and 'seUP' in rq.session.get('docOrder'): tmp = sorted(ou, key = lambda x: x.sede.nome,reverse=True) 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']) data['utenti'] = data['azienda'].utente_set.all().order_by('nome') 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') 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): if t not in data['permesso']: data['permesso'].append(t) #print('permesso',getAMP(admin)[0]) #print('permesso_azienda',getAZP(data['AziendaId'],admin)) #print('permesso_sede',getSEP(data['sede'],admin)) 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') save_and_load_file_indice(request,fileindiceottenuto,data['azienda'],data['sede']) else: print('request non valida') if 'select' in request.POST: #validiamo i dati passati SelectResponse = formMultipleCheckBox(request.POST) SelectResponse.c(data['utenti']) print("SelectResponse",SelectResponse) if SelectResponse.is_valid(): select = SelectResponse.cleaned_data.get('select') print('select',select,type(select)) tmplist = list() tmplist.append(["Codice Fiscale","Nome","Pin"]) for i in select: print("utente",i) if i == '0': continue u = Utente.objects.get(pk=int(i)) tmplist.append([u.codicefiscale,u.nome,u.pin]) print("lunghezza tmplist",len(tmplist)) f = StringIO() csv.writer(f).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): if t not in data['permesso']: data['permesso'].append(t) #rint('permesso',getAMP(admin)[0]) #print('permesso_azienda',getAZP(data['AziendaId'],admin)) #print('permesso_sede',getSEP(data['sede'],admin)) 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.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 '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') 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'] 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) utente.save() return HttpResponseRedirect(reverse("utente:welcome")) print('Form non valida') 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 print('utente.sede_id',utente.sede_id) tmp['sede'] = utente.sede_id print('tmp su form non valida',tmp) data['utente'] = formUtente(tmp) 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']) listaok,listanotok = save_and_load_file_single(listadocumenti,request,utente,data['azienda'],data['sede'],filecaricati.cleaned_data['descrizione'],data['admin']) print('stato caricamenti',listaok,listanotok) data['listaok'] = listaok data['listanotok'] = listanotok print('listaok dopo caricamento',data['listaok']) print('listanotok dopo caricamento',data['listanotok']) 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 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 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') if 'indietro' in request.POST: return HttpResponseRedirect(reverse('login:start')) 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) if request.method == 'POST': print('updatePasswordFromLogin: un tasto è stato premuto') formupdatepasswordlogin = formUpdatePasswordLogin(request.POST) if formupdatepasswordlogin.is_valid(): cfisc = formupdatepasswordlogin.cleaned_data.get('cfisc') pin1 = formupdatepasswordlogin.cleaned_data.get('pin1') pin2 = formupdatepasswordlogin.cleaned_data.get('pin2') uuidl = formupdatepasswordlogin.cleaned_data.get('uuid') print('stato',cfisc,pin1,pin2,uuidl) 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') print('record',a.id,a.nome,a.uuid,d) if d == 'u': print('utente',a.codicefiscale) if d == 'a': print('amministratore',a.login) 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['cfisc'] = "" 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)