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.norma.models import NormaJuridica
from sapl.parlamentares.models import Filiacao from sapl.parlamentares.models import Filiacao
from sapl.sessao.models import SessaoPlenaria 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() register = template.Library()
@ -405,3 +404,8 @@ def dont_break_out(value):
@register.filter(expects_localtime=True) @register.filter(expects_localtime=True)
def parse_datetime(value): def parse_datetime(value):
return django_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: class RelatorioMixin:
# TODO: verificar se todos os relatorios de sistema/relatorios extendem esse Mixin
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
super(RelatorioMixin, self).get(request) 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') is_relatorio = request.GET.get('relatorio')
context = self.get_context_data(filter=self.filterset) context = self.get_context_data(filter=self.filterset)

179
sapl/templates/relatorios/relatorios_list.html

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

74
sapl/utils.py

@ -1216,3 +1216,77 @@ class GoogleRecapthaMixin:
_('Ocorreu um erro na validação do reCAPTCHA.')) _('Ocorreu um erro na validação do reCAPTCHA.'))
return cd 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