Ir para conteúdo
Fórum Script Brasil
  • 0

thiagoaf19

Pergunta

Ola pessoal.

Tenho esse código abaixo e não consigo realizar a condição para enviar todo 10º dia útil de cada mês, por exemplo: vai ter uma rotina que no 10º dia útil vai enviar um email e dentro desse código abaixo, tenho que por uma outra função que fiz, que é a de email.

function EnvioDeEmail(pParametros in varchar2) return boolean as
	
		RET BOOLEAN;

		DIAUTIL DATE;
		
	begin

		PCK_PROCESSAMENTO.LOG('Verifica para gerar notificações');
		PCK_PROCESSAMENTO.LOG('Orgao: ' || PCK_PROCESSAMENTO.GETORGAO);
		PCK_PROCESSAMENTO.LOG('Tipo: ' || PCK_PROCESSAMENTO.GETTIPO);

		SELECT TRUNC(FN_DIA_UTIL_CORRIDO(PCK_PROCESSAMENTO.GETORGAO, CURRENT_DATE, 0)) INTO DIAUTIL FROM DUAL;
		--PEN;GERACAO:GERARLOTES;DTBASECALC:24/02/2023
		
		IF DIAUTIL = TRUNC(CURRENT_DATE) THEN
			PCK_PROCESSAMENTO.LOG('Processando. É dia útil: ' || TO_CHAR(DIAUTIL, 'DD/MM/YYYY'));	
	

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1

Eu não tenho experiência com o Oracle, mas eu acredito que o problema está na definição da variável DIAUTIL. Eu fiz um pequeno teste em PHP para calcular o décimo dia útil de março de 2023. Tente ver se bate com o seu:

index.php

<div style="width:25%;margin:0 auto;margin-top:5%">
<?php
$feriados=['2023-01-01','2023-02-20','2023-02-21','2023-02-22',
    '2023-04-07','2023-04-21','2023-05-01','2023-06-08','2023-09-07',
    '2023-10-12','2023-11-02','2023-11-15','2023-11-20','2023-12-24',
    '2023-12-25','2023-12-31'];
setlocale(LC_TIME, 'pt_BR', 'pt_BR.utf-8', 'portuguese');
$data=date('Y-m-d'); 
$mes=date('m');
$ano=date('Y');
$format = new IntlDateFormatter('pt_BR', IntlDateFormatter::NONE, 
    IntlDateFormatter::NONE, NULL, NULL, "MMMM");
$mesextenso = datefmt_format($format, strtotime($data)); 
$mesextenso = ucfirst($mesextenso);
echo "Calculando o décimo dia útil <br>do mês de $mesextenso 
    de ".date('Y',strtotime($data))."<p>";
$dia=1;
$diautil=0;
while($diautil<10){
    $data=date('Y-m-d',strtotime("$ano-$mes-$dia"));
    echo "<br>".date('d/m/Y',strtotime($data));
    $diasemana=date('N',strtotime($data));
    if($diasemana>0 && $diasemana<6){$var=$diasemana+1;$diatexto=$var."a.";}
    if($diasemana==6){$diatexto="Sábado";echo " $diatexto";goto prossegue;}
    if($diasemana==7){$diatexto="Domingo";echo " $diatexto";goto prossegue;}
    echo " $diatexto";
    if(in_array($data,$feriados)){echo " Feriado";goto prossegue;}
    $diautil++;
    echo " $diautil"."o. dia útil";
prossegue:
    $dia++;
    }
?>
</div>

 

Screenshot_1.png

Link para o comentário
Compartilhar em outros sites

  • 0

Opa. Bacana.

A lógica é essa mesmo.

Mas a Função Dia Útil eu já tenho ela, e está correta, já é usada para outros casos.

Só que na função Dia Útil eu não tenho o cálculo do 10º dia Útil e como é específico eu tenho que fazê-la diretamente no BD, que no meu caso é Oracle (Sql Developer).

A resposta estava na 'minha cara', era só alterar o current_date.

Do jeito que estava no código esse current_date sempre haverá deslocamento, e isso não é o que queremos rs, por exemplo: Dia 01/03/23 +10 = 14/03/23, no dia 02/03/23 + 10 = 15/03/23.

A intenção seria truncar a Data do current_date no 1º Dia útil do mês, com o comando trunc no current_date 'MM', assim pega o 1º dia de Março por exemplo + 10 = 14/03/2023 e tem um if que chama uma outra função que é de verificação de email, ou seja, vai haver uma rotina, onde todo dia vai realizar essa verificação, quando bater no 10º dia útil enviará o email, conforme condição. No outro dia haverá também a verificação, mas não vai enviar email, enviará no próximo mês.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...