Skip to content

Permite os relatórios por autor sem autor, limitados por período - #3869

Open
joaohortsenado wants to merge 1 commit into
3.1.xfrom
fix/relatorios-por-autor-sem-autor
Open

joaohortsenado wants to merge 1 commit into
3.1.xfrom
fix/relatorios-por-autor-sem-autor

Conversation

@joaohortsenado

Copy link
Copy Markdown
Contributor

Descrição

Os relatórios Matérias por Autor e Normas por Autor voltam a aceitar pesquisa sem autor. Nesse caso, o período passa a ser obrigatório.

  • Sem autor e sem período: o formulário mostra o erro "Selecione um autor ou informe o período (data inicial e final)." Antes, o relatório devolvia "Não foram encontradas matérias com os parâmetros pesquisados" sem dizer o motivo.
  • Matérias, sem autor e com período: lista as matérias do período, uma vez cada. A coluna passa a se chamar "Autor(es)" e traz todos os autores.
  • Normas, sem autor e com período: agrupa as normas do período pelo primeiro autor, como antes do RC3.
  • Com autor: nada muda, e o período continua opcional.
  • Nos parâmetros de pesquisa, aparece "Autor: Todos" em vez de "Autor: None".

Duas mudanças de apoio:

  • RelatorioMixin: com "Gerar relatório PDF" marcado e o formulário inválido, os relatórios voltam à tela com os erros em vez de gerar um PDF vazio. Isso vale para todos os relatórios. As 14 views que usam o mixin já retornavam o contexto sem resultados quando o form era inválido, então o PDF desse caso saía sempre vazio.
  • N+1: as duas listagens fazem prefetch de autoria_set__autor__autor_related (autorianorma_set__... nas normas). Com 40 matérias de 2 autores cada, a tela com autor caiu de 207 para 10 queries, e a contagem não cresce com o número de matérias. Isso importa porque a pesquisa sem autor pode listar o ano inteiro.

Issue Relacionada

Não há issue aberta. A demanda veio do OSTicket #885134 (Câmara Municipal de Mamborê/PR). O suporte reproduziu o problema também em Pato Branco/PR.

Motivação e Contexto

O commit 3b5e3747 ("Fix duplicate normas/matérias in author reports and prevent unfiltered queries"), que entrou no 3.1.165-RC3, fez os dois filtros devolverem none() quando não há autor. A ideia era evitar uma varredura da tabela inteira com ORDER BY em campo relacionado. Só que o formulário não diz que o autor é obrigatório, e a Câmara precisa do relatório sem autor para alimentar o PROLEGIS do TCE-PR.

Este PR mantém a proteção de outra forma: sem autor, o período fechado limita a consulta, e a ordenação não usa campos de autoria. Assim, não há JOIN nas matérias e não aparecem as duplicatas que motivaram o 3b5e3747. Nas normas, o filtro primeiro_autor=True e o ORDER BY autorianorma__autor usam o mesmo JOIN (conferido no SQL gerado).

O mesmo chamado relata o PDF de Matérias por Autor saindo vazio. Esse defeito também veio do 3b5e3747, que removeu materias_resultado do contexto sem atualizar o template do PDF, e já está corrigido no 3.1.x por 3fe3f966 (#3849). Este PR inclui um teste de regressão para ele.

Como Isso Foi Testado?

  • pytest sapl/relatorios/tests.py: os 9 testes passam (os 7 novos e os 2 que já existiam), no Postgres 10.5 com a imagem do SAPL.
  • Os mesmos testes contra o 3.1.x atual: os 5 testes do comportamento novo falham. O teste do PDF passa nos dois, porque a correção do Fix N+1 queries in sessão/relatórios and remove unused painel views #3849 já está no 3.1.x.
  • Contagem de queries com 10 e 40 matérias de 2 autores parlamentares: cerca de 10 queries nos dois casos, com e sem autor.
  • Reprodução em produção (Mamborê, 3.1.165-RC3):
    • sem autor, com ou sem período e tipo → "Não foram encontradas matérias";
    • com autor → a tela lista as matérias, mas o PDF sai "Nenhum documento encontrado".
  • Não rodei a suíte completa.

Capturas de Tela (se apropriado):

Não se aplica.

Tipos de Mudanças

  • Bug fix (alteração que corrige uma issue e não altera funcionalidades já existentes)
  • Nova feature (alteração que adiciona uma funcionalidade e não altera funcionalidades já existentes)
  • Alteração disruptiva (Breaking change) (Correção ou funcionalidade que causa alteração nas funcionalidades existentes)

Checklist:

  • Eu li o documento de Contribuição (CONTRIBUTING).
  • Meu código segue o estilo de código deste projeto.
  • Minha alteração requer uma alteração na documentação.
  • Eu atualizei a documentação de acordo.
  • Eu adicionei testes para cobrir minhas mudanças.
  • Todos os testes novos e existentes passaram.

Desde o 3.1.165-RC3, Matérias por Autor e Normas por Autor devolviam
"Não foram encontradas..." quando nenhum autor era selecionado, sem
explicar o motivo (OSTicket #885134, Mamborê/PR).

- Sem autor, a pesquisa exige o período (data inicial e final); sem
  nenhum dos dois, o formulário mostra o erro.
- Matérias sem autor: lista as matérias do período, uma vez cada, com
  todos os autores.
- Normas sem autor: agrupa as normas do período pelo primeiro autor,
  como antes do RC3.
- Com o formulário inválido e "Gerar relatório PDF" marcado, os
  relatórios voltam à tela com os erros em vez de gerar um PDF vazio.
- Prefetch das autorias e dos autores nas duas listagens.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant