Exemplo n.º 1
0
 def get_partidos(self):
     filicacoes = Filiacao.objects.filter(
         parlamentar=self.parlamentar).order_by('data')
     return [
         f.partido.sigla for f in filicacoes if intervalos_tem_intersecao(
             self.legislatura.data_inicio, self.legislatura.data_fim,
             f.data, f.data_desfiliacao or timezone.datetime.max.date())
     ]
Exemplo n.º 2
0
def validar_datas(data_filiacao, data_desfiliacao, parlamentar, filiacao):

    # Verifica se data de desfiliacao é anterior a data de filiacao
    if data_desfiliacao and data_desfiliacao < data_filiacao:
        error_msg = _("A data de desfiliação não pode anterior \
                       à data de filiação")
        return [False, error_msg]

    filiacao_atual_id = filiacao.pk
    # recupera filiacoes em ordem crescente de data
    todas_filiacoes = parlamentar.filiacao_set.all().order_by('data')
    filiacoes_id = [parlamentar.pk for parlamentar in todas_filiacoes]

    # Novo registro inserido com filiacoes ja existentes
    if filiacao_atual_id not in filiacoes_id and len(filiacoes_id) > 0:
            ultima_filiacao = todas_filiacoes.last()
            # Se ultima filiacao aberta e insercao posterior a esta filiacao
            if (not ultima_filiacao.data_desfiliacao and
                    data_filiacao >= ultima_filiacao.data):
                    error_msg = _("O parlamentar não pode se filiar \
                                   a novo partido sem antes se \
                                   desfiliar do partido anterior")
                    return [False, error_msg]

    # checa intervalos de interseccao
    error_msg = None
    for filiacoes in todas_filiacoes:
        # nao comparar o registro com ele mesmo
        if filiacoes.id != filiacao_atual_id:

            # Se a atualizacao eh para remover a data de desfiliacao
            if not data_desfiliacao:
                # so permite na ultima data (ou a unica)
                if filiacao_atual_id != filiacoes_id[-1]:
                    error_msg = _("Data de desfiliação do parlamentar não \
                                   pode ser ausente, se existirem datas de \
                                   filiação posteriores")
                    return [False, error_msg]
            else:
                data_inicio = filiacoes.data
                data_fim = filiacoes.data_desfiliacao

                # Se filiacao ainda em aberto, preenche uma desfiliacao
                # ficticia para fins de checagem de interseccao
                if not data_fim:
                    data_fim = date.today()

                # finalmente verifica intersecao
                if intervalos_tem_intersecao(data_inicio, data_fim,
                                             data_filiacao, data_desfiliacao):
                    error_msg = _("A data de filiação e \
                                   desfiliação não podem estar no intervalo \
                                   de outro período de filiação")
                    break
    if error_msg:
        return [False, error_msg]

    return [True, '']
Exemplo n.º 3
0
def validar_datas(data_filiacao, data_desfiliacao, parlamentar, filiacao):

    # Verifica se data de desfiliacao é anterior a data de filiacao
    if data_desfiliacao and data_desfiliacao < data_filiacao:
        error_msg = _("A data de desfiliação não pode anterior \
                       à data de filiação")
        return [False, error_msg]

    filiacao_atual_id = filiacao.pk
    # recupera filiacoes em ordem crescente de data
    todas_filiacoes = parlamentar.filiacao_set.all().order_by('data')
    filiacoes_id = [parlamentar.pk for parlamentar in todas_filiacoes]

    # Novo registro inserido com filiacoes ja existentes
    if filiacao_atual_id not in filiacoes_id and len(filiacoes_id) > 0:
            ultima_filiacao = todas_filiacoes.last()
            # Se ultima filiacao aberta e insercao posterior a esta filiacao
            if (not ultima_filiacao.data_desfiliacao and
                    data_filiacao >= ultima_filiacao.data):
                    error_msg = _("O parlamentar não pode se filiar \
                                   a novo partido sem antes se \
                                   desfiliar do partido anterior")
                    return [False, error_msg]

    # checa intervalos de interseccao
    error_msg = None
    for filiacoes in todas_filiacoes:
        # nao comparar o registro com ele mesmo
        if filiacoes.id != filiacao_atual_id:

            # Se a atualizacao eh para remover a data de desfiliacao
            if not data_desfiliacao:
                # so permite na ultima data (ou a unica)
                if filiacao_atual_id != filiacoes_id[-1]:
                    error_msg = _("Data de desfiliação do parlamentar não \
                                   pode ser ausente, se existirem datas de \
                                   filiação posteriores")
                    return [False, error_msg]
            else:
                data_inicio = filiacoes.data
                data_fim = filiacoes.data_desfiliacao

                # Se filiacao ainda em aberto, preenche uma desfiliacao
                # ficticia para fins de checagem de interseccao
                if not data_fim:
                    data_fim = date.today()

                # finalmente verifica intersecao
                if intervalos_tem_intersecao(data_inicio, data_fim,
                                             data_filiacao, data_desfiliacao):
                    error_msg = _("A data de filiação e \
                                   desfiliação não podem estar no intervalo \
                                   de outro período de filiação")
                    break
    if error_msg:
        return [False, error_msg]

    return [True, '']
Exemplo n.º 4
0
    def clean(self):
        super(CargoBlocoPartidoForm, self).clean()
        cleaned_data = self.cleaned_data

        aux_data_fim = cleaned_data['data_fim'] if cleaned_data[
            'data_fim'] else (cleaned_data['data_inicio'] + timedelta(days=1))

        if cleaned_data['cargo'].unico:
            for vinculo in CargoBlocoPartido.objects.filter(bloco=self.bloco):
                if not vinculo.data_fim:
                    vinculo.data_fim = timezone.now().date()
                if intervalos_tem_intersecao(cleaned_data['data_inicio'],
                    aux_data_fim,
                    vinculo.data_inicio,
                    vinculo.data_fim) and vinculo.cargo.unico and \
                    not(self.instance and self.instance.id == vinculo.id):
                    raise ValidationError(
                        "Cargo unico já é utilizado nesse período.")

        if aux_data_fim <= cleaned_data['data_inicio']:
            raise ValidationError(
                "Data Inicial deve ser anterior a data final.")

        if self.instance and self.instance.pk:
            self.cleaned_data['parlamentar'] = self.instance.parlamentar
        else:
            self.cleaned_data['parlamentar'] = self.cleaned_data.get(
                'parlamentar')

        fora_de_mandato = True
        for mandato in Mandato.objects.filter(
                parlamentar=self.cleaned_data.get('parlamentar')):
            if not intervalos_tem_intersecao(
                    mandato.data_inicio_mandato, cleaned_data['data_inicio'],
                    aux_data_fim, mandato.legislatura.data_fim):
                fora_de_mandato = False
        if fora_de_mandato:
            raise ValidationError(
                "Data de inicio e fim fora de periodo do mandato do parlamentar."
            )

        if self.instance.pk and (cleaned_data['parlamentar'].id !=
                                 self.instance.parlamentar.id):
            raise ValidationError("Não é possivel alterar o parlamentar " +
                                  str(self.instance.parlamentar))
Exemplo n.º 5
0
 def get_partidos(self):
     filicacoes = Filiacao.objects.filter(
         parlamentar=self.parlamentar).order_by('data')
     return [f.partido.sigla
             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())]