diff --git a/materia/views.py b/materia/views.py index ddac6c42b..91bf264df 100644 --- a/materia/views.py +++ b/materia/views.py @@ -24,7 +24,6 @@ from crispy_layout_mixin import form_actions from crud.base import Crud, make_pagination from crud.masterdetail import MasterDetailCrud from norma.models import LegislacaoCitada -from sapl.utils import get_base_url from .forms import (AcompanhamentoMateriaForm, AnexadaForm, AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, @@ -155,6 +154,12 @@ class TramitacaoCrud(MasterDetailCrud): class CreateView(MasterDetailCrud.CreateView): form_class = TramitacaoForm + def post(self, request, *args, **kwargs): + form = self.get_form() + materia = MateriaLegislativa.objects.get(id=kwargs['pk']) + do_envia_email_tramitacao(request, materia) + return super(CreateView, self).post(request, *args, **kwargs) + class UpdateView(MasterDetailCrud.UpdateView): form_class = TramitacaoForm @@ -563,3 +568,200 @@ class AcompanhamentoMateriaView(CreateView): def get_success_url(self): return reverse('sessao:list_pauta_sessao') + + +def load_email_templates(templates, context={}): + + emails = [] + for t in templates: + tpl = loader.get_template(t) + email = tpl.render(Context(context)) + if t.endswith(".html"): + email = email.replace('\n', '').replace('\r', '') + emails.append(email) + return emails + + +def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): + + if not casa_legislativa: + raise ValueError("Casa Legislativa é obrigatória") + + if not materia: + raise ValueError("Matéria é obrigatória") + + # FIXME i18n + casa_nome = (casa_legislativa.nome + ' de ' + + casa_legislativa.municipio + '-' + + casa_legislativa.uf) + + base_url = get_base_url(request) + materia_url = reverse('materia:acompanhar_materia', + kwargs={'pk': materia.id}) + confirmacao_url = reverse('materia:acompanhar_confirmar', + kwargs={'pk': materia.id}) + + autores = [] + for autoria in materia.autoria_set.all(): + autores.append(autoria.autor.nome) + + templates = load_email_templates(['email/acompanhar.txt', + 'email/acompanhar.html'], + {"casa_legislativa": casa_nome, + "logotipo": casa_legislativa.logotipo, + "descricao_materia": materia.ementa, + "autoria": autores, + "hash_txt": hash_txt, + "base_url": base_url, + "materia": str(materia), + "materia_url": materia_url, + "confirmacao_url": confirmacao_url, }) + return templates + + +def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): + + if not casa_legislativa: + raise ValueError("Casa Legislativa é obrigatória") + + if not materia: + raise ValueError("Matéria é obrigatória") + + # FIXME i18n + casa_nome = (casa_legislativa.nome + ' de ' + + casa_legislativa.municipio + '-' + + casa_legislativa.uf) + + base_url = get_base_url(request) + url_materia = reverse('materia:acompanhar_materia', + kwargs={'pk': materia.id}) + url_excluir = reverse('materia:acompanhar_excluir', + kwargs={'pk': materia.id}) + + autores = [] + for autoria in materia.autoria_set.all(): + autores.append(autoria.autor.nome) + + templates = load_email_templates(['email/tramitacao.txt', + 'email/tramitacao.html'], + {"casa_legislativa": casa_nome, + "data_registro": datetime.now().strftime( + "%d/%m/%Y"), + "cod_materia": materia.id, + "logotipo": casa_legislativa.logotipo, + "descricao_materia": materia.ementa, + "autoria": autores, + "data": materia.tramitacao_set.last( + ).data_tramitacao, + "status": materia.tramitacao_set.last( + ).status, + "texto_acao": + materia.tramitacao_set.last().texto, + "hash_txt": hash_txt, + "materia": str(materia), + "base_url": base_url, + "materia_url": url_materia, + "excluir_url": url_excluir}) + return templates + + +def enviar_emails(sender, recipients, messages): + ''' + Recipients is a string list of email addresses + + Messages is an array of dicts of the form: + {'recipient': 'address', # useless???? + 'subject': 'subject text', + 'txt_message': 'text message', + 'html_message': 'html message' + } + ''' + + if len(messages) == 1: + # sends an email simultaneously to all recipients + send_mail(messages[0]['subject'], + messages[0]['txt_message'], + sender, + recipients, + html_message=messages[0]['html_message'], + fail_silently=False) + + elif len(recipients) > len(messages): + raise ValueError("Message list should have size 1 \ + or equal recipient list size. \ + recipients: %s, messages: %s" % (recipients, messages) + ) + + else: + # sends an email simultaneously to all reciepients + for (d, m) in zip(recipients, messages): + send_mail(m['subject'], + m['txt_message'], + sender, + [d], + html_message=m['html_message'], + fail_silently=False) + return None + + +def do_envia_email_confirmacao(request, materia, email): + # + # Envia email de confirmacao para atualizações de tramitação + # + destinatario = AcompanhamentoMateria.objects.get(materia=materia, + email=email, + confirmado=False) + casa = CasaLegislativa.objects.first() + + sender = 'sapl-test@interlegis.leg.br' + # FIXME i18n + subject = "[SAPL] " + str(materia) + " - Ative o Acompanhamento da Materia" + messages = [] + recipients = [] + + email_texts = criar_email_confirmacao(request, + casa, + materia, + destinatario.hash,) + recipients.append(destinatario.email) + messages.append({ + 'recipient': destinatario.email, + 'subject': subject, + 'txt_message': email_texts[0], + 'html_message': email_texts[1] + }) + + enviar_emails(sender, recipients, messages) + return None + + +def do_envia_email_tramitacao(request, materia): + # + # Envia email de tramitacao para usuarios cadastrados + # + import ipdb; ipdb.set_trace() + destinatarios = AcompanhamentoMateria.objects.filter(materia=materia, + confirmado=True) + casa = CasaLegislativa.objects.first() + + sender = 'sapl-test@interlegis.leg.br' + # FIXME i18n + subject = "[SAPL] " + str(materia) + \ + " - Acompanhamento de Materia Legislativa" + messages = [] + recipients = [] + for destinatario in destinatarios: + email_texts = criar_email_tramitacao(request, + casa, + materia, + destinatario.hash,) + recipients.append(destinatario.email) + messages.append({ + 'recipient': destinatario.email, + 'subject': subject, + 'txt_message': email_texts[0], + 'html_message': email_texts[1] + }) + + enviar_emails(sender, recipients, messages) + return None diff --git a/sapl/utils.py b/sapl/utils.py index ad1d2e111..03b2a110a 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -8,7 +8,6 @@ from django.core.exceptions import ValidationError from django.utils.translation import ugettext_lazy as _ from floppyforms import ClearableFileInput - autor_label = '''
Autor: @@ -212,199 +211,3 @@ def intervalos_tem_intersecao(a_inicio, a_fim, b_inicio, b_fim): maior_inicio = max(a_inicio, b_inicio) menor_fim = min(a_fim, b_fim) return maior_inicio <= menor_fim - - -def load_email_templates(templates, context={}): - - emails = [] - for t in templates: - tpl = loader.get_template(t) - email = tpl.render(Context(context)) - if t.endswith(".html"): - email = email.replace('\n', '').replace('\r', '') - emails.append(email) - return emails - - -def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): - - if not casa_legislativa: - raise ValueError("Casa Legislativa é obrigatória") - - if not materia: - raise ValueError("Matéria é obrigatória") - - # FIXME i18n - casa_nome = (casa_legislativa.nome + ' de ' + - casa_legislativa.municipio + '-' + - casa_legislativa.uf) - - base_url = get_base_url(request) - materia_url = reverse('materia:acompanhar_materia', - kwargs={'pk': materia.id}) - confirmacao_url = reverse('materia:acompanhar_confirmar', - kwargs={'pk': materia.id}) - - autores = [] - for autoria in materia.autoria_set.all(): - autores.append(autoria.autor.nome) - - templates = load_email_templates(['email/acompanhar.txt', - 'email/acompanhar.html'], - {"casa_legislativa": casa_nome, - "logotipo": casa_legislativa.logotipo, - "descricao_materia": materia.ementa, - "autoria": autores, - "hash_txt": hash_txt, - "base_url": base_url, - "materia": str(materia), - "materia_url": materia_url, - "confirmacao_url": confirmacao_url, }) - return templates - - -def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): - - if not casa_legislativa: - raise ValueError("Casa Legislativa é obrigatória") - - if not materia: - raise ValueError("Matéria é obrigatória") - - # FIXME i18n - casa_nome = (casa_legislativa.nome + ' de ' + - casa_legislativa.municipio + '-' + - casa_legislativa.uf) - - base_url = get_base_url(request) - url_materia = reverse('materia:acompanhar_materia', - kwargs={'pk': materia.id}) - url_excluir = reverse('materia:acompanhar_excluir', - kwargs={'pk': materia.id}) - - autores = [] - for autoria in materia.autoria_set.all(): - autores.append(autoria.autor.nome) - - templates = load_email_templates(['email/tramitacao.txt', - 'email/tramitacao.html'], - {"casa_legislativa": casa_nome, - "data_registro": datetime.now().strftime( - "%d/%m/%Y"), - "cod_materia": materia.id, - "logotipo": casa_legislativa.logotipo, - "descricao_materia": materia.ementa, - "autoria": autores, - "data": materia.tramitacao_set.last( - ).data_tramitacao, - "status": materia.tramitacao_set.last( - ).status, - "texto_acao": - materia.tramitacao_set.last().texto, - "hash_txt": hash_txt, - "materia": str(materia), - "base_url": base_url, - "materia_url": url_materia, - "excluir_url": url_excluir}) - return templates - - -def enviar_emails(sender, recipients, messages): - ''' - Recipients is a string list of email addresses - - Messages is an array of dicts of the form: - {'recipient': 'address', # useless???? - 'subject': 'subject text', - 'txt_message': 'text message', - 'html_message': 'html message' - } - ''' - - if len(messages) == 1: - # sends an email simultaneously to all recipients - send_mail(messages[0]['subject'], - messages[0]['txt_message'], - sender, - recipients, - html_message=messages[0]['html_message'], - fail_silently=False) - - elif len(recipients) > len(messages): - raise ValueError("Message list should have size 1 \ - or equal recipient list size. \ - recipients: %s, messages: %s" % (recipients, messages) - ) - - else: - # sends an email simultaneously to all reciepients - for (d, m) in zip(recipients, messages): - send_mail(m['subject'], - m['txt_message'], - sender, - [d], - html_message=m['html_message'], - fail_silently=False) - return None - - -def do_envia_email_confirmacao(request, materia, email): - # - # Envia email de confirmacao para atualizações de tramitação - # - destinatario = AcompanhamentoMateria.objects.get(materia=materia, - email=email, - confirmado=False) - casa = CasaLegislativa.objects.first() - - sender = 'sapl-test@interlegis.leg.br' - # FIXME i18n - subject = "[SAPL] " + str(materia) + " - Ative o Acompanhamento da Materia" - messages = [] - recipients = [] - - email_texts = criar_email_confirmacao(request, - casa, - materia, - destinatario.hash,) - recipients.append(destinatario.email) - messages.append({ - 'recipient': destinatario.email, - 'subject': subject, - 'txt_message': email_texts[0], - 'html_message': email_texts[1] - }) - - enviar_emails(sender, recipients, messages) - return None - - -def do_envia_email_tramitacao(request, materia): - # - # Envia email de tramitacao para usuarios cadastrados - # - destinatarios = AcompanhamentoMateria.objects.filter(materia=materia, - confirmado=True) - casa = CasaLegislativa.objects.first() - - sender = 'sapl-test@interlegis.leg.br' - # FIXME i18n - subject = "[SAPL] " + str(materia) + \ - " - Acompanhamento de Materia Legislativa" - messages = [] - recipients = [] - for destinatario in destinatarios: - email_texts = criar_email_tramitacao(request, - casa, - materia, - destinatario.hash,) - recipients.append(destinatario.email) - messages.append({ - 'recipient': destinatario.email, - 'subject': subject, - 'txt_message': email_texts[0], - 'html_message': email_texts[1] - }) - - enviar_emails(sender, recipients, messages) - return None