diff --git a/parlamentares/models.py b/parlamentares/models.py index 70fe89583..a155e0080 100644 --- a/parlamentares/models.py +++ b/parlamentares/models.py @@ -1,10 +1,11 @@ -import datetime +from datetime import datetime from django.db import models from django.utils.translation import ugettext_lazy as _ from model_utils import Choices -from sapl.utils import UF, YES_NO_CHOICES, restringe_tipos_de_arquivo_img +from sapl.utils import (UF, YES_NO_CHOICES, intervalos_tem_intersecao, + restringe_tipos_de_arquivo_img) class Legislatura(models.Model): @@ -18,7 +19,7 @@ class Legislatura(models.Model): def __str__(self): # XXX Usar id mesmo? Ou criar campo para nÂș legislatura? - current_date = datetime.datetime.now().year + current_date = datetime.now().year if(self.data_inicio.year <= current_date and self.data_fim.year >= current_date): current = ' (%s)' % _('Atual') @@ -356,6 +357,17 @@ class Mandato(models.Model): 'parlamentar': self.parlamentar, 'legislatura': self.legislatura } + def get_partidos(self): + filicacoes = Filiacao.objects.filter( + parlamentar=self.parlamentar).order_by('data') + return [f.partido + for f in filicacoes + if intervalos_tem_intersecao( + self.legislatura.data_inicio, + self.legislatura.data_fim, + f.data, + f.data_desfiliacao or datetime.max.date())] + class CargoMesa(models.Model): # TODO M2M ???? diff --git a/parlamentares/test_mandato.py b/parlamentares/test_mandato.py new file mode 100644 index 000000000..3540ed867 --- /dev/null +++ b/parlamentares/test_mandato.py @@ -0,0 +1,31 @@ +from datetime import datetime + +import pytest +from model_mommy import mommy + +from .models import Filiacao, Legislatura, Mandato + +pytestmark = pytest.mark.django_db + + +def data(valor): + return datetime.strptime(valor, '%Y-%m-%d').date() + + +def test_filiacoes(): + legislatura = mommy.make(Legislatura, + data_inicio=data('2001-01-01'), + data_fim=data('2001-12-31'), + ) + mandato = mommy.make(Mandato, legislatura=legislatura) + f1_fora, f2, f3, f4 = [mommy.make(Filiacao, + parlamentar=mandato.parlamentar, + data=ini, + data_desfiliacao=fim) + for ini, fim in ( + (data('2000-01-01'), data('2000-12-31')), + (data('2000-01-01'), data('2001-03-01')), + (data('2001-03-02'), data('2001-10-01')), + (data('2001-10-02'), None), + )] + assert mandato.get_partidos() == [f2.partido, f3.partido, f4.partido] diff --git a/sapl/utils.py b/sapl/utils.py index 6f7004c67..c2a7c5f68 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -184,3 +184,9 @@ restringe_tipos_de_arquivo_txt = fabrica_validador_de_tipos_de_arquivo( TIPOS_TEXTO_PERMITIDOS, 'restringe_tipos_de_arquivo_txt') restringe_tipos_de_arquivo_img = fabrica_validador_de_tipos_de_arquivo( TIPOS_IMG_PERMITIDOS, 'restringe_tipos_de_arquivo_img') + + +def intervalos_tem_intersecao(a_inicio, a_fim, b_inicio, b_fim): + maior_inicio = max(a_inicio, b_inicio) + menor_fim = min(a_fim, b_fim) + return maior_inicio <= menor_fim