Browse Source

Apresenta inconsistências (#2454)

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* Identificar matérias com protocolos inexistentes

* sobe alteracoes

* Identificar parl. com mandatos com intersecção

* Alterar a apresentação dos resultados

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* Identificar matérias com protocolos inexistentes

* sobe alteracoes

* Identificar parl. com mandatos com intersecção

* Alterar a apresentação dos resultados

* Adicionar identificação de autores duplicados

* Identificar bancadas e comissões com autor externo

* Adicionar migrações necessárias

* Alterar a apresentação dos resultados

* Alterar a apresentação dos resultados

* Acelerar identificação de protocolos com matérias

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* Identificar matérias com protocolos inexistentes

* sobe alteracoes

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* Identificar matérias com protocolos inexistentes

* Identificar parl. com mandatos com intersecção

* Alterar a apresentação dos resultados

* Adicionar identificação de autores duplicados

* Identificar bancadas e comissões com autor externo

* Alterar a apresentação dos resultados

* Alterar a apresentação dos resultados

* Acelerar identificação de protocolos com matérias

* Adicionar migrações necessárias

* Alterar a apresentação dos resultados

* Adicionar migrações necessárias

* Alterar apresentação de resultados

* Identificar legislatura infindável

* Identificar legislatura sem data fim

* Adicionar identificação de protocolos duplicados

* sobe alteracoes

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* Identificar matérias com protocolos inexistentes

* Identificar parl. com mandatos com intersecção

* Alterar a apresentação dos resultados

* Alterar a apresentação dos resultados

* Identificar bancadas e comissões com autor externo

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* Adicionar identificação de protocolos duplicados

* Identificar protocolos com duas ou mais matérias

* sobe alteracoes

* Identificar parl. com mandatos com intersecção

* Alterar a apresentação dos resultados

* Adicionar identificação de autores duplicados

* Identificar bancadas e comissões com autor externo

* Alterar apresentação de resultados

* Identificar legislatura infindável

* Identificar legislatura sem data fim

* Adicionar migrações necessárias

* Tratar mandato sem data -> mandatos interseção

* Adicionar importação itertools

* Corregir função autores_duplicados

* Refatorar função legislatura_infindavel

Excluir comentários desnecessários

Refatorar identificação autores duplicados

Remover migrations de outro PR

Correções

Excluir arquivos desnecessários

Alterar apresentação de resultados

Identificar mandato sem data inicial

* Correção templates
pull/2498/head
João Rodrigues 6 years ago
committed by Edward
parent
commit
308a50dff0
  1. 38
      sapl/base/urls.py
  2. 352
      sapl/base/views.py
  3. 30
      sapl/templates/base/autores_duplicados.html
  4. 34
      sapl/templates/base/bancada_comissao_autor_externo.html
  5. 30
      sapl/templates/base/legislatura_infindavel.html
  6. 20
      sapl/templates/base/lista_inconsistencias.html
  7. 30
      sapl/templates/base/mandato_sem_data_inicio.html
  8. 32
      sapl/templates/base/materias_protocolo_inexistente.html
  9. 32
      sapl/templates/base/parlamentares_mandatos_intersecao.html
  10. 28
      sapl/templates/base/protocolos_com_materias.html
  11. 30
      sapl/templates/base/protocolos_duplicados.html
  12. 3
      sapl/templates/navbar.yaml

38
sapl/base/urls.py

@ -27,7 +27,16 @@ from .views import (AlterarSenha, AppConfigCrud, CasaLegislativaCrud,
RelatorioNormasPublicadasMesView, RelatorioNormasPublicadasMesView,
RelatorioNormasVigenciaView, RelatorioNormasVigenciaView,
EstatisticasAcessoNormas, EstatisticasAcessoNormas,
RelatoriosListView) RelatoriosListView,
ListarInconsistenciasView, ListarProtocolosDuplicadosView,
ListarProtocolosComMateriasView,
ListarMatProtocoloInexistenteView,
ListarParlMandatosIntersecaoView,
ListarAutoresDuplicadosView,
ListarBancadaComissaoAutorExternoView,
ListarLegislaturaInfindavelView,
ListarMandatoSemDataInicioView)
app_name = AppConfig.name app_name = AppConfig.name
@ -127,6 +136,33 @@ urlpatterns = [
'(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$', '(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})$',
ConfirmarEmailView.as_view(), name='confirmar_email'), ConfirmarEmailView.as_view(), name='confirmar_email'),
url(r'^sistema/inconsistencias/$',
ListarInconsistenciasView.as_view(),
name='lista_inconsistencias'),
url(r'^sistema/inconsistencias/protocolos_duplicados$',
ListarProtocolosDuplicadosView.as_view(),
name='lista_protocolos_duplicados'),
url(r'^sistema/inconsistencias/protocolos_com_materias$',
ListarProtocolosComMateriasView.as_view(),
name='lista_protocolos_com_materias'),
url(r'^sistema/inconsistencias/materias_protocolo_inexistente$',
ListarMatProtocoloInexistenteView.as_view(),
name='lista_materias_protocolo_inexistente'),
url(r'^sistema/inconsistencias/mandato_sem_data_inicio',
ListarMandatoSemDataInicioView.as_view(),
name='lista_mandato_sem_data_inicio'),
url(r'^sistema/inconsistencias/parlamentares_mandatos_intersecao$',
ListarParlMandatosIntersecaoView.as_view(),
name='lista_parlamentares_mandatos_intersecao'),
url(r'^sistema/inconsistencias/autores_duplicados$',
ListarAutoresDuplicadosView.as_view(),
name='lista_autores_duplicados'),
url(r'^sistema/inconsistencias/bancada_comissao_autor_externo$',
ListarBancadaComissaoAutorExternoView.as_view(),
name='lista_bancada_comissao_autor_externo'),
url(r'^sistema/inconsistencias/legislatura_infindavel$',
ListarLegislaturaInfindavelView.as_view(),
name='lista_legislatura_infindavel'),
# todos os sublinks de sistema devem vir acima deste # todos os sublinks de sistema devem vir acima deste
url(r'^sistema/$', permission_required('base.view_tabelas_auxiliares') url(r'^sistema/$', permission_required('base.view_tabelas_auxiliares')

352
sapl/base/views.py

@ -1,4 +1,5 @@
import collections import collections
import itertools
import datetime import datetime
import logging import logging
import os import os
@ -35,10 +36,13 @@ from sapl.crud.base import CrudAux, make_pagination
from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao, from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao,
TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao) TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao)
from sapl.norma.models import (NormaJuridica, NormaEstatisticas) from sapl.norma.models import (NormaJuridica, NormaEstatisticas)
from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato
from sapl.protocoloadm.models import Protocolo
from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria, from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca) SessaoPlenariaPresenca, Bancada)
from sapl.utils import (parlamentares_ativos, gerar_hash_arquivo, SEPARADOR_HASH_PROPOSICAO, from sapl.utils import (parlamentares_ativos, gerar_hash_arquivo, SEPARADOR_HASH_PROPOSICAO,
show_results_filter_set, mail_service_configured) show_results_filter_set, mail_service_configured,
intervalos_tem_intersecao,)
from .forms import (AlterarSenhaForm, CasaLegislativaForm, from .forms import (AlterarSenhaForm, CasaLegislativaForm,
ConfiguracoesAppForm, RelatorioAtasFilterSet, ConfiguracoesAppForm, RelatorioAtasFilterSet,
@ -918,6 +922,350 @@ class EstatisticasAcessoNormas(TemplateView):
return self.render_to_response(context) return self.render_to_response(context)
class ListarInconsistenciasView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/lista_inconsistencias.html'
context_object_name = 'tabela_inconsistencias'
permission_required = ('base.list_appconfig',)
def get_queryset(self):
tabela = []
tabela.append(
('protocolos_duplicados',
'Protocolos duplicados',
len(protocolos_duplicados())
)
)
tabela.append(
('protocolos_com_materias',
'Protocolos que excedem o limite de matérias vinculadas',
len(protocolos_com_materias())
)
)
tabela.append(
('materias_protocolo_inexistente',
'Matérias Legislativas com protocolo inexistente',
len(materias_protocolo_inexistente())
)
)
tabela.append(
('mandato_sem_data_inicio',
'Mandatos sem data inicial',
len(mandato_sem_data_inicio())
)
)
tabela.append(
('parlamentares_mandatos_intersecao',
'Parlamentares com mandatos com interseção',
len(parlamentares_mandatos_intersecao())
)
)
tabela.append(
('autores_duplicados',
'Autores duplicados',
len(autores_duplicados())
)
)
tabela.append(
('bancada_comissao_autor_externo',
'Bancadas e Comissões com autor externo',
len(bancada_comissao_autor_externo())
)
)
tabela.append(
('legislatura_infindavel',
'Legislaturas sem data fim',
len(legislatura_infindavel())
)
)
return tabela
def legislatura_infindavel():
return Legislatura.objects.filter(data_fim__isnull=True).order_by('-numero')
class ListarLegislaturaInfindavelView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/legislatura_infindavel.html'
context_object_name = 'legislatura_infindavel'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return legislatura_infindavel()
def get_context_data(self, **kwargs):
context = super(
ListarLegislaturaInfindavelView, self
).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhuma encontrada.'
return context
def bancada_comissao_autor_externo():
tipo_autor_externo = TipoAutor.objects.filter(descricao='Externo')
lista_bancada_autor_externo = []
for bancada in Bancada.objects.all().order_by('nome'):
autor_externo = bancada.autor.filter(tipo=tipo_autor_externo)
if autor_externo:
q_autor_externo = bancada.autor.get(tipo=tipo_autor_externo)
lista_bancada_autor_externo.append(
(q_autor_externo, bancada, 'Bancada', 'sistema/bancada')
)
lista_comissao_autor_externo = []
for comissao in Comissao.objects.all().order_by('nome'):
autor_externo = comissao.autor.filter(tipo=tipo_autor_externo)
if autor_externo:
q_autor_externo = comissao.autor.get(tipo=tipo_autor_externo)
lista_comissao_autor_externo.append(
(q_autor_externo, comissao, 'Comissão', 'comissao')
)
return lista_bancada_autor_externo + lista_comissao_autor_externo
class ListarBancadaComissaoAutorExternoView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/bancada_comissao_autor_externo.html'
context_object_name = 'bancada_comissao_autor_externo'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return bancada_comissao_autor_externo()
def get_context_data(self, **kwargs):
context = super(
ListarBancadaComissaoAutorExternoView, self
).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrado.'
return context
def autores_duplicados():
return [autor.values() for autor in Autor.objects.values('nome', 'tipo__descricao').annotate(count=Count('nome')).filter(count__gt=1)]
class ListarAutoresDuplicadosView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/autores_duplicados.html'
context_object_name = 'autores_duplicados'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return autores_duplicados()
def get_context_data(self, **kwargs):
context = super(
ListarAutoresDuplicadosView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrado.'
return context
def parlamentares_mandatos_intersecao():
intersecoes = []
for parlamentar in Parlamentar.objects.all().order_by('nome_completo'):
mandatos = parlamentar.mandato_set.all()
combinacoes = itertools.combinations(mandatos, 2)
for c in combinacoes:
data_inicio_mandato1 = c[0].data_inicio_mandato
data_fim_mandato1 = c[0].data_fim_mandato if c[0].data_fim_mandato else timezone.now().date()
data_inicio_mandato2 = c[1].data_inicio_mandato
data_fim_mandato2 = c[1].data_fim_mandato if c[1].data_fim_mandato else timezone.now().date()
if data_inicio_mandato1 and data_inicio_mandato2:
exists = intervalos_tem_intersecao(
data_inicio_mandato1, data_fim_mandato1,
data_inicio_mandato2, data_fim_mandato2)
if exists:
intersecoes.append((parlamentar, c[0], c[1]))
return intersecoes
class ListarParlMandatosIntersecaoView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/parlamentares_mandatos_intersecao.html'
context_object_name = 'parlamentares_mandatos_intersecao'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return parlamentares_mandatos_intersecao()
def get_context_data(self, **kwargs):
context = super(
ListarParlMandatosIntersecaoView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrado.'
return context
def mandato_sem_data_inicio():
return Mandato.objects.filter(data_inicio_mandato__isnull=True).order_by('parlamentar')
class ListarMandatoSemDataInicioView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/mandato_sem_data_inicio.html'
context_object_name = 'mandato_sem_data_inicio'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return mandato_sem_data_inicio()
def get_context_data(self, **kwargs):
context = super(
ListarMandatoSemDataInicioView, self
).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrada.'
return context
def materias_protocolo_inexistente():
materias = []
for materia in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero'):
exists = Protocolo.objects.filter(
ano=materia.ano, numero=materia.numero_protocolo).exists()
if not exists:
materias.append(
(materia, materia.ano, materia.numero_protocolo))
return materias
class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/materias_protocolo_inexistente.html'
context_object_name = 'materias_protocolo_inexistente'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return materias_protocolo_inexistente()
def get_context_data(self, **kwargs):
context = super(
ListarMatProtocoloInexistenteView, self
).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhuma encontrada.'
return context
def protocolos_com_materias():
protocolos = {}
for m in MateriaLegislativa.objects.filter(numero_protocolo__isnull=False).order_by('-ano', 'numero_protocolo'):
if Protocolo.objects.filter(numero=m.numero_protocolo, ano=m.ano).exists():
key = "{}/{}".format(m.numero_protocolo, m.ano)
val = protocolos.get(key, list())
val.append(m)
protocolos[key] = val
return [(v[0], len(v)) for (k, v) in protocolos.items() if len(v) > 1]
class ListarProtocolosComMateriasView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/protocolos_com_materias.html'
context_object_name = 'protocolos_com_materias'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return protocolos_com_materias()
def get_context_data(self, **kwargs):
context = super(
ListarProtocolosComMateriasView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrado.'
return context
def protocolos_duplicados():
protocolos = {}
for p in Protocolo.objects.order_by('-ano', 'numero'):
key = "{}/{}".format(p.numero, p.ano)
val = protocolos.get(key, list())
val.append(p)
protocolos[key] = val
return [(v[0], len(v)) for (k, v) in protocolos.items() if len(v) > 1]
class ListarProtocolosDuplicadosView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/protocolos_duplicados.html'
context_object_name = 'protocolos_duplicados'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return protocolos_duplicados()
def get_context_data(self, **kwargs):
context = super(
ListarProtocolosDuplicadosView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrado.'
return context
class ListarUsuarioView(PermissionRequiredMixin, ListView): class ListarUsuarioView(PermissionRequiredMixin, ListView):
model = get_user_model() model = get_user_model()
template_name = 'auth/user_list.html' template_name = 'auth/user_list.html'

30
sapl/templates/base/autores_duplicados.html

@ -0,0 +1,30 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Autores Duplicados</h1>
{% if not autores_duplicados %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Autor</th>
<th>Tipo de Autor</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for autor, tipo, quantidade in autores_duplicados %}
<tr>
<td>{{ autor }}</td>
<td>{{ tipo }}</td>
<td>{{ quantidade }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

34
sapl/templates/base/bancada_comissao_autor_externo.html

@ -0,0 +1,34 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Bancadas e Comissões com Autor Externo</h1>
{% if not bancada_comissao_autor_externo %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Descrição do Objeto</th>
<th>Objeto</th>
<th>Autor</th>
</tr>
</thead>
<tbody>
{% for autor, objeto, descricao_objeto, link in bancada_comissao_autor_externo %}
<tr>
<td>{{ descricao_objeto }}</td>
<td>
<a href="{% url 'sapl_index' %}{{ link }}/{{ objeto.pk }}">{{ objeto }}</a>
</td>
<td>
<a href="{% url 'sapl_index' %}sistema/autor/{{ autor.pk }}">{{ autor.nome }}</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

30
sapl/templates/base/legislatura_infindavel.html

@ -0,0 +1,30 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Legislaturas sem Data Fim</h1>
{% if not legislatura_infindavel %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Número Legislatura</th>
<th>Data Eleição</th>
<th>Data Início</th>
</tr>
</thead>
<tbody>
{% for legislatura in legislatura_infindavel %}
<tr>
<td>{{ legislatura.numero }}</td>
<td>{{ legislatura.data_eleicao }}</td>
<td>{{ legislatura.data_inicio }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

20
sapl/templates/base/lista_inconsistencias.html

@ -0,0 +1,20 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Inconsistências</h1>
<table class="table table-striped table-hover">
<tbody>
{% for complemento_link, nome, valor in tabela_inconsistencias %}
<tr>
<td>
<a href="{% url 'sapl.base:lista_inconsistencias' %}{{ complemento_link }}">{{ nome }}</a>
</td>
<td>{{ valor }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

30
sapl/templates/base/mandato_sem_data_inicio.html

@ -0,0 +1,30 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Mandatos sem Data Inicial</h1>
{% if not mandato_sem_data_inicio %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Parlamentar do Mandato</th>
<th>Legislatura do Mandato</th>
</tr>
</thead>
<tbody>
{% for mandato in mandato_sem_data_inicio %}
<tr>
<td>
<a href="{% url 'sapl_index' %}parlamentar/mandato/{{ mandato.pk }}">{{ mandato.parlamentar }}</a>
</td>
<td>{{ mandato.legislatura }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

32
sapl/templates/base/materias_protocolo_inexistente.html

@ -0,0 +1,32 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Matérias Legislativas com Protocolo Inexistente</h1>
{% if not materias_protocolo_inexistente %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Matéria Legislativa</th>
<th>Ano</th>
<th>Número Protocolo</th>
</tr>
</thead>
<tbody>
{% for materia, ano, numero_protocolo in materias_protocolo_inexistente %}
<tr>
<td>
<a href="{% url 'sapl_index' %}materia/{{ materia.pk }}">{{ materia }}</a>
</td>
<td>{{ ano }}</td>
<td>{{ numero_protocolo }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

32
sapl/templates/base/parlamentares_mandatos_intersecao.html

@ -0,0 +1,32 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Parlamentares com Mandatos com Interseção</h1>
{% if not parlamentares_mandatos_intersecao %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Parlamentar</th>
<th>Mandato 1</th>
<th>Mandato 2</th>
</tr>
</thead>
<tbody>
{% for parlamentar, mandato_a, mandato_b in parlamentares_mandatos_intersecao %}
<tr>
<td>
<a href="{% url 'sapl_index' %}parlamentar/{{ parlamentar.pk }}">{{ parlamentar }}</a>
</td>
<td>{{ mandato_a }}</td>
<td>{{ mandato_b }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

28
sapl/templates/base/protocolos_com_materias.html

@ -0,0 +1,28 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Protocolos que Excedem o Limite de Matérias Vinculadas</h1>
{% if not protocolos_com_materias %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Protocolo</th>
<th>Quantidade de Matérias Vinculas</th>
</tr>
</thead>
<tbody>
{% for materia, quantidade in protocolos_com_materias %}
<tr>
<td>{{ materia.numero_protocolo }}/{{ materia.ano }}</td>
<td>{{ quantidade }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

30
sapl/templates/base/protocolos_duplicados.html

@ -0,0 +1,30 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Protocolos Duplicados</h1>
{% if not protocolos_duplicados %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Protocolo</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for protocolo, quantidade in protocolos_duplicados %}
<tr>
<td>
<a href="{% url 'sapl.protocoloadm:protocolo' %}?numero={{protocolo.numero}}&ano={{protocolo.ano}}">{{ protocolo }}</a>
</td>
<td>{{ quantidade }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
{% endblock base_content %}

3
sapl/templates/navbar.yaml

@ -75,6 +75,9 @@
- title: {% trans 'Administração de Usuários' %} - title: {% trans 'Administração de Usuários' %}
url: {% url 'sapl.base:user_list' %} url: {% url 'sapl.base:user_list' %}
check_permission: user.is_superuser check_permission: user.is_superuser
- title: {% trans 'Inconsistências da Aplicação' %}
url: {% url 'sapl.base:lista_inconsistencias' %}
check_permission: user.is_superuser
{% comment %} {% comment %}
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Provedor LexML</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="#">Provedor LexML</a></li>

Loading…
Cancel
Save