Calendário de férias
Pessoal,
Eu tô tentando fazer um calendário de férias um pouco diferente. Eu preciso que ele mostre todos os funcionários e um calendário com os dias de férias de cada um marcado em outra cor, pra que dê pra olhar e ver se há muitos funcionários nos mesmos dias em férias.
Eu achei um script aqui no fórum e dei uma mexida nele pra ficar no formato que preciso. Com os dias do mês um ao lado do outro e não no formato padrão do calendário. Só que não tenho idéia de como pegar os dias de férias do funcionário e mudar as cores dos dias.
O problema é que eu tenho que dizer ao mysql que preciso que ele mude a cor dos dias "entre" as férias.
Assim... o funcionário vai tirar férias do dia 10/01/2014 até 20/01/2014. Então, quero que entre esses dias fique de outra cor.
O script tá meio grande pq tem tb o css mas vou postar aqui caso alguém queira copiá-lo e pra ver se alguém tem uma idéia. Imagino que na tabela tenha um campo de início e fim... pra piorar, o funcionário pode dividir as férias em 3 períodos!!!
<?php
########################################
#
# Calendário de Eventos PHP 5 e MySQL
# Documento: Agenda de Eventos Dinâmica
# Autor: Gaspar Teixeira
# E-mail: gaspar.teixeira@gmail.com
# Data: 14/11/2008
# Direito de Uso: Livre
# Declaração: O autor não se responsabiliza
# pelo utilização deste calendário!
#
########################################
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Agenda de Eventos by Gaspar</title>
<style type="text/css">
.tabela{
background:#fff;
width:200px;
padding:0px;
border:1px solid #f0f0f0;
float:left;
margin-right:20px;
}
.td{
background:#f8f8f8;
width:20px;
height:20px;
text-align:center;
}
.hj{
background: #FFFFCC;
width:20px;
height:20px;
text-align:center;
}
.dom{
background: #FFCC99;
width:20px;
height:20px;
text-align:center;
}
.evt{
background: #CCFF99;
width:20px;
height:20px;
text-align:center;
}
.mes{
background:#fff;
width:auto;
height:20px;
text-align:center;
}
.show{
background:#202020;
width:300px;
height:30px;
text-align:left;
font-size:12px;
font-weight:bold;
color:#CCFF00;
padding-left:5px;
}
.linha{
background:#404040;
width:300px;
height:20px;
text-align:left;
font-size:11px;
color:#f0f0f0;
padding:1px 1px 1px 10px;
}
.sem{
background: #ECE6D9;
width:auto;
height:20px;
text-align:center;
font-size:12px;
font-weight:bold;
font-family:Verdana;
}
body,td,th {
font-family: Verdana;
font-size: 11px;
color: #000000;
}
a:link {
color: #000000;
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #000000;
}
a:hover {
text-decoration: underline;
color: #FF9900;
}
a:active {
text-decoration: none;
}
</style>
</head>
<body>
<?php
include "sql.php";//conexão com o banco de dados
@mysql_select_db($db);//selecione o banco de dados
if(empty($_GET['data'])){//navegaçao entre os meses
$dia = date('d');
$month = ltrim(date('m'),"0");
$ano = date('Y');
}else{
$data = explode('/',$_GET['data']);//nova data
$dia = $data[0];
$month = $data[1];
$ano = $data[2];
}
if($month==1){//mês anterior se janeiro mudar valor
$mes_ant = 12;
$ano_ant = $ano - 1;
}else{
$mes_ant = $month - 1;
$ano_ant = $ano;
}
if($month==12){//proximo mês se dezembro tem que mudar
$mes_prox = 1;
$ano_prox = $ano + 1;
}else{
$mes_prox = $month + 1;
$ano_prox = $ano;
}
$hoje = date('j');//função importante pego o dia corrente
switch($month){/*notem duas variaveis para o switch para identificar dia e limitar numero de dias*/
case 1: $mes = "JANEIRO";
$n = 31;
break;
case 2: $mes = "FEVEREIRO";// todo ano bixesto fev tem 29 dias
$bi = $ano % 4;//anos multiplos de 4 são bixestos
if($bi == 0){
$n = 29;
}else{
$n = 28;
}
break;
case 3: $mes = "MARÇO";
$n = 31;
break;
case 4: $mes = "ABRIL";
$n = 30;
break;
case 5: $mes = "MAIO";
$n = 31;
break;
case 6: $mes = "JUNHO";
$n = 30;
break;
case 7: $mes = "JULHO";
$n = 31;
break;
case 8: $mes = "AGOSTO";
$n = 31;
break;
case 9: $mes = "SETEMBRO";
$n = 30;
break;
case 10: $mes = "OUTUBRO";
$n = 31;
break;
case 11: $mes = "NOVEMBRO";
$n = 30;
break;
case 12: $mes = "DEZEMBRO";
$n = 31;
break;
}
print '<table class="tabela" >';//construção do calendario
print '<tr>';
print '<td class="mes"><a href="?data='.$dia.'/'.$mes_ant.'/'.$ano_ant.'" title="Mês anterior"> « </a></td>';/*mês anterior*/
print '<td class="mes" colspan="5">'.$mes.'/'.$ano.'</td>';/*mes atual e ano*/
print '<td class="mes"><a href="?data='.$dia.'/'.$mes_prox.'/'.$ano_prox.'" title="Próximo mês"> » </a></td>';/*Proximo mês*/
print '</tr><tr>';
print '<td>Marcos</td>';
for($i = 1; $i <= $n; $i++ ){/*agora vamos no banco de dados verificar os evendos*/
$dtevento = $i."-".$month."-".$ano;
$sqlag = mysql_query("SELECT * FROM agenda WHERE dtevento = '$dtevento'") or die(mysql_error());
$num = mysql_num_rows($sqlag);/*quantos eventos tem para o mes*/
$idev = @mysql_result($sqlag, 0, "dtevento");
$eve = @mysql_result($sqlag, 0, "evento");
if($num > 0){/*prevalece qualquer dia especial do calendario, por isso está em primeiro*/
print '<td class="evt">';
print '<a href="?d='.$idev.'&data='.$dia.'/'.$month.'/'.$ano.'" title="'.$eve.'">'.$i.'</a>';
print '</td>';
$dt++;/*incrementa os dias da semana*/
$qt++;/*quantos eventos tem no mes*/
}else{/*imprime os dias normais*/
print '<td class="td">';
print $i;
print '</td>';
}
}
print '</tr>';
print '</table>';
?>
</body>
</html>Discussão (14)
Carregando comentários...