From 25a7fe153f6535a3b7a5d09cbd4dad54215aef15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Cantu=C3=A1ria?= Date: Mon, 23 Nov 2020 16:50:25 -0300 Subject: [PATCH] =?UTF-8?q?Cria=C3=A7=C3=A3o=20da=20busca=20de=20Partidos?= =?UTF-8?q?=20Pol=C3=ADticos=20(#3303)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Cria pesquisa de partido Adiciona link para criação de partido em tabelas auxiliares * Adiciona pesquisa multifield Co-authored-by: eribeiro --- sapl/parlamentares/forms.py | 28 +++++++++- sapl/parlamentares/urls.py | 4 +- sapl/parlamentares/views.py | 54 ++++++++++++++++++- sapl/templates/menu_tabelas_auxiliares.yaml | 7 ++- .../parlamentares/partido_detail.html | 7 ++- .../parlamentares/partido_filter.html | 51 ++++++++++++++++++ 6 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 sapl/templates/parlamentares/partido_filter.html diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index d863d78e6..287c83875 100755 --- a/sapl/parlamentares/forms.py +++ b/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__) diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 66a5ae406..016b33c2d 100644 --- a/sapl/parlamentares/urls.py +++ b/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\d+)/filiados$', parlamentares_filiados, name='parlamentares_filiados'), url(r'^sistema/mesa-diretora/sessao-legislativa/', diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index e14c3c333..df7dd0fbd 100644 --- a/sapl/parlamentares/views.py +++ b/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' diff --git a/sapl/templates/menu_tabelas_auxiliares.yaml b/sapl/templates/menu_tabelas_auxiliares.yaml index b2b55a0b1..9caf8f041 100644 --- a/sapl/templates/menu_tabelas_auxiliares.yaml +++ b/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 diff --git a/sapl/templates/parlamentares/partido_detail.html b/sapl/templates/parlamentares/partido_detail.html index 1f55da2f5..2cb7b71e0 100644 --- a/sapl/templates/parlamentares/partido_detail.html +++ b/sapl/templates/parlamentares/partido_detail.html @@ -2,8 +2,13 @@ {% load i18n %} {% load crispy_forms_tags cropping %} {% block actions %} - {{ block.super }} +
+ Editar + Excluir +
{% endblock actions %} \ No newline at end of file diff --git a/sapl/templates/parlamentares/partido_filter.html b/sapl/templates/parlamentares/partido_filter.html new file mode 100644 index 000000000..963e151e4 --- /dev/null +++ b/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 %} +
+ {% trans 'Fazer nova pesquisa' %} + {% if not request.user.is_anonymous %} + Adicionar Partido + {% endif %} +
+
+ {% if numero_res > 0 %} + {% if numero_res == 1 %} +

Foi encontrado {{ numero_res }} resultado.

+ {% else %} +

Foram encontrados {{ numero_res }} resultados.

+ {% endif %} + + + + + + + + + + + {% for partido in page_obj %} + + + + + + + {% endfor %} + +
Sigla do PartidoNome do PartidoData de CriaçãoData de Extinção
{{ partido.sigla }} + {{partido.nome}} + {% if partido.data_criacao %} {{ partido.data_criacao }} {% else %} - {% endif %}{% if partido.data_extincao %} {{ partido.data_extincao }} {% else %} - {% endif %}
+ {% else %} +

{{ NO_ENTRIES_MSG }}

+ {% endif %} + {% endif %} +
+ {% include 'paginacao.html'%} +


+{% endblock base_content %}