[Inclusão de Componente] Sugestão para novo componente ACBrFeriado - ACBrTCP - Projeto ACBr
[Inclusão de Componente] Sugestão para novo componente ACBrFeriado
acbrferiado [Inclusão de Componente] Sugestão para novo componente ACBrFeriado
By Filipe Sortica,
October 27, 2017 in ACBrTCP
Este tópico foi criado há 783 dias atrás.
Gostaria de sugerir a inclusão do novo componente ACBrFeriado.
Ele faz a busca dos feriados de acordo com a API fornecida por http://www.calendario.com.br/. O componente segue a mesma linha do ACBrCEP. A utilização do componente seria assim:
ACBrFeriado := TACBrFeriado.Create(nil);
ACBrFeriado.WebService := wsfCalendario; // Aqui poderá mais adiante haver outros WebServices
ACBrFeriado.Token := 'seutoken';
ACBrFeriado.OnBuscaEfetuada := FeriadoBuscaEfetuada; // Evento para recuperar os feriados retornados
ACBrFeriado.Buscar(Ano, Uf, NomeCidade); // Realiza a busca dos feriados
ACBrFeriado.Free;
Ao realizar a consulta, preenche-se a lista dos eventos. Cada evento possui as seguintes informações:
TACBrFeriadoEvento = class
property Ano: Integer           read fAno       write fAno;
property Mes: Integer           read fMes       write fMes;
property Dia: Integer           read fDia       write fDia;
property Data: TDateTime        read fData      write fData;
property Nome: String           read fNome      write fNome;
property Descricao: String      read fDescricao write fDescricao;
property Tipo: TACBrFeriadoTipo read fTipo      write fTipo;
property Link: String           read fLink      write fLink;
O tipo terá os seguintes possíveis valores:
TACBrFeriadoTipo = ( ftNenhum, ftNacional, ftEstadual, ftMunicipal,
ftFacultativo, ftDiaConvencional );
Um detalhe em relação à busca é que deve ser passado o nome da cidade, em vez de o código do IBGE. Já sugeri ao http://www.calendario.com.br/ que incluam a possibilidade de fazer a consulta dos feriados por meio de sua API utilizando o código do IBGE. Eles retornaram dizendo que irão trabalhar nisso. Então, em breve, poderemos adequar essa parte. Por enquanto, a pesquisa utilizando o nome da cidade deve seguir o padrão que eles especificam no site: http://www.calendario.com.br/api_feriados_municipais_estaduais_nacionais.php. Neste site, também é possível receber gratuitamente o token para a utilização da API.
Espero que a contribuição seja útil.
ACBrFeriado.pas
ACBrTCPReg.pas
ACBr_TCP.dpk
bylaardt 25
Pena que esse site não é tão confiável assim.
Dia 11 de agosto não é feriado em Santa Catarina como indica o site:
Conforme previsão legal, o feriado é sempre transferido para o domingo seguinte.
4 minutos atrás, bylaardt disse:
Realmente, manter uma base nacional com todos os feriados nacionais, estuaduais e municipais não é nada simples. No caso de Santa Maria, RS, o feriado de 20/09 é estadual, mas consta como estadual e também como municipal. Por isso, entrei em contato com eles para que não apareça como municipal. É possível informá-los para que atualizem a base, de acordo com o que diz no site.
Dúvidas, problemas ou sugestões: [email protected]
E outra, com os mais de 60 mil membros que o ACBr tem, poderíamos muito bem fazer algo semelhante ao que foi feito com a NFS-e. Cada cidade tem um provedor, uma configuração. Neste caso seria até bem mais simples. Os feriados nacionais são simples, os feriados móveis podem ser calculados, os estaduais temos um pouco mais, e aí iríamos adicionando os municipais.
Daniel Simoes 8,775
8,775 1,720
Qual é a receita (forma de ganhar dinheiro) do site: http://www.calendario.com.br/ ? (Toda empresa precisa ter lucro... senão acaba fechando)
Pergunto, para saber se não há a possibilidade de descontinuarem ou tornar fechado, o serviço...
EMBarbosa 3,414
3,414 584
Atualmente eu utilizo Calendários tipo iCAL para fazer controle pessoal e um calendário provido pelo google ou pela Microsoft, para feriados nacionais. Infelizmente, os municípios não disponibilizam esse tipo de informação em formato eletrônico.
Manter esse bando de dados não é um trabalho pequeno. Mas termos um componente para utilização de uma API Rest seria interessante.
Meu único medo é no futuro não termos outra API para substituir a atual deixar de existir.
6 horas atrás, Filipe Sortica disse:
Vou analisar e dar um retorno aqui.
Gostaria de enviar novamente como sugestão o componente, agora com algumas alterações.
Em 27/10/2017 at 10:51, Filipe Sortica disse:
Agora o componente pode também fazer a pesquisa em um arquivo JSON, onde iríamos incluindo os dados dos eventos. Envio junto o arquivo JSON. Os feriados nacionais e estaduais já estão contemplados. Os feriados municipais de Santa Maria e Porto Alegre (RS), Florianópolis (SC), Curitiba (PR), São Paulo (SP), Rio de Janeiro (RJ), Belo Horizonte (MG), Salvador e Feira de Santana (BA) também já estão contemplados. Neste tipo de pesquisa, deve-se utilizar o código do município, em vez de o nome.
Junto está indo também um aplicativo demo para o componente.
ACBrFeriadoEventos.json
DemoFeriados.dpr
Frm_Feriados.dfm
Frm_Feriados.pas
Em ‎27‎/‎10‎/‎2017 at 09:58, bylaardt disse:
Com a nova alteração, pode-se configurar no arquivo JSON a troca do dia do feriado.
3 horas atrás, Filipe Sortica disse:
Vou verificar Felipe.
Enviei ao SVN. Mas considero o componente em beta.
Confesso que não entendi todas as propriedades (Exemplo: TrocaDiaTipo), mas aqui vão algumas considerações:
Notei que o arquivo .json não é válido. Você mesmo pode testar em sites como: https://jsonformatter.org/ ou https://jsonformatter.curiousconcept.com/
Removendo uma vírgula na linha 84 e alterando a linha 2 para incluir uma string (exemplo "definicao": { ), corrige o arquivo.
Na busca por feriados de 2017, o programa de exemplo está exibindo "a páscoa" com data de "30/12/1899"...
Outra coisa, as classes estão todas dentro do arquivo ACBrFeriado.pas. Seria melhor estarem em arquivos separados. Principalmente as classes abstratas ou básicas (TACBrFeriadoWSClass) e suas implementações (TACBrWSCalendario, TACBrWSJSON).
Nota: Ao pesquisar sobre o assunto, acabei encontrando o seguinte projeto: https://github.com/dadosbr/feriados. Pode ser interessante unir forças já que eles mesmos disponibilizaram uma mini-api.
15 horas atrás, EMBarbosa disse:
Obrigado, realmente foram falhas minhas.
Não consegui reproduzir o erro. Para mim, em 2017, este feriado está aparecendo com a data de 16/04/2017. E funcionando também para os anos seguintes.
Confesso que não entendi todas as propriedades (Exemplo: TrocaDiaTipo)
Existem casos que os feriados são, pela legislação, transferidos de dia. Neste caso, pode-se configurar especificando que tipo de troca de dia ocorre. Ex.: Como exemplo que o colega citou acima. Conforme previsão legal, o feriado de 11/08 em SC sempre é transferido para o domingo seguinte. Então, configuramos assim:
"trocaDiaTipo": 1,            // O tipo de troca será um de-para.
"trocaDiaDe": "2,3,4,5,6,7",  // Caso o feriado caia em algum desses dias da semana, ele será trocado (entre segunda e sábado).
"trocaDiaPara": 1,            // O dia da semana para o qual ele será trocado (domingo).
"trocaDiaParaSemana": 1       // Indica que a troca ocorrerá para um dia na semana seguinte.
Pelo que pesquisei, a troca do dia do feriado prevista legalmente ocorre também no Acre e no Maranhão. Para implementar isso, caso alguém tenha outras maneiras de fazê-lo, pode ficar a vontade para dar sugestões.
Eu cheguei a encontrar esse projeto, e me pareceu descontinuado. Mas de repente seria interessante.
Posso alterar de acordo com a sugestão.
4 horas atrás, Filipe Sortica disse:
Obrigado, realmente foram falhas minhas
No SVN já está corrigido. Se puder testar eu agradeceria.
Esqueci de mencionar que o erro aconteceu no Lazarus. Pode ser algo relacionado com a codificação dos arquivos.
Se puder alterar e anexar os arquivos alterados aqui, eu ficaria feliz em atualizar.
Mas antes, queira testar a versão do SVN se está tudo ok.
Como posso testar esse problema no Lazarus ?
executar o demo
Configurar para buscar do arquivo .json
preencher ano com 2017
clicar no botão buscar
Na lista de feriados vai aparecer Páscoa com data de 30/12/1899...
Corrigido... realmente era o caso da eterna briga de UTF8 x Ansi
Em 07/11/2017 at 17:00, EMBarbosa disse:
Envio os arquivos alterados conforme a sugestão.
Incluídos também os feriados municipais de Aracaju (SE).
ACBrFeriadoWSJSON.pas
ACBrFeriadoWSCalendario.pas
ACBrFeriadoWSClass.pas
Em 14/11/2017 at 11:51, Filipe Sortica disse:
Enviei as alterações Revisão 14168. Me parece OK. Se puder testar agradeço.
37 minutos atrás, EMBarbosa disse:
Testei aqui e me pareceu OK também.
Em 27/10/2017 at 09:45, Filipe Sortica disse:
Muito legal a iniciativa do Felipe!
Trabalho no site Calendario.com.br e gostaria de saber como podemos trabalhar juntos nisto.
Gostaríamos de prover um calendário confiável e fácil de usar, para todos os desenvolvedores brasileiros.
Me coloco à disposição para trabalharmos nisso.
Edited November 30, 2017 by Calendario
12 horas atrás, Calendario disse:
O componente com a consulta de feriados via API disponibilizada pelo site foi adicionado.
Você pode, se desejar, colocar um link para esse tópico no seu site para informar a programadores Delphi/Lazarus/Pascal que este componente está disponível.
Se tiver alguma outra API, ou alguma sugestão fique a vontade para dizer.
Sim, pensei nisso. Mas qual seria a melhor página a linkarmos em nosso site?
Tem alguma página diretamente de download do componente(s)?
Infelizmente não dá para baixar apenas o componente ACBrFeriado...
Seria necessário baixar todo o ACBr e instalar pelo menos o pacote ACBrTCP, usando o instalador automatizado do ACBr
https://www.projetoacbr.com.br/como-usar/
Atendendo a pedidos (entre eles do Felipe, criador do componente ACBrFeriados), implementamos a possibilidade de utilizar a API com o código IBGE das cidades.
ex: http://www.calendario.com.br/api/api_feriados.php?token=[seu-token]&ano=2017&ibge=3550308
Seria bem legal se alguém conseguisse atualizar o componente para aceitar também os códigos do IBGE.
Nós também colocamos um link para o site ACBr e para esta página do fórum na página da API de Feriados