Browse Source

Complementa identificação de inconsistências (#2594)

* Identificar parlamentares duplicados

* Identificar filiações sem data filiação

* Identificar parl. com filiações em interseção

Refatorar
pull/2601/head
João Rodrigues 6 years ago
committed by Edward Ribeiro
parent
commit
19d14bc7da
  1. 16
      sapl/base/urls.py
  2. 137
      sapl/base/views.py
  3. 2
      sapl/templates/base/autores_duplicados.html
  4. 2
      sapl/templates/base/bancada_comissao_autor_externo.html
  5. 32
      sapl/templates/base/filiacoes_sem_data_filiacao.html
  6. 2
      sapl/templates/base/legislatura_infindavel.html
  7. 2
      sapl/templates/base/lista_inconsistencias.html
  8. 2
      sapl/templates/base/mandato_sem_data_inicio.html
  9. 2
      sapl/templates/base/materias_protocolo_inexistente.html
  10. 32
      sapl/templates/base/parlamentares_duplicados.html
  11. 34
      sapl/templates/base/parlamentares_filiacoes_intersecao.html
  12. 6
      sapl/templates/base/parlamentares_mandatos_intersecao.html
  13. 2
      sapl/templates/base/protocolos_com_materias.html
  14. 2
      sapl/templates/base/protocolos_duplicados.html

16
sapl/base/urls.py

@ -32,11 +32,14 @@ from .views import (AlterarSenha, AppConfigCrud, CasaLegislativaCrud,
ListarInconsistenciasView, ListarProtocolosDuplicadosView,
ListarProtocolosComMateriasView,
ListarMatProtocoloInexistenteView,
ListarParlamentaresDuplicadosView,
ListarFiliacoesSemDataFiliacaoView,
ListarMandatoSemDataInicioView,
ListarParlMandatosIntersecaoView,
ListarParlFiliacoesIntersecaoView,
ListarAutoresDuplicadosView,
ListarBancadaComissaoAutorExternoView,
ListarLegislaturaInfindavelView,
ListarMandatoSemDataInicioView)
ListarLegislaturaInfindavelView)
app_name = AppConfig.name
@ -165,12 +168,21 @@ urlpatterns = [
url(r'^sistema/inconsistencias/materias_protocolo_inexistente$',
ListarMatProtocoloInexistenteView.as_view(),
name='lista_materias_protocolo_inexistente'),
url(r'^sistema/inconsistencias/filiacoes_sem_data_filiacao$',
ListarFiliacoesSemDataFiliacaoView.as_view(),
name='lista_filiacoes_sem_data_filiacao'),
url(r'^sistema/inconsistencias/mandato_sem_data_inicio',
ListarMandatoSemDataInicioView.as_view(),
name='lista_mandato_sem_data_inicio'),
url(r'^sistema/inconsistencias/parlamentares_duplicados$',
ListarParlamentaresDuplicadosView.as_view(),
name='lista_parlamentares_duplicados'),
url(r'^sistema/inconsistencias/parlamentares_mandatos_intersecao$',
ListarParlMandatosIntersecaoView.as_view(),
name='lista_parlamentares_mandatos_intersecao'),
url(r'^sistema/inconsistencias/parlamentares_filiacoes_intersecao$',
ListarParlFiliacoesIntersecaoView.as_view(),
name='lista_parlamentares_filiacoes_intersecao'),
url(r'^sistema/inconsistencias/autores_duplicados$',
ListarAutoresDuplicadosView.as_view(),
name='lista_autores_duplicados'),

137
sapl/base/views.py

@ -40,7 +40,7 @@ from sapl.crud.base import CrudAux, make_pagination
from sapl.materia.models import (Autoria, MateriaLegislativa, Proposicao,
TipoMateriaLegislativa, StatusTramitacao, UnidadeTramitacao)
from sapl.norma.models import (NormaJuridica, NormaEstatisticas)
from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato
from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato, Filiacao
from sapl.protocoloadm.models import Protocolo
from sapl.sessao.models import (PresencaOrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, Bancada)
@ -976,18 +976,36 @@ class ListarInconsistenciasView(PermissionRequiredMixin, ListView):
len(materias_protocolo_inexistente())
)
)
tabela.append(
('filiacoes_sem_data_filiacao',
'Filiações sem data filiação',
len(filiacoes_sem_data_filiacao())
)
)
tabela.append(
('mandato_sem_data_inicio',
'Mandatos sem data inicial',
len(mandato_sem_data_inicio())
)
)
tabela.append(
('parlamentares_duplicados',
'Parlamentares duplicados',
len(parlamentares_duplicados())
)
)
tabela.append(
('parlamentares_mandatos_intersecao',
'Parlamentares com mandatos com interseção',
'Parlamentares com mandatos em interseção',
len(parlamentares_mandatos_intersecao())
)
)
tabela.append(
('parlamentares_filiacoes_intersecao',
'Parlamentares com filiações em interseção',
len(parlamentares_filiacoes_intersecao())
)
)
tabela.append(
('autores_duplicados',
'Autores duplicados',
@ -1034,7 +1052,7 @@ class ListarLegislaturaInfindavelView(PermissionRequiredMixin, ListView):
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhuma encontrada.'
] = 'Nenhuma encontrado.'
return context
@ -1089,7 +1107,9 @@ class ListarBancadaComissaoAutorExternoView(PermissionRequiredMixin, ListView):
def autores_duplicados():
return [autor.values() for autor in Autor.objects.values('nome', 'tipo__descricao').annotate(count=Count('nome')).filter(count__gt=1)]
return [autor.values() for autor in Autor.objects.values(
'nome', 'tipo__descricao').order_by(
"nome").annotate(count=Count('nome')).filter(count__gt=1)]
class ListarAutoresDuplicadosView(PermissionRequiredMixin, ListView):
@ -1115,10 +1135,56 @@ class ListarAutoresDuplicadosView(PermissionRequiredMixin, ListView):
return context
def parlamentares_filiacoes_intersecao():
intersecoes = []
for parlamentar in Parlamentar.objects.all().order_by('nome_parlamentar'):
filiacoes = parlamentar.filiacao_set.all()
combinacoes = itertools.combinations(filiacoes, 2)
for c in combinacoes:
data_filiacao1 = c[0].data
data_desfiliacao1 = c[0].data_desfiliacao if c[0].data_desfiliacao else timezone.now().date()
data_filiacao2 = c[1].data
data_desfiliacao2 = c[1].data_desfiliacao if c[1].data_desfiliacao else timezone.now().date()
if data_filiacao1 and data_filiacao2:
exists = intervalos_tem_intersecao(
data_filiacao1, data_desfiliacao1,
data_filiacao2, data_desfiliacao2)
if exists:
intersecoes.append((parlamentar, c[0], c[1]))
return intersecoes
class ListarParlFiliacoesIntersecaoView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/parlamentares_filiacoes_intersecao.html'
context_object_name = 'parlamentares_filiacoes_intersecao'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return parlamentares_filiacoes_intersecao()
def get_context_data(self, **kwargs):
context = super(
ListarParlFiliacoesIntersecaoView, 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'):
for parlamentar in Parlamentar.objects.all().order_by('nome_parlamentar'):
mandatos = parlamentar.mandato_set.all()
combinacoes = itertools.combinations(mandatos, 2)
@ -1164,6 +1230,35 @@ class ListarParlMandatosIntersecaoView(PermissionRequiredMixin, ListView):
return context
def parlamentares_duplicados():
return [parlamentar.values() for parlamentar in Parlamentar.objects.values(
'nome_parlamentar').order_by('nome_parlamentar').annotate(count=Count(
'nome_parlamentar')).filter(count__gt=1)]
class ListarParlamentaresDuplicadosView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/parlamentares_duplicados.html'
context_object_name = 'parlamentares_duplicados'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return parlamentares_duplicados()
def get_context_data(self, **kwargs):
context = super(
ListarParlamentaresDuplicadosView, 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')
@ -1188,7 +1283,35 @@ class ListarMandatoSemDataInicioView(PermissionRequiredMixin, ListView):
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhum encontrada.'
] = 'Nenhum encontrado.'
return context
def filiacoes_sem_data_filiacao():
return Filiacao.objects.filter(data__isnull=True).order_by('parlamentar')
class ListarFiliacoesSemDataFiliacaoView(PermissionRequiredMixin, ListView):
model = get_user_model()
template_name = 'base/filiacoes_sem_data_filiacao.html'
context_object_name = 'filiacoes_sem_data_filiacao'
permission_required = ('base.list_appconfig',)
paginate_by = 10
def get_queryset(self):
return filiacoes_sem_data_filiacao()
def get_context_data(self, **kwargs):
context = super(
ListarFiliacoesSemDataFiliacaoView, 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 encontrado.'
return context
@ -1223,7 +1346,7 @@ class ListarMatProtocoloInexistenteView(PermissionRequiredMixin, ListView):
page_obj.number, paginator.num_pages)
context[
'NO_ENTRIES_MSG'
] = 'Nenhuma encontrada.'
] = 'Nenhuma encontrado.'
return context

2
sapl/templates/base/autores_duplicados.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Autores Duplicados</h1>
<br/>
{% if not autores_duplicados %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -27,4 +28,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/bancada_comissao_autor_externo.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Bancadas e Comissões com Autor Externo</h1>
<br/>
{% if not bancada_comissao_autor_externo %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -31,4 +32,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

32
sapl/templates/base/filiacoes_sem_data_filiacao.html

@ -0,0 +1,32 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Filiações sem Data Filiação</h1>
<br/>
{% if not filiacoes_sem_data_filiacao %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Parlamentar Filiado</th>
<th>Partido</th>
</tr>
</thead>
<tbody>
{% for filiacao in filiacoes_sem_data_filiacao %}
<tr>
<td>
<a href="{% url 'sapl_index' %}parlamentar/filiacao/{{ filiacao.pk }}">{{ filiacao.parlamentar }}</a>
</td>
<td>{{ filiacao.partido }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/legislatura_infindavel.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Legislaturas sem Data Fim</h1>
<br/>
{% if not legislatura_infindavel %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -27,4 +28,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/lista_inconsistencias.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Inconsistências</h1>
<br/>
<table class="table table-striped table-hover">
<tbody>
{% for complemento_link, nome, valor in tabela_inconsistencias %}
@ -17,4 +18,5 @@
</table>
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/mandato_sem_data_inicio.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Mandatos sem Data Inicial</h1>
<br/>
{% if not mandato_sem_data_inicio %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -27,4 +28,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/materias_protocolo_inexistente.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Matérias Legislativas com Protocolo Inexistente</h1>
<br/>
{% if not materias_protocolo_inexistente %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -29,4 +30,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

32
sapl/templates/base/parlamentares_duplicados.html

@ -0,0 +1,32 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Parlamentares Duplicados</h1>
<br/>
{% if not parlamentares_duplicados %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Nome do Parlamentar</th>
<th>Quantidade</th>
</tr>
</thead>
<tbody>
{% for parlamentar, quantidade in parlamentares_duplicados %}
<tr>
<td>
<a href="{% url 'sapl.parlamentares:pesquisar_parlamentar' %}?nome_parlamentar={{parlamentar}}">{{ parlamentar }}</a>
</td>
<td>{{ quantidade }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

34
sapl/templates/base/parlamentares_filiacoes_intersecao.html

@ -0,0 +1,34 @@
{% extends "base.html" %}
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Parlamentares com Filiações com Interseção</h1>
<br/>
{% if not parlamentares_filiacoes_intersecao %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Parlamentar</th>
<th>Filiação 1</th>
<th>Filiação 2</th>
</tr>
</thead>
<tbody>
{% for parlamentar, filiacao_a , filiacao_b in parlamentares_filiacoes_intersecao %}
<tr>
<td>
<a href="{% url 'sapl_index' %}parlamentar/{{ parlamentar.pk }}/filiacao">{{ parlamentar }}</a>
</td>
<td>{{filiacao_a.data|date:"d/m/Y"}} - {{filiacao_a.data_desfiliacao|date:"d/m/Y"}}</td>
<td>{{filiacao_b.data|date:"d/m/Y"}} - {{filiacao_b.data_desfiliacao|date:"d/m/Y"}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

6
sapl/templates/base/parlamentares_mandatos_intersecao.html

@ -2,7 +2,8 @@
{% load common_tags %}
{% block base_content %}
<fieldset>
<h1>Lista de Parlamentares com Mandatos com Interseção</h1>
<h1>Lista de Parlamentares com Mandatos em Interseção</h1>
<br/>
{% if not parlamentares_mandatos_intersecao %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -18,7 +19,7 @@
{% for parlamentar, mandato_a, mandato_b in parlamentares_mandatos_intersecao %}
<tr>
<td>
<a href="{% url 'sapl_index' %}parlamentar/{{ parlamentar.pk }}">{{ parlamentar }}</a>
<a href="{% url 'sapl_index' %}parlamentar/{{ parlamentar.pk }}/mandato">{{ parlamentar }}</a>
</td>
<td>{{ mandato_a.legislatura}}</br>{{mandato_a.data_inicio_mandato|date:"d/m/Y"}} - {{mandato_a.data_fim_mandato|date:"d/m/Y"}}</td>
<td>{{ mandato_b.legislatura }}</br>{{mandato_b.data_inicio_mandato|date:"d/m/Y"}} - {{mandato_b.data_fim_mandato|date:"d/m/Y"}}</td>
@ -29,4 +30,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/protocolos_com_materias.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Protocolos que Excedem o Limite de Matérias Vinculadas</h1>
<br/>
{% if not protocolos_com_materias %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -25,4 +26,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}

2
sapl/templates/base/protocolos_duplicados.html

@ -3,6 +3,7 @@
{% block base_content %}
<fieldset>
<h1>Lista de Protocolos Duplicados</h1>
<br/>
{% if not protocolos_duplicados %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
@ -27,4 +28,5 @@
{% endif %}
</fieldset>
{% include 'paginacao.html'%}
<br/>
{% endblock base_content %}
Loading…
Cancel
Save