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 import django_filters
from .models import (Coligacao, ComposicaoColigacao, Filiacao, Frente, Legislatura, from .models import (Coligacao, ComposicaoColigacao, Filiacao, Frente, Legislatura,
Mandato, Parlamentar, Votante, Bloco, FrenteParlamentar) Mandato, Parlamentar, Partido, Votante, Bloco, FrenteParlamentar)
class ImageThumbnailFileInput(ClearableFileInput): class ImageThumbnailFileInput(ClearableFileInput):
@ -271,6 +271,32 @@ class ColigacaoFilterSet(django_filters.FilterSet):
form_actions(label='Pesquisar'))) 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): class ParlamentarCreateForm(ParlamentarForm):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

4
sapl/parlamentares/urls.py

@ -22,7 +22,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud,
parlamentares_filiados, BlocoCrud, parlamentares_filiados, BlocoCrud,
PesquisarParlamentarView, VincularParlamentarView, PesquisarParlamentarView, VincularParlamentarView,
get_sessoes_legislatura, FrenteCargoCrud, FrenteParlamentarCrud, get_sessoes_legislatura, FrenteCargoCrud, FrenteParlamentarCrud,
get_parlamentar_frentes, PesquisarColigacaoView) get_parlamentar_frentes, PesquisarColigacaoView, PesquisarPartidoView)
from .apps import AppConfig from .apps import AppConfig
@ -76,7 +76,9 @@ urlpatterns = [
include(TipoAfastamentoCrud.get_urls())), include(TipoAfastamentoCrud.get_urls())),
url(r'^sistema/parlamentar/tipo-militar/', url(r'^sistema/parlamentar/tipo-militar/',
include(TipoMilitarCrud.get_urls())), include(TipoMilitarCrud.get_urls())),
url(r'^sistema/parlamentar/partido/', include(PartidoCrud.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/parlamentar/partido/(?P<pk>\d+)/filiados$', parlamentares_filiados, name='parlamentares_filiados'),
url(r'^sistema/mesa-diretora/sessao-legislativa/', 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, from .forms import (ColigacaoFilterSet, FiliacaoForm, FrenteForm, LegislaturaForm, MandatoForm,
ParlamentarCreateForm, ParlamentarForm, VotanteForm, ParlamentarCreateForm, ParlamentarForm, VotanteForm,
ParlamentarFilterSet, VincularParlamentarForm, ParlamentarFilterSet, PartidoFilterSet, VincularParlamentarForm,
BlocoForm, FrenteParlamentarForm) BlocoForm, FrenteParlamentarForm)
from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa, from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
@ -75,6 +75,10 @@ class PartidoCrud(CrudAux):
class UpdateView(CrudAux.UpdateView): class UpdateView(CrudAux.UpdateView):
form_class = PartidoForm form_class = PartidoForm
class DeleteView(CrudAux.DeleteView):
def get_success_url(self):
return reverse('sapl.parlamentares:pesquisar_partido')
class VotanteView(MasterDetailCrud): class VotanteView(MasterDetailCrud):
model = Votante model = Votante
@ -279,6 +283,54 @@ class PesquisarColigacaoView(FilterView):
return self.render_to_response(context) 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): class ParticipacaoParlamentarCrud(CrudBaseForListAndDetailExternalAppView):
model = Participacao model = Participacao
parent_field = 'parlamentar' parent_field = 'parlamentar'

7
sapl/templates/menu_tabelas_auxiliares.yaml

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

7
sapl/templates/parlamentares/partido_detail.html

@ -2,8 +2,13 @@
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags cropping %} {% load crispy_forms_tags cropping %}
{% block actions %} {% block actions %}
{{ block.super }}
<div class="actions btn-group btn-group-sm" role="group"> <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> <a href="{% url 'sapl.parlamentares:parlamentares_filiados' object.pk %}" class="btn btn-outline-primary">Listar Parlamentares Filiados</a>
</div> </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 %} {% 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