from django.shortcuts import render from django.core.mail import send_mail from django.core.mail import SafeMIMEText from django.core.mail import EmailMultiAlternatives from django.template.loader import get_template from django.template import Context from django.template import engines, TemplateSyntaxError from uuid import uuid4,UUID import json import re from django.db.models import Sum #from .templatetags.commtags import * from django.shortcuts import render from .models import * from .forms import * import datetime import sys from config.views import * from azienda.views import * # se serve aiuta a capire quali sono i moduli caricati, ma meglio # disattivarlo che sono una cifra lunghissima #print(sys.modules) def template_from_string(template_string, using=None): """ Convert a string into a template object, using a given template engine or using the default backends from settings.TEMPLATES if no engine was specified. This function is based on django.template.loader.get_template, but uses Engine.from_string instead of Engine.get_template. """ chain = [] engine_list = engines.all() if using is None else [engines[using]] for engine in engine_list: try: return engine.from_string(template_string) except TemplateSyntaxError as e: chain.append(e) raise TemplateSyntaxError(template_string, chain=chain) class ServizioMail: def __init__(self,debug=False): self._from_ = getConfig('DefaultEmail') self._to_ = [] self._to = {} self.debug = debug self.soggetto = "" self.corpo = "" self.corpo_testo = "" self.corpo_html = "" self.data = dict() self.json = None if self.debug: print('attivato flag di debug') def set_mailfrom(self,mail_from): self._from_ = mail_from if self.debug: print('mail_from',self._from_) def set_listadestinatari(self,lista=[]): self._to_ = [] self.add_listadestinatari(lista) if self.debug: print('lista destinatari',self._to_) def set_rcptto(self,lista=[]): self.set_listadestinatari(lista) def add_listadestinatari(self,mail=None): if self.debug: print('type mail:',type(mail)) if mail: if type(mail) == list: for i in mail: self._to_.append(i) return self._to_.append((mail)) if self.debug: print('lista destinatari',self._to_) def add_to(self,mail=None): self.add_listadestinatari(mail) def set_soggetto(self,soggetto=""): self.soggetto = soggetto if self.debug: print("########") print('soggetto:',self.soggetto) print("########") def set_corpo(self,corpo="",html=False): self.corpo = corpo if self.debug: print("########") print('corpo:',self.corpo) print('set_corpo html:',html) print("########") self.html = html def set_data(self,data={}): self.data = data if not 'ora_data' in self.data: self.data['ora_data'] = datetime.datetime.now().strftime('%H:%M %d/%m/%Y') if not 'ora' in self.data: self.data['ora'] = datetime.datetime.now().strftime('%H:%m') if not 'data' in self.data: self.data['data'] = datetime.datetime.now().strftime('%d/%m/%Y') if self.debug: print('data',self.data) def set_json(self,data={}): self.json = json.dumps(data) if self.debug: print('json:',self.json) def send(self): # normalizza i destinatari (uno solo, non ripetuti) if self.debug: print('spedisco a:',self._to_) for i in self._to_: self._to[i] = i self._to_complete = [ x for x in self._to.values() ] if self.debug: print("destinatari tutti:",self._to_complete) #rendering del soggetto soggetto = template_from_string(self.soggetto) soggetto_render = soggetto.render(self.data) print('soggetto_render:',soggetto_render) if self.debug: print("soggetto",soggetto) corpo = template_from_string(self.corpo) corpo_render = None try: corpo_render = corpo.render(self.data) print('corpo_render:',corpo_render) except TemplateSyntaxError as tse: print('Errore nel Template') print(tse) print('quanti sono',len(self._to_complete)) for tt in self._to_complete: ttl = [tt,] print('ttl',ttl,) msg = None if self.debug: print('richiesta html::',self.html) if self.html: msg=EmailMultiAlternatives(soggetto_render, corpo_render, self._from_, ttl) msg.attach_alternative(corpo_render, "text/html") else: msg=EmailMultiAlternatives(soggetto_render, corpo_render, self._from_, ttl) if self.json: msg.attach_alternative(self.json,'text/json') try: msg.send() print('messaggio inviato') except ConnectionRefusedError as cre: print('impossibile inviare mail',cre) #################### # modulo comunicazioni #################### def welcome(request): ''' punto di ingresso. vengono mostrati tutti i modelli presenti presenti ''' print('__name__',__name__,'welcome') data = dict() data['HeaderTitle'] = getConfig('HeaderTitle') if not 'AziendaId' in request.session: print('manca azienda') return HttpResponseRedirect(reverse("login:start")) else: data['AziendaId'] = request.session['AziendaId'] print("Azienda rilevata",data['AziendaId']) if not 'AdminId' in request.session or 'UserId' in request.session: print("Non rilevo presensa UserId e AdminId in request.session") return HttpResponseRedirect(reverse("login:start")) else: data['AdminId'] = request.session['AdminId'] if 'UserId' in request.session: data['UserId'] = request.session['UserId'] #filtro: # selezionare tutti gli utenti per AziendaId data['admin'] = Amministratore.objects.get(pk=data['AdminId']) data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) data['comunicazione'] = data['azienda'].comunicazione_set.all() #data['comm'] = data['azienda'].comm print(data) if request.method == "POST": print('Richiesta effettuata') print(request.POST) if 'indietro' in request.POST: return HttpResponseRedirect(reverse("azienda:welcome")) if 'Nuovo' in request.POST: if 'ComId' in request.session: del request.session['ComId'] return HttpResponseRedirect(reverse("comunicazione:edit")) if 'edit' in request.POST: request.session['ComId'] = request.POST.get('edit') print('ComId',request.session.get('ComId')) return HttpResponseRedirect(reverse("comunicazione:edit")) return render(request,'comunicazione.welcome.html',data) def edit(request): print('__name__',__name__,'edit') data = dict() data['HeaderTitle'] = getConfig('HeaderTitle') if not 'AziendaId' in request.session: print('manca azienda') return HttpResponseRedirect(reverse("login:start")) data['AziendaId'] = request.session['AziendaId'] print("Azienda rilevata",data['AziendaId']) data['azienda'] = Azienda.objects.get(pk=data['AziendaId']) if not 'AdminId' in request.session or 'UserId' in request.session: print("Non rilevo presensa UserId e AdminId in request.session") return HttpResponseRedirect(reverse("login:start")) data['AdminId'] = request.session['AdminId'] print(data) if 'UserId' in request.session: data['UserId'] = request.session['UserId'] comunicazione = Comunicazione() if 'ComId' in request.session: ComId = request.session.get('ComId') print('trovato ComId',ComId) comunicazione = Comunicazione.objects.get(pk=ComId) if request.method == 'POST': print('richiesta effettuata') if 'Ritorna' in request.POST: return HttpResponseRedirect(reverse("comunicazione:welcome")) fd = formComunicazione(request.POST) if fd.is_valid(): print('comunicazione valido') comunicazione.mittente = fd.cleaned_data.get('mittente') comunicazione.soggetto = fd.cleaned_data.get('soggetto') comunicazione.corpo = fd.cleaned_data.get('corpo') comunicazione.azienda = data['azienda'] comunicazione.save() else: print('comunicazione non valido') data['comunicazione'] = formComunicazione(request.POST) else: print('post non valido') tmp = dict() if len(data['azienda'].mail): print('azienda contiene email',data['azienda'].mail) tmp['mittente'] = data['azienda'].mail else: print('azienda non contiene email, prendo default',getConfig("DefaultEmail")) tmp['mittente'] = getConfig("DefaultEmail") tmp['soggetto'] = comunicazione.soggetto tmp['corpo'] = comunicazione.corpo data['comunicazione'] = formComunicazione(tmp) print(data) return render(request,'comunicazione.edit.html',data)