views.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  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 uuid import uuid4,UUID
  9. import json
  10. import re
  11. from django.db.models import Sum
  12. #from .templatetags.commtags import *
  13. from django.shortcuts import render
  14. from .models import *
  15. from .forms import *
  16. import datetime
  17. from config.views import *
  18. from azienda.views import *
  19. from utente.views import *
  20. def template_from_string(template_string, using=None):
  21. """
  22. Convert a string into a template object,
  23. using a given template engine or using the default backends
  24. from settings.TEMPLATES if no engine was specified.
  25. This function is based on django.template.loader.get_template,
  26. but uses Engine.from_string instead of Engine.get_template.
  27. """
  28. chain = []
  29. engine_list = engines.all() if using is None else [engines[using]]
  30. for engine in engine_list:
  31. try:
  32. return engine.from_string(template_string)
  33. except TemplateSyntaxError as e:
  34. chain.append(e)
  35. raise TemplateSyntaxError(template_string, chain=chain)
  36. class ServizioMail:
  37. def __init__(self,debug=False):
  38. self._from_ = getConfig('DefaultEmail')
  39. self._to_ = []
  40. self._to = {}
  41. self.debug = debug
  42. self.soggetto = ""
  43. self.corpo = ""
  44. self.corpo_testo = ""
  45. self.corpo_html = ""
  46. self.data = dict()
  47. self.json = None
  48. if self.debug: print('attivato flag di debug')
  49. def set_mailfrom(self,mail_from):
  50. self._from_ = mail_from
  51. if self.debug: print('mail_from',self._from_)
  52. def set_listadestinatari(self,lista=[]):
  53. self._to_ = []
  54. self.add_listadestinatari(lista)
  55. if self.debug: print('lista destinatari',self._to_)
  56. def set_rcptto(self,lista=[]):
  57. self.set_listadestinatari(lista)
  58. def add_listadestinatari(self,mail=None):
  59. if self.debug: print('type mail:',type(mail))
  60. if mail:
  61. if type(mail) == list:
  62. for i in mail:
  63. self._to_.append(i)
  64. return
  65. self._to_.append((mail))
  66. if self.debug: print('lista destinatari',self._to_)
  67. def add_to(self,mail=None):
  68. self.add_listadestinatari(mail)
  69. def set_soggetto(self,soggetto=""):
  70. self.soggetto = soggetto
  71. if self.debug:
  72. print("########")
  73. print('soggetto:',self.soggetto)
  74. print("########")
  75. def set_corpo(self,corpo="",html=False):
  76. self.corpo = corpo
  77. if self.debug:
  78. print("########")
  79. print('corpo:',self.corpo)
  80. print('set_corpo html:',html)
  81. print("########")
  82. self.html = html
  83. def set_data(self,data={}):
  84. self.data = data
  85. if not 'ora_data' in self.data:
  86. self.data['ora_data'] = datetime.datetime.now().strftime('%H:%M %d/%m/%Y')
  87. if not 'ora' in self.data:
  88. self.data['ora'] = datetime.datetime.now().strftime('%H:%m')
  89. if not 'data' in self.data:
  90. self.data['data'] = datetime.datetime.now().strftime('%d/%m/%Y')
  91. if self.debug: print('data',self.data)
  92. def set_json(self,data={}):
  93. self.json = json.dumps(data)
  94. if self.debug: print('json:',self.json)
  95. def send(self):
  96. # normalizza i destinatari (uno solo, non ripetuti)
  97. if self.debug: print('spedisco a:',self._to_)
  98. for i in self._to_:
  99. self._to[i] = i
  100. self._to_complete = [ x for x in self._to.values() ]
  101. if self.debug: print("destinatari tutti:",self._to_complete)
  102. #rendering del soggetto
  103. soggetto = template_from_string(self.soggetto)
  104. soggetto_render = soggetto.render(self.data)
  105. print('soggetto_render:',soggetto_render)
  106. if self.debug: print("soggetto",soggetto)
  107. corpo = template_from_string(self.corpo)
  108. corpo_render = None
  109. try:
  110. corpo_render = corpo.render(self.data)
  111. print('corpo_render:',corpo_render)
  112. except TemplateSyntaxError as tse:
  113. print('Errore nel Template')
  114. print(tse)
  115. print('quanti sono',len(self._to_complete))
  116. for tt in self._to_complete:
  117. ttl = [tt,]
  118. print('ttl',ttl,)
  119. msg = None
  120. if self.debug: print('richiesta html::',self.html)
  121. if self.html:
  122. msg=EmailMultiAlternatives(soggetto_render, corpo_render, self._from_, ttl)
  123. msg.attach_alternative(corpo_render, "text/html")
  124. else: msg=EmailMultiAlternatives(soggetto_render, corpo_render, self._from_, ttl)
  125. if self.json:
  126. msg.attach_alternative(self.json,'text/json')
  127. try:
  128. msg.send()
  129. print('messaggio inviato')
  130. except ConnectionRefusedError as cre:
  131. print('impossibile inviare mail',cre)
  132. def welcome(request):
  133. '''
  134. punto di ingresso.
  135. vengono mostrati tutti i modelli presenti presenti
  136. '''
  137. print('__name__',__name__,'welcome')
  138. data = dict()
  139. data['HeaderTitle'] = getConfig('HeaderTitle')
  140. if not 'AziendaId' in request.session:
  141. print('manca azienda')
  142. return HttpResponseRedirect(reverse("login:start"))
  143. else:
  144. data['AziendaId'] = request.session['AziendaId']
  145. print("Azienda rilevata",data['AziendaId'])
  146. if not 'AdminId' in request.session or 'UserId' in request.session:
  147. print("Non rilevo presensa UserId e AdminId in request.session")
  148. return HttpResponseRedirect(reverse("login:start"))
  149. else:
  150. data['AdminId'] = request.session['AdminId']
  151. if 'UserId' in request.session:
  152. data['UserId'] = request.session['UserId']
  153. #filtro:
  154. # selezionare tutti gli utenti per AziendaId
  155. data['admin'] = User.objects.get(pk=data['AdminId'])
  156. data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
  157. data['comunicazione'] = data['azienda'].comunicazione_set.all()
  158. #data['comm'] = data['azienda'].comm
  159. print(data)
  160. if request.method == "POST":
  161. print('Richiesta effettuata')
  162. print(request.POST)
  163. if 'Ritorna' in request.POST:
  164. return HttpResponseRedirect(reverse("azienda:welcome"))
  165. if 'Nuovo' in request.POST:
  166. if 'ComId' in request.session:
  167. del request.session['ComId']
  168. return HttpResponseRedirect(reverse("comunicazione:edit"))
  169. if 'edit' in request.POST:
  170. request.session['ComId'] = request.POST.get('edit')
  171. print('ComId',request.session.get('ComId'))
  172. return HttpResponseRedirect(reverse("comunicazione:edit"))
  173. return render(request,'comunicazione.welcome.html',data)
  174. def edit(request):
  175. print('__name__',__name__,'edit')
  176. data = dict()
  177. data['HeaderTitle'] = getConfig('HeaderTitle')
  178. if not 'AziendaId' in request.session:
  179. print('manca azienda')
  180. return HttpResponseRedirect(reverse("login:start"))
  181. data['AziendaId'] = request.session['AziendaId']
  182. print("Azienda rilevata",data['AziendaId'])
  183. data['azienda'] = Azienda.objects.get(pk=data['AziendaId'])
  184. if not 'AdminId' in request.session or 'UserId' in request.session:
  185. print("Non rilevo presensa UserId e AdminId in request.session")
  186. return HttpResponseRedirect(reverse("login:start"))
  187. data['AdminId'] = request.session['AdminId']
  188. print(data)
  189. if 'UserId' in request.session:
  190. data['UserId'] = request.session['UserId']
  191. comunicazione = Comunicazione()
  192. if 'ComId' in request.session:
  193. ComId = request.session.get('ComId')
  194. print('trovato ComId',ComId)
  195. comunicazione = Comunicazione.objects.get(pk=ComId)
  196. if request.method == 'POST':
  197. print('richiesta effettuata')
  198. if 'Ritorna' in request.POST:
  199. return HttpResponseRedirect(reverse("comunicazione:welcome"))
  200. fd = formComunicazione(request.POST)
  201. if fd.is_valid():
  202. print('comunicazione valido')
  203. comunicazione.mittente = fd.cleaned_data.get('mittente')
  204. comunicazione.soggetto = fd.cleaned_data.get('soggetto')
  205. comunicazione.corpo = fd.cleaned_data.get('corpo')
  206. comunicazione.azienda = data['azienda']
  207. comunicazione.save()
  208. else:
  209. print('comunicazione non valido')
  210. data['comunicazione'] = formComunicazione(request.POST)
  211. else:
  212. print('post non valido')
  213. tmp = dict()
  214. if len(data['azienda'].mail):
  215. print('azienda contiene email',data['azienda'].mail)
  216. tmp['mittente'] = data['azienda'].mail
  217. else:
  218. print('azienda non contiene email, prendo default',getConfig("DefaultEmail"))
  219. tmp['mittente'] = getConfig("DefaultEmail")
  220. tmp['soggetto'] = comunicazione.soggetto
  221. tmp['corpo'] = comunicazione.corpo
  222. data['comunicazione'] = formComunicazione(tmp)
  223. print(data)
  224. return render(request,'comunicazione.edit.html',data)