diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 3615fee47..9a0d5007c 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -1944,10 +1944,6 @@ class ProposicaoForm(FileFieldCheckMixin, forms.ModelForm): fields = [ to_column((Fieldset( TipoProposicao._meta.verbose_name, Field('tipo')), 12)), - to_column( - (Alert('teste', - css_class="ementa_materia hidden alert-info", - dismiss=False), 12)), to_column(('descricao', 12)), to_column(('observacao', 12)), diff --git a/sapl/relatorios/tests.py b/sapl/relatorios/tests.py index a79ca8be5..fe46e86c4 100644 --- a/sapl/relatorios/tests.py +++ b/sapl/relatorios/tests.py @@ -1,3 +1,52 @@ -# from django.test import TestCase +import pytest +from model_bakery import baker -# Create your tests here. +from sapl.base.models import CasaLegislativa +from sapl.relatorios.views import get_sessao_plenaria +from sapl.sessao.models import ExpedienteSessao, SessaoPlenaria, TipoExpediente +from sapl.sessao.views import get_expedientes + + +def cria_sessao_com_expedientes(): + """Cria uma sessão cujos expedientes têm `ordenacao` inversa à ordem + alfabética dos nomes -- o caso que expõe o OSTicket #125461.""" + sessao = baker.make(SessaoPlenaria) + tipo_leitura = baker.make( + TipoExpediente, nome='Leitura e Aprovação da Ata', ordenacao=1) + tipo_grande = baker.make( + TipoExpediente, nome='Grande Expediente', ordenacao=2) + + for tipo in (tipo_grande, tipo_leitura): + baker.make(ExpedienteSessao, sessao_plenaria=sessao, tipo=tipo, + conteudo='

Conteúdo de {}.

'.format(tipo.nome)) + + return sessao + + +@pytest.mark.django_db(transaction=False) +def test_relatorio_sessao_respeita_ordenacao_do_tipo_expediente(): + """O PDF da Sessão Plenária deve seguir o campo `ordenacao` de + TipoExpediente, e não a ordem alfabética do nome.""" + sessao = cria_sessao_com_expedientes() + casa = baker.make(CasaLegislativa) + user = baker.make('auth.User') + + lst_expedientes = get_sessao_plenaria(sessao, casa, user)[6] + nomes = [e['nom_expediente'] for e in lst_expedientes] + + assert nomes == ['Leitura e Aprovação da Ata', 'Grande Expediente'] + + +@pytest.mark.django_db(transaction=False) +def test_relatorio_sessao_tem_mesma_ordem_de_expedientes_do_resumo(): + """O PDF e o Resumo exibido em tela não podem divergir: foi essa + divergência que originou o OSTicket #125461.""" + sessao = cria_sessao_com_expedientes() + casa = baker.make(CasaLegislativa) + user = baker.make('auth.User') + + do_pdf = [e['nom_expediente'] + for e in get_sessao_plenaria(sessao, casa, user)[6]] + da_tela = [e['tipo'].nome for e in get_expedientes(sessao)['expedientes']] + + assert do_pdf == da_tela diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 60ba1635e..8b89342fd 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -609,8 +609,10 @@ def get_sessao_plenaria(sessao, casa, user): # Exibe os Expedientes lst_expedientes = [] + # A ordenação deve ser a mesma de sapl.sessao.views.get_expedientes, para + # que o PDF confira com o Resumo exibido em tela. OSTicket #125461 expedientes = ExpedienteSessao.objects.filter( - sessao_plenaria=sessao).order_by('tipo__nome') + sessao_plenaria=sessao).order_by('tipo__ordenacao', 'tipo__nome') for e in expedientes: conteudo = e.conteudo if not is_empty(conteudo): diff --git a/sapl/utils.py b/sapl/utils.py index 42d4b2c6e..9bd6231dc 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -611,6 +611,9 @@ TIPOS_TEXTO_PERMITIDOS = ( 'text/pdf', 'text/x-pdf', 'text/plain', + 'text/csv', + 'application/vnd.ms-excel', + 'application/csv', 'application/txt', 'browser/internal', 'text/anytext',