views.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. from django.shortcuts import render
  2. from django.http import HttpResponse,HttpResponseRedirect,FileResponse
  3. from django.urls import reverse
  4. import django
  5. from .forms import *
  6. from config.views import getConfig
  7. from comunicazione.views import ServizioMail
  8. from att.views import *
  9. #from utente.views import *
  10. import uuid
  11. from utente.models import *
  12. from amministratore.models import *
  13. def start(request):
  14. '''
  15. da qui si comincia
  16. l'utente e' invitato a inserire il suo codice fiscale e la password/pin assegnata in fase di visita medica
  17. se i dati corrispondono, si forniscono i file e alcune info di servizio
  18. '''
  19. request.session.flush()
  20. request.session.set_expiry(3600)
  21. data = dict()
  22. data['HeaderTitle'] = getConfig('HeaderTitle')
  23. if request.method=="POST":
  24. result = LoginUser(request.POST)
  25. if result.is_valid():
  26. print('result is valid')
  27. accesso = result.cleaned_data['cfisc']
  28. pin = result.cleaned_data['passs']
  29. #verifica corrispondenza utente
  30. u = None
  31. try:
  32. # verifica che esista un utente ordinario
  33. u = Utente.objects.get(codicefiscale=accesso.upper())
  34. except Utente.DoesNotExist as dne:
  35. print("utente inesistente a livello dipendente")
  36. if u: #utente esiste
  37. if u.pin.strip()== pin:
  38. # password valida
  39. data = dict()
  40. data['u'] = u
  41. #data['settings'] = settings
  42. #data['static'] = static
  43. request.session['UserId'] = u.id
  44. print('utente validato:',u.nome)
  45. setLog(1,utente=u)
  46. #setNewLog(1,{'u':u.nome})
  47. ### comunicazioni ###
  48. if len(u.mail) > 0:
  49. comunicazione = None
  50. try:
  51. comunicazione = Comunicazione.objects.get(pk=2)
  52. except Comunicazione.DoesNotExist as dne:
  53. print('comunicazione non valida',dne)
  54. if comunicazione:
  55. sm = ServizioMail(debug=True)
  56. sm.set_mailfrom=comunicazione.mittente
  57. sm.add_to(u.mail)
  58. sm.set_soggetto(comunicazione.soggetto)
  59. sm.set_corpo(comunicazione.corpo)
  60. sm_data = dict()
  61. sm_data['utente'] = u
  62. sm.set_data(sm_data)
  63. sm.send()
  64. ### comunicazioni ###
  65. ### obbligo cambio password
  66. ### se è previsto che l'utente a livello di sede cambi la password
  67. ### al primo ingresso, qui vengono effettuati entrambi i check
  68. if u.sede:
  69. if u.sede.cambiopassword and u.primologin:
  70. print("l'utente deve cambiare obbligatoriamente la password")
  71. return HttpResponseRedirect(reverse("utente:download"))
  72. else: # l'utente ordinario non esiste
  73. print('verifica amministratore')
  74. a = None
  75. try:
  76. a = Amministratore.objects.get(login=accesso.strip())
  77. if a:
  78. print('login trovato',a.nome)
  79. except Amministratore.DoesNotExist as dne:
  80. print('amministratore non trovato',dne)
  81. if a:
  82. print(a.id,a.login,a.pin,pin)
  83. if a.pin.strip()== pin:
  84. request.session['AdminId'] = a.id
  85. setLog(1,amministratore=a)
  86. ### comunicazioni ###
  87. sm = ServizioMail(debug=True)
  88. comunicazione = None
  89. try:
  90. comunicazione = Comunicazione.objects.get(pk=1)
  91. except Comunicazione.DoesNotExist as dne:
  92. print("Record comunicazione inesistente",dne)
  93. if comunicazione:
  94. sm.set_mailfrom=comunicazione.mittente
  95. sm.add_to(a.mail)
  96. sm.set_soggetto(comunicazione.soggetto)
  97. sm.set_corpo(comunicazione.corpo)
  98. sm_data = dict()
  99. utente=dict() #adattamento campo utente
  100. utente['nome'] = a.nome
  101. utente['mail'] = a.mail
  102. sm_data['utente'] = a
  103. sm.set_data(sm_data)
  104. sm.send()
  105. ### comunicazioni ###
  106. return HttpResponseRedirect(reverse("azienda:welcome"))
  107. else:
  108. print('Errore: amministratore non valido')
  109. if a.azienda.cambiopassword and a.sede.cambiopassword and a.cambiopassword:
  110. print("all'utente e' richiesto di cambiare la password al primo accesso")
  111. return HttpResponseRedirect(reverse("login:start"))
  112. else:
  113. temp={}
  114. temp['cfisc'] = ''
  115. temp['passs'] = ''
  116. result = LoginUser(temp)
  117. data['login'] = result
  118. return render(request,'login.html',data)
  119. def RichiestaAggiornamentoPassword(request):
  120. '''
  121. la form che segue, serve per aggiornare la propria password/pin
  122. '''
  123. request.session.flush()
  124. request.session.set_expiry(3600)
  125. data = dict()
  126. data['HeaderTitle'] = getConfig('HeaderTitle')
  127. uuidres = str(uuid.uuid4())
  128. print('uuid',uuidres)
  129. if request.method == 'POST':
  130. informazione = PasswordUpdate(request.POST)
  131. if informazione.is_valid():
  132. # invio mail di comunicazione
  133. # con pin annesso.
  134. informazione = informazione.cleaned_data.get('informazione')
  135. print('informazione',informazione)
  136. a = None
  137. d = None
  138. # 1 tentativo su codice fiscale
  139. try:
  140. a = Utente.objects.get(codicefiscale=informazione.upper())
  141. d = 'u'
  142. except Utente.DoesNotExist as dne:
  143. print('informazione non trovata tra i codici fiscali utente')
  144. try:
  145. a = Utente.objects.get(mail=informazione.lower())
  146. d = 'u'
  147. except Utente.DoesNotExist as dne:
  148. print('informazione non trovata tra le email')
  149. try:
  150. a = Amministratore.objects.get(login=informazione.lower())
  151. d = 'a'
  152. except Amministratore.DoesNotExist as dne:
  153. print('informazione non trovata tra i login amministratotore')
  154. if a:
  155. print('informazione',a,d)
  156. ### comunicazioni ###
  157. sm = ServizioMail(debug=True)
  158. comunicazione = None
  159. try:
  160. comunicazione = Comunicazione.objects.get(pk=4)
  161. except Comunicazione.DoesNotExist as dne:
  162. print("Record comunicazione inesistente",dne)
  163. if comunicazione:
  164. sm.set_mailfrom=comunicazione.mittente
  165. sm.add_to(a.mail)
  166. sm.set_soggetto(comunicazione.soggetto)
  167. sm.set_corpo(comunicazione.corpo)
  168. sm_data = dict()
  169. utente=dict() #adattamento campo utente
  170. print(reverse('login:ResetPassword',args=[uuidres]))
  171. utente['link'] = reverse('utente:updatePasswordFromLogin',args=[uuidres])
  172. utente['nome'] = a.nome
  173. utente['mail'] = a.mail
  174. utente['sito'] = getConfig('DefaultSite')
  175. utente['titolo'] = getConfig('HeaderTitle')
  176. sm_data['utente'] = utente
  177. sm.set_data(sm_data)
  178. sm.send()
  179. ### comunicazioni ###
  180. ### salva uuid
  181. a.uuid = uuidres
  182. a.save()
  183. return render(request,'updatePasswordEnd.html',{})
  184. else:
  185. data['informazione'] = PasswordUpdate(request.POST)
  186. else:
  187. data['informazione'] = PasswordUpdate({'informazione':''})
  188. return render(request,'updatePassword.html',data)
  189. def ResetPassword(request,uuid=None):
  190. print('uuid',uuid)
  191. return HttpResponseRedirect(reverse("login:start"))