Jump to content
Fórum Script Brasil
  • 0

thiagoaf19

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...