mirror of https://github.com/interlegis/sapl.git
Browse Source
* Fix #2252 * Muda mensagens de ERROR para WARNING in quando da erro no envio do email na tramitação * Muda mensagens de ERROR para WARNING in quando da erro no envio do email na tramitação * Fixing travis errors * Fix tests * Update acompanhar_documento.txt * Update email_utils.py * Update receivers.py * Update test_email_templates.py * adicionados testes de template dos email de acompanhamento * tirar duplicidadepull/2299/head
Talitha Pumar
6 years ago
committed by
Edward
22 changed files with 553 additions and 99 deletions
@ -0,0 +1,42 @@ |
|||
from django.db.models.signals import post_delete, post_save |
|||
from django.dispatch import receiver |
|||
|
|||
from sapl.materia.models import Tramitacao |
|||
from sapl.protocoloadm.models import TramitacaoAdministrativo |
|||
from sapl.base.signals import tramitacao_signal |
|||
from sapl.utils import get_base_url |
|||
|
|||
from sapl.base.email_utils import do_envia_email_tramitacao |
|||
|
|||
|
|||
@receiver(tramitacao_signal) |
|||
def handle_tramitacao_signal(sender, **kwargs): |
|||
tramitacao = kwargs.get("post") |
|||
request = kwargs.get("request") |
|||
if 'protocoloadm' in str(sender): |
|||
doc_mat = tramitacao.documento |
|||
tipo = "documento" |
|||
elif 'materia' in str(sender): |
|||
tipo = "materia" |
|||
doc_mat = tramitacao.materia |
|||
|
|||
do_envia_email_tramitacao( |
|||
get_base_url(request), |
|||
tipo, |
|||
doc_mat, |
|||
tramitacao.status, |
|||
tramitacao.unidade_tramitacao_destino) |
|||
|
|||
|
|||
@receiver(post_delete) |
|||
def status_tramitacao_materia(sender, instance, **kwargs): |
|||
if isinstance(sender, TramitacaoAdministrativo): |
|||
if instance.status.indicador == 'F': |
|||
materia = instance.materia |
|||
materia.em_tramitacao = True |
|||
materia.save() |
|||
elif isinstance(sender, TramitacaoAdministrativo): |
|||
if instance.status.indicador == 'F': |
|||
documento = instance.documento |
|||
documento.tramitacao = True |
|||
documento.save() |
@ -1,29 +0,0 @@ |
|||
from django.db.models.signals import post_delete, post_save |
|||
from django.dispatch import receiver |
|||
|
|||
from sapl.materia.models import Tramitacao |
|||
from sapl.materia.signals import tramitacao_signal |
|||
from sapl.utils import get_base_url |
|||
|
|||
from .email_utils import do_envia_email_tramitacao |
|||
|
|||
|
|||
@receiver(tramitacao_signal) |
|||
def handle_tramitacao_signal(sender, **kwargs): |
|||
tramitacao = kwargs.get("post") |
|||
request = kwargs.get("request") |
|||
materia = tramitacao.materia |
|||
|
|||
do_envia_email_tramitacao( |
|||
get_base_url(request), |
|||
materia, |
|||
tramitacao.status, |
|||
tramitacao.unidade_tramitacao_destino) |
|||
|
|||
|
|||
@receiver(post_delete, sender=Tramitacao) |
|||
def status_tramitacao_materia(sender, instance, **kwargs): |
|||
if instance.status.indicador == 'F': |
|||
materia = instance.materia |
|||
materia.em_tramitacao = True |
|||
materia.save() |
@ -0,0 +1,32 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Generated by Django 1.9.13 on 2018-09-27 15:24 |
|||
from __future__ import unicode_literals |
|||
|
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('protocoloadm', '0007_auto_20180924_1724'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.CreateModel( |
|||
name='AcompanhamentoDocumento', |
|||
fields=[ |
|||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('usuario', models.CharField(max_length=50)), |
|||
('email', models.EmailField(max_length=100, verbose_name='E-mail')), |
|||
('data_cadastro', models.DateField(auto_now_add=True)), |
|||
('hash', models.CharField(max_length=8)), |
|||
('confirmado', models.BooleanField(default=False)), |
|||
('documento', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='protocoloadm.DocumentoAdministrativo')), |
|||
], |
|||
options={ |
|||
'verbose_name_plural': 'Acompanhamentos de Documento', |
|||
'verbose_name': 'Acompanhamento de Documento', |
|||
}, |
|||
), |
|||
] |
@ -0,0 +1,65 @@ |
|||
from django.core import mail |
|||
|
|||
from sapl.base.email_utils import enviar_emails, load_email_templates |
|||
|
|||
|
|||
def test_email_template_loading(): |
|||
expected = "<html><body>Hello Django</body></html>" |
|||
emails = load_email_templates(['email/test_tramitacao.html'], |
|||
context={"name": "Django"}) |
|||
|
|||
# strip \n and \r to compare with expected |
|||
actual = emails[0].replace('\n', '').replace('\r', '') |
|||
|
|||
assert actual == expected |
|||
|
|||
|
|||
def test_html_email_body_with_materia(): |
|||
templates = load_email_templates(['email/tramitacao.txt', |
|||
'email/tramitacao.html'], |
|||
{"image": 'img/logo.png', |
|||
"casa_legislativa": |
|||
"Assembléia Parlamentar", |
|||
"data_registro": "25/02/2016", |
|||
"cod_materia": "1", |
|||
"descricao_materia": "Assunto de teste", |
|||
"data": "25/02/2016", |
|||
"status": "Arquivado", |
|||
"texto_acao": "Deliberado", |
|||
"hash_txt": "abc01f", |
|||
"materia_id": "794", |
|||
"base_url": "http://localhost:8000", |
|||
"materia_url": |
|||
"/docadm/764/acompanhar-documento", |
|||
"excluir_url": |
|||
"/docadm/764/acompanhar-excluir"}) |
|||
|
|||
assert len(templates) == 2 |
|||
|
|||
|
|||
def test_enviar_email_distintos(): |
|||
NUM_MESSAGES = 10 |
|||
messages = [{'recipient': 'user-' + str(i) + '@test.com', |
|||
'subject': 'subject: ' + str(i), |
|||
'txt_message': 'txt: ' + str(i), |
|||
'html_message': '<html></html>', |
|||
} for i in range(NUM_MESSAGES)] |
|||
|
|||
recipients = [m['recipient'] for m in messages] |
|||
|
|||
enviar_emails('test@sapl.com', recipients, messages) |
|||
assert len(mail.outbox) == NUM_MESSAGES |
|||
|
|||
|
|||
def test_enviar_same_email(): |
|||
NUM_MESSAGES = 10 |
|||
messages = [{'recipient': 'user-' + str(i) + '@test.com', |
|||
'subject': 'subject: ' + str(i), |
|||
'txt_message': 'txt: ' + str(i), |
|||
'html_message': '<html></html>', |
|||
} for i in range(NUM_MESSAGES)] |
|||
|
|||
recipients = [m['recipient'] for m in messages] |
|||
|
|||
enviar_emails('test@sapl.com', recipients, [messages[0]]) |
|||
assert len(mail.outbox) == 1 |
@ -0,0 +1,25 @@ |
|||
{% load i18n %} |
|||
{% load static %} |
|||
<html><head></head><body bgcolor='#ffffff'> |
|||
|
|||
<h2 align='center'><b>{{casa_legislativa}}</b> |
|||
<br/> |
|||
Sistema de Apoio ao Processo Legislativo |
|||
</h2> |
|||
|
|||
<p>Registramos seu pedido para acompanhamento por e-mail do documento administrativo identificado a seguir:</p> |
|||
<a href="{{base_url}}{{documento_url}}">{{documento}}<b> - {{descricao_documento}}</b></a><br/> |
|||
{{assunto}}<br/> |
|||
</h4> |
|||
<p></p> |
|||
<p>Para garantia de sua privacidade, solicitamos que ative o recebimento das futuras mensagens clicando no link:</p> |
|||
|
|||
<h4> |
|||
<a href="{{base_url}}{{confirmacao_url}}?hash_txt={{hash_txt}}">{{base_url}}{{confirmacao_url}}?hash_txt={{hash_txt}}</a> |
|||
</h4> |
|||
<br/> |
|||
<hr> |
|||
<p>Caso não tenha realizado o cadastramento em nosso sistema, favor desconsiderar a presente mensagem<br/> |
|||
Esta é uma mensagem automática. Por favor, não responda.</p> |
|||
</body> |
|||
</html> |
@ -0,0 +1,16 @@ |
|||
{{casa_legislativa}} |
|||
|
|||
Sistema de Apoio ao Processo Legislativo |
|||
|
|||
>Registramos seu pedido para acompanhamento por e-mail do documento administrativo identificado a seguir: |
|||
|
|||
{{base_url}}{{documento_url}} - {{documento}} - {{descricao_documento}} |
|||
|
|||
{{assunto}} |
|||
|
|||
Para garantia de sua privacidade, solicitamos que ative o recebimento das futuras mensagens acessando no link: |
|||
|
|||
{{base_url}}{{url_confirmar}}?hash_txt={{hash_txt}} |
|||
|
|||
Caso não tenha realizado o cadastramento em nosso sistema, favor desconsiderar a presente mensagem |
|||
Esta é uma mensagem automática. Por favor, não responda. |
@ -0,0 +1,21 @@ |
|||
{% extends "crud/detail.html" %} |
|||
{% load i18n %} |
|||
{% load crispy_forms_tags %} |
|||
{% block actions %} {% endblock %} |
|||
{% block detail_content %} |
|||
|
|||
<h1>Acompanhamento de Documento</h1> |
|||
<hr> |
|||
<div class="row"> |
|||
<div class="col-md-4"><b>Tipo:</b> {{documento.tipo.sigla}} - {{documento.tipo.descricao}}</div> |
|||
<div class="col-md-4"><b>Número:</b> {{documento.numero}}</div> |
|||
<div class="col-md-4"><b>Ano:</b> {{documento.ano}}</div> |
|||
|
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-md-12"><b>Assunto:</b> {{documento.assunto|safe}}</div> |
|||
</div> |
|||
|
|||
{% if error %} <h5 align="center"><font color="#FF0000">{{ error }}</font></h5> {% endif %} |
|||
{% crispy form %} |
|||
{% endblock %} |
Loading…
Reference in new issue