diff --git a/sapl/base/templatetags/common_tags.py b/sapl/base/templatetags/common_tags.py
index ade7ceef7..7cd751d1d 100644
--- a/sapl/base/templatetags/common_tags.py
+++ b/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)
\ No newline at end of file
diff --git a/sapl/relatorios/urls.py b/sapl/relatorios/urls.py
index e16e44162..b27bfc55a 100644
--- a/sapl/relatorios/urls.py
+++ b/sapl/relatorios/urls.py
@@ -97,4 +97,4 @@ urlpatterns = [
name='relatorio_documentos_acessorios'),
url(r'^sistema/relatorios/normas-por-autor$',
RelatorioNormasPorAutorView.as_view(), name='normas_por_autor'),
-]
+]
\ No newline at end of file
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
index a0c8addd6..ccc88b86c 100755
--- a/sapl/relatorios/views.py
+++ b/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)
diff --git a/sapl/templates/relatorios/relatorios_list.html b/sapl/templates/relatorios/relatorios_list.html
index 5f77a5e6a..38346fa21 100644
--- a/sapl/templates/relatorios/relatorios_list.html
+++ b/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 @@
-
- Matérias em tramitação |
- Matérias Legislativas por Ano, Tipo, Local atual e Status da Tramitação informados. |
-
-
- Matérias por Autor |
- Listagem e totalização de matérias por autor, com filtros para tipo e período. |
-
-
- Matérias por Ano, Autor e Tipo |
- Totalização anual de matérias agrupadas por autor e tipo. |
-
-
- Matérias por Ano, Assunto |
- Totalização de matérias agrupadas por ano e assunto. |
-
-
- Presença nas sessões |
- Presença dos parlamentares nas sessões plenárias. |
-
-
- Atas |
- Atas de Sessão Plenária. |
-
-
- Histórico de tramitações de Matérias |
- Histórico de tramitações por período e local informados. |
-
-
- Matérias por prazos de Tramitação |
- Relatório de tramitações em intervalo de data de fim de prazo. |
-
-
- Reunião de Comissão |
- Reunião de Comissão por data. |
-
-
- Audiência Pública |
- Audiência Pública com o tipo. |
-
-
- Normas por mês |
- Normas publicadas por mês. |
-
-
- Normas por vigência |
- Normas vigentes ou não vigentes. |
-
-
- Histórico de tramitações de documentos |
- Histórico de tramitações de documentos por período e local informados. |
-
+ {% url 'sapl.relatorios:materia_por_tramitacao' as materia_por_tramitacao %}
+ {% if request|is_report_visible:materia_por_tramitacao %}
+
+ Matérias em tramitação |
+ Matérias Legislativas por Ano, Tipo, Local atual e Status da Tramitação informados. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:materia_por_autor' as materia_por_autor %}
+ {% if request|is_report_visible:materia_por_autor %}
+
+ Matérias por Autor |
+ Listagem e totalização de matérias por autor, com filtros para tipo e período. |
+
+ {% 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 %}
+
+ Matérias por Ano, Autor e Tipo |
+ Totalização anual de matérias agrupadas por autor e tipo. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:materia_por_ano_assunto' as materia_por_ano_assunto %}
+ {% if request|is_report_visible:materia_por_ano_assunto %}
+
+ Matérias por Ano, Assunto |
+ Totalização de matérias agrupadas por ano e assunto. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:presenca_sessao' as presenca_sessao %}
+ {% if request|is_report_visible:presenca_sessao %}
+
+ Presença nas sessões |
+ Presença dos parlamentares nas sessões plenárias. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:atas' as atas %}
+ {% if request|is_report_visible:atas %}
+
+ Atas |
+ Atas de Sessão Plenária. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:historico_tramitacoes' as historico_tramitacoes %}
+ {% if request|is_report_visible:historico_tramitacoes %}
+
+ Histórico de tramitações de Matérias |
+ Histórico de tramitações por período e local informados. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:data_fim_prazo_tramitacoes' as data_fim_prazo_tramitacoes %}
+ {% if request|is_report_visible:data_fim_prazo_tramitacoes %}
+
+ Matérias por prazos de Tramitação |
+ Relatório de tramitações em intervalo de data de fim de prazo. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:reuniao' as reuniao %}
+ {% if request|is_report_visible:reuniao %}
+
+ Reunião de Comissão |
+ Reunião de Comissão por data. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:audiencia' as audiencia %}
+ {% if request|is_report_visible:audiencia %}
+
+ Audiência Pública |
+ Audiência Pública com o tipo. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:normas_por_mes' as normas_por_mes %}
+ {% if request|is_report_visible:normas_por_mes %}
+
+ Normas por mês |
+ Normas publicadas por mês. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:normas_por_vigencia' as normas_por_vigencia %}
+ {% if request|is_report_visible:normas_por_vigencia %}
+
+ Normas por vigência |
+ Normas vigentes ou não vigentes. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:historico_tramitacoes_adm' as historico_tramitacoes_adm %}
+ {% if request|is_report_visible:historico_tramitacoes_adm %}
+
+ Histórico de tramitações de documentos |
+ Histórico de tramitações de documentos por período e local informados. |
+
+ {% endif %}
{% if estatisticas_acesso_normas %}
-
- Estatísticas de acesso de Normas |
- Normas por acesso. |
-
- {% endif %}
-
- Documentos Acessórios de Matérias Legislativas |
- Documentos Acessórios por tipo, período e tipo da Matéria Legislativa associada. |
-
-
- Normas Por Autor |
- Listagem e totalização de normas por autor, com filtros para tipo e período. |
-
+ {% url 'sapl.relatorios:estatisticas_acesso' as estatisticas_acesso %}
+ {% if request|is_report_visible:estatisticas_acesso %}
+
+ Estatísticas de acesso de Normas |
+ Normas por acesso. |
+
+ {% endif %}
+ {% endif %}
+ {% url 'sapl.relatorios:relatorio_documentos_acessorios' as relatorio_documentos_acessorios %}
+ {% if request|is_report_visible:relatorio_documentos_acessorios %}
+
+ Documentos Acessórios de Matérias Legislativas |
+ Documentos Acessórios por tipo, período e tipo da Matéria Legislativa associada. |
+
+ {% endif %}
+ {% url 'sapl.relatorios:normas_por_autor' as normas_por_autor %}
+ {% if request|is_report_visible:normas_por_autor %}
+
+ Normas Por Autor |
+ Listagem e totalização de normas por autor, com filtros para tipo e período. |
+
+ {% endif %}
diff --git a/sapl/utils.py b/sapl/utils.py
index 0770b4e15..da40ac102 100644
--- a/sapl/utils.py
+++ b/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'
+ }
\ No newline at end of file