git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk/src@1 e2b1556b-49f8-d141-9351-52d6861a72d9
960 lines
34 KiB
PHP
960 lines
34 KiB
PHP
<?php
|
|
include_once("./functions_calendario.php");
|
|
include_once("BD.php");
|
|
class Calendario{
|
|
|
|
private $mes;
|
|
private $anio;
|
|
private $diasEspeciales;
|
|
private $back;
|
|
private $locale;
|
|
private $usuario;
|
|
private $festivosNacional = "";
|
|
private $festivosLocales = array();
|
|
private $hexadecimales;
|
|
|
|
private $mesAnt;
|
|
private $anioAnt;
|
|
private $mesSig;
|
|
private $anioSig;
|
|
|
|
|
|
function Calendario($usuario,$mes,$anio,$diasEsp,$back,$locale){
|
|
if($mes < 10){
|
|
//Me aseguro de que no tenga cero delante
|
|
$mes = $mes + 0;
|
|
//Y le pongo el cero delante.
|
|
$mes = "0".$mes;
|
|
}
|
|
$this->mes=$mes;
|
|
$this->anio=$anio;
|
|
$this->diasEspeciales=$diasEsp;
|
|
if(strpos($back,"?")>0)
|
|
$this->back=$back."&";
|
|
else
|
|
$this->back=$back."?";
|
|
$this->locale=$locale;
|
|
$this->usuario=$usuario;
|
|
$this->hexadecimales = array();
|
|
|
|
//calculo el mes y ano del mes anterior
|
|
$mes_anterior = $mes - 1;
|
|
$ano_anterior = $anio;
|
|
if ($mes_anterior==0) {
|
|
$ano_anterior--;
|
|
$mes_anterior=12;
|
|
}
|
|
$this->mesAnt=$mes_anterior;
|
|
$this->anioAnt=$ano_anterior;
|
|
|
|
//calculo el mes y ano del mes siguiente
|
|
$mes_siguiente = $mes + 1;
|
|
$ano_siguiente = $anio;
|
|
if ($mes_siguiente==13) {
|
|
$ano_siguiente++;
|
|
$mes_siguiente=1;
|
|
}
|
|
$this->mesSig=$mes_siguiente;
|
|
$this->anioSig=$ano_siguiente;
|
|
}
|
|
|
|
function getRellenable($parte){
|
|
$tabla=$this->htmlCabecera("500");
|
|
|
|
//Variable para llevar la cuenta del dia actual
|
|
$dia_actual = 1;
|
|
//calculo el numero del dia de la semana del primer dia
|
|
$numero_dia = que_dia_de_semana(1,$this->mes,$this->anio);
|
|
//calculo el ltimo dia del mes
|
|
$ultimo_dia = verifica_long_mes($this->mes,$this->anio);
|
|
|
|
/*
|
|
* PRIMERA FILA
|
|
*/
|
|
$semana= "<tr class=dia>";
|
|
for ($i=0;$i<7;$i++) {
|
|
$horasJob="0";
|
|
if(array_key_exists($dia_actual,$parte)){
|
|
$horasJob=$parte[$dia_actual];
|
|
}
|
|
if($horasJob=="P"){
|
|
$textoDia="<input readonly name=\"d".$dia_actual."\" type=\"text\" value=\"".$horasJob."\" maxlength=\"4\" style=\"width:30px \">";
|
|
} else {
|
|
$textoDia="<input name=\"d".$dia_actual."\" type=\"text\" value=\"".$horasJob."\" maxlength=\"4\" style=\"width:30px \">";
|
|
}
|
|
if ($i < $numero_dia) {
|
|
//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
|
|
$dia = "<td class=dia_vacio ></td>";
|
|
} else {
|
|
$dia="<td";
|
|
// Comprobamos si ese dnia es especial
|
|
if(array_key_exists($dia_actual,$this->diasEspeciales)){
|
|
//Si es dia antes de alta, no poner bgcolor
|
|
if($this->diasEspeciales[$dia_actual]!="7")
|
|
$dia.=" bgcolor=\"".$this->leyenda($this->diasEspeciales[$dia_actual])."\"";
|
|
if(($this->diasEspeciales[$dia_actual]=="3")
|
|
|| ($this->diasEspeciales[$dia_actual]=="4")
|
|
|| ($this->diasEspeciales[$dia_actual]=="7")
|
|
|| ($this->diasEspeciales[$dia_actual]=="5")){
|
|
$textoDia="";
|
|
}
|
|
}
|
|
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$textoDia."</div></td>";
|
|
$dia_actual++;
|
|
}
|
|
$semana.=$dia;
|
|
}
|
|
$tabla.=$semana;
|
|
|
|
/*
|
|
* RESTO DE FILAS
|
|
*/
|
|
$numero_dia = 0;
|
|
while ($dia_actual <= $ultimo_dia) {
|
|
$horasJob="0";
|
|
if(array_key_exists($dia_actual,$parte)){
|
|
$horasJob=$parte[$dia_actual];
|
|
}
|
|
|
|
if($horasJob=="P"){
|
|
$textoDia="<input readonly name=\"d".$dia_actual."\" type=\"text\" value=\"".$horasJob."\" maxlength=\"4\" style=\"width:30px \">";
|
|
} else {
|
|
$textoDia="<input name=\"d".$dia_actual."\" type=\"text\" value=\"".$horasJob."\" maxlength=\"4\" style=\"width:30px \">";
|
|
}
|
|
//si estamos a principio de la semana escribo el <TR>
|
|
if ($numero_dia == 0)
|
|
$semana="<tr align=center class=dia>";
|
|
//si es el ultimo de la semana, me pongo al principio de la semana y escribo el </tr>
|
|
$dia="<td ";
|
|
// Comprobamos si ese dnia es espedia
|
|
if(array_key_exists($dia_actual,$this->diasEspeciales)){
|
|
//Si es dia antes de alta, no poner bgcolor
|
|
if($this->diasEspeciales[$dia_actual]!="7")
|
|
$dia.=" bgcolor=\"".$this->leyenda($this->diasEspeciales[$dia_actual])."\"";
|
|
if(($this->diasEspeciales[$dia_actual]=="3")
|
|
|| ($this->diasEspeciales[$dia_actual]=="4")
|
|
|| ($this->diasEspeciales[$dia_actual]=="7")
|
|
|| ($this->diasEspeciales[$dia_actual]=="5")){
|
|
$textoDia="";
|
|
}
|
|
}
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$textoDia."</div></td>";
|
|
$semana.=$dia;
|
|
|
|
$dia_actual++;
|
|
$numero_dia++;
|
|
if ($numero_dia == 7) {
|
|
$numero_dia = 0;
|
|
$semana.="</tr>";
|
|
$tabla.=$semana;
|
|
}
|
|
}
|
|
/*
|
|
* FINAL niLTIMA FILA
|
|
*/
|
|
|
|
if($numero_dia>0){
|
|
for ($i=$numero_dia;$i<7;$i++) {
|
|
$semana.= "<td class=dia_vacio></td>";
|
|
}
|
|
$tabla.=$semana;
|
|
}
|
|
$tabla.="</table>";
|
|
return $tabla;
|
|
}
|
|
|
|
function getMostrable($parte){
|
|
$tabla=$this->htmlCabecera("500");
|
|
|
|
//Variable para llevar la cuenta del dia actual
|
|
$dia_actual = 1;
|
|
//calculo el numero del dia de la semana del primer dia
|
|
$numero_dia = que_dia_de_semana(1,$this->mes,$this->anio);
|
|
//calculo el ltimo dia del mes
|
|
$ultimo_dia = verifica_long_mes($this->mes,$this->anio);
|
|
|
|
//escribo la primera fila de la semana
|
|
//<div class="nombreDia">14</div><div align="center"><input name="2008-10-29" type="text" value="0" maxlength="2" style="width:20px "></div>
|
|
$semana= "<tr class=dia>";
|
|
for ($i=0;$i<7;$i++) {
|
|
$horasJob="0";
|
|
if(array_key_exists($dia_actual,$parte)){
|
|
$horasJob=$parte[$dia_actual];
|
|
}
|
|
$textoDia=$horasJob;
|
|
if ($i < $numero_dia) {
|
|
//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
|
|
$dia = "<td class=dia_vacio ></td>";
|
|
} else {
|
|
$dia="<td";
|
|
// Comprobamos si ese dnia es espedia
|
|
if(array_key_exists($dia_actual,$this->diasEspeciales)){
|
|
//Si es dia antes de alta, no poner bgcolor
|
|
if($this->diasEspeciales[$dia_actual]!="7")
|
|
$dia.=" bgcolor=\"".$this->leyenda($this->diasEspeciales[$dia_actual])."\"";
|
|
if(($this->diasEspeciales[$dia_actual]=="3")
|
|
|| ($this->diasEspeciales[$dia_actual]=="4")
|
|
|| ($this->diasEspeciales[$dia_actual]=="7")
|
|
|| ($this->diasEspeciales[$dia_actual]=="5")){
|
|
$textoDia="";
|
|
}
|
|
}
|
|
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$textoDia."</div></td>";
|
|
$dia_actual++;
|
|
}
|
|
$semana.=$dia;
|
|
}
|
|
$tabla.=$semana;
|
|
|
|
//recorro todos los dems das hasta el final del mes
|
|
$numero_dia = 0;
|
|
while ($dia_actual <= $ultimo_dia) {
|
|
$horasJob="0";
|
|
if(array_key_exists($dia_actual,$parte)){
|
|
$horasJob=$parte[$dia_actual];
|
|
}
|
|
$textoDia=$horasJob;
|
|
if ($numero_dia == 0)
|
|
$semana="<tr align=center class=dia>";
|
|
$dia="<td ";
|
|
if(array_key_exists($dia_actual,$this->diasEspeciales)){
|
|
//Si es dia antes de alta, no poner bgcolor
|
|
if($this->diasEspeciales[$dia_actual]!="7")
|
|
$dia.=" bgcolor=\"".$this->leyenda($this->diasEspeciales[$dia_actual])."\"";
|
|
if(($this->diasEspeciales[$dia_actual]=="3")
|
|
|| ($this->diasEspeciales[$dia_actual]=="4")
|
|
|| ($this->diasEspeciales[$dia_actual]=="7")
|
|
|| ($this->diasEspeciales[$dia_actual]=="5")){
|
|
$textoDia="";
|
|
}
|
|
}
|
|
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$textoDia."</div></td>";
|
|
$semana.=$dia;
|
|
|
|
$dia_actual++;
|
|
$numero_dia++;
|
|
if ($numero_dia == 7) {
|
|
$numero_dia = 0;
|
|
$semana.="</tr>";
|
|
$tabla.=$semana;
|
|
}
|
|
}
|
|
//Comprobando terminar el calendario del mes
|
|
if($numero_dia>0){
|
|
for ($i=$numero_dia;$i<7;$i++) {
|
|
$semana.= "<td class=dia_vacio></td>";
|
|
}
|
|
$tabla.=$semana;
|
|
}
|
|
$tabla.="</table>";
|
|
return $tabla;
|
|
}
|
|
|
|
function getSoliVacaciones($mes){
|
|
$tabla=$this->htmlCabecera("500");
|
|
|
|
//Variable para llevar la cuenta del dia actual
|
|
$dia_actual = 1;
|
|
//calculo el numero del dia de la semana del primer dia
|
|
$numero_dia = que_dia_de_semana(1,$this->mes,$this->anio);
|
|
//calculo el ltimo dia del mes
|
|
$ultimo_dia = verifica_long_mes($this->mes,$this->anio);
|
|
|
|
//escribo la primera fila de la semana
|
|
$semana= "<tr class=dia>";
|
|
for ($i=0;$i<7;$i++) {
|
|
// Comprobamos si ese dnia es puede marcar
|
|
if($this->puedeSolicitarVacaciones($dia_actual))
|
|
$textoDia="<input type=\"checkbox\" name=\"d".$dia_actual."-".$mes."\" value=\"on\">";
|
|
elseif ($this->puedeSolicitarAnulacionVacaciones($dia_actual)) {
|
|
// Puedo pedir anulacinin
|
|
$textoDia="<input type=\"checkbox\" name=\"a".$dia_actual."-".$mes."\" value=\"on\">";
|
|
} elseif ($this->puedeSolicitarAnulacionSolicitud($dia_actual)) {
|
|
$textoDia="<input type=\"checkbox\" name=\"e".$dia_actual."-".$mes."\" value=\"on\">";
|
|
} else{
|
|
$textoDia="";
|
|
}
|
|
|
|
if ($i < $numero_dia) {
|
|
//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
|
|
$dia = "<td class=dia_vacio ></td>";
|
|
} else {
|
|
$dia="<td";
|
|
// Comprobamos si ese dnia es especial
|
|
if(array_key_exists($dia_actual,$this->diasEspeciales)){
|
|
//Si es dia antes de alta, no poner bgcolor
|
|
if($this->diasEspeciales[$dia_actual]!="7")
|
|
$dia.=" bgcolor=\"".$this->leyenda($this->diasEspeciales[$dia_actual])."\"";
|
|
}
|
|
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$textoDia."</div></td>";
|
|
$dia_actual++;
|
|
}
|
|
$semana.=$dia;
|
|
}
|
|
$tabla.=$semana;
|
|
|
|
//recorro todos los dems das hasta el final del mes
|
|
$numero_dia = 0;
|
|
while ($dia_actual <= $ultimo_dia) {
|
|
// Comprobamos si ese dnia es puede marcar
|
|
if($this->puedeSolicitarVacaciones($dia_actual))
|
|
$textoDia="<input type=\"checkbox\" name=\"d".$dia_actual."-".$mes."\" value=\"on\">";
|
|
elseif ($this->puedeSolicitarAnulacionVacaciones($dia_actual)) {
|
|
// Puedo pedir anulacinin
|
|
$textoDia="<input type=\"checkbox\" name=\"a".$dia_actual."-".$mes."\" value=\"on\">";
|
|
} elseif ($this->puedeSolicitarAnulacionSolicitud($dia_actual)) {
|
|
$textoDia="<input type=\"checkbox\" name=\"e".$dia_actual."-".$mes."\" value=\"on\">";
|
|
}else {
|
|
$textoDia="";
|
|
}
|
|
if ($numero_dia == 0)
|
|
$semana="<tr align=center class=dia>";
|
|
$dia="<td ";
|
|
if(array_key_exists($dia_actual,$this->diasEspeciales)){
|
|
//Si es dia antes de alta, no poner bgcolor
|
|
if($this->diasEspeciales[$dia_actual]!="7")
|
|
$dia.=" bgcolor=\"".$this->leyenda($this->diasEspeciales[$dia_actual])."\"";
|
|
}
|
|
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$textoDia."</div></td>";
|
|
$semana.=$dia;
|
|
|
|
$dia_actual++;
|
|
$numero_dia++;
|
|
if ($numero_dia == 7) {
|
|
$numero_dia = 0;
|
|
$semana.="</tr>";
|
|
$tabla.=$semana;
|
|
}
|
|
}
|
|
//Comprobando terminar el calendario del mes
|
|
if($numero_dia>0){
|
|
for ($i=$numero_dia;$i<7;$i++) {
|
|
$semana.= "<td class=dia_vacio></td>";
|
|
}
|
|
$tabla.=$semana;
|
|
}
|
|
$tabla.="</table>";
|
|
return $tabla;
|
|
}
|
|
|
|
function getMiniAgenda($diaVer){
|
|
$tabla=$this->htmlCabeceraMini($diaVer);
|
|
|
|
//Variable para llevar la cuenta del dia actual
|
|
$dia_actual = 1;
|
|
//calculo el numero del dia de la semana del primer dia
|
|
$numero_dia = que_dia_de_semana(1,$this->mes,$this->anio);
|
|
//calculo el ltimo dia del mes
|
|
$ultimo_dia = verifica_long_mes($this->mes,$this->anio);
|
|
|
|
//escribo la primera fila de la semana
|
|
$semana= "<tr class=\"semana\">";
|
|
for ($i=0;$i<7;$i++) {
|
|
$diaVista=mktime(0,0,0,$this->mes,$dia_actual,$this->anio);
|
|
// Comprobamos si ese dnia es puede marcar
|
|
if ($i < $numero_dia) {
|
|
//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
|
|
$dia = "<td class=\"vacio\"></td>";
|
|
} else {
|
|
$dia="<td";
|
|
// Comprobamos si ese dnia es el que estamos viendo
|
|
if (($this->anio==date("Y",$diaVer)) && ($this->mes==date("m",$diaVer)) && ($dia_actual==date("j",$diaVer))) {
|
|
// Es el dnia que estamos viendo
|
|
$dia.=" class=\"vista\" ";
|
|
} elseif (($this->anio==date("Y")) && ($this->mes==date("m")) && ($dia_actual==date("j"))) {
|
|
// Es hoy
|
|
$dia.=" class=\"hoy\" ";
|
|
}elseif ($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual)) {
|
|
// Es finde
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
}
|
|
$dia.=" align=\"center\" valign=\"top\"><a href=\"agenda.php?dia=".$dia_actual."&mes=".$this->mes."&anio=".$this->anio."\"><span style=\"color:#000000;\">".$dia_actual."</span></a></td>";
|
|
$dia_actual++;
|
|
}
|
|
$semana.=$dia;
|
|
}
|
|
$tabla.=$semana;
|
|
|
|
//recorro todos los dems das hasta el final del mes
|
|
$numero_dia = 0;
|
|
while ($dia_actual <= $ultimo_dia) {
|
|
$diaVista=mktime(0,0,0,$this->mes,$dia_actual,$this->anio);
|
|
if ($numero_dia == 0)
|
|
$semana="<tr class=\"semana\">";
|
|
$dia="<td";
|
|
// Comprobamos si ese dnia es el que estamos viendo
|
|
if (($this->anio==date("Y",$diaVer)) && ($this->mes==date("m",$diaVer)) && ($dia_actual==date("j",$diaVer))) {
|
|
// Es el dnia que estamos viendo
|
|
$dia.=" class=\"vista\" ";
|
|
} elseif (($this->anio==date("Y")) && ($this->mes==date("m")) && ($dia_actual==date("j"))) {
|
|
// Es hoy
|
|
$dia.=" class=\"hoy\" ";
|
|
}elseif ($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual)) {
|
|
// Es finde
|
|
$dia.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
}
|
|
$dia.=" align=\"center\" valign=\"top\"><a href=\"agenda.php?dia=".$dia_actual."&mes=".$this->mes."&anio=".$this->anio."\"><span style=\"color:#000000;\">".$dia_actual."</span></a></td>";
|
|
$semana.=$dia;
|
|
|
|
$dia_actual++;
|
|
$numero_dia++;
|
|
if ($numero_dia == 7) {
|
|
$numero_dia = 0;
|
|
$semana.="</tr>";
|
|
$tabla.=$semana;
|
|
}
|
|
}
|
|
//Comprobando terminar el calendario del mes
|
|
if($numero_dia>0){
|
|
for ($i=$numero_dia;$i<7;$i++) {
|
|
$semana.= "<td class=dia_vacio></td>";
|
|
}
|
|
$tabla.=$semana;
|
|
}
|
|
$tabla.="</table>";
|
|
return $tabla;
|
|
}
|
|
|
|
private function htmlCabeceraMini($diaVer){
|
|
$nombre_mes = nombre_mes($this->mes);
|
|
$tabla="<table width=\"200px\" border=\"1\" cellpadding=\"1\" cellspacing=\"0\" class=\"miniCalendario\">";
|
|
|
|
// Flechas y nombre del mes
|
|
$fila= "<tr>";
|
|
if($this->back!="?")
|
|
$fila.="<th><a href=\"".$this->back."mesCal=".$this->mesAnt."&anioCal=".$this->anioAnt."&dia=".date("j",$diaVer)."&mes=".date("m",$diaVer)."&anio=".date("Y",$diaVer)."\"><img src=\"css/flecha_menos.gif\" /></a></th>";
|
|
else
|
|
$fila.="<th></th>";
|
|
$fila.="<th colspan=\"5\"><div align=\"center\">".$nombre_mes." de ".$this->anio."</div></th>";
|
|
if($this->back!="?")
|
|
$fila.="<th align=\"right\"><a href=\"".$this->back."mesCal=".$this->mesSig."&anioCal=".$this->anioSig."&dia=".date("j",$diaVer)."&mes=".date("m",$diaVer)."&anio=".date("Y",$diaVer)."\"><img src=\"css/flecha_mas.gif\" /></a></th>";
|
|
else
|
|
$fila.="<th></th>";
|
|
$fila.="</tr>";
|
|
$tabla.=$fila;
|
|
|
|
// Nombre de los dnias de la semana
|
|
$diasSemana= "<tr class=\"nombreSemana\">" .
|
|
" <td align=center width=\"14%\">L</td>" .
|
|
" <td align=center width=\"14%\">M</td>" .
|
|
" <td align=center width=\"14%\">X</td>" .
|
|
" <td align=center width=\"14%\">J</td>" .
|
|
" <td align=center width=\"14%\">V</td>" .
|
|
" <td align=center width=\"14%\">S</td>" .
|
|
" <td align=center width=\"14%\">D</td>" .
|
|
"</tr>";
|
|
$tabla.=$diasSemana;
|
|
return $tabla;
|
|
}
|
|
private function htmlCabecera($tamano){
|
|
$nombre_mes = nombre_mes($this->mes);
|
|
if($tamano=="200")
|
|
$classe="class=\"miniCalendario\"";
|
|
else
|
|
$classe="";
|
|
$tabla="<table width=\"".$tamano."px\" border=\"1\" cellpadding=\"1\" cellspacing=\"0\" ".$classe.">";
|
|
|
|
// Flechas y nombre del mes
|
|
$fila= "<tr class=\"encabezado\">";
|
|
if($this->back!="?")
|
|
$fila.="<td><a href=\"".$this->back."mes=".$this->mesAnt."&anio=".$this->anioAnt."\"><img src=\"css/flecha_menos.gif\" /></a></td>";
|
|
else
|
|
$fila.="<td></td>";
|
|
$fila.="<td colspan=\"5\"><div align=\"center\">".$nombre_mes." de ".$this->anio."</div></td>";
|
|
if($this->back!="?")
|
|
$fila.="<td align=\"right\"><a href=\"".$this->back."mes=".$this->mesSig."&anio=".$this->anioSig."\"><img src=\"css/flecha_mas.gif\" /></a></td>";
|
|
else
|
|
$fila.="<td></td>";
|
|
$fila.="</tr>";
|
|
$tabla.=$fila;
|
|
|
|
// Nombre de los dnias de la semana
|
|
$diasSemana= "<tr class=fondo>" .
|
|
" <td align=center width=\"14%\"> ".$this->locale['050']."</td>" .
|
|
" <td align=center width=\"14%\">".$this->locale['051']."</td>" .
|
|
" <td align=center width=\"14%\">".$this->locale['052']."</td>" .
|
|
" <td align=center width=\"14%\">".$this->locale['053']."</td>" .
|
|
" <td align=center width=\"14%\">".$this->locale['054']."</td>" .
|
|
" <td align=center width=\"14%\">".$this->locale['055']."</td>" .
|
|
" <td align=center width=\"14%\">".$this->locale['056']."</td>" .
|
|
"</tr>";
|
|
$tabla.=$diasSemana;
|
|
return $tabla;
|
|
}
|
|
|
|
function puedeSolicitarVacaciones($dia){
|
|
// Comprobamos que el dnia sea posteior a dos desde hoy
|
|
$diaComprobar = mktime(0,0,0,$this->mes,$dia,$this->anio);
|
|
$frontera=mktime (0,0,0,date("m"),date("d")+2,date("Y"));
|
|
if($frontera<$diaComprobar){
|
|
// Comprobamso que no sea fin de semana
|
|
if(!($this->esFestivo($this->usuario->getValor("localidad_trabajo"),date("j",$diaComprobar)))){
|
|
//Si se solicita para este anio o para el prniximo dentro del plazo, todo ok:
|
|
if(($this->anio == date("Y")) || (($this->anio == date("Y") + 1) && (fecha_valida(date("Y")."-12-15") <= 0))){
|
|
if(array_key_exists($dia,$this->diasEspeciales)){
|
|
if($this->diasEspeciales[$dia]=="2"){
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else
|
|
return true;
|
|
}else
|
|
return false;
|
|
}else
|
|
return false;
|
|
} else
|
|
return false;
|
|
}
|
|
function puedeSolicitarAnulacionVacaciones($dia){
|
|
// Comprobamos que el dnia sea posteior a dos desde hoy
|
|
$diaComprobar = mktime(0,0,0,$this->mes,$dia,$this->anio);
|
|
$frontera=mktime (0,0,0,date("m"),date("d")+2,date("Y"));
|
|
if($frontera<$diaComprobar){
|
|
// Comprobamso que no sea fin de semana
|
|
if(!($this->esFestivo($this->usuario->getValor("localidad_trabajo"),date("j",$diaComprobar)))){
|
|
//Si se solicita para este anio o para el prniximo dentro del plazo, todo ok:
|
|
if(($this->anio == date("Y")) || (($this->anio == date("Y") + 1) && (fecha_valida(date("Y")."-12-15") <= 0))){
|
|
if(array_key_exists($dia,$this->diasEspeciales)){
|
|
if($this->diasEspeciales[$dia]=="5"){
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else
|
|
return false;
|
|
}else
|
|
return false;
|
|
}else
|
|
return false;
|
|
} else
|
|
return false;
|
|
}
|
|
|
|
function puedeSolicitarAnulacionSolicitud($dia){
|
|
// Comprobamos que el dnia sea posteior a 15 desde hoy
|
|
$diaComprobar = mktime(0,0,0,$this->mes,$dia,$this->anio);
|
|
$frontera=mktime (0,0,0,date("m"),date("d")+15,date("Y"));
|
|
if($frontera<$diaComprobar){
|
|
// Comprobamos que no sea fin de semana
|
|
if(!($this->esFestivo($this->usuario->getValor("localidad_trabajo"),date("j",$diaComprobar)))){
|
|
//Si se solicita para este anio o para el prniximo dentro del plazo, todo ok:
|
|
if(($this->anio == date("Y")) || (($this->anio == date("Y") + 1) && (fecha_valida(date("Y")."-12-15") <= 0))){
|
|
if(array_key_exists($dia,$this->diasEspeciales)){
|
|
if($this->diasEspeciales[$dia]=="3"){
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
} else
|
|
return false;
|
|
}else
|
|
return false;
|
|
}else
|
|
return false;
|
|
} else
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Asigna los festivos nacionales.
|
|
* @param $dias - Array con los festivos nacionales.
|
|
* @throws Lanza varias excepciones para casos no permitidos o de error.
|
|
*/
|
|
public function setFestivosNacional($dias){
|
|
if($this->usuario->tieneRol(4)){
|
|
$this->getFestivosNacional();
|
|
//Inserto los nuevos:
|
|
foreach($dias as $dia){
|
|
//Si no estni, lo inserto.
|
|
if(!in_array($dia, $this->festivosNacional)){
|
|
$this->addFestivoNacional($dia);
|
|
}
|
|
}
|
|
//Borro los que ya no estnin:
|
|
$this->festivosNacional = $this->quitaCeros($this->festivosNacional);
|
|
$viejos = array_diff($this->festivosNacional, $dias);
|
|
if(count($viejos) > 0){
|
|
$consulta = "DELETE FROM festivos_nacional WHERE id IN (";
|
|
foreach($viejos as $viejo){
|
|
$fecha = $this->anio."-".$this->mes."-".$viejo;
|
|
$consulta .= "'".$fecha."',";
|
|
}
|
|
//Quitamos la niltima coma
|
|
if ($consulta{strlen($consulta) - 1} == ",")
|
|
$consulta = substr($consulta,0,strlen($consulta) - 1);
|
|
|
|
$consulta .= ")";
|
|
|
|
$bd = new BD();
|
|
if($bd->execQuery($consulta)){
|
|
$this->festivosNacional = $dias;
|
|
}else{
|
|
$error = $this->locale['bd'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
}
|
|
}else{
|
|
$error = $this->locale['4043'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Aniade un festivo nacional.
|
|
* @param $dia - dnia a asignar
|
|
* @return true si se asignni correctamente y false en caso contrario.
|
|
* @throws Lanza excepcinin si el usuario no tiene permisos o el dnia no es vnilido.
|
|
*/
|
|
private function addFestivoNacional($dia){
|
|
if($this->usuario->tieneRol(4)){
|
|
if(($dia > 0) && ($dia <= 31)){
|
|
if($dia < 10){
|
|
$dia = $dia * 1;
|
|
$dia = "0".$dia;
|
|
}
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|
$consulta = "INSERT INTO festivos_nacional VALUES ('".$fecha."')";
|
|
$bd = new BD();
|
|
if($bd->execQuery($consulta)){
|
|
$this->festivosNacional[] = $dia;
|
|
}else{
|
|
$error = $this->locale['bd'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
}else{
|
|
$error = $this->locale['4044'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
}else{
|
|
$error = $this->locale['4043'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
* Asigna los festivos locales.
|
|
* @param $dias - Array con los festivos locales.
|
|
* @param $localidad - Localidad donde asignar los festivos.
|
|
* @throws Lanza varias excepciones para casos no permitidos o de error.
|
|
*/
|
|
public function setFestivosLocal($dias, $localidad){
|
|
if($this->usuario->tieneRol(4)){
|
|
$actuales = $this->getFestivosLocal($localidad);
|
|
//Inserto los nuevos:
|
|
foreach($dias as $dia){
|
|
//Si no estni, lo inserto.
|
|
if(!in_array($dia, $actuales)){
|
|
$this->addFestivoLocal($dia, $localidad);
|
|
}
|
|
}
|
|
//Borro los que ya no estnin:
|
|
$actuales = $this->quitaCeros($actuales);
|
|
$viejos = array_diff($actuales, $dias);
|
|
/*echo "<br>Actualmente hay:<br>";
|
|
print_r($actuales);
|
|
echo "<br>Y tengo que dejar:<br>";
|
|
print_r($dias);
|
|
echo "<br>Con lo cual elimino:<br>";
|
|
print_r($viejos);*/
|
|
if(count($viejos) > 0){
|
|
$consulta = "DELETE FROM festivos_local WHERE localidad = '".$localidad."' AND fecha IN (";
|
|
foreach($viejos as $viejo){
|
|
$fecha = $this->anio."-".$this->mes."-".$viejo;
|
|
$consulta .= "'".$fecha."',";
|
|
}
|
|
//Quitamos la niltima coma
|
|
if ($consulta{strlen($consulta) - 1} == ",")
|
|
$consulta = substr($consulta,0,strlen($consulta) - 1);
|
|
|
|
$consulta .= ")";
|
|
$bd = new BD();
|
|
if(!$bd->execQuery($consulta)){
|
|
$error = $this->locale['bd'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
}
|
|
}else{
|
|
$error = $this->locale['4043'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Aniade un festivo local.
|
|
* @param $dia - dnia a asignar
|
|
* @param $localidad - localidad a la que asignar el dnia festivo.
|
|
* @return true si se asignni correctamente y false en caso contrario.
|
|
* @throws Lanza excepcinin si el usuario no tiene permisos o el dnia no es vnilido.
|
|
*/
|
|
private function addFestivoLocal($dia, $localidad){
|
|
if($this->usuario->tieneRol(4)){
|
|
if(($dia > 0) && ($dia <= 31)){
|
|
if($dia < 10){
|
|
$dia = $dia * 1;
|
|
$dia = "0".$dia;
|
|
}
|
|
$fecha = $this->anio."-".$this->mes."-".$dia;
|
|
$consulta = "INSERT INTO festivos_local (localidad, fecha) VALUES ('".$localidad."', '".$fecha."')";
|
|
$bd = new BD();
|
|
if(!$bd->execQuery($consulta)){
|
|
$error = $this->locale['bd'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
}else{
|
|
$error = $this->locale['4044'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
}else{
|
|
$error = $this->locale['4043'];
|
|
throw new Exception($error);
|
|
return false;
|
|
exit;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
function getFestivosNacional(){
|
|
if($this->festivosNacional == ""){
|
|
$this->festivosNacional = array();
|
|
$fecha = $this->anio."-".$this->mes;
|
|
$consulta = "SELECT id FROM festivos_nacional WHERE id LIKE '".$fecha."-%'";
|
|
$bd = new BD();
|
|
$array = $bd->arrayQuery($consulta, "id");
|
|
foreach($array as $elem){
|
|
$dia = explode("-", $elem);
|
|
$this->festivosNacional[] = $dia[2]+0;
|
|
}
|
|
}
|
|
|
|
return $this->festivosNacional;
|
|
}
|
|
|
|
function getFestivosLocal($localidad){
|
|
if(!array_key_exists($localidad, $this->festivosLocales)){
|
|
$dias = array();
|
|
|
|
$fecha = $this->anio."-".$this->mes;
|
|
$consulta = "SELECT fecha FROM festivos_local WHERE fecha LIKE '".$fecha."-%' AND localidad = '".$localidad."'";
|
|
$bd = new BD();
|
|
$array = $bd->arrayQuery($consulta, "fecha");
|
|
foreach($array as $elem){
|
|
$dia = explode("-", $elem);
|
|
$dias[] = $dia[2];
|
|
}
|
|
$this->festivosLocales[$localidad] = $dias;
|
|
}
|
|
|
|
return $this->festivosLocales[$localidad];
|
|
}
|
|
|
|
function esFestivo($localidad, $dia){
|
|
$nacional = $this->esFestivoNacional($dia);
|
|
/*$local = $this->esFestivoLocal($localidad, $dia);
|
|
$finde = $this->esFinde($dia);*/
|
|
$local = false;
|
|
$finde = false;
|
|
if(!$nacional && $localidad != ""){
|
|
$local = $this->esFestivoLocal($localidad, $dia);
|
|
if(!$local){
|
|
$finde = $this->esFinde($dia);
|
|
}
|
|
}else{
|
|
$finde = $this->esFinde($dia);
|
|
}
|
|
|
|
if($nacional || $local || $finde){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function esFestivoNacional($dia){
|
|
$festivos = $this->getFestivosNacional();
|
|
return in_array($dia, $festivos);
|
|
}
|
|
|
|
function esFestivoLocal($localidad, $dia){
|
|
$festivos = $this->getFestivosLocal($localidad);
|
|
return in_array($dia, $festivos);
|
|
}
|
|
|
|
private function esFinde($dia){
|
|
$d = date('N', mktime(0,0,0,$this->mes,$dia,$this->anio));
|
|
|
|
if(($d != 6) && ($d != 7)){
|
|
return false;
|
|
}else{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
function leyenda($cod){
|
|
if(!array_key_exists($cod, $this->hexadecimales)){
|
|
$consulta="SELECT hexadecimal FROM leyenda WHERE cod='".$cod."'";
|
|
$bd=new BD();
|
|
$valor= $bd->getCampo($consulta);
|
|
$this->hexadecimales[$cod] = $valor;
|
|
}
|
|
return $this->hexadecimales[$cod];
|
|
}
|
|
|
|
/**
|
|
* Muestra un calendario configurable, mostrando los festivos nacionales y locales
|
|
* del usuario.
|
|
* Si el dnia estni dentro del array $diasEsp, se muestra el texto que hay, sino se deja en blanco
|
|
*
|
|
* @param $diasEsp : Array con los dnias, de la forma array("1" => array("color" => "codigo color","texto" => "texto interior"))
|
|
* @param $tipo (g|p) : g = Grande | p = Pequenio
|
|
*/
|
|
function getCalendar($diasEsp,$tipo){
|
|
switch ($tipo) {
|
|
case "p": // Pequenio
|
|
$tabla = $this->htmlCabecera("200");
|
|
break;
|
|
case "g": // Grande
|
|
$tabla = $this->htmlCabecera("500");
|
|
break;
|
|
default: // Otro valor = grande
|
|
$tabla = $this->htmlCabecera("500");
|
|
break;
|
|
}
|
|
// Variable para llevar la cuenta del dia actual
|
|
$dia_actual = 1;
|
|
//calculo el numero del dia de la semana del primer dia
|
|
$numero_dia = que_dia_de_semana(1,$this->mes,$this->anio);
|
|
//calculo el ltimo dia del mes
|
|
$ultimo_dia = verifica_long_mes($this->mes,$this->anio);
|
|
|
|
/*
|
|
* PRIMERA FILA
|
|
*/
|
|
$semana= "<tr class=dia>";
|
|
for ($i=0;$i<7;$i++) {
|
|
if ($i < $numero_dia) {
|
|
//si el dia de la semana i es menor que el numero del primer dia de la semana no pongo nada en la celda
|
|
$dia = "<td class=dia_vacio ></td>";
|
|
} else {
|
|
$texto="";
|
|
$bgcolor="";
|
|
if(array_key_exists($dia_actual,$diasEsp)){
|
|
$texto=$diasEsp[$dia_actual]["texto"];
|
|
if($diasEsp[$dia_actual]["color"]!="")
|
|
$bgcolor=" bgcolor=\"".$diasEsp[$dia_actual]["color"]."\"";
|
|
}
|
|
$dia="<td";
|
|
// Comprobamos si ese dnia es festivo
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$bgcolor.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
$dia.=$bgcolor;
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$texto."</div></td>";
|
|
$dia_actual++;
|
|
}
|
|
$semana.=$dia;
|
|
}
|
|
$tabla.=$semana;
|
|
|
|
/*
|
|
* RESTO DE FILAS
|
|
*/
|
|
$numero_dia = 0;
|
|
while ($dia_actual <= $ultimo_dia) {
|
|
$texto="";
|
|
$bgcolor="";
|
|
//si estamos a principio de la semana escribo el <TR>
|
|
if ($numero_dia == 0)
|
|
$semana="<tr align=center class=dia>";
|
|
//si es el ultimo de la semana, me pongo al principio de la semana y escribo el </tr>
|
|
$dia="<td ";
|
|
// Comprobamos si ese dnia es espedia
|
|
if(array_key_exists($dia_actual,$diasEsp)){
|
|
$texto=$diasEsp[$dia_actual]["texto"];
|
|
if($diasEsp[$dia_actual]["color"]!="")
|
|
$bgcolor=" bgcolor=\"".$diasEsp[$dia_actual]["color"]."\"";
|
|
}
|
|
// Comprobamos si ese dnia es festivo
|
|
if($this->esFestivo($this->usuario->getValor("localidad_trabajo"),$dia_actual))
|
|
$bgcolor.=" bgcolor=\"".$this->leyenda("1")."\"";
|
|
$dia.=$bgcolor;
|
|
$dia.=" align=\"center\" valign=\"top\" style=\"padding:0px; margin:0px\"><div class=\"nombreDia\">".$dia_actual."</div><div <div class=\"textoDia\">".$texto."</div></td>";
|
|
$semana.=$dia;
|
|
|
|
$dia_actual++;
|
|
$numero_dia++;
|
|
if ($numero_dia == 7) {
|
|
$numero_dia = 0;
|
|
$semana.="</tr>";
|
|
$tabla.=$semana;
|
|
}
|
|
}
|
|
/*
|
|
* FINAL niLTIMA FILA
|
|
*/
|
|
|
|
if($numero_dia>0){
|
|
for ($i=$numero_dia;$i<7;$i++) {
|
|
$semana.= "<td class=dia_vacio></td>";
|
|
}
|
|
$tabla.=$semana;
|
|
}
|
|
$tabla.="</table>";
|
|
return $tabla;
|
|
}
|
|
|
|
private function quitaCeros($array){
|
|
$res = array();
|
|
foreach($array as $elem){
|
|
$res[] = $elem + 0;
|
|
}
|
|
return $res;
|
|
}
|
|
}
|
|
|
|
?>
|