views.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. from django.shortcuts import render
  2. from django.core.mail import send_mail
  3. from django.core.mail import SafeMIMEText
  4. from django.core.mail import EmailMultiAlternatives
  5. from django.template.loader import get_template
  6. from django.template import Context
  7. from django.template import engines, TemplateSyntaxError
  8. from datetime import date
  9. from uuid import uuid4,UUID
  10. import json
  11. from datetime import datetime
  12. import re
  13. from django.db.models import Sum
  14. #from .templatetags.commtags import *
  15. from django.shortcuts import render
  16. from .models import *
  17. from .forms import *
  18. from config.views import *
  19. from azienda.views import *
  20. from utente.views import *
  21. from documento.views import *
  22. def template_from_string(template_string, using=None):
  23. """
  24. Convert a string into a template object,
  25. using a given template engine or using the default backends
  26. from settings.TEMPLATES if no engine was specified.
  27. This function is based on django.template.loader.get_template,
  28. but uses Engine.from_string instead of Engine.get_template.
  29. """
  30. chain = []
  31. engine_list = engines.all() if using is None else [engines[using]]
  32. for engine in engine_list:
  33. try:
  34. return engine.from_string(template_string)
  35. except TemplateSyntaxError as e:
  36. chain.append(e)
  37. raise TemplateSyntaxError(template_string, chain=chain)
  38. class ServizioMail:
  39. def __init__(self,debug=False):
  40. self._from_ = getConfig('DefaultEmail')
  41. self._to_ = []
  42. self._to = {}
  43. self.debug = debug
  44. self.soggetto = ""
  45. self.corpo = ""
  46. self.corpo_testo = ""
  47. self.corpo_html = ""
  48. self.data = dict()
  49. self.json = None
  50. if self.debug: print('attivato flag di debug')
  51. def set_mailfrom(self,mail_from):
  52. self._from_ = mail_from
  53. if self.debug: print('mail_from',self._from_)
  54. def set_listadestinatari(self,lista=[]):
  55. self._to_ = []
  56. self.add_listadestinatari(lista)
  57. if self.debug: print('lista destinatari',self._to_)
  58. def set_rcptto(self,lista=[]):
  59. self.set_listadestinatari(lista)
  60. def add_listadestinatari(self,mail=None):
  61. if self.debug: print('type mail:',type(mail))
  62. if mail:
  63. if type(mail) == list:
  64. for i in mail:
  65. self._to_.append(i)
  66. return
  67. self._to_.append((mail))
  68. if self.debug: print('lista destinatari',self._to_)
  69. def add_to(self,mail=None):
  70. self.add_listadestinatari(mail)
  71. def set_soggetto(self,soggetto=""):
  72. self.soggetto = soggetto
  73. if self.debug:
  74. print("########")
  75. print('soggetto:',self.soggetto)
  76. print("########")
  77. def set_corpo(self,corpo="",html=False):
  78. self.corpo = corpo
  79. if self.debug:
  80. print("########")
  81. print('corpo:',self.corpo)
  82. print('set_corpo html:',html)
  83. print("########")
  84. self.html = html
  85. def set_data(self,data={}):
  86. self.data = data
  87. if not 'ora_data' in self.data:
  88. self.data['ora_data'] = datetime.now().strftime('%H:%M %d/%m/%Y')
  89. if not 'ora' in self.data:
  90. self.data['ora'] = datetime.now().strftime('%H:%m')
  91. if not 'data' in self.data:
  92. self.data['data'] = datetime.now().strftime('%d/%m/%Y')
  93. if self.debug: print('data',self.data)
  94. def set_json(self,data={}):
  95. self.json = json.dumps(data)
  96. if self.debug: print('json:',self.json)
  97. def send(self):
  98. # normalizza i destinatari (uno solo, non ripetuti)
  99. if self.debug: print('spedisco a:',self._to_)
  100. for i in self._to_:
  101. self._to[i] = i
  102. self._to_complete = [ x for x in self._to.values() ]
  103. if self.debug: print("destinatari tutti:",self._to_complete)
  104. #rendering del soggetto
  105. soggetto = template_from_string(self.soggetto)
  106. soggetto_render = soggetto.render(self.data)
  107. print('soggetto_render:',soggetto_render)
  108. if self.debug: print("soggetto",soggetto)
  109. corpo = template_from_string(self.corpo)
  110. corpo_render = None
  111. try:
  112. corpo_render = corpo.render(self.data)
  113. print('corpo_render:',corpo_render)
  114. except TemplateSyntaxError as tse:
  115. print('Errore nel Template')
  116. print(tse)
  117. print('quanti sono',len(self._to_complete))
  118. for tt in self._to_complete:
  119. ttl = [tt,]
  120. print('ttl',ttl,)
  121. msg = None
  122. if self.debug: print('richiesta html::',self.html)
  123. if self.html:
  124. msg=EmailMultiAlternatives(soggetto_render, corpo_render, self._from_, ttl)
  125. msg.attach_alternative(corpo_render, "text/html")
  126. else: msg=EmailMultiAlternatives(soggetto_render, corpo_render, self._from_, ttl)
  127. if self.json:
  128. msg.attach_alternative(self.json,'text/json')
  129. try:
  130. msg.send()
  131. print('messaggio inviato')
  132. except ConnectionRefusedError as cre:
  133. print('impossibile inviare mail',cre)
  134. def welcome(request):
  135. '''
  136. punto di ingresso.
  137. vengono mostrati tutti i modelli presenti presenti
  138. '''
  139. print('__name__',__name__,'welcome')
  140. data = dict()
  141. data['HeaderTitle'] = getConfig('HeaderTitle')
  142. if not 'AziendaId' in request.session:
  143. print('manca azienda')
  144. return HttpResponseRedirect(reverse("login:start"))
  145. else:
  146. data['AziendaId'] = request.session['AziendaId']
  147. print("Azienda rilevata",data['AziendaId'])
  148. if not 'AdminId' in request.session or 'UserId' in request.session:
  149. print("Non rilevo presensa UserId e AdminId in request.session")
  150. return HttpResponseRedirect(reverse("login:start"))
  151. else:
  152. data['AdminId'] = request.session['AdminId']
  153. if 'UserId' in request.session:
  154. data['UserId'] = request.session['UserId']
  155. #filtro:
  156. # selezionare tutti gli utenti per AziendaId
  157. data['admin'] = User.objects.get(pk=data['AdminId'])
  158. data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
  159. data['comunicazione'] = data['azienda'].comunicazione_set.all()
  160. #data['comm'] = data['azienda'].comm
  161. print(data)
  162. if request.method == "POST":
  163. print('Richiesta effettuata')
  164. print(request.POST)
  165. if 'Ritorna' in request.POST:
  166. return HttpResponseRedirect(reverse("azienda:welcome"))
  167. if 'Nuovo' in request.POST:
  168. if 'ComId' in request.session:
  169. del request.session['ComId']
  170. return HttpResponseRedirect(reverse("comunicazione:edit"))
  171. if 'edit' in request.POST:
  172. request.session['ComId'] = request.POST.get('edit')
  173. print('ComId',request.session.get('ComId'))
  174. return HttpResponseRedirect(reverse("comunicazione:edit"))
  175. return render(request,'comunicazione.welcome.html',data)
  176. def edit(request):
  177. print('__name__',__name__,'edit')
  178. data = dict()
  179. data['HeaderTitle'] = getConfig('HeaderTitle')
  180. if not 'AziendaId' in request.session:
  181. print('manca azienda')
  182. return HttpResponseRedirect(reverse("login:start"))
  183. data['AziendaId'] = request.session['AziendaId']
  184. print("Azienda rilevata",data['AziendaId'])
  185. data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
  186. if not 'AdminId' in request.session or 'UserId' in request.session:
  187. print("Non rilevo presensa UserId e AdminId in request.session")
  188. return HttpResponseRedirect(reverse("login:start"))
  189. data['AdminId'] = request.session['AdminId']
  190. print(data)
  191. if 'UserId' in request.session:
  192. data['UserId'] = request.session['UserId']
  193. comunicazione = Comunicazione()
  194. if 'ComId' in request.session:
  195. ComId = request.session.get('ComId')
  196. print('trovato ComId',ComId)
  197. comunicazione = Comunicazione.objects.get(pk=ComId)
  198. if request.method == 'POST':
  199. print('richiesta effettuata')
  200. if 'Ritorna' in request.POST:
  201. return HttpResponseRedirect(reverse("comunicazione:welcome"))
  202. fd = formDocumento(request.POST)
  203. if fd.is_valid():
  204. print('documento valido')
  205. comunicazione.mittente = fd.cleaned_data.get('mittente')
  206. comunicazione.soggetto = fd.cleaned_data.get('soggetto')
  207. comunicazione.corpo = fd.cleaned_data.get('corpo')
  208. comunicazione.azienda = data['azienda']
  209. comunicazione.save()
  210. else:
  211. print('documento non valido')
  212. data['documento'] = formDocumento(request.POST)
  213. else:
  214. print('post non valido')
  215. tmp = dict()
  216. if len(data['azienda'].mail):
  217. print('azienda contiene email',data['azienda'].mail)
  218. tmp['mittente'] = data['azienda'].mail
  219. else:
  220. print('azienda non contiene email, prendo default',getConfig("DefaultEmail"))
  221. tmp['mittente'] = getConfig("DefaultEmail")
  222. tmp['soggetto'] = comunicazione.soggetto
  223. tmp['corpo'] = comunicazione.corpo
  224. data['documento'] = formDocumento(tmp)
  225. print(data)
  226. return render(request,'comunicazione.edit.html',data)
  227. '''
  228. def edit(request):
  229. AdminId = request.session['AdminId']
  230. data={}
  231. data['HeaderTitle'] = getConfig('HeaderTitle')
  232. data['admin' ] = User.objects.get(pk=AdminId)
  233. if request.method == "POST":
  234. print("Richiesta creazione nuova azienda")
  235. nuovaazienda = formAzienda(request.POST)
  236. if nuovaazienda.is_valid():
  237. print("il form e' valido",request.POST)
  238. azienda = Azienda()
  239. azienda.nome = nuovaazienda.cleaned_data.get('nome')
  240. azienda.mail = nuovaazienda.cleaned_data.get('mail')
  241. azienda.partitaiva = nuovaazienda.cleaned_data.get('partitaiva')
  242. azienda.save()
  243. request.session['AziendaId'] = azienda.id
  244. assegnazione = Assegnazione()
  245. assegnazione.azienda=azienda
  246. assegnazione.user=User.objects.get(pk=AdminId)
  247. assegnazione.save()
  248. return HttpResponseRedirect(reverse('azienda:welcome'))
  249. else:
  250. print("form non valido")
  251. data['azienda'] = formAzienda(request.POST)
  252. else: #non è un post
  253. print("Non è un post")
  254. formAziendaField = formAzienda()
  255. data['azienda'] = formAziendaField
  256. return render(request,'azienda.edit.html',data)
  257. #filtro:
  258. # selezionare tutti gli utenti per AziendaId
  259. admin = User.objects.get(pk=data['AdminId'])
  260. data['admin'] = admin
  261. azienda = Azienda.objects.get(pk=data['AziendaId'])
  262. data['azienda'] = azienda
  263. utenti = Utente.objects.filter(azienda = azienda)
  264. data['utenti'] = utenti
  265. if request.method == 'POST':
  266. if 'ritorna' in request.POST:
  267. return HttpResponseRedirect(reverse("azienda:welcome"))
  268. if 'DeleteDocument' in request.POST:
  269. print('Richiesta cancellazione Documento',request.POST)
  270. documento = request.POST['DeleteDocument'] # perche' lo considera una lista e non un singolo valore?
  271. print('richiesta cancellazione documento:',documento)
  272. try:
  273. d = Documento.objects.get(pk=documento)
  274. delete_file(d) #rimozione fisica del documento
  275. setLog(5,documento,admin)
  276. d.delete()
  277. except Documento.DoesNotExist as dne:
  278. print('il documento non esiste')
  279. filecaricati = AdminUpload(request.POST,request.FILES)
  280. if filecaricati.is_valid():
  281. print('record filecaricati validi')
  282. if 'indice' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('indice'):
  283. fileindice = filecaricati.cleaned_data.get('indice')
  284. print('presente file indice',fileindice)
  285. save_and_load_file_indice(request,fileindice,azienda)
  286. if 'allegati' in filecaricati.cleaned_data and filecaricati.cleaned_data.get('allegati'):
  287. print('presenti documenti da allegare')
  288. listadocumenti = filecaricati.cleaned_data['allegati']
  289. print(listadocumenti)
  290. print(type(azienda))
  291. print(azienda.id)
  292. listaok,listanotok = save_and_load_file_multiple(listadocumenti,request,utenti,azienda,filecaricati.cleaned_data['descrizione'])
  293. data['listaok'] = listaok
  294. data['listanotok'] = listanotok
  295. ElencoDocumentiPerAzienda = Documento.objects.filter(azienda=azienda).order_by("utente__nome","documento")
  296. data['ElencoDocumentiPerAzienda'] = ElencoDocumentiPerAzienda
  297. print("Numero documenti associati",len(ElencoDocumentiPerAzienda))
  298. '''