Re: [pgbr-geral] Função para definir dada como dia ÚTIL, SABADO, DOMINGO e/ou FERIADO

2009-02-03 Por tôpico Osvaldo Kussama
2009/2/2 Luiz Magno Diogo ma...@mondriantecnologia.com:

 olá Newton,

 pra te ajudar o dow serve.

 select extract(dow from current_date)

 ele te retorna o dia da semana sendo 0 pra domingo.

 Abraço

 On Mon, 2 Feb 2009 11:47:12 -0200, Newton Teixeira do Nascimento Júnior
 newton.jun...@eletronorte.gov.br wrote:
 Olá caros,



 preciso de uma função que dada uma data qualquer (DD/MM/ ou
 -MM-DD),  retorne a categoria dessa data:

 DIA ÚTIL (seg,ter,qua,qui,sexta), SABADO, DOMINGO ou FERIADO. Pra
 feriado, eu já criei uma tabela com a lista dos feriados do ano.

 Existe uma função dentro do postgres que pode me ajudar nisso? Que
 soluções vocês acham que seria mais adequada?



Veja se este texto sobre feriados é de seu interesse:

FERIADOS

Os feriados no Brasil estão definidos nos termos da Lei Federal nº
9.335, de 10.dez.1996 (que complementou a lei nº 9.093 de
12.set.1995):

Art. 1º São feriados civis:
 I - os declarados em lei federal;
 II - a data magna do Estado fixada em lei estadual.
 III - os dias do início e do término do ano do centenário de fundação
do Município, fixados em lei municipal.
 Art. 2º São feriados religiosos os dias de guarda, declarados em lei
municipal, de acordo com a tradição local e em número não superior a
quatro, neste incluída a Sexta-Feira da Paixão.

Os feriados nacionais são declarados pelas Leis Federais nº 10.607 de
19.dez.2002 e nº 6.802 de 30.jun.1980 sendo eles:
1º de janeiro – Confraternização Universal,
21 de abril – Tiradentes,
1º de maio – Dia do Trabalho,
7 de setembro – Independência do Brasil,
12 de outubro – Nossa Senhora de Aparecida,
2 de novembro – Finados,
15 de novembro – Proclamação da República e
25 de dezembro – Natal.

Reparem que o Carnaval, por incrível que possa parecer, não é um
feriado nacional!
Para os dias de  Carnaval normalmente existe a declaração de ponto facultativo.

No âmbito federal existem as portarias do Ministério do Planejamento,
Orçamento e Gestão que fixam, para os órgãos do Poder Executivo, os
feriados (aqueles já previstos na Lei) bem como os pontos
facultativos. Para 2009:
http://www.planejamento.gov.br/secretarias/upload/Legislacao/Portarias/081106_port_525.pdf

As datas magnas dos estados são, por exemplo:
BA – 02.jul – Independência da Bahia
SP – 09.jul – Revolução Constitucionalista
RS – 20.set – Revolução Farroupilha
pesquise a de cada um dos estados de seu interesse.

No âmbito municipal cada município declara em lei quais serão os
feriados a observar bem como quais os pontos facultativos. Cumpre
ressaltar que alguns municípios estipulam mais de quatro feriados
locais (em desacordo com a Lei Federal?). Verifique quais são eles nos
munícipios de interesse. Por exemplo:

São Paulo – SP – (Lei nº 13.707/2004)
Aniversário da Cidade   25 de Janeiro
Finados 02 de Novembro
Dia da Consciência Negra20 de Novembro
Sexta-feira da Paixão   Data móvel
Corpus Christi  Data móvel
Porto Alegre – RS – (Lei 9.252/2003)
N. S. Navegantes02 de fevereiro
Dia da Consciência Negra20 de novembro
Sexta-Feira Santa   Data móvel
Corpus Christi  Data móvel
Vitória – ES – (Lei 1732/1967)
N. S. da Penha  24 de abril
N. S. da Vitória08 de setembro
Sexta-feira da Paixão   Data móvel
Corpus Christi  Data móvel

Os feriados móveis são determinados em função da Páscoa. Em anexo
temos uma rotina que, para um dado ano, calcula em que dia cai o
domingo de Páscoa. A partir do dia da Páscoa temos:
Terça feira de Carnaval: -47 dias
Sexta feira da Paixão: -2 dias
Ascensão: +39 dias
Corpus Christi: +60 dias

Especificamente para a Justiça Federal temos a Lei Nº 5.010/1966 que determina:
Art. 62. Além dos fixados em lei, serão feriados na Justiça Federal,
inclusive nos Tribunais Superiores:
I - os dias compreendidos entre 20 de dezembro e 6 de janeiro, inclusive;
II - os dias da Semana Santa, compreendidos entre a quarta-feira e o
Domingo de Páscoa;
III - os dias de segunda e terça-feira de Carnaval;
IV - os dias 11 de agosto, 1º e 2 de novembro e 8 de dezembro.
(Redação da Lei Nº 6.741/1979)

As atividades bancárias são reguladas pelo Banco Central que determina
quais os dias em que não haverá expediente bancário (por ex. Carnaval,
último dia do ano). A Bovespa também determina quais os dias em que
não haverá pregão.

Por último temos os feriados de categorias profissionais, normalmente
estipulados em acordos intersindicais, como por exemplo:
Dia do Comerciário
Dia do Funcionário Público
Dia do Professor
verifique quais deles podem se aplicar ao seu caso.


Abaixo uma função PL/pgSQL que a data do domingo de Páscoa de um dado ano.

---
CREATE FUNCTION pascoa(ano 

Re: [pgbr-geral] Select Join em Historico de Status.

2009-02-03 Por tôpico Osvaldo Kussama
2009/2/3 Lucas Paz lucas...@gmail.com:
 Olá,

 Vamos a duvida:

 tenho as tabelas LANCAMENTOS, HISTORICO_LANCAMENTOS e STATUS .

 LANCAMENTOS - PK(id_lancamento),nome,data_entrada e etc.
 STATUS - PK(id_status), nome
 HISTORICO_LANCAMENTOS - PK(id_hist_lancamento), FK(id_lancamento),
 FK(id_status), data, usuario e etc...

 Acontece o seguinte, na tabela Lancamentos tenho os dados dos contratos, na
 tabela STATUS apenas os status que podem existir de determinado contrato, na
 tabela HISTORICO_LANCAMENTOS tenho os historicos de alteração dos status do
 contrato.
 os status dos contratos são: PAGO, PENDENTE, FALTA ALGUMA COISA, ENVIADO e
 etc.


 Nem tudo são flores...

 1 contrato pode ter mais de 1 status ao mesmo tempo, ou seja um contrato
 pode estar pendente e ser pago... até ai blz...
 O que preciso fazer é um select que pegue os contratos que por exemplo
 tenham os status PAGO e PENDENTE. Preciso retornar o mesmo apenas 1 vez.
 Atualmente controlo isso por flags, a cada mudança no historico eu mudo 1
 flag na tabela LANCAMENTOS. Funciona, mais gostaria de algo mais automatico
 pois se acrescento 1 status tenho que criar novas flags alterar os triggers
 e etc...

 alguem tem alguma sugestão?



Não sei se entendi corretamente mas um GROUP BY e um MAX(data) não resolveria?
Ou o status que deseja retornar não é necessariamente o mais recente?

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select Join em Historico de Status.

2009-02-03 Por tôpico Nilson Chagas
select distinct l.nom, l.data_entrada, s.nome
from lancamentos l, status s, historico h
where l.id_lancamento = h.id_lancamento
and h.id_status = s.id_status
and (s.id_status = id do pago or s.id_status = id do pendente)

[]s
Nilson Chagas - Ubuntu User 25794
---
Visite:
http://www.amados.com.br/podcast
http://tempodesalvacao.blogspot.com/
http://bbnradio.org/




2009/2/3 Lucas Paz lucas...@gmail.com

 Olá,

 Vamos a duvida:

 tenho as tabelas LANCAMENTOS, HISTORICO_LANCAMENTOS e STATUS .

 LANCAMENTOS - PK(id_lancamento),nome,data_entrada e etc.
 STATUS - PK(id_status), nome
 HISTORICO_LANCAMENTOS - PK(id_hist_lancamento), FK(id_lancamento),
 FK(id_status), data, usuario e etc...

 Acontece o seguinte, na tabela Lancamentos tenho os dados dos contratos, na
 tabela STATUS apenas os status que podem existir de determinado contrato, na
 tabela HISTORICO_LANCAMENTOS tenho os historicos de alteração dos status do
 contrato.
 os status dos contratos são: PAGO, PENDENTE, FALTA ALGUMA COISA, ENVIADO
 e etc.


 Nem tudo são flores...

 1 contrato pode ter mais de 1 status ao mesmo tempo, ou seja um contrato
 pode estar pendente e ser pago... até ai blz...
 O que preciso fazer é um select que pegue os contratos que por exemplo
 tenham os status PAGO e PENDENTE. Preciso retornar o mesmo apenas 1 vez.
 Atualmente controlo isso por flags, a cada mudança no historico eu mudo 1
 flag na tabela LANCAMENTOS. Funciona, mais gostaria de algo mais automatico
 pois se acrescento 1 status tenho que criar novas flags alterar os triggers
 e etc...

 alguem tem alguma sugestão?



 att.

 --
 Lucas Paz


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select Join em Historico de Status.

2009-02-03 Por tôpico Osvaldo Kussama
2009/2/3 Lucas Paz lucas...@gmail.com:
 Olá novamente...

 Dando mais detalhes...

 Oswaldo:
 Não sei se entendi corretamente mas um GROUP BY e um MAX(data) não
 resolveria?
 Ou o status que deseja retornar não é necessariamente o mais recente?

 Osvaldo não resolve pq os status não estão em ordem! como disse nem tudo são
 flores...


 Nilson:
 select distinct l.nom, l.data_entrada, s.nome
 from lancamentos l, status s, historico h
 where l.id_lancamento = h.id_lancamento
 and h.id_status = s.id_status
 and (s.id_status = id do pago or s.id_status = id do pendente)

 Ao Nilson o Select que você mandou também não resolve pq eu preciso saber se
 o lancamento zz  teve cadastrado os status x ou y, mais tenho que retornar
 apenas 1 vez o lancamento zz.

 Quero alguma coisa que retorne se o lancamento zz teve os status x e y
 cadastrados ou se teve x ou y cadastrados, para que quando for com o status
 x e y apareçam em uma tabela e quando forem x ou y apareçam em outra tabela,
 e lembrando que o lancamento zz pode ter os status x e y cadastrados
 aleatoreamente...

 consegui explicar?



Dê uma olhada no exemplo de função de agregação array_accum em:
http://www.postgresql.org/docs/current/interactive/xaggr.html

Usando esta função em um GROUP BY lançamento você obterá um array
dos status registrados para este lançamento.

Daí usando, por exemplo, o operador @ (contains) ou @ (is contained
by) você conseguirá determinar se apenas um, ou mais de um, dos status
está(ão) registrado(s) para o lançamento.

Osvaldo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


[pgbr-geral] [RESOLVIDO] Função para defin ir dada como dia ÚTIL, SABADO, DOMINGO e/ou F ERIADO

2009-02-03 Por tôpico Newton Teixeira do Nascimento Júnior
Muito obrigado Luiz pela ajuda. Eis a função que fiz :

 

CREATE OR REPLACE FUNCTION Categoria_Dia(data date) RETURNS character 
varying(10) AS

$BODY$

DECLARE

dia integer;

resultado character varying(10);

BEGIN

 

dia = extract(dow from data);

 

if resultado = 0 then -- se o dia for um domingo

resultado = 'DOMINGO';

elseif resultado = 6 then -- se o dia for um sabado

resultado = 'SABADO';

elseif EXISTS (SELECT * FROM FERIADOS AS X WHERE X.data = data) then -- se o 
dia for um feriado

resultado = 'FERIADO';

else -- trata-se de um dia útil

resultado = 'DIA UTIL';

end if;

 

return resultado;

 

END; $BODY$ 

language 'plpgsql';

 

SELECT Categoria_Dia(CURRENT_DATE);

 

Existe a tabela Feriados que tem a relação dos feriados do ano:

 

CREATE TABLE FERIADOS

(

  data date NOT NULL,

  descricao character varying(50) NOT NULL,

  CONSTRAINT pk-feriados PRIMARY KEY (data, descricao)

)

 

Um grande abraço a todos. Att.

 

Newton Teixeira do Nascimento Junior

Analista de Sistemas - CMAO

Centrais Elétricas do Norte do Brasil S/A - Eletronorte
Av. dos Jequitibás, s/nº - Cohebe do Sacavém
São Luís-MA - 65043-380

Tel: 3217-5006 / 81330104
e-mail: newton.jun...@eletronorte.gov.br

 

___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral


Re: [pgbr-geral] Select Join em Historico de Status.

2009-02-03 Por tôpico Lucas Paz
Olá novamente...

Dando mais detalhes...

*Oswaldo:
Não sei se entendi corretamente mas um GROUP BY e um MAX(data) não
resolveria?
Ou o status que deseja retornar não é necessariamente o mais recente?
*
Osvaldo não resolve pq os status não estão em ordem! como disse nem tudo são
flores...


*Nilson:
select distinct l.nom, l.data_entrada, s.nome
from lancamentos l, status s, historico h
where l.id_lancamento = h.id_lancamento
and h.id_status = s.id_status
and (s.id_status = id do pago or s.id_status = id do pendente)*

Ao Nilson o Select que você mandou também não resolve pq eu preciso saber se
o lancamento zz  teve cadastrado os status x ou y, mais tenho que retornar
apenas 1 vez o lancamento zz.

Quero alguma coisa que retorne se o lancamento zz teve os status x e y
cadastrados ou se teve x ou y cadastrados, para que quando for com o status
x e y apareçam em uma tabela e quando forem x ou y apareçam em outra tabela,
e lembrando que o lancamento zz pode ter os status x e y cadastrados
aleatoreamente...

consegui explicar?

Att.



2009/2/3 Nilson Chagas nilson.chagas.si...@gmail.com





 []s
 Nilson Chagas - Ubuntu User 25794
 ---
 Visite:
 http://www.amados.com.br/podcast
 http://tempodesalvacao.blogspot.com/
 http://bbnradio.org/




 2009/2/3 Lucas Paz lucas...@gmail.com

 Olá,


 Vamos a duvida:

 tenho as tabelas LANCAMENTOS, HISTORICO_LANCAMENTOS e STATUS .

 LANCAMENTOS - PK(id_lancamento),nome,data_entrada e etc.
 STATUS - PK(id_status), nome
 HISTORICO_LANCAMENTOS - PK(id_hist_lancamento), FK(id_lancamento),
 FK(id_status), data, usuario e etc...

 Acontece o seguinte, na tabela Lancamentos tenho os dados dos contratos,
 na tabela STATUS apenas os status que podem existir de determinado contrato,
 na tabela HISTORICO_LANCAMENTOS tenho os historicos de alteração dos status
 do contrato.
 os status dos contratos são: PAGO, PENDENTE, FALTA ALGUMA COISA, ENVIADO
 e etc.


 Nem tudo são flores...

 1 contrato pode ter mais de 1 status ao mesmo tempo, ou seja um contrato
 pode estar pendente e ser pago... até ai blz...
 O que preciso fazer é um select que pegue os contratos que por exemplo
 tenham os status PAGO e PENDENTE. Preciso retornar o mesmo apenas 1 vez.
 Atualmente controlo isso por flags, a cada mudança no historico eu mudo 1
 flag na tabela LANCAMENTOS. Funciona, mais gostaria de algo mais automatico
 pois se acrescento 1 status tenho que criar novas flags alterar os triggers
 e etc...

 alguem tem alguma sugestão?



 att.

 --
 Lucas Paz


 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral



 ___
 pgbr-geral mailing list
 pgbr-geral@listas.postgresql.org.br
 https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral




-- 
Lucas Paz
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral