Browse Source

Criação da busca de Partidos Políticos (#3303)

* Cria pesquisa de partido

Adiciona link para criação de partido em tabelas auxiliares

* Adiciona pesquisa multifield

Co-authored-by: eribeiro <edwardr@senado.leg.br>
pull/3307/head
Vinícius Cantuária 4 years ago
committed by GitHub
parent
commit
25a7fe153f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      sapl/parlamentares/forms.py
  2. 4
      sapl/parlamentares/urls.py
  3. 54
      sapl/parlamentares/views.py
  4. 7
      sapl/templates/menu_tabelas_auxiliares.yaml
  5. 7
      sapl/templates/parlamentares/partido_detail.html
  6. 51
      sapl/templates/parlamentares/partido_filter.html

28
sapl/parlamentares/forms.py

@ -23,7 +23,7 @@ from sapl.rules import SAPL_GROUP_VOTANTE
import django_filters
from .models import (Coligacao, ComposicaoColigacao, Filiacao, Frente, Legislatura,
Mandato, Parlamentar, Votante, Bloco, FrenteParlamentar)
Mandato, Parlamentar, Partido, Votante, Bloco, FrenteParlamentar)
class ImageThumbnailFileInput(ClearableFileInput):
@ -271,6 +271,32 @@ class ColigacaoFilterSet(django_filters.FilterSet):
form_actions(label='Pesquisar')))
class PartidoFilterSet(django_filters.FilterSet):
nome = django_filters.CharFilter(label=_('Nome do Partido'),
method='multifield_filter')
class Meta:
model = Partido
fields = ['nome']
def multifield_filter(self, queryset, name, value):
return queryset.filter(
Q(sigla__icontains=value) | Q(nome__icontains=value))
def __init__(self, *args, **kwargs):
super(PartidoFilterSet, self).__init__(*args, **kwargs)
row0 = to_row([('nome', 12)])
self.form.helper = SaplFormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Pesquisa de Partido'),
row0,
form_actions(label='Pesquisar'))
)
class ParlamentarCreateForm(ParlamentarForm):
logger = logging.getLogger(__name__)

4
sapl/parlamentares/urls.py

@ -22,7 +22,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
parlamentares_filiados, BlocoCrud,
PesquisarParlamentarView, VincularParlamentarView,
get_sessoes_legislatura, FrenteCargoCrud, FrenteParlamentarCrud,
get_parlamentar_frentes, PesquisarColigacaoView)
get_parlamentar_frentes, PesquisarColigacaoView, PesquisarPartidoView)
from .apps import AppConfig
@ -76,7 +76,9 @@ urlpatterns = [
include(TipoAfastamentoCrud.get_urls())),
url(r'^sistema/parlamentar/tipo-militar/',
include(TipoMilitarCrud.get_urls())),
url(r'^sistema/parlamentar/partido/', include(PartidoCrud.get_urls())),
url(r'^sistema/parlamentar/pesquisar-partido/', PesquisarPartidoView.as_view(), name='pesquisar_partido'),
url(r'^sistema/parlamentar/partido/(?P<pk>\d+)/filiados$', parlamentares_filiados, name='parlamentares_filiados'),
url(r'^sistema/mesa-diretora/sessao-legislativa/',

54
sapl/parlamentares/views.py

@ -35,7 +35,7 @@ from sapl.utils import (parlamentares_ativos, show_results_filter_set)
from .forms import (ColigacaoFilterSet, FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm,
ParlamentarCreateForm, ParlamentarForm, VotanteForm,
ParlamentarFilterSet, VincularParlamentarForm,
ParlamentarFilterSet, PartidoFilterSet, VincularParlamentarForm,
BlocoForm, FrenteParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
@ -75,6 +75,10 @@ class PartidoCrud(CrudAux):
class UpdateView(CrudAux.UpdateView):
form_class = PartidoForm
class DeleteView(CrudAux.DeleteView):
def get_success_url(self):
return reverse('sapl.parlamentares:pesquisar_partido')
class VotanteView(MasterDetailCrud):
model = Votante
@ -279,6 +283,54 @@ class PesquisarColigacaoView(FilterView):
return self.render_to_response(context)
class PesquisarPartidoView(FilterView):
model = Partido
filterset_class = PartidoFilterSet
paginate_by = 10
def get_filterset_kwargs(self, filterset_class):
super(PesquisarPartidoView, self).get_filterset_kwargs(filterset_class)
return ({
'data': self.request.GET or None,
'queryset': self.get_queryset().order_by('nome').distinct()
})
def get_context_data(self, **kwargs):
context = super(PesquisarPartidoView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context.update({
'page_range': make_pagination(page_obj.number, paginator.num_pages),
'NO_ENTRIES_MSG': 'Nenhum partido encontrado!',
'title': _('Partidos')
})
return context
def get(self, request, *args, **kwargs):
super(PesquisarPartidoView, self).get(request)
data = self.filterset.data
url = ''
if data:
url = "&" + str(self.request.META['QUERY_STRING'])
if url.startswith("&page"):
ponto_comeco = url.find('nome=') - 1
url = url[ponto_comeco:]
context = self.get_context_data(filter=self.filterset,
object_list=self.object_list,
filter_url=url,
numero_res=len(self.object_list))
context['show_results'] = show_results_filter_set(self.request.GET.copy())
return self.render_to_response(context)
class ParticipacaoParlamentarCrud(CrudBaseForListAndDetailExternalAppView):
model = Participacao
parent_field = 'parlamentar'

7
sapl/templates/menu_tabelas_auxiliares.yaml

@ -47,8 +47,11 @@
- title: {% trans 'Adicionar Coligação' %}
url: sapl.parlamentares:coligacao_create
css_class: btn btn-link
- title: {% trans 'Partido' %}
url: sapl.parlamentares:partido_list
- title: {% trans 'Pesquisar Partido' %}
url: sapl.parlamentares:pesquisar_partido
css_class: btn btn-link
- title: {% trans 'Adicionar Partido' %}
url: sapl.parlamentares:partido_create
css_class: btn btn-link
- title: {% trans 'Módulo Mesa Diretora' %}
css_class: head_title

7
sapl/templates/parlamentares/partido_detail.html

@ -2,8 +2,13 @@
{% load i18n %}
{% load crispy_forms_tags cropping %}
{% block actions %}
{{ block.super }}
<div class="actions btn-group btn-group-sm" role="group">
<a href="{% url 'sapl.parlamentares:pesquisar_partido' %}" class="btn btn-outline-primary">Pesquisar Partido</a>
<a href="{% url 'sapl.parlamentares:partido_create' %}" class="btn btn-outline-primary">Adicionar Partido</a>
<a href="{% url 'sapl.parlamentares:parlamentares_filiados' object.pk %}" class="btn btn-outline-primary">Listar Parlamentares Filiados</a>
</div>
<div class="actions btn-group btn-group-sm float-right" role="group">
<a href="{% url 'sapl.parlamentares:partido_update' object.pk %}" class="btn btn-outline-primary">Editar</a>
<a href="{% url 'sapl.parlamentares:partido_delete' object.pk %}" class="btn btn-outline-danger">Excluir</a>
</div>
{% endblock actions %}

51
sapl/templates/parlamentares/partido_filter.html

@ -0,0 +1,51 @@
{% extends "crud/list.html" %}
{% load i18n %}
{% load crispy_forms_tags staticfiles %}
{% block base_content %}
{% if not show_results %}
{% crispy filter.form %}
{% else %}
<div class="actions btn-group float-right btn-group-sm" role="group">
<a href="{% url 'sapl.parlamentares:pesquisar_partido' %}" class="btn btn-outline-primary">{% trans 'Fazer nova pesquisa' %}</a>
{% if not request.user.is_anonymous %}
<a href="{% url 'sapl.parlamentares:partido_create' %}"class="btn btn-outline-primary">Adicionar Partido</a>
{% endif %}
</div>
<br>
{% if numero_res > 0 %}
{% if numero_res == 1 %}
<p>Foi encontrado {{ numero_res }} resultado.</p>
{% else %}
<p>Foram encontrados {{ numero_res }} resultados.</p>
{% endif %}
<table class="table table-striped table-hover">
<thead>
<tr>
<th>Sigla do Partido</th>
<th>Nome do Partido</th>
<th>Data de Criação</th>
<th>Data de Extinção</th>
</tr>
</thead>
<tbody>
{% for partido in page_obj %}
<tr>
<td>{{ partido.sigla }}</td>
<td>
<a href="{% url 'sapl.parlamentares:partido_detail' partido.pk %}">{{partido.nome}}</a>
</td>
<td>{% if partido.data_criacao %} {{ partido.data_criacao }} {% else %} - {% endif %}</td>
<td>{% if partido.data_extincao %} {{ partido.data_extincao }} {% else %} - {% endif %}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<font size="4"><p align="center">{{ NO_ENTRIES_MSG }}</p></font>
{% endif %}
{% endif %}
<br/>
{% include 'paginacao.html'%}
<br /><br /><br />
{% endblock base_content %}
Loading…
Cancel
Save