Folha de Ponto, com datas móveis como Carnaval Sexta-Feira Santa e Corpus Christi

Publicado por Herson Rodrigues 04/09/2007

[ Hits: 14.366 ]

Homepage: http://herson.objectis.net

Download folha_de_ponto_feriados_fixos_e_moveis.php




Precisei implementar uma folha de ponto para minha empresa onde não é preciso mais alterar aqueles doc's.

Então criei este código que através de cálculos muito chatos (pegou até as fases da lua) consegui que ele descobrisse quando cairá o CARNAVAL por exemplo, o código está totalmente comentado.

NÃO É NECESSÁRIO BANCO DE DADOS PARA VER ESTE SCRIPT, basta colocá-lo no seu diretório preferido e chamá-lo.

  



Esconder código-fonte

<h5>Para Testar basta Mudar o Mês ou Ano do seu relógio</h5><p>
<?

//##########################################################################
//##########################################################################
//##########################################################################
   //CREDITOS HERSON RODRIGUES - HERSONDF@HOTMAIL.COM
//##########################################################################
//##########################################################################
//##########################################################################
//##########################################################################


//Convertendo Dia da SEMANA
$dia_semana = date("l"); //L (Minusculo) pega o nome em ingles da semana
if($dia_semana == "Monday")
$dia_semana = "Segunda";
if($dia_semana == "Tuesday")
$dia_semana = "Terça";
if($dia_semana == "Wednesday")
$dia_semana = "Quarta";
if($dia_semana == "Thursday")
$dia_semana = "Quinta";
if($dia_semana == "Friday")
$dia_semana = "Sexta";
if($dia_semana == "Saturday")
$dia_semana = "Sabádo";
if($dia_semana == "Sunday")
$dia_semana = "Domingo";
//Recebendo o Ano Atual
$ano_atual = date("Y"); //Y pega o ano no formato YYYY caso queira YY ponha y ...
//Recebendo o Mes Atual para Nome
$mes_atual = date("m");
//Recebendo Mes Atual para Numero
$mes = date("m");

if($mes_atual == "01"){
$mes_atual = "Janeiro";
$time_left = 31;
}
//########################################################
//Vendo se é Fevereiro e se O ano é Bissexto
//Recebendo o Ano Bissexto
$bisexto = date("y");
if($mes_atual == "02"){
$mes_atual = "Fevereiro";
if ((($bisexto % 4) == 0 and ($bisexto % 100)!=0) or ($bisexto % 400)==0){
$time_left = 29;
}
else{
$time_left = 28;
}
}
//##########################################################
if($mes_atual == "03"){
$mes_atual = "Março";
$time_left = 31;
}
if($mes_atual == "04"){
$mes_atual = "Abril";
$time_left = 30;
}
if($mes_atual == "05"){
$mes_atual = "Maio";
$time_left = 31;
}
if($mes_atual == "06"){
$mes_atual = "Junho";
$time_left = 30;
}
if($mes_atual == "07"){
$mes_atual = "Julho";
$time_left = 31;
}
if($mes_atual == "08"){
$mes_atual = "Agosto";
$time_left = 31;
}
if($mes_atual == "09"){
$mes_atual = "Setembro";
$time_left = 30;
}
if($mes_atual == "10"){
$mes_atual = "Outubro";
$time_left = 31;
}
if($mes_atual == "11"){
$mes_atual = "Novembro";
$time_left = 30;
}
if($mes_atual == "12"){
$mes_atual = "Dezembro";
$time_left = 31;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Frequência de <?=$nome?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<br>
<table width="97%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="28%" height="60"><img src="../imagens/logo_iphan.jpg" width="264" height="60"></td>
    <td width="72%"><div align="left"><font size="2"><strong>Ministério 
        da Cultura - MinC <br>
        Instituto do Patrimônio Histórico e Artístico Nacional<br>
        Departamento de Planejamento e Administração<br>
        Divisão de Capacitação e Desenvolvimento</strong></font></div></td>
  </tr>
</table>
<table width="97%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td width="67%"> </td>
    <td width="33%"> </td>
  </tr>
  <tr> 
    <td><?=$sexo?> <?=$nome?></td>
    <td><div align="left">Mês<strong>:</strong> <?=$mes_atual?> de <?=$ano_atual?></div></td>
  </tr>
  <tr> 
    <td>Lotação: <?=$lotacao?></td>
    <td> </td>
  </tr>
  <tr> 
    <td>Carga Horária: <?=$carga_horaria?> horas semanais</td>
    <td> </td>
  </tr>
  <tr>
    <td> </td>
    <td> </td>
  </tr>
</table>
<table width="97%" border="1" cellpadding="0" cellspacing="0" bordercolor="#000000">
  <tr> 
    <td width="5%" bgcolor="#CCCCCC"><div align="center"><strong>DIA</strong></div></td>
    <td width="13%" bordercolor="#000000" bgcolor="#CCCCCC"><div align="center"><strong>HORA 
        DE ENTRADA</strong></div></td>
    <td width="13%" bgcolor="#CCCCCC"><div align="center"><strong>HORA DE SAÍDA</strong></div></td>
    <td width="32%" bgcolor="#CCCCCC"><div align="center"><strong>RUBRICA DO ESTAGIÁRIO</strong></div></td>
    <td width="16%" bgcolor="#CCCCCC"><div align="center"><strong>OCORRÊNCIA</strong></div></td>
    <td width="21%" bgcolor="#CCCCCC"><div align="center"><strong>ABONO DA CHEFIA 
    IMEDIATA</strong></div></td>
  </tr>
  <?
//********FERIADOS MÓVEIS*********************************************
//===>Carnaval
//===>Corpus Christi
//===>Sexta-Feira Santa
//********************************************************************
//********FERIADOS FIXOS**********************************************
// 01/01 - Confraternização universal
// 21/04 - Tiradentes / Niver Brasília (Distrital)
// 01/05 - Dia do Trabalhador
// 07/09 - Dia da Independência do Brasil
// 12/08 - Dia da Nossa Ser Aparecida
// 02/11 - Dia de Finados
// 15/11 - Ploclamação da Rep
// 30/11 - Dia do Evangélico (Distrital)
// 25/12 - Natal
//********************************************************************
// Faixa de anos X Y, Servem para calcular a Pascoa e consectivamente feriados móveis...
//è um cálculo que resgata as fases da lua...
//Para pegar as fases da Lua depende do nosso Século...
if($ano_atual >=1582 and $ano_atual <=1599){
$x= 22;
$y= 2;
}
if($ano_atual >=1600 and $ano_atual <= 1699){
$x= 22;
$y= 2;
}
if($ano_atual >=1700 and $ano_atual <= 1799){
$x= 23;
$y= 3;
}
if($ano_atual >=1800 and $ano_atual <= 1899){
$x= 24;
$y= 4;
}
if($ano_atual >=1900 and $ano_atual <= 1999){
$x= 24 ;
$y=5;
}
if($ano_atual >=2000 and $ano_atual <= 2099){
$x= 24;
$y=5;
}
if($ano_atual >=2100 and $ano_atual <= 2199){
$x= 24;
$y= 6;
}
if($ano_atual >=2200 and $ano_atual <= 2299){
$x= 25;
$y=7;
}
//Vamos ao cálculo da Páscoa
$a = $ano_atual % 19;
$b =  $ano_atual % 4;
$c = $ano_atual % 7;
$d = (((19*$a)+$x) % 30);
$e =(((2*$b)+(4*$c)+(6*$d)+$y)%7);

if(($d+$e)<10){
$dia_de_hoje = ($d+$e+22);
$mes_now = 3;
}
else{
$dia_de_hoje = ($d+$e-9);
$mes_now = 4;
}
//Caso específico
//Há dois casos particulares que ocorrem duas vezes por século
//Quando o domingo de Páscoa cair em Abril e o dia for 26, corrige-se para uma semana antes, ou seja, vai para dia 19
if($dia_de_hoje==26 && $mes_now==4){
$dia_de_hoje=19;
}
//Quando o domingo de Páscoa cair em Abril e o dia for 25 e o termo "d" for igual a 28, simultaneamente com "a" maior que 10, então o dia é corrigido para 18.
if($dia_de_hoje==25 && $mes_now==4){
$dia_de_hoje=18;
}


//#######################################################################
             //FUNÇÃO DE SOMA E SUBTRAÇÃO DE DATAS
//#######################################################################
function SomarData($data2, $dia_de_hoje2, $mes_nowe2, $oano2)
{
   //passe a data no formato dd/mm/yyyy
   $data2 = explode("/", $data2);
   $newData2 = date("d/m/Y", mktime(0, 0, 0, $data2[1] + $mes_nowe2,
    $data2[0] + $dia_de_hoje2, $data2[2] + $oano2) );
   return $newData2;
}

function SubtrairData($data3, $dia_de_hoje3, $mes_nowe3, $oano3)
{
   //passe a data no formato dd/mm/yyyy
   $data3 = explode("/", $data3);
   $newData3 = date("d/m/Y", mktime(0, 0, 0, $data3[1] - $mes_nowe3,
    $data3[0] - $dia_de_hoje3, $data3[2] - $oano3) );
   return $newData3;
}
//#######################################################################
//Recebe a Pascoa deste Ano
$data_pascoa = date("$dia_de_hoje/$mes_now/$ano_atual");
//Calcular o Carnaval - 47 Dias antes da Páscoa
$carnaval = SubtrairData("$data_pascoa", 47, 0, 0);
$carnaval = date($carnaval);
//Calcular a Sexta-Feira Santa - 2 Dias antes da Páscoa
$sexta_santa = SubtrairData("$data_pascoa", 2, 0, 0);
//Calcular Corpus Christi - 60 Dias apos a Páscoa
$corpus =SomarData("$data_pascoa", 60, 0, 0);
//Agora o resto dos feriados
$confraternizacao = date ("01/01/$ano_atual");     // 01/01 - Confraternização universal
$tiradentes = date ("21/04/$ano_atual");          // 21/04 - Tiradentes / Niver Brasília (Distrital)
$trabalhador = date ("01/05/$ano_atual");        // 01/05 - Dia do Trabalhador
$independencia = date ("07/09/$ano_atual");     // 07/09 - Dia da Independência do Brasil
$nsaparecida = date ("12/10/$ano_atual");      // 12/10 - Dia da Nossa Ser Aparecida
$finados = date ("02/11/$ano_atual");         // 02/11 - Dia de Finados
$replublica = date ("15/11/$ano_atual");     // 15/11 - Ploclamação da Republica
//$dia_evangelho = date ("30/11/$ano_atual"); // 30/11 - Dia do Evangélico (Distrital)
$natal = date ("25/12/$ano_atual");        // 25/12 - Natal
//Inicio da Parte Fisica da Lista de frequencia
?>
<? for($z=1;$z<=$time_left;$z++){
//EVITANDO ERROS 1 É != DE 01
if($z==1)
$z="01";
if($z==2)
$z="02";
if($z==3)
$z="03";
if($z==4)
$z="04";
if($z==5)
$z="05";
if($z==6)
$z="06";
if($z==7)
$z="07";
if($z==8)
$z="08";
if($z==9)
$z="09";
//Recebe o Dia da Semana em Nome (Saturday or Sunday)
$semana_nomeada[$z]  = date("l", mktime(0, 0, 0, $mes, $z, $ano_atual));
$bgcolor[$z]="FFFFFF";
$aterisco[$z]=" ";
//Recebe o Dia mes e Ano em que estamos
$sendo_agora = date ("$z/$mes/$ano_atual");
//Ver se é sabao ou domingo
if($semana_nomeada[$z]=="Saturday"){
$sabado_domingo = "<b>Sábado</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($semana_nomeada[$z]=="Sunday"){
$sabado_domingo = "<b>Domingo</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
else
$sabado_domingo = " ";

//Ver se é Feriado
if($confraternizacao == $sendo_agora){
$sabado_domingo = "<b>Feriado - Confratenização</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($carnaval == $sendo_agora){
$sabado_domingo = "<b>Feriado - Carnaval</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($sexta_santa == $sendo_agora){
$sabado_domingo = "<b>Feriado - Sexta-Feira Santa</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($corpus == $sendo_agora){
$sabado_domingo = "<b>Feriado - Corpus Christi</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($tiradentes == $sendo_agora){
$sabado_domingo = "<b>Feriado - Tiradentes</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($trabalhador == $sendo_agora){
$sabado_domingo = "<b>Feriado - Dia do Trabalhador</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($independencia == $sendo_agora){
$sabado_domingo = "<b>Feriado - Independência</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($nsaparecida == $sendo_agora){
$sabado_domingo = "<b>Feriado - N. S. Aparecida</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($finados == $sendo_agora){
$sabado_domingo = "<b>Feriado - Dia de Finados</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($replublica == $sendo_agora){
$sabado_domingo = "<b>Feriado - Procl. da Rep</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($dia_evangelho == $sendo_agora){
$sabado_domingo = "<b>Fer. Dist. - Dia do Evangelho</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}
elseif($natal == $sendo_agora){
$sabado_domingo = "<b>Feriado - Natal</b>";
$bgcolor[$z]="CCCCCC";
$aterisco[$z]="**********";
}


//Recebe os Feriados

  echo"<tr>
    <td bgcolor=\"#$bgcolor[$z]\"><div align=\"center\"><center>$z</center></div></td>
    <td bordercolor=\"#000000\" bgcolor=\"#$bgcolor[$z]\"><center>$aterisco[$z]</center></td>
    <td bgcolor=\"#$bgcolor[$z]\"><center>$aterisco[$z]</center></td>
    <td bgcolor=\"#$bgcolor[$z]\"><center>$sabado_domingo</center></td>
    <td bgcolor=\"#$bgcolor[$z]\"><center>$aterisco[$z]</center></td>
    <td bgcolor=\"#$bgcolor[$z]\"><center>$aterisco[$z]</center></td>
  </tr>" ;
  }
?>
  
  </tr>
  
</table>
<table width="97%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td width="90%"><font size="2">Somatório de ausências, atrasos 
      e saídas antecipadas não justificadas: _____</font></td>
    <td width="10%">  </td>
  </tr>
  <tr> 
    <td> </td>
    <td> </td>
  </tr>
  <tr> 
    <td>Data: ____/____/____</td>
    <td> </td>
  </tr>
  <tr>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td> </td>
    <td> </td>
  </tr>
  <tr>
    <td> </td>
    <td> </td>
  </tr>
</table>
<table width="97%" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td width="48%"><div align="center">______________________________________________</div></td>
    <td width="52%"><div align="center"> ____________________________</div></td>
  </tr>
  <tr> 
    <td><div align="center"><?=$nome?></div></td>
    <td> <div align="center">Visto da Chefia Imediata</div></td>
  </tr>
  <tr>
    <td> </td>
    <td><div align="center"><font size="2">CARIMBO</font></div></td>
  </tr>
</table>
<p><font size="2"></font></p>
</body>
</html>

Scripts recomendados

OpenLDAP seguro

Contador Automático

Text4Shell

Função para converter datas

Monitoramento simples de servidores [versão 1.0] (corrigido)


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts