Browse Source

Corrigindo erros lista parlamentares Fix #3078

pull/3079/head
ulyssesBML 6 years ago
parent
commit
d0212e3aa5
  1. 62
      sapl/api/serializers.py
  2. 15
      sapl/api/views.py
  3. 4
      sapl/templates/parlamentares/parlamentares_list.html

62
sapl/api/serializers.py

@ -1,10 +1,14 @@
import logging
from django.conf import settings from django.conf import settings
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.db.models import F, Q
from rest_framework import serializers from rest_framework import serializers
from rest_framework.relations import StringRelatedField from rest_framework.relations import StringRelatedField
from sapl.parlamentares.models import Parlamentar, Mandato, Filiacao, Legislatura from sapl.parlamentares.models import Parlamentar, Mandato, Filiacao, Legislatura
from sapl.base.models import Autor, CasaLegislativa from sapl.base.models import Autor, CasaLegislativa
from sapl.utils import filiacao_data from sapl.utils import filiacao_data
class IntRelatedField(StringRelatedField): class IntRelatedField(StringRelatedField):
def to_representation(self, value): def to_representation(self, value):
return int(value) return int(value)
@ -60,24 +64,68 @@ class CasaLegislativaSerializer(serializers.ModelSerializer):
class ParlamentarResumeSerializer(serializers.ModelSerializer): class ParlamentarResumeSerializer(serializers.ModelSerializer):
titular = serializers.SerializerMethodField('check_titular') titular = serializers.SerializerMethodField('check_titular')
partido = serializers.SerializerMethodField('check_partido') partido = serializers.SerializerMethodField('check_partido')
logger = logging.getLogger(__name__)
def check_titular(self,obj): def check_titular(self,obj):
is_titular = None is_titular = None
if Legislatura.objects.exists(): if Legislatura.objects.exists():
legislatura = self.context.get('legislatura') legislatura = Legislatura.objects.get(id=self.context.get('legislatura'))
if not legislatura: if not legislatura:
legislatura = Legislatura.objects.first() legislatura = Legislatura.objects.first()
mandato = Mandato.objects.filter(legislatura=legislatura,parlamentar=obj).first() mandato = Mandato.objects.filter(
parlamentar=obj,
data_inicio_mandato__gte=legislatura.data_inicio,
data_fim_mandato__lte=legislatura.data_fim
).order_by('-data_inicio_mandato').first()
is_titular = mandato.titular if mandato else False is_titular = mandato.titular if mandato else False
return is_titular return is_titular
def check_partido(self,obj): def check_partido(self,obj):
legislatura_id = self.context.get('legislatura') # Coloca a filiação atual ao invés da última
if not legislatura_id: # As condições para mostrar a filiação são:
legislatura = Legislatura.objects.first() # A data de filiacao deve ser menor que a data de fim
# da legislatura e data de desfiliação deve nula, ou maior,
# ou igual a data de fim da legislatura
username = self.context['request'].user.username
if Legislatura.objects.exists():
legislatura = Legislatura.objects.get(id=self.context.get('legislatura'))
if not legislatura:
legislatura = Legislatura.objects.first()
try:
self.logger.debug("user=" + username + ". Tentando obter filiação do parlamentar com (data<={} e data_desfiliacao>={}) "
"ou (data<={} e data_desfiliacao=Null))."
.format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim))
filiacao = obj.filiacao_set.get(Q(
data__lte=legislatura.data_fim,
data_desfiliacao__gte=legislatura.data_fim) | Q(
data__lte=legislatura.data_fim,
data_desfiliacao__isnull=True))
# Caso não exista filiação com essas condições
except ObjectDoesNotExist:
self.logger.error("user=" + username + ". Parlamentar com (data<={} e data_desfiliacao>={}) "
"ou (data<={} e data_desfiliacao=Null)) não possui filiação."
.format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim))
filiacao = 'Não possui filiação'
# Caso exista mais de uma filiação nesse intervalo
# Entretanto, NÃO DEVE OCORRER
except MultipleObjectsReturned:
self.logger.error("user=" + username + ". O Parlamentar com (data<={} e data_desfiliacao>={}) "
"ou (data<={} e data_desfiliacao=Null)) possui duas filiações conflitantes"
.format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim))
filiacao = 'O Parlamentar possui duas filiações conflitantes'
# Caso encontre UMA filiação nessas condições
else: else:
legislatura = Legislatura.objects.get(id=legislatura_id) self.logger.debug("user=" + username +
filiacao = filiacao_data(obj, legislatura.data_inicio, legislatura.data_fim) ". Filiação encontrada com sucesso.")
filiacao = filiacao.partido.sigla
return filiacao return filiacao
class Meta: class Meta:

15
sapl/api/views.py

@ -31,7 +31,7 @@ from sapl.protocoloadm.models import DocumentoAdministrativo,\
DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado DocumentoAcessorioAdministrativo, TramitacaoAdministrativo, Anexado
from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao from sapl.sessao.models import SessaoPlenaria, ExpedienteSessao
from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria from sapl.utils import models_with_gr_for_model, choice_anos_com_sessaoplenaria
from sapl.parlamentares.models import Mandato, Parlamentar from sapl.parlamentares.models import Mandato, Parlamentar, Legislatura
class BusinessRulesNotImplementedMixin: class BusinessRulesNotImplementedMixin:
@ -350,8 +350,17 @@ class _ParlamentarViewSet:
""" """
Pega lista de parlamentares pelo id da legislatura. Pega lista de parlamentares pelo id da legislatura.
""" """
parlamentares = Parlamentar.objects.filter(mandato__legislatura=kwargs['pk']) legislatura = Legislatura.objects.get(pk=kwargs['pk'])
serializer_class = ParlamentarResumeSerializer(parlamentares,many=True,context={'legislatura':kwargs['pk']}) mandatos = Mandato.objects.filter(
legislatura=legislatura,
data_inicio_mandato__gte=legislatura.data_inicio,
data_fim_mandato__lte=legislatura.data_fim
).order_by('-data_inicio_mandato')
parlamentares = Parlamentar.objects.filter(mandato__in=mandatos).distinct()
serializer_class = ParlamentarResumeSerializer(parlamentares,
many=True,
context={'request':request,'legislatura':kwargs['pk']})
return Response(serializer_class.data) return Response(serializer_class.data)
@action(detail=False,methods=['GET']) @action(detail=False,methods=['GET'])

4
sapl/templates/parlamentares/parlamentares_list.html

@ -50,9 +50,9 @@
<thead> <thead>
<tr> <tr>
<th colspan=2 >Parlamentar</th> <th colspan=2 >Parlamentar</th>
<th>Parido</th> <th>Partido</th>
<th>Ativo?</th> <th>Ativo?</th>
<th v-if="!is_pesquisa" >Titlar?</th> <th v-if="!is_pesquisa" >Titular?</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

Loading…
Cancel
Save