Browse Source

Adiciona controle de visibilidade no módulo de relatorios

tela-config-relatorio
Edward Ribeiro 1 year ago
parent
commit
ed9734985d
  1. 8
      sapl/base/templatetags/common_tags.py
  2. 6
      sapl/relatorios/views.py
  3. 179
      sapl/templates/relatorios/relatorios_list.html
  4. 74
      sapl/utils.py

8
sapl/base/templatetags/common_tags.py

@ -11,8 +11,7 @@ from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa, Proposic
from sapl.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao
from sapl.sessao.models import SessaoPlenaria
from sapl.utils import filiacao_data, SEPARADOR_HASH_PROPOSICAO
from sapl.utils import filiacao_data, SEPARADOR_HASH_PROPOSICAO, is_report_allowed
register = template.Library()
@ -405,3 +404,8 @@ def dont_break_out(value):
@register.filter(expects_localtime=True)
def parse_datetime(value):
return django_parse_datetime(value)
@register.filter
def is_report_visible(request, url_path=None):
return is_report_allowed(request, url_path)

6
sapl/relatorios/views.py

@ -1760,9 +1760,15 @@ class RelatoriosListView(TemplateView):
class RelatorioMixin:
# TODO: verificar se todos os relatorios de sistema/relatorios extendem esse Mixin
def get(self, request, *args, **kwargs):
super(RelatorioMixin, self).get(request)
# TODO: import as global
from sapl.utils import is_report_allowed
if not is_report_allowed(request):
raise Http404()
is_relatorio = request.GET.get('relatorio')
context = self.get_context_data(filter=self.filterset)

179
sapl/templates/relatorios/relatorios_list.html

@ -1,4 +1,5 @@
{% extends "base.html" %}
{% load common_tags %}
{% load i18n crispy_forms_tags %}
{% block base_content %}
@ -12,72 +13,120 @@
</tr>
</thead>
<tbody>
<tr>
<td><a href="{% url 'sapl.relatorios:materia_por_tramitacao' %}">Matérias em tramitação</a></td>
<td> Matérias Legislativas por Ano, Tipo, Local atual e Status da Tramitação informados. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:materia_por_autor' %}">Matérias por Autor</a></td>
<td> Listagem e totalização de matérias por autor, com filtros para tipo e período. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:materia_por_ano_autor_tipo' %}">Matérias por Ano, Autor e Tipo</a></td>
<td> Totalização anual de matérias agrupadas por autor e tipo. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:materia_por_ano_assunto' %}">Matérias por Ano, Assunto</a></td>
<td> Totalização de matérias agrupadas por ano e assunto. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:presenca_sessao' %}">Presença nas sessões</a></td>
<td>Presença dos parlamentares nas sessões plenárias.</td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:atas' %}">Atas</a></td>
<td> Atas de Sessão Plenária. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:historico_tramitacoes' %}">Histórico de tramitações de Matérias</a></td>
<td> Histórico de tramitações por período e local informados. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:data_fim_prazo_tramitacoes' %}">Matérias por prazos de Tramitação</a></td>
<td> Relatório de tramitações em intervalo de data de fim de prazo. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:reuniao' %}">Reunião de Comissão</a></td>
<td> Reunião de Comissão por data. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:audiencia' %}">Audiência Pública</a></td>
<td> Audiência Pública com o tipo. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:normas_por_mes' %}">Normas por mês</a></td>
<td> Normas publicadas por mês. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:normas_por_vigencia' %}">Normas por vigência</a></td>
<td> Normas vigentes ou não vigentes. </td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:historico_tramitacoes_adm' %}">Histórico de tramitações de documentos</a></td>
<td> Histórico de tramitações de documentos por período e local informados. </td>
</tr>
{% url 'sapl.relatorios:materia_por_tramitacao' as materia_por_tramitacao %}
{% if request|is_report_visible:materia_por_tramitacao %}
<tr>
<td><a href="{{ materia_por_tramitacao }}">Matérias em tramitação</a></td>
<td> Matérias Legislativas por Ano, Tipo, Local atual e Status da Tramitação informados. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:materia_por_autor' as materia_por_autor %}
{% if request|is_report_visible:materia_por_autor %}
<tr>
<td><a href="{{ materia_por_autor }}">Matérias por Autor</a></td>
<td> Listagem e totalização de matérias por autor, com filtros para tipo e período. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:materia_por_ano_autor_tipo' as materia_por_ano_autor_tipo %}
{% if request|is_report_visible:materia_por_ano_autor_tipo %}
<tr>
<td><a href="{{ materia_por_ano_autor_tipo }}">Matérias por Ano, Autor e Tipo</a></td>
<td> Totalização anual de matérias agrupadas por autor e tipo. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:materia_por_ano_assunto' as materia_por_ano_assunto %}
{% if request|is_report_visible:materia_por_ano_assunto %}
<tr>
<td><a href="{{ materia_por_ano_assunto }}">Matérias por Ano, Assunto</a></td>
<td> Totalização de matérias agrupadas por ano e assunto. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:presenca_sessao' as presenca_sessao %}
{% if request|is_report_visible:presenca_sessao %}
<tr>
<td><a href="{{ presenca_sessao }}">Presença nas sessões</a></td>
<td>Presença dos parlamentares nas sessões plenárias.</td>
</tr>
{% endif %}
{% url 'sapl.relatorios:atas' as atas %}
{% if request|is_report_visible:atas %}
<tr>
<td><a href="{{ atas }}">Atas</a></td>
<td> Atas de Sessão Plenária. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:historico_tramitacoes' as historico_tramitacoes %}
{% if request|is_report_visible:historico_tramitacoes %}
<tr>
<td><a href="{{ historico_tramitacoes }}">Histórico de tramitações de Matérias</a></td>
<td> Histórico de tramitações por período e local informados. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:data_fim_prazo_tramitacoes' as data_fim_prazo_tramitacoes %}
{% if request|is_report_visible:data_fim_prazo_tramitacoes %}
<tr>
<td><a href="{{ data_fim_prazo_tramitacoes }}">Matérias por prazos de Tramitação</a></td>
<td> Relatório de tramitações em intervalo de data de fim de prazo. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:reuniao' as reuniao %}
{% if request|is_report_visible:reuniao %}
<tr>
<td><a href="{% url 'sapl.relatorios:reuniao' %}">Reunião de Comissão</a></td>
<td> Reunião de Comissão por data. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:audiencia' as audiencia %}
{% if request|is_report_visible:audiencia %}
<tr>
<td><a href="{{audiencia}}">Audiência Pública</a></td>
<td> Audiência Pública com o tipo. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:normas_por_mes' as normas_por_mes %}
{% if request|is_report_visible:normas_por_mes %}
<tr>
<td><a href="{{normas_por_mes}}">Normas por mês</a></td>
<td> Normas publicadas por mês. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:normas_por_vigencia' as normas_por_vigencia %}
{% if request|is_report_visible:normas_por_vigencia %}
<tr>
<td><a href="{{ normas_por_vigencia }}">Normas por vigência</a></td>
<td> Normas vigentes ou não vigentes. </td>
</tr>
{% endif %}
{% url 'sapl.relatorios:historico_tramitacoes_adm' as historico_tramitacoes_adm %}
{% if request|is_report_visible:historico_tramitacoes_adm %}
<tr>
<td><a href="{{historico_tramitacoes_adm}}">Histórico de tramitações de documentos</a></td>
<td> Histórico de tramitações de documentos por período e local informados. </td>
</tr>
{% endif %}
{% if estatisticas_acesso_normas %}
<tr>
<td><a href="{% url 'sapl.relatorios:estatisticas_acesso' %}">Estatísticas de acesso de Normas</a></td>
<td> Normas por acesso. </td>
</tr>
{% endif %}
<tr>
<td><a href="{% url 'sapl.relatorios:relatorio_documentos_acessorios' %}"> Documentos Acessórios de Matérias Legislativas</a></td>
<td> Documentos Acessórios por tipo, período e tipo da Matéria Legislativa associada.</td>
</tr>
<tr>
<td><a href="{% url 'sapl.relatorios:normas_por_autor' %}"> Normas Por Autor</a></td>
<td> Listagem e totalização de normas por autor, com filtros para tipo e período.</td>
</tr>
{% url 'sapl.relatorios:estatisticas_acesso' as estatisticas_acesso %}
{% if request|is_report_visible:estatisticas_acesso %}
<tr>
<td><a href="{{ estatisticas_acesso }}">Estatísticas de acesso de Normas</a></td>
<td> Normas por acesso. </td>
</tr>
{% endif %}
{% endif %}
{% url 'sapl.relatorios:relatorio_documentos_acessorios' as relatorio_documentos_acessorios %}
{% if request|is_report_visible:relatorio_documentos_acessorios %}
<tr>
<td><a href="{{ relatorio_documentos_acessorios }}"> Documentos Acessórios de Matérias Legislativas</a></td>
<td> Documentos Acessórios por tipo, período e tipo da Matéria Legislativa associada.</td>
</tr>
{% endif %}
{% url 'sapl.relatorios:normas_por_autor' as normas_por_autor %}
{% if request|is_report_visible:normas_por_autor %}
<tr>
<td><a href="{{ normas_por_autor }}"> Normas Por Autor</a></td>
<td> Listagem e totalização de normas por autor, com filtros para tipo e período.</td>
</tr>
{% endif %}
</tbody>
</table>
</fieldset>

74
sapl/utils.py

@ -1216,3 +1216,77 @@ class GoogleRecapthaMixin:
_('Ocorreu um erro na validação do reCAPTCHA.'))
return cd
# TODO: cache this map and invalidate on each update
def get_report_urls_map():
from django.urls import get_resolver
from django.urls.base import reverse
# TODO: avoid URLs with params now, but need to incorporate in the future
SKIPLIST = ['relatorio_sessao_plenaria',
'relatorio_etiqueta_protocolo',
'resumo_ata_pdf',
'resumo_ata_pdf',
'relatorio_sessao_plenaria_pdf',
'etiqueta_materia_legislativa',
'relatorio_materia_tramitacao']
NAMESPACE = 'sapl.relatorios:'
URL_PATTERN = 'sapl.relatorios.urls'
url_map = {}
for url in get_resolver(URL_PATTERN).url_patterns:
if url.name in SKIPLIST:
continue
dst_url = reverse(f"{NAMESPACE}{url.name}")
url_map[dst_url] = {"name": url.name,
"public": True,
"internal": True} #TODO: get permissions from AppConfig and fine grained permissions
return url_map
def is_report_allowed(request, url_path=None):
from sapl.utils import get_report_urls_map # TODO: import global
url_map = get_report_urls_map() # TODO: cache this!!! Globally
path = url_path if url_path else request.path
authenticated = True if request.user.is_authenticated else False
if path in url_map.keys():
path_metadata = url_map[path]
if not authenticated and path_metadata['public']:
return True
elif authenticated and path_metadata['internal']:
return True
else:
return False
# default
return True
def get_path_to_name_report_map():
return {'/relatorios/materia': '',
'/relatorios/capa-processo': '',
'/relatorios/ordem-dia': '',
'/relatorios/relatorio-documento-administrativo': '',
'/relatorios/espelho': '',
'/relatorios/protocolo': '',
'/sistema/relatorios/': '',
'/sistema/relatorios/materia-por-autor': 'Matérias por Autor',
'/sistema/relatorios/relatorio-por-mes': 'Normas por mês',
'/sistema/relatorios/relatorio-por-vigencia': 'Normas por vigência',
'/sistema/relatorios/estatisticas-acesso': '',
'/sistema/relatorios/materia-por-ano-autor-tipo': 'Matérias por Ano, Autor e Tipo',
'/sistema/relatorios/materia-por-tramitacao': 'Matérias em tramitação',
'/sistema/relatorios/materia-por-assunto': 'Matérias por Ano, Assunto',
'/sistema/relatorios/historico-tramitacoes': 'Histórico de tramitações de Matérias',
'/sistema/relatorios/data-fim-prazo-tramitacoes': 'Matérias por prazos de Tramitação',
'/sistema/relatorios/presenca': 'Presença nas sessões',
'/sistema/relatorios/atas': 'Atas',
'/sistema/relatorios/reuniao': 'Reunião de Comissão',
'/sistema/relatorios/audiencia': 'Audiência Pública',
'/sistema/relatorios/historico-tramitacoesadm': 'Histórico de tramitações de documentos',
'/sistema/relatorios/documentos_acessorios': 'Documentos Acessórios de Matérias Legislativas',
'/sistema/relatorios/normas-por-autor': 'Normas Por Autor'
}
Loading…
Cancel
Save