Repository: interlegis/sapl

Issue:
Informação sobre partido do parlamentar inconsistente com as datas de filiação
Informação sobre partido do parlamentar está inconsistente com as datas de mudança de filiação. Veja-se o caso do Ver. Hasso Bräunig:

![captura de tela de 2017-04-27 14 32 19](https://cloud.githubusercontent.com/assets/19169882/25496367/0f59991a-2b57-11e7-8504-d83e5d77f3f7.png)

Percebe-se, na tela abaixo, que ele aparece como filiado do PSDB em um período em que ainda estava no PMDB

![captura de tela de 2017-04-27 14 36 14](https://cloud.githubusercontent.com/assets/19169882/25496392/286cce4a-2b57-11e7-8a62-6116e37810b4.png)

Então, está aparecendo, para qualquer legislatura, a última filiação partidária do parlamentar, o que não é adequado.


Discussion:

Resolving patch:
diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py
--- a/sapl/parlamentares/views.py
+++ b/sapl/parlamentares/views.py
@@ -1,7 +1,7 @@
 from django.contrib import messages
-from django.core.exceptions import ObjectDoesNotExist
+from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
 from django.core.urlresolvers import reverse, reverse_lazy
-from django.db.models import F
+from django.db.models import F, Q
 from django.http.response import HttpResponseRedirect
 from django.utils.datastructures import MultiValueDictKeyError
 from django.utils.translation import ugettext_lazy as _
@@ -344,8 +344,47 @@ def get_context_data(self, **kwargs):
 
             # Tira Link do avatar_html e coloca no nome
             for row in context['rows']:
+                # Coloca a filiação atual ao invés da última
+                if row[0][1]:
+                    # Pega o Parlamentar por meio da pk
+                    parlamentar = Parlamentar.objects.get(
+                        id=(row[0][1].split('/')[-1]))
+
+                    # Pega a Legislatura
+                    legislatura = Legislatura.objects.get(
+                        id=context['legislatura_id'])
+
+                    # As condições para mostrar a filiação são:
+                    # 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
+                    try:
+                        filiacao = parlamentar.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:
+                        row[2] = ('Não possui filiação', None)
+
+                    # Caso exista mais de uma filiação nesse intervalo
+                    # Entretanto, NÃO DEVE OCORRER
+                    except MultipleObjectsReturned:
+                        filiacao = parlamentar.filiacao_set.filter(Q(
+                            data__lte=legislatura.data_fim,
+                            data_desfiliacao__gte=legislatura.data_fim) | Q(
+                            data__lte=legislatura.data_fim,
+                            data_desfiliacao__isnull=True)).last()
+
+                    # Caso encontre UMA filiação nessas condições
+                    else:
+                        row[2] = (filiacao.partido.sigla, None)
+
                 row[1] = (row[1][0], row[0][1])
                 row[0] = (row[0][0], None)
+
             return context
 
 


Test patch: