def create(self, validated_data):
        estado = None
        municipio = None
        try:
            municipio = Municipio.objects.get(codigo_ibge=self.context['view'].
                                              kwargs['municipio__codigo_ibge'])
        except Municipio.DoesNotExist:
            try:
                estado = Estado.objects.get(codigo_ibge=self.context['view'].
                                            kwargs['municipio__codigo_ibge'])
            except Estado.DoesNotExist:
                raise serializers.ValidationError(
                    {'erro': 'O código informado é inválido.'})

        if str(self.context['view'].kwargs['feriado']).lower() == 'pascoa':
            ano = datetime.now().year
            pascoa_mes, pascoa_dia = Epoch.easter(ano)
            data = datetime(ano, pascoa_mes, pascoa_dia)
        elif str(self.context['view'].kwargs['feriado']).lower(
        ) == 'corpus-christi':
            ano = datetime.now().year
            pascoa_mes, pascoa_dia = Epoch.easter(ano)
            pascoa = datetime(ano, pascoa_mes, pascoa_dia)
            data = pascoa + timedelta(days=60)
        elif str(self.context['view'].kwargs['feriado']).lower() == 'carnaval':
            ano = datetime.now().year
            pascoa_mes, pascoa_dia = Epoch.easter(ano)
            pascoa = datetime(ano, pascoa_mes, pascoa_dia)
            data = pascoa - timedelta(days=47)
        else:
            raise serializers.ValidationError({'erro': 'O feriado inválido.'})

        feriado = Feriado(nome=self.context['view'].kwargs['feriado'].replace(
            '-', ' ').title(),
                          municipio=municipio,
                          estado=estado,
                          data=data)
        feriado.save()

        return feriado
示例#2
0
def test_epoch_easter():
    """Tests the easter() method of Epoch class"""

    t = Epoch.easter(2000)
    assert t[0] == 4 and t[1] == 23, \
        "ERROR: 1st easter() test, output doesn't match"

    t = Epoch.easter(1954)
    assert t[0] == 4 and t[1] == 18, \
        "ERROR: 2nd easter() test, output doesn't match"

    t = Epoch.easter(179)
    assert t[0] == 4 and t[1] == 12, \
        "ERROR: 3rd easter() test, output doesn't match"

    t = Epoch.easter(1243)
    assert t[0] == 4 and t[1] == 12, \
        "ERROR: 4th easter() test, output doesn't match"

    t = Epoch.easter(1991)
    assert t[0] == 3 and t[1] == 31, \
        "ERROR: 5th easter() test, output doesn't match"

    t = Epoch.easter(1993)
    assert t[0] == 4 and t[1] == 11, \
        "ERROR: 6th easter() test, output doesn't match"
def verifica_feriado_movel(self, ano, mes, dia):
    '''
        Verifica se a data passada é algum feriado móvel.
        Para feriados movéis que não são nacionais, verifica se o feriado
        já está cadastrado para o municipio.
    '''
    data_analisada = datetime(int(ano), int(mes), int(dia))
    pascoa_mes, pascoa_dia = Epoch.easter(int(ano))
    pascoa = datetime(int(ano), pascoa_mes, pascoa_dia)

    if data_analisada == pascoa - timedelta(days=2):
        return {'name': 'Sexta-Feira Santa'}
    elif data_analisada == pascoa:
        feriado_pascoa = Feriado.objects.filter(
            Q(municipio__codigo_ibge=self.kwargs['municipio__codigo_ibge'])
            | Q(estado__codigo_ibge=self.kwargs['municipio__codigo_ibge'][:2]),
            nome='Pascoa')
        if not feriado_pascoa:
            return None
        else:
            return {'name': 'Pascoa'}
    elif data_analisada == pascoa - timedelta(days=47):
        feriado_carnaval = Feriado.objects.filter(
            Q(municipio__codigo_ibge=self.kwargs['municipio__codigo_ibge'])
            | Q(estado__codigo_ibge=self.kwargs['municipio__codigo_ibge'][:2]),
            nome='Carnaval')
        if not feriado_carnaval:
            return None
        else:
            return {'name': 'Carnaval'}
    elif data_analisada == pascoa + timedelta(days=60):
        feriado_corpus_christi = Feriado.objects.filter(
            Q(municipio__codigo_ibge=self.kwargs['municipio__codigo_ibge'])
            | Q(estado__codigo_ibge=self.kwargs['municipio__codigo_ibge'][:2]),
            nome='Corpus Christi')
        if not feriado_corpus_christi:
            return None
        else:
            return {'name': 'Corpus Christi'}
    else:
        return None