diff --git a/sapl/api/serializers.py b/sapl/api/serializers.py index a9ce737c1..5de03819b 100644 --- a/sapl/api/serializers.py +++ b/sapl/api/serializers.py @@ -1,9 +1,9 @@ from django.conf import settings from rest_framework import serializers from rest_framework.relations import StringRelatedField - +from sapl.parlamentares.models import Parlamentar, Mandato, Filiacao, Legislatura from sapl.base.models import Autor, CasaLegislativa - +from sapl.utils import filiacao_data class IntRelatedField(StringRelatedField): def to_representation(self, value): @@ -56,3 +56,29 @@ class CasaLegislativaSerializer(serializers.ModelSerializer): class Meta: model = CasaLegislativa fields = '__all__' + +class ParlamentarResumeSerializer(serializers.ModelSerializer): + titular = serializers.SerializerMethodField('check_titular') + partido = serializers.SerializerMethodField('check_partido') + + def check_titular(self,obj): + if self.context.get('legislatura',None): + legislatura = self.context['legislatura'] + else: + legislatura = Legislatura.objects.first() + + mandato = Mandato.objects.filter(legislatura=legislatura,parlamentar=obj).first() + return mandato.titular if mandato else False + + def check_partido(self,obj): + if self.context.get('legislatura',None): + legislatura = Legislatura.objects.get(id=self.context['legislatura']) + else: + legislatura = Legislatura.objects.first() + + filiacao = filiacao_data(obj, legislatura.data_inicio, legislatura.data_fim) + return filiacao + + class Meta: + model = Parlamentar + fields = ['nome_parlamentar','fotografia','ativo','partido','titular'] \ No newline at end of file diff --git a/sapl/api/views.py b/sapl/api/views.py index 9ddafb9ec..c9d99295d 100644 --- a/sapl/api/views.py +++ b/sapl/api/views.py @@ -21,7 +21,7 @@ from rest_framework.viewsets import ModelViewSet from sapl.api.forms import SaplFilterSetMixin from sapl.api.permissions import SaplModelPermissions -from sapl.api.serializers import ChoiceSerializer +from sapl.api.serializers import ChoiceSerializer, ParlamentarResumeSerializer from sapl.base.models import Autor, AppConfig, DOC_ADM_OSTENSIVO from sapl.materia.models import Proposicao, TipoMateriaLegislativa,\ MateriaLegislativa, Tramitacao @@ -333,6 +333,25 @@ class _ParlamentarViewSet: serializer = self.get_serializer(page, many=True) return Response(serializer.data) + + @action(detail=True) + def parlamentares_by_legislatura(self,request,*args,**kwargs): + """ + Pega lista de parlamentares pelo id da legislatura. + """ + from sapl.parlamentares.models import Mandato, Parlamentar + mandatos = Mandato.objects.filter(legislatura__id=kwargs['pk']).values_list('parlamentar') + parlamentares = Parlamentar.objects.filter(id__in=[m[0] for m in mandatos]) + serializer_class = ParlamentarResumeSerializer(parlamentares,many=True,context={'legislatura':kwargs['pk']}) + + return Response(serializer_class.data) + + @action(detail=False, methods=['post']) + def search_parlamentares(self,request,*args,**kwargs): + nome = request.data.get('nome_parlamentar','') + parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome) + serializer_class= ParlamentarResumeSerializer(parlamentares,many=True) + return Response(serializer_class.data) @customize(Proposicao) diff --git a/sapl/parlamentares/urls.py b/sapl/parlamentares/urls.py index 2308a5129..e576eefc0 100644 --- a/sapl/parlamentares/urls.py +++ b/sapl/parlamentares/urls.py @@ -20,8 +20,7 @@ from sapl.parlamentares.views import (CargoMesaCrud, ColigacaoCrud, remove_parlamentar_composicao, parlamentares_filiados, BlocoCrud, PesquisarParlamentarView, VincularParlamentarView, - get_sessoes_legislatura, get_all_legislaturas_json, - get_parlamentare_by_legislaturas_json, search_parlamentare_json) + get_sessoes_legislatura) from .apps import AppConfig @@ -96,13 +95,5 @@ urlpatterns = [ url(r'^parlamentar/get-sessoes-legislatura/$', get_sessoes_legislatura, name='get_sessoes_legislatura'), - url(r'^parlamentar/get-all-legislaturas_json/$', - get_all_legislaturas_json, name='get-all-legislaturas_json'), - - url(r'^parlamentar/get_parlamentare_by_legislaturas_json/(?P\d+)/$', - get_parlamentare_by_legislaturas_json, name='get_parlamentare_by_legislaturas_json/'), - - url(r'^parlamentar/search_parlamentare_json/$', - search_parlamentare_json, name='search_parlamentare_json'), ] diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index e1c912c23..a69bab243 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -1206,46 +1206,3 @@ def get_sessoes_legislatura(request): json_response['sessoes_legislativas'].append( (s.id, str(s)) ) return JsonResponse(json_response) - -def get_all_legislaturas_json(request): - all_legislaturas = [(e.id,str(e)) for e in Legislatura.objects.all()] - return JsonResponse({'legislaturas':all_legislaturas}) - -def get_parlamentare_by_legislaturas_json(request,id_legislatura): - id_parlamentares = Mandato.objects.filter(legislatura__id=id_legislatura).values_list('parlamentar__id','titular','data_inicio_mandato','data_fim_mandato').distinct() - parlamentares = Parlamentar.objects.filter(id__in=[i[0] for i in id_parlamentares]) - - my_json = [] - - for i, p in enumerate(parlamentares): - p_dict = {} - p_dict['parlamentar_id'] = p.id - p_dict['fotografia'] = p.fotografia.url if (p.fotografia and os.path.exists(p.fotografia.path)) else "" - p_dict['nome_parlamentar'] = p.nome_parlamentar - p_dict['partido'] = filiacao_data(p,id_parlamentares[i][2],id_parlamentares[i][3]) - p_dict['ativo'] = p.ativo - p_dict['titular'] = id_parlamentares[i][1] - my_json.append(p_dict) - - return JsonResponse({'parlamentares':my_json}) - -def search_parlamentare_json(request): - my_json = [] - - if request.method == 'GET': - pass - elif request.method == 'POST': - nome = request.POST.get("nome","") - parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome) - for p in parlamentares: - p_dict = {} - p_dict['parlamentar_id'] = p.id - p_dict['fotografia'] = p.fotografia.url if (p.fotografia and os.path.exists(p.fotografia.path)) else "" - p_dict['nome_parlamentar'] = p.nome_parlamentar - p_dict['partido'] = p.filiacao_atual - p_dict['ativo'] = p.ativo - p_dict['titular'] = None - my_json.append(p_dict) - - - return JsonResponse({'parlamentares': my_json}) \ No newline at end of file diff --git a/sapl/templates/parlamentares/parlamentares_list.html b/sapl/templates/parlamentares/parlamentares_list.html index 807df56c1..c95c52d78 100644 --- a/sapl/templates/parlamentares/parlamentares_list.html +++ b/sapl/templates/parlamentares/parlamentares_list.html @@ -20,10 +20,10 @@
-

Pesquisa Parlamentar

+

Pesquisar Parlamentar

- Pesquisa + Pesquisar
@@ -35,8 +35,8 @@ Selecione o Período
@@ -66,7 +66,7 @@ - [[ parlamentar.nome_parlamentar]] + [[ parlamentar.nome_parlamentar]] [[ parlamentar.partido ]] @@ -76,62 +76,13 @@

Não

-

Sim

+

Sim

Não

- {% endblock base_content %}