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
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