From a221b6f79ab4de6377c525b04cb1f819418fb1ee Mon Sep 17 00:00:00 2001 From: Eduardo Calil Date: Tue, 30 May 2017 13:48:43 -0300 Subject: [PATCH] =?UTF-8?q?Resolve=20problemas=20com=20e-mail=20de=20acomp?= =?UTF-8?q?anhamento=20de=20mat=C3=A9ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/materia/views.py | 89 ++++++++++++++++++---------- sapl/templates/email/acompanhar.html | 14 ++--- sapl/templates/email/tramitacao.html | 48 +++++++-------- sapl/templates/email/tramitacao.txt | 2 +- 4 files changed, 88 insertions(+), 65 deletions(-) diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 58ffe509f..35f60d255 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -906,7 +906,12 @@ class TramitacaoCrud(MasterDetailCrud): def post(self, request, *args, **kwargs): materia = MateriaLegislativa.objects.get(id=kwargs['pk']) - do_envia_email_tramitacao(request, materia) + + if 'status' in request.POST and request.POST['status']: + status = StatusTramitacao.objects.filter( + id=request.POST['status']).first() + do_envia_email_tramitacao( + request, materia, status) return super(CreateView, self).post(request, *args, **kwargs) class UpdateView(MasterDetailCrud.UpdateView): @@ -915,7 +920,13 @@ class TramitacaoCrud(MasterDetailCrud): def post(self, request, *args, **kwargs): materia = MateriaLegislativa.objects.get( tramitacao__id=kwargs['pk']) - do_envia_email_tramitacao(request, materia) + + if 'status' in request.POST and request.POST['status']: + status = StatusTramitacao.objects.filter( + id=request.POST['status']).first() + do_envia_email_tramitacao( + request, materia, status) + return super(UpdateView, self).post(request, *args, **kwargs) @property @@ -1245,19 +1256,32 @@ class DocumentoAcessorioView(PermissionRequiredMixin, CreateView): class AcompanhamentoConfirmarView(TemplateView): - def get_redirect_url(self): - return reverse('sapl.sessao:list_pauta_sessao') + def get_redirect_url(self, email): + msg = _('Esta matéria está sendo acompanhada pelo e-mail: %s') % ( + email) + messages.add_message(self.request, messages.SUCCESS, msg) + return reverse('sapl.materia:materialegislativa_detail', + kwargs={'pk': self.kwargs['pk']}) def get(self, request, *args, **kwargs): materia_id = kwargs['pk'] hash_txt = request.GET.get('hash_txt', '') - acompanhar = AcompanhamentoMateria.objects.get(materia_id=materia_id, - hash=hash_txt) + try: + acompanhar = AcompanhamentoMateria.objects.get( + materia_id=materia_id, + hash=hash_txt) + except ObjectDoesNotExist: + raise Http404() + # except MultipleObjectsReturned: + # A melhor solução deve ser permitir que a exceção + # (MultipleObjectsReturned) seja lançada e vá para o log, + # pois só poderá ser causada por um erro de desenvolvimente + acompanhar.confirmado = True acompanhar.save() - return HttpResponseRedirect(self.get_redirect_url()) + return HttpResponseRedirect(self.get_redirect_url(acompanhar.email)) class AcompanhamentoExcluirView(TemplateView): @@ -1366,40 +1390,44 @@ class AcompanhamentoMateriaView(CreateView): hash_txt = self.get_random_chars() - try: - AcompanhamentoMateria.objects.get( - email=email, - materia=materia, - hash=hash_txt) - except ObjectDoesNotExist: - acompanhar = form.save(commit=False) + acompanhar = AcompanhamentoMateria.objects.get_or_create( + materia=materia, + email=form.data['email']) + + # Se o segundo elemento do retorno do get_or_create for True + # quer dizer que o elemento não existia + if acompanhar[1]: + acompanhar = acompanhar[0] acompanhar.hash = hash_txt - acompanhar.materia = materia acompanhar.usuario = usuario.username acompanhar.confirmado = False acompanhar.save() - except MultipleObjectsReturned: - AcompanhamentoMateria.objects.filter( - email=email, - materia=materia, - hash=hash_txt).first() - do_envia_email_confirmacao(request, materia, email) + msg = _('Foi enviado um e-mail de confirmação. Confira sua caixa \ + de mensagens e clique no link que nós enviamos para \ + confirmar o acompanhamento desta matéria.') + messages.add_message(request, messages.SUCCESS, msg) + # Caso esse Acompanhamento já exista + # avisa ao usuário que essa matéria já está sendo acompanhada else: + msg = _('Este e-mail já está acompanhando essa matéria.') + messages.add_message(request, messages.INFO, msg) + return self.render_to_response( {'form': form, 'materia': materia, 'error': _('Essa matéria já está\ sendo acompanhada por este e-mail.')}) - return self.form_valid(form) + return HttpResponseRedirect(self.get_success_url()) else: return self.render_to_response( {'form': form, 'materia': materia}) def get_success_url(self): - return reverse('sapl.sessao:list_pauta_sessao') + return reverse('sapl.materia:materialegislativa_detail', + kwargs={'pk': self.kwargs['pk']}) def load_email_templates(templates, context={}): @@ -1428,7 +1456,7 @@ def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): casa_legislativa.uf) base_url = get_base_url(request) - materia_url = reverse('sapl.materia:acompanhar_materia', + materia_url = reverse('sapl.materia:materialegislativa_detail', kwargs={'pk': materia.id}) confirmacao_url = reverse('sapl.materia:acompanhar_confirmar', kwargs={'pk': materia.id}) @@ -1451,7 +1479,8 @@ def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''): return templates -def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): +def criar_email_tramitacao(request, casa_legislativa, materia, status, + hash_txt=''): if not casa_legislativa: raise ValueError("Casa Legislativa é obrigatória") @@ -1465,7 +1494,7 @@ def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): casa_legislativa.uf) base_url = get_base_url(request) - url_materia = reverse('sapl.materia:acompanhar_materia', + url_materia = reverse('sapl.materia:tramitacao_list', kwargs={'pk': materia.id}) url_excluir = reverse('sapl.materia:acompanhar_excluir', kwargs={'pk': materia.id}) @@ -1485,8 +1514,7 @@ def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''): "autoria": autores, "data": materia.tramitacao_set.last( ).data_tramitacao, - "status": materia.tramitacao_set.last( - ).status, + "status": status, "texto_acao": materia.tramitacao_set.last().texto, "hash_txt": hash_txt, @@ -1567,7 +1595,7 @@ def do_envia_email_confirmacao(request, materia, email): return None -def do_envia_email_tramitacao(request, materia): +def do_envia_email_tramitacao(request, materia, status): # # Envia email de tramitacao para usuarios cadastrados # @@ -1585,13 +1613,14 @@ def do_envia_email_tramitacao(request, materia): email_texts = criar_email_tramitacao(request, casa, materia, + status, destinatario.hash,) recipients.append(destinatario.email) messages.append({ 'recipient': destinatario.email, 'subject': subject, 'txt_message': email_texts[0], - 'html_message': email_texts[1] + 'html_message': email_texts[1], }) enviar_emails(sender, recipients, messages) diff --git a/sapl/templates/email/acompanhar.html b/sapl/templates/email/acompanhar.html index c95092bf2..bd1a20263 100644 --- a/sapl/templates/email/acompanhar.html +++ b/sapl/templates/email/acompanhar.html @@ -1,14 +1,12 @@ {% load i18n %} {% load static %} -

- Logo -

-

{{casa_legislativa}} -
- Sistema de Apoio ao Processo Legislativo -

+ +

{{casa_legislativa}} +
+ Sistema de Apoio ao Processo Legislativo +

+

Registramos seu pedido para acompanhamento por e-mail da matéria legislativa identificada a seguir:

{{materia}} - {{descricao_materia}}
{{ementa}}
diff --git a/sapl/templates/email/tramitacao.html b/sapl/templates/email/tramitacao.html index 6ca454903..03fbea0cf 100644 --- a/sapl/templates/email/tramitacao.html +++ b/sapl/templates/email/tramitacao.html @@ -1,38 +1,34 @@ {% load i18n %} {% load static %} - - -

- Logo -

-

{{casa_legislativa}} -
- Sistema de Apoio ao Processo Legislativo -

-

A seguinte matéria de seu interesse sofreu - tramitação registrada em {{data_registro}} -

+ + +

{{casa_legislativa}} +
+ Sistema de Apoio ao Processo Legislativo +

+

A seguinte matéria, de seu interesse, sofreu + Tramitação registrada em {{data_registro}}. +

- {{materia}} - {{descricao_materia}} -

+ {{materia}} - {{descricao_materia}} +

Autoria:
{% for autor in autoria %} - {{ autor }}
+ {{ autor }}
{% endfor %}

- Data da ação: {{data}}
- Status: {{status}}
- Texto da ação: {{texto_acao}}

-
-

- - Clique aqui para excluir seu e-mail da lista de envio -

-

Esta é uma mensagem automática. - Por favor, não a responda.

+ Data da ação: {{data}}
+ Status: {{status}}
+ Texto da ação: {{texto_acao}}

+
+

+ + Clique aqui para excluir seu e-mail da lista de envio +

+

Esta é uma mensagem automática. + Por favor, não a responda.

diff --git a/sapl/templates/email/tramitacao.txt b/sapl/templates/email/tramitacao.txt index 0e84653e8..b2465a18d 100644 --- a/sapl/templates/email/tramitacao.txt +++ b/sapl/templates/email/tramitacao.txt @@ -3,7 +3,7 @@ Sistema de Apoio ao Processo Legislativo ----------------------------------------- -A seguinte matéria de seu interesse sofreu tramitação registrada em {{data_registro}} +A seguinte matéria, de seu interesse, sofreu Tramitação registrada em {{data_registro}} Matéria: {{materia}} - {{descricao_materia}}