Autor Tópico: Função com código SQL na tabela de feriados  (Lida 393 vezes)

GCONTABIL2015

  • Novato
  • *
  • Mensagens: 14
Função com código SQL na tabela de feriados
« Online: Maio 23, 2016, 04:09:02 pm »
Boa tarde, com esta função consigo calcular a data final, levando em consideração a 'DtInicial + Prazo = Data Final':

Código: [Selecionar]
<?php
    
echo 
"<br>---------------------------------------------------------<br>";

$DtInicial '30/04/2016';
$Prazo=1;

echo "Data Final:  $DtInicial<br>";
echo "Prazo:  $Prazo<br>"
    echo 
" Nova Data Final dia Util: "somar_dias_uteis($DtInicial,$Prazo,'');

echo "<br>---------------------------------------------------------<br>";


/*
formas diferentes de usar a funcao

1- qdt de dias uteis a contar apartir de uma data especifica ou fixa você pode passar a data direto nos paremetros da funcao
   function somar_dias_uteis($str_data,$int_qtd_dias_somar = 7,$feriados) 
   
   chamando a funcao   
   somar_dias_uteis('09/04/2009','','');
   ou 
   $data = date('Y-m-d'); 
   somar_dias_uteis('$data','','');
   
2- nao precisa passar os dias como parametro da funcao tipo function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados) 
   para chamar a funcao fica
   somar_dias_uteis('09/04/2009','4','');
   ou
   $data = date('Y-m-d'); 
   somar_dias_uteis('$data','4','');
*/

function somar_dias_uteis($str_data,$int_qtd_dias_somar,$feriados) {

// Caso seja informado uma data do MySQL do tipo DATETIME - aaaa-mm-dd 00:00:00
// Transforma para DATE - aaaa-mm-dd

   
$str_data substr($str_data,0,10);

// Se a data estiver no formato brasileiro: dd/mm/aaaa
// Converte-a para o padrão americano: aaaa-mm-dd

if ( preg_match("@/@",$str_data) == ) {

$str_data implode("-"array_reverse(explode("/",$str_data)));

}

// chama a funcao que calcula a pascoa
$pascoa_dt dataPascoa(date('Y'));
$aux_p explode("/"$pascoa_dt);
$aux_dia_pas $aux_p[0];
$aux_mes_pas $aux_p[1];
$pascoa "$aux_mes_pas"."-"."$aux_dia_pas"// crio uma data somente como mes e dia


// chama a funcao que calcula o carnaval
$carnaval_dt dataCarnaval(date('Y'));
$aux_carna explode("/"$carnaval_dt);
$aux_dia_carna $aux_carna[0];
$aux_mes_carna $aux_carna[1];
$carnaval "$aux_mes_carna"."-"."$aux_dia_carna"


// chama a funcao que calcula corpus christi
$CorpusChristi_dt dataCorpusChristi(date('Y'));
$aux_cc explode("/"$CorpusChristi_dt);
$aux_cc_dia $aux_cc[0];
$aux_cc_mes $aux_cc[1];
$Corpus_Christi "$aux_cc_mes"."-"."$aux_cc_dia"


// chama a funcao que calcula a sexta feira santa
$sexta_santa_dt dataSextaSanta(date('Y'));
$aux explode("/"$sexta_santa_dt);
$aux_dia $aux[0];
$aux_mes $aux[1];
$sexta_santa "$aux_mes"."-"."$aux_dia"

   
   
$feriados = array(
// Janeiro
"01-01"//Formato dos feriados mm-dd
"01-02"
"01-03"
"01-04"
"01-05",
"01-06",
"01-07",
"01-08",
"01-09",
"01-10",
"01-11",
"01-12",
"01-13",
"01-14",
"01-15",
"01-16",
"01-17",
"01-18",
"01-19",
"01-20",

//Fevereiro


//Março
"03-24",

//Feriados 
$carnaval
$sexta_santa,
$pascoa
$Corpus_Christi,

//Abril
"04-21"

//Maio
"05-01"

//Junho
"06-12",
"06-24",

//Julho
"07-09"
"07-16"

//Agosto

//Setembro
"09-07",

//Outubro
"10-12",

//Novembro
"11-02"
"11-15"

//Dezembro
"12-20",
"12-21",
"12-22",
"12-23",
"12-24",
"12-25"
"12-27",
"12-26",
"12-28",
"12-29",
"12-30",
"12-31");


$array_data explode('-'$str_data);
$count_days 0;
$int_qtd_dias_uteis 0;

while ($int_qtd_dias_uteis $int_qtd_dias_somar) {

$count_days++;
$day date('m-d',strtotime('+'.$count_days.'day',strtotime($str_data))); 

if(($dias_da_semana gmdate('w'strtotime('+'.$count_days.' day'gmmktime(000$array_data[1], $array_data[2], $array_data[0]))) ) != '0' && $dias_da_semana != '6' && !in_array($day,$feriados))
{
$int_qtd_dias_uteis++;
}
}
 return gmdate('d/m/Y',strtotime('+'.$count_days.' day',strtotime($str_data)));

}
   
// dataPascoa(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo da Pascoa
// Retorna o dia da pascoa no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
//  Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
//  Padrao: d/m/Y


function dataPascoa($ano=false$form="d/m/Y") {
$ano=$ano?$ano:date("Y");
if ($ano<1583) { 
$A = ($ano 4);
$B = ($ano 7);
$C = ($ano 19);
$D = ((19 $C 15) % 30);
$E = (($A $B $D 34) % 7);
$F = (int)(($D $E 114) / 31);
$G = (($D $E 114) % 31) + 1;
return date($formmktime(0,0,0,$F,$G,$ano));
}
else {
$A = ($ano 19);
$B = (int)($ano 100);
$C = ($ano 100);
$D = (int)($B 4);
$E = ($B 4);
$F = (int)(($B 8) / 25);
$G = (int)(($B $F 1) / 3);
$H = ((19 $A $B $D $G 15) % 30);
$I = (int)($C 4);
$K = ($C 4);
$L = ((32 $E $I $H $K) % 7);
$M = (int)(($A 11 $H 22 $L) / 451);
$P = (int)(($H $L $M 114) / 31);
$Q = (($H $L $M 114) % 31) + 1;
return date($formmktime(0,0,0,$P,$Q,$ano));
}
}

// dataCarnaval(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo do Carnaval
// Retorna o dia do Carnaval no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
//  Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
//  Padrao: d/m/Y

function dataCarnaval($ano=false$form="d/m/Y") {
$ano=$ano?$ano:date("Y");
$a=explode("/"dataPascoa($ano));
return date($formmktime(0,0,0,$a[1],$a[0]-47,$a[2]));
}

// dataCorpusChristi(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo do Corpus Christi
// Retorna o dia do Corpus Christi no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
//  Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
//  Padrao: d/m/Y

function dataCorpusChristi($ano=false$form="d/m/Y") {
$ano=$ano?$ano:date("Y");
$a=explode("/"dataPascoa($ano));
return date($formmktime(0,0,0,$a[1],$a[0]+60,$a[2]));
}

// dataSextaSanta(ano, formato);
// Autor: Yuri Vecchi
//
// Funcao para o calculo da Sexta-feira santa ou da Paixao.
// Retorna o dia da Sexta-feira santa ou da Paixao no formato desejado ou false.
//
// ######################ATENCAO###########################
// Esta funcao sofre das limitacoes de data de mktime()!!!
// ########################################################
//
// Possui dois parametros, ambos opcionais
// ano = ano com quatro digitos
// Padrao: ano atual
// formato = formatacao da funcao date() http://br.php.net/date
// Padrao: d/m/Y

function dataSextaSanta($ano=false$form="d/m/Y") {
$ano=$ano?$ano:date("Y");
$a=explode("/"dataPascoa($ano));
return date($formmktime(0,0,0,$a[1],$a[0]-2,$a[2]));

 
?>


 

Ocorre que tenho uma tabela na base de dados com o nome de feriados, onde gostaria de passar os valores constantes da variável $feriados ao invés de passar diretamente dentro da array() na função.

Passando os valores na tabela feriados ficaria mais fácil para o usuário final informar quais o feriado de seu município para, então, função fazer o cálculo.

Contudo, não tenho conhecimento suficiente para fazer este comando dentro da função php, acho que seria através de um select em sql??? alguém poderia ajudar.

Desde já agradeço pela atenção dos colegas.

Att.

Gilson

Jailton

  • Expert
  • *****
  • Mensagens: 2038
Re:Função com código SQL na tabela de feriados
« Responder #1 Online: Maio 23, 2016, 04:33:24 pm »
Você vai usar a macro: sc_select(dataset, "Comando SQL", "Conexão"):
http://127.0.0.1:8081/scriptcase/doc/manual_mp/manual_mp.htm?item=28-Macros/00-macros_sc.htm

Para pegar os dias de feriados cadastrados por seu usuário, ai é só coloca-los dentro do array desta função que você já tem que vai dar tudo certo.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

GCONTABIL2015

  • Novato
  • *
  • Mensagens: 14
Re:Função com código SQL na tabela de feriados
« Responder #2 Online: Maio 24, 2016, 10:32:54 am »
Bom dia, estou usando este comando:

include "conexao.inc";

   $sql="SELECT dia, mes FROM feriados WHERE ativo=1";
   $res=mysqli_query($con,$sql);
   while($vreg=mysqli_fetch_row($res)){
   $DiaFer=$vreg[0];
   $MesFer=$vreg[1]; 
   $feriado_tabela= "$MesFer"."-"."$DiaFer";
   echo  "$feriado_tabela<br>";

Mas não estar dado certo, pois na função as datas é passada com string no seguinte format: "25-01" mes-dia.


Pelo que entendi o comando fetch_row retorna uma matriz númerica, quando deveria retornar uma matriz em string, então a função não lê corretamente os dados.

Alguém poderia ajudar.

Haroldo

  • Expert
  • *****
  • Mensagens: 6276
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Função com código SQL na tabela de feriados
« Responder #3 Online: Maio 24, 2016, 10:41:39 am »
Abra um tópico novo para um assunto novo.

Porque não usa as macros do scriptcase?

Bom dia, estou usando este comando:

include "conexao.inc";

   $sql="SELECT dia, mes FROM feriados WHERE ativo=1";
   $res=mysqli_query($con,$sql);
   while($vreg=mysqli_fetch_row($res)){
   $DiaFer=$vreg[0];
   $MesFer=$vreg[1]; 
   $feriado_tabela= "$MesFer"."-"."$DiaFer";
   echo  "$feriado_tabela<br>";

Mas não estar dado certo, pois na função as datas é passada com string no seguinte format: "25-01" mes-dia.


Pelo que entendi o comando fetch_row retorna uma matriz númerica, quando deveria retornar uma matriz em string, então a função não lê corretamente os dados.

Alguém poderia ajudar.

Jailton

  • Expert
  • *****
  • Mensagens: 2038
Re:Função com código SQL na tabela de feriados
« Responder #4 Online: Maio 24, 2016, 10:42:47 am »
Você esta usando a ferramenta Scriptcase?

Se tiver basta ler e usar esta macro para fazer a carga dos dados:
Você vai usar a macro: sc_select(dataset, "Comando SQL", "Conexão"):
http://127.0.0.1:8081/scriptcase/doc/manual_mp/manual_mp.htm?item=28-Macros/00-macros_sc.htm
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Jailton

  • Expert
  • *****
  • Mensagens: 2038
Re:Função com código SQL na tabela de feriados
« Responder #5 Online: Maio 24, 2016, 10:43:19 am »
Abra um tópico novo para um assunto novo.

Porque não usa as macros do scriptcase?

Bom dia, estou usando este comando:

include "conexao.inc";

   $sql="SELECT dia, mes FROM feriados WHERE ativo=1";
   $res=mysqli_query($con,$sql);
   while($vreg=mysqli_fetch_row($res)){
   $DiaFer=$vreg[0];
   $MesFer=$vreg[1]; 
   $feriado_tabela= "$MesFer"."-"."$DiaFer";
   echo  "$feriado_tabela<br>";

Mas não estar dado certo, pois na função as datas é passada com string no seguinte format: "25-01" mes-dia.


Pelo que entendi o comando fetch_row retorna uma matriz númerica, quando deveria retornar uma matriz em string, então a função não lê corretamente os dados.

Alguém poderia ajudar.

Pelo código dele parece que nem esta usando Scriptcase, parece que esta usando o fórum para tirar uma dúvida de PHP usando em outra ferramenta.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Haroldo

  • Expert
  • *****
  • Mensagens: 6276
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Função com código SQL na tabela de feriados
« Responder #6 Online: Maio 24, 2016, 10:44:25 am »
Então esta no forum errado.

Abra um tópico novo para um assunto novo.

Porque não usa as macros do scriptcase?

Bom dia, estou usando este comando:

include "conexao.inc";

   $sql="SELECT dia, mes FROM feriados WHERE ativo=1";
   $res=mysqli_query($con,$sql);
   while($vreg=mysqli_fetch_row($res)){
   $DiaFer=$vreg[0];
   $MesFer=$vreg[1]; 
   $feriado_tabela= "$MesFer"."-"."$DiaFer";
   echo  "$feriado_tabela<br>";

Mas não estar dado certo, pois na função as datas é passada com string no seguinte format: "25-01" mes-dia.


Pelo que entendi o comando fetch_row retorna uma matriz númerica, quando deveria retornar uma matriz em string, então a função não lê corretamente os dados.

Alguém poderia ajudar.

Pelo código dele parece que nem esta usando Scriptcase.

GCONTABIL2015

  • Novato
  • *
  • Mensagens: 14
Re:Função com código SQL na tabela de feriados
« Responder #7 Online: Maio 24, 2016, 11:06:50 am »
Bom dia.

Na verdade estou usando o scritpcase, mas como esta função foi gerado fora do scritpcase prefiro testar antes de colocar dentro do sistema.

Mas de qualquer forma muito obrigado pela ajuda Jailton, vou testar da maneira como sugeriu.

Desde já agradeço.

Gilson