Quellcode durchsuchen

aggiunto modulo cambio password, tranne il modulo finale di cambio e controllo

mauro vor 1 Jahr
Ursprung
Commit
53c2d716eb

+ 1 - 1
azienda/forms.py

@@ -13,7 +13,7 @@ class formSede(forms.Form):
   def __init__(self,*args,**kwargs):
     forms.Form.__init__(self,*args,**kwargs)
     self.fields['nome'] = forms.CharField(required=True)
-    self.fields['info'] = forms.CharField(required=True)
+    self.fields['info'] = forms.CharField(required=False)
     self.fields['cancellasede'] = forms.BooleanField(required=False)
 
 class formPinMail(forms.Form):

+ 6 - 0
azienda/models.py

@@ -16,6 +16,9 @@ class Azienda(models.Model):
      constraints = [ models.UniqueConstraint(fields=['nome','partitaiva'], name="unique-azienda") ]
      indexes = [ models.Index(fields=['partitaiva','nome']) ]
 
+   def __str__(self):
+       return f"{self.id}: {self.nome}"
+
 class Sede(models.Model):
     '''
     'ogni azienda ha almeno una sede'.
@@ -24,6 +27,9 @@ class Sede(models.Model):
     info = models.CharField(max_length=256,null=False,default="")
     azienda = azienda = models.ForeignKey(Azienda,on_delete=models.PROTECT)
 
+    def __str__(self):
+        return f"{self.id}: {self.nome}"
+
 class AssegnazioneAzienda(models.Model):
   '''
   questa tabella permette le associazioni tra società e Utente

+ 1 - 1
azienda/templates/azienda.welcome.html

@@ -17,7 +17,7 @@
       {% endif %}
       <button type='submit' class='btn btn-primary' name='comunicazioni' value='{{ azienda.id }}'>Comunicazioni</button>
       <button type='submit' class='btn btn-primary' name='parazienda' value='{{ azienda.id }}'>Par.Azienda</button>
-      <button type='submit' class='btn btn-primary' name='parasede' value='{{ sede.id }}'>Par.Sede</button>
+      <button type='submit' class='btn btn-primary' name='parsede' value='{{ sede.id }}'>Par.Sede</button>
     </form>
   {% endif %}
   </div>

+ 33 - 16
azienda/views.py

@@ -23,10 +23,14 @@ def welcome(request):
     azienda = Azienda.objects.get(pk=AziendaId)
     data['azienda'] = azienda
 
+  sede = None
   if 'SedeId' in request.session:
     SedeId = request.session['SedeId']
     print('SedeId',SedeId)
-    sede = Sede.objects.get(pk=SedeId)
+    try:
+      sede = Sede.objects.get(pk=SedeId)
+    except Sede.DoesNotExist as dne:
+      print("non esiste")
     data['sede'] = sede
 
   data['Navbar']=True
@@ -131,6 +135,15 @@ def welcome(request):
       request.session['AziendaIdEdit'] = azienda.id
       return HttpResponseRedirect(reverse('azienda:editAzienda'))
 
+    if 'parsede' in request.POST:
+      print('premuto tasto Par.Sede')
+      seid = request.POST.get('parsede')
+      print('sede passata',request.POST.get('parsede'))
+      sede = Sede.objects.get(pk=seid)
+      request.session['SedeId'] = sede.id
+      request.session['SedeIdEdit'] = sede.id
+      return HttpResponseRedirect(reverse('azienda:editSede'))
+
   #################
   tmplist1 = dict()
   for tmp in assegnazioneazienda:
@@ -171,6 +184,9 @@ def editAzienda(request):
     except Azienda.DoesNotExist as dnf:
         print(dnf)
 
+  if 'Ritorna' in request.POST:
+    return HttpResponseRedirect(reverse('azienda:welcome'))
+
   if request.method == "POST":
     print("Richiesta creazione nuova azienda")
     nuovaazienda = formAzienda(request.POST)
@@ -198,6 +214,7 @@ def editAzienda(request):
   else: #non è un post
     print("Non è un post")
     formAziendaField = None
+     
     if azienda:
         print('Abbiamo azienda',azienda.nome)
         tmp = dict()
@@ -229,14 +246,18 @@ def editSede(request):
   admin = data['admin'] = Amministratore.objects.get(pk=AdminId)
 
   sede = None
-  if 'SedeId' in request.session:
-    print('trovato riferimento SedeId',request.session.get('SedeId'))
-    azid = request.session.get('SedeId')
+  if 'SedeIdEdit' in request.session:
+    print('trovato riferimento SedeIdEdit',request.session.get('SedeIdEdit'))
+    seid = request.session.get('SedeIdEdit')
     try:
-      sede = Sede.objects.get(pk=azid)
+      sede = Sede.objects.get(pk=seid)
       print('sede trovata',sede.nome)
-    except Sede.DoesNotFound as dnf:
-        print(dnf)
+    except Sede.DoesNotExist as dne:
+        print('Sede indicata inesistente',dne)
+        sede = Sede()
+
+  if 'Ritorna' in request.POST:
+    return HttpResponseRedirect(reverse('azienda:welcome'))
 
   if request.method == "POST":
     print("Richiesta creazione nuova azienda")
@@ -249,7 +270,7 @@ def editSede(request):
       sede.nome = nuovasede.cleaned_data.get('nome')
       sede.mail = nuovasede.cleaned_data.get('mail')
       sede.save()
-      request.session['SedeId'] = sede.id
+      request.session['SedeIdEdit'] = sede.id
       print('sede:',sede.id)
 
       # verifica assegnazione
@@ -266,17 +287,13 @@ def editSede(request):
   else: #non è un post
     print("Non è un post")
     formSedeField = None
+    tmp = dict()
+    tmp['nome'] = sede.nome
+    tmp['info'] = sede.info
     if sede:
         print('Abbiamo sede',sede.nome)
-        tmp = dict()
         tmp['id'] = sede.id
-        tmp['nome'] = sede.nome
-        tmp['info'] = sede.info
-        formSedeField = formSede(tmp)
-    else:
-        tmp = dict()
-        tmp['nome'] = ''
-        formSedeField = formSede(tmp)
+    formSedeField = formSede(tmp)
 
     data['sede'] = formSedeField
 

+ 2 - 1
gd/settings.py

@@ -45,6 +45,7 @@ INSTALLED_APPS = [
     'azienda',
     'att',
     'comunicazione',
+    'amministratore',
 ]
 
 MIDDLEWARE = [
@@ -130,7 +131,7 @@ STATIC_URL = 'static/'
 
 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
 
-FORCE_SCRIPT_NAME = '/gd'
+#FORCE_SCRIPT_NAME = '/gd'
 
 #la sessione comunque scade alla chiusura del browser
 SESSION_EXPIRE_AT_BROWSER_CLOSE=True

+ 6 - 0
login/forms.py

@@ -7,3 +7,9 @@ class LoginUser(forms.Form):
     forms.Form.__init__(self,*args,**kwargs)
     self.fields['cfisc'] = forms.CharField(required=True)
     self.fields['passs'] = forms.CharField(required=True,widget=forms.PasswordInput)
+
+class PasswordUpdate(forms.Form):
+  def __init__(self,*args,**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['informazione'] = forms.CharField(required=True)
+

+ 7 - 5
login/templates/login.html

@@ -16,16 +16,18 @@
       <button type='reset' class='btn btn-secondary btn-block btn-lg mb-3'>Annulla</button>
     </div>
    </form>
+      <div class="form-outline mb-3 text-center">
+	      <a href="{% url 'login:RichiestaAggiornamentoPassword' %}">Ho dimenticato la password</a>
+      </div>
+
 {% endblock %}
 
 {% block bodybottom %}
       <br><br>
-      <div class="jumbotron jumbotron-fluid">
+      <div class="form-container card p-3 bg-light'>
         <div class="container">
-	<p class="lead">L'accesso a questo servizio è monitorato in modo automatico e anonimo. Vengono registrati i dati di connessione, quale data/ora, Ip, UserAgent e utente.</p>
-	<p class='lead'>Il pannello utilizza Cookies di sessione e tecnici per consentire il suo corretto funzionamento. E' necessario che siano consentiti nel browser utilizzato. e non sia in funzione la modalità Anonima. Non vengono utilizzati Cookie di terze parti.</p>
-	<p class='lead'> Dopo aver inserito codice fiscale e Pin/Password assegnati, premere Login.</p>
-
+	<p class="lead">L'accesso a questo servizio è monitorato in modo automatico e anonimo. Vengono registrati i dati di connessione, quale data/ora, Ip, UserAgent.</p>
+	<p class="lead">Il pannello utilizza Cookies di sessione e tecnici per consentire il suo corretto funzionamento. E' necessario che siano consentiti nel browser utilizzato. e non sia in funzione la modalità Anonima. Non vengono utilizzati Cookie di terze parti.</p>
     </div>
   </div>
 {% endblock %}

+ 29 - 0
login/templates/updatePassword.html

@@ -0,0 +1,29 @@
+{% extends 'base.html' %}
+
+{% block body %}
+    <div class='form-outline mb-2 text-center lead'>
+	    Richiesta Aggiornamento Password.<br>
+	    Inserisci o il tuo codice fiscale o la tua mail o il tuo Login.<br>
+	 Se i dati sono corretti, verrà inviata una mail al tuo indirizzo con un link che ti permetterà di aggiornare la Password/Pin.
+  </div>
+  <div>
+  <form name='UpdatePassword' method='post' class='form-container card p-3 bg-light'>
+    {% csrf_token %}
+    <div class='form-outline mb-3'>
+      <label class='form-label' for='cfisc'>Email - Codice Fiscale - Login</label>
+      <input type='text'  class='form-control' id='informazione' name='informazione' value="{{ informazione.informazione.value }}"
+    </div>
+    <div class='form-outline mb-3 text-center'>
+      <button type='submit' class='btn btn-primary btn-block btn-lg mb-3 active'>Richiesta Aggiornamento Password/Pin</button>
+      <button type='reset' class='btn btn-secondary btn-block btn-lg mb-3'>Annulla</button>
+    </div>
+   </form>
+  </div>
+      <div class="form-container card p-3 bg-light'>
+        <div class="container">
+        <p class="lead">L'accesso a questo servizio è monitorato in modo automatico e anonimo. Vengono registrati i dati di connessione, quale data/ora, Ip, UserAgent.</p>
+        <p class='lead'>Il pannello utilizza Cookies di sessione e tecnici per consentire il suo corretto funzionamento. E' necessario che siano consentiti nel browser utilizzato. e non sia in funzione la modalità Anonima. Non vengono utilizzati Cookie di terze parti.</p>
+    </div>
+  </div>
+
+{% endblock %}

+ 2 - 0
login/urls.py

@@ -4,5 +4,7 @@ from . import views
 app_name='login'
 urlpatterns = [
   path('',views.start,name='start'),
+  path('RichiestaAggiornamentoPassword',views.RichiestaAggiornamentoPassword,name='RichiestaAggiornamentoPassword'),
+  path('ResetPassword/<uuid:uuid>',views.ResetPassword,name='ResetPassword'),
   ]
 

+ 84 - 0
login/views.py

@@ -7,6 +7,10 @@ from .forms import *
 from config.views import getConfig
 from comunicazione.views import ServizioMail
 from att.views import *  
+import uuid
+
+from utente.models import *
+from amministratore.models import *
 
 def start(request):
   '''
@@ -119,3 +123,83 @@ def start(request):
   return render(request,'login.html',data)
 
 
+def RichiestaAggiornamentoPassword(request):
+  '''
+  la form che segue, serve per aggiornare la propria password/pin
+  '''
+  data = dict()
+  request.session.flush()
+  request.session.set_expiry(3600)
+
+  data = dict()
+  data['HeaderTitle'] = getConfig('HeaderTitle')
+  uuidres = str(uuid.uuid4())
+  print('uuid',uuidres)
+
+  if request.method == 'POST':
+    informazione = PasswordUpdate(request.POST)
+    if informazione.is_valid():
+      # invio mail di comunicazione
+      # con pin annesso.
+      informazione = informazione.cleaned_data.get('informazione')
+      print('informazione',informazione)
+
+      a = None
+      d = None
+      # 1 tentativo su codice fiscale
+      try: 
+        a = Utente.objects.get(codicefiscale=informazione)
+        d = 'u'
+      except Utente.DoesNotExist as dne:
+        print('informazione non trovata tra i codici fiscali utente')
+        try:
+          a = Utente.objects.get(mail=informazione)
+          d = 'u'
+        except Utente.DoesNotExist as dne:
+          print('informazione non trovata tra le email')
+          try:
+            a = Amministratore.objects.get(login=informazione)
+          except Amministrazione.DoesNotExist as dne:
+            print('informazione non trovata tra i login amministratotore')
+
+      if a:
+        print('informazione',a,d)
+
+      ### comunicazioni ###
+      sm = ServizioMail(debug=True)
+      comunicazione = None
+      try:
+        comunicazione = Comunicazione.objects.get(pk=4)
+      except Comunicazione.DoesNotExist as dne:
+        print("Record comunicazione inesistente",dne)
+      if comunicazione: 
+        sm.set_mailfrom=comunicazione.mittente
+        sm.add_to(a.mail)
+
+        sm.set_soggetto(comunicazione.soggetto)
+        sm.set_corpo(comunicazione.corpo)
+
+        sm_data = dict()
+        utente=dict() #adattamento campo utente
+        print(reverse('login:ResetPassword',args=[uuidres]))
+
+        utente['link'] = reverse('login:ResetPassword',args=[uuidres])
+        utente['nome'] = a.nome
+        utente['mail'] = a.mail
+        sm_data['utente'] = utente
+        sm.set_data(sm_data)
+        sm.send()
+        ### comunicazioni ###
+
+      return HttpResponseRedirect(reverse("login:start"))
+    else:
+      data['informazione'] = PasswordUpdate(request.POST)
+  else:
+    data['informazione'] = PasswordUpdate({'informazione':''})
+
+  return render(request,'updatePassword.html',data)
+
+def ResetPassword(request,uuid=None):
+  print('uuid',uuid)
+  return HttpResponseRedirect(reverse("login:start"))
+

+ 5 - 0
utente/forms.py

@@ -17,5 +17,10 @@ class formPinMail(forms.Form):
     self.fields['mail'] = forms.CharField(required=False)
     self.fields['pin'] = forms.CharField(required=True)
 
+class formUpdatePassword(forms.Form):
+  def __init__(self,*args,**kwargs):
+    forms.Form.__init__(self,*args,**kwargs)
+    self.fields['codicefiscale'] = forms.CharField(required=False)
+    self.fields['mail'] = forms.CharField(required=False)