views.py 9.0 KB

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