Repository: interlegis/sapl

Issue:
Migrar tela de parlamentar para vue.js 
<!--- Forneça um resumo geral da _issue_ no título acima -->
Migrar a tela de parlamentar para vue js

## Comportamento Esperado
<!--- Se você está descrevendo um _bug_, conte-nos o que deveria acontecer. -->
<!--- Se você está sugerindo uma mudança/melhoria, conte-nos como deve funcionar. -->
O mesmo do atual.
## Comportamento Atual
<!--- Se está descrevendo um bug, conte-nos o que acontece em vez do comportamento esperado. -->
<!--- Se está sugerindo uma mudança/melhoria, explique a diferença com o comportamento atual. -->

## Possível Solução
<!--- Não é obrigatório, mas sugira uma possível correção/razão para o bug -->
<!--- ou ideias de como implementar a adição/mudança. -->

## Passos para Reproduzir (para bugs)
<!--- Forneça um link para um exemplo, ou um conjunto de passos inequívocos -->
<!--- para reproduzir esse bug. Inclua código para reproduzir, se relevante. -->
1.
2.
3.
4.

## Contexto
<!--- Como esse problema o afeta? O que você está tentando realizar? -->
<!--- Fornecer o contexto nos ajuda a encontrar uma solução que seja mais útil no mundo real -->
Migrar logica da tela que lista parlamentar para vue.js, para melhorar a manutenibilidade do sapl.
## Imagens do Ocorrido
<!--- Representação visual em vídeo ou imagem do ocorrido -->
<!--- Se está descrevendo um bug poste imagens ou vídeos na repordução do bug citado, caso se aplique -->

## Seu Ambiente
<!--- Inclua detalhes relevantes sobre o ambiente em que você presenciou/experienciou o bug. -->
* Versão usada (_Release_):
* Nome e versão do navegador:
* Nome e versão do Sistema Operacional (desktop ou mobile):
* Link para o seu projeto (Caso de fork deste projeto):



Discussion:

Resolving patch:
diff --git a/sapl/api/serializers.py b/sapl/api/serializers.py
--- 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,30 @@ def get_version(self, obj):
     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):
+        is_titular = None
+        if Legislatura.objects.exists():
+            legislatura = self.context.get('legislatura')
+            if not legislatura:
+                legislatura = Legislatura.objects.first()
+            mandato = Mandato.objects.filter(legislatura=legislatura,parlamentar=obj).first()
+            is_titular = mandato.titular if mandato else False
+        return is_titular
+
+    def check_partido(self,obj):
+        legislatura_id = self.context.get('legislatura')
+        if not legislatura_id:
+            legislatura = Legislatura.objects.first()
+        else:
+            legislatura = Legislatura.objects.get(id=legislatura_id)
+        filiacao = filiacao_data(obj, legislatura.data_inicio, legislatura.data_fim)
+        return filiacao
+
+    class Meta:
+        model = Parlamentar
+        fields = ['id', 'nome_parlamentar', 'fotografia', 'ativo', 'partido', 'titular']
diff --git a/sapl/api/views.py b/sapl/api/views.py
--- a/sapl/api/views.py
+++ b/sapl/api/views.py
@@ -21,7 +21,7 @@
 
 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
@@ -31,6 +31,7 @@
     DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado
 from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao
 from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria
+from sapl.parlamentares.models import Mandato, Parlamentar
 
 
 class BusinessRulesNotImplementedMixin:
@@ -303,6 +304,16 @@ def actionclass(self, request, *args, **kwargs):
 
 @customize(Parlamentar)
 class _ParlamentarViewSet:
+    class ParlamentarPermission(SaplModelPermissions):
+        def has_permission(self, request, view):
+            if request.method == 'GET':
+                return True
+            else:
+                perm = super().has_permission(request, view)
+                return perm
+                
+    permission_classes = (ParlamentarPermission, )
+
     @action(detail=True)
     def proposicoes(self, request, *args, **kwargs):
         """
@@ -333,6 +344,22 @@ def proposicoes(self, request, *args, **kwargs):
 
         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.
+        """
+        parlamentares = Parlamentar.objects.filter(mandato__legislatura=kwargs['pk'])
+        serializer_class = ParlamentarResumeSerializer(parlamentares,many=True,context={'legislatura':kwargs['pk']})
+        return Response(serializer_class.data)
+
+    @action(detail=False,methods=['GET'])
+    def search_parlamentares(self,request,*args,**kwargs):
+        nome = request.query_params.get('nome_parlamentar','')
+        parlamentares = Parlamentar.objects.filter(nome_parlamentar__icontains=nome)
+        serializer_class= ParlamentarResumeSerializer(parlamentares,many=True)
+        return Response(serializer_class.data)
 
 
 @customize(Proposicao)


Test patch: