2011-04-04 15:16:10 +00:00
< ? php
/* Calcula los d<> as de vacaciones que corresponden a una fecha de alta*/
function calcula_vacaciones ( $dia , $mes , $anyo ){
$fecha = mktime ( 0 , 0 , 0 , $mes , $dia , $anyo );
$dias_mes = date ( 't' , $fecha );
$fiestas = constante ( " fiestas " );
if ( $anyo < date ( 'Y' )) return $fiestas ;
$fiestas = (( $fiestas / 12 ) * ( 12 - $mes )) + (( $fiestas / 12 / $dias_mes ) * ( $dias_mes - $dia ));
return round ( $fiestas );
}
/* Indica la fecha actual */
function fecha (){
$mes = date ( " n " );
$mesArray = array ( 1 => " Enero " , 2 => " Febrero " , 3 => " Marzo " , 4 => " Abril " , 5 => " Mayo " , 6 => " Junio " , 7 => " Julio " , 8 => " Agosto " , 9 => " Septiembre " , 10 => " Octubre " , 11 => " Noviembre " , 12 => " Diciembre " );
$semana = date ( " D " );
$semanaArray = array ( " Mon " => " Lunes " , " Tue " => " Martes " , " Wed " => " Miercoles " , " Thu " => " Jueves " , " Fri " => " Viernes " , " Sat " => " Sábado " , " Sun " => " Domingo " , );
$mesReturn = $mesArray [ $mes ];
$semanaReturn = $semanaArray [ $semana ];
$dia = date ( " d " );
$ano = date ( " Y " );
return $semanaReturn . " " . $dia . " de " . $mesReturn . " de " . $ano ;
}
function nombre_mes ( $mes ){
include LOCALE . LOCALESET . " lenguaje.php " ;
switch ( $mes ){
case 1 :
$nombre_mes = $locale [ '064' ];
break ;
case 2 :
$nombre_mes = $locale [ '065' ];
break ;
case 3 :
$nombre_mes = $locale [ '066' ];
break ;
case 4 :
$nombre_mes = $locale [ '067' ];
break ;
case 5 :
$nombre_mes = $locale [ '068' ];
break ;
case 6 :
$nombre_mes = $locale [ '069' ];
break ;
case 7 :
$nombre_mes = $locale [ '070' ];
break ;
case 8 :
$nombre_mes = $locale [ '071' ];
break ;
case 9 :
$nombre_mes = $locale [ '072' ];
break ;
case 10 :
$nombre_mes = $locale [ '073' ];
break ;
case 11 :
$nombre_mes = $locale [ '074' ];
break ;
case 12 :
$nombre_mes = $locale [ '075' ];
break ;
}
return $nombre_mes ;
}
function nombre_dia ( $dia ){
include LOCALE . LOCALESET . " lenguaje.php " ;
switch ( $dia ){
case 1 :
$nombre_dia = $locale [ '057' ];
break ;
case 2 :
$nombre_dia = $locale [ '058' ];
break ;
case 3 :
$nombre_dia = $locale [ '059' ];
break ;
case 4 :
$nombre_dia = $locale [ '060' ];
break ;
case 5 :
$nombre_dia = $locale [ '061' ];
break ;
case 6 :
$nombre_dia = $locale [ '062' ];
break ;
case 7 :
$nombre_dia = $locale [ '063' ];
break ;
}
return $nombre_dia ;
}
//Retorna el nmero de la semana en donde se encuentra un determinado da.
function que_dia_de_semana ( $dia , $mes , $ano ){
$numerodiasemana = date ( 'w' , mktime ( 0 , 0 , 0 , $mes , $dia , $ano ));
if ( $numerodiasemana == 0 )
$numerodiasemana = 6 ;
else
$numerodiasemana -- ;
return $numerodiasemana ;
}
//Revisa para tener los meses completos
function verifica_long_mes ( $mes , $ano ){
$ultimo_dia = 28 ;
while ( checkdate ( $mes , $ultimo_dia + 1 , $ano )){
$ultimo_dia ++ ;
}
return $ultimo_dia ;
}
//Muestra una fecha en formato mes-dia
function ver_fecha ( $fecha ){
$res = explode ( " - " , $fecha );
return $res [ 1 ] . " de " . nombre_mes ( $res [ 0 ]);
}
//Muestra una fecha en formato dia-mes-a<> o
function ver_fecha_larga ( $fecha ){
include LOCALE . LOCALESET . " lenguaje.php " ;
$res = explode ( " - " , $fecha );
2011-06-08 17:20:22 +00:00
$hora = explode ( " " , $res [ 2 ]);
return $hora [ 0 ] . " de " . nombre_mes ( $res [ 1 ]) . " del " . $locale [ '329' ] . " " . $res [ 0 ] . " ( " . $hora [ 1 ] . " ) " ;
2011-04-04 15:16:10 +00:00
}
//Muestra una fecha en formato dia-mes-a<> o
function ver_fecha_corta ( $fecha ){
include LOCALE . LOCALESET . " lenguaje.php " ;
$res = explode ( " - " , $fecha );
return $res [ 2 ] . " de " . nombre_mes ( $res [ 1 ]) . " del " . $res [ 0 ];
}
//Muestra el calendario festivo actualizable.
function actualiza_festivos ( $dia , $mes , $ano , $localidad ){
if ( $dia < 10 ) $fecha = $ano . " - " . $mes . " -0 " . $dia ;
else $fecha = $ano . " - " . $mes . " - " . $dia ;
$d = que_dia_de_semana ( $dia , $mes , $ano );
if (( $d != 6 ) && ( $d != 5 )){
$festivo = festivo_global ( $dia , $mes , $ano , $localidad );
if (( $festivo == $localidad && $festivo != " " )){
return " <td class=dia_festivo> $dia
< input type = 'checkbox' name = fecha [] value = '$fecha' checked >
< input type = 'hidden' name = fecha_del [] value = '$fecha' ></ td > " ;
} else if (( $festivo == " nacional " ) && $localidad == " " ){
return " <td class=dia_festivo> $dia
< input type = 'checkbox' name = fecha [] value = '$fecha' checked >
< input type = 'hidden' name = fecha_del [] value = '$fecha' ></ td > " ;
} else if (( $festivo == " nacional " ) && $localidad != " " ){
return " <td class=dia_festivo> $dia </td> " ;
} else {
return " <td class=dia_laboral> $dia
< input type = 'checkbox' name = fecha [] value = '$fecha' >
< input type = 'hidden' name = fecha_del [] value = '$fecha' ></ td > " ;
}
} else {
return " <td class=dia_festivo> $dia </td> " ;
}
return " <td class=dia_laboral> $dia </td> " ;
}
//Muestra los acontecimientos de un d<> a
function ver_dia ( $dia , $mes , $ano , $oid , $editable ){
actualiza_rechazados ( $oid );
if ( $dia < 10 ) $fecha = $ano . " - " . $mes . " -0 " . $dia ;
else $fecha = $ano . " - " . $mes . " - " . $dia ;
if ( $link = conectar ()){
$festivo = festivo ( $dia , $mes , $ano , $oid );
$vacaciones = vacaciones ( $dia , $mes , $ano , $oid );
//Compruebo si hay parte del d<> a
$consulta = " select * from partes_actividad where oid = " . $oid . " and fecha = ' " . $fecha . " ' " ;
if ( $resultado = mysql_query ( $consulta )){
$row = mysql_fetch_array ( $resultado );
$fecha2 = $row [ " fecha " ];
$dato = $row [ " dato " ];
if ( $editable == " si " ){
if ( $festivo ){
return " <td class=dia_festivo> $dia <input type=text size=1 name= " . $fecha . " value= " . $dato . " ></td> " ;
} else if ( $vacaciones >= 0 ){
if ( $vacaciones == 0 ){
return " <td class=dia_vacaciones_s> $dia <input type=text size=1 name= " . $fecha . " value= " . $dato . " ></td> " ;
} else if ( $vacaciones == 1 ){
return " <td class=dia_vacaciones_ap> $dia <input type=text size=1 name= " . $fecha . " value= " . $dato . " ></td> " ;
} else if ( $vacaciones == 2 ){
return " <td class=dia_vacaciones_r> $dia <input type=text size=1 name= " . $fecha . " value= " . $dato . " ></td> " ;
} else if ( $vacaciones == 3 ){
return " <td class=dia_vacaciones_an> $dia <input type=text size=1 name= " . $fecha . " value= " . $dato . " ></td> " ;
}
} else {
return " <td class=dia_laboral> $dia <input type=text size=1 name= " . $fecha . " value= " . $dato . " ></td> " ;
}
} else {
if ( $festivo ){
return " <td class=dia_festivo> $dia </td> " ;
} else if ( $vacaciones >= 0 ){
if ( $vacaciones == 0 ){
return " <td class=dia_vacaciones_s> $dia / $dato </td> " ;
} else if ( $vacaciones == 1 ){
return " <td class=dia_vacaciones_ap> $dia / $dato </td> " ;
} else if ( $vacaciones == 2 ){
return " <td class=dia_vacaciones_r> $dia / $dato </td> " ;
} else if ( $vacaciones == 3 ){
return " <td class=dia_vacaciones_an> $dia / $dato </td> " ;
}
} else {
return " <td class=dia_laboral> $dia / $dato </td> " ;
}
}
} else {
return " <td class=dia_laboral> " . $dia . " /<input type=text size=1 name= " . $fecha . " value=0></td> " ;
}
}
return " " ;
}
//Muestra un d<> a del calendario de vacaciones
function ver_vacaciones ( $dia , $mes , $ano , $oid , $editable , $accion ){
actualiza_rechazados ( $oid );
if ( $dia < 10 ) $fecha = $ano . " - " . $mes . " -0 " . $dia ;
else $fecha = $ano . " - " . $mes . " - " . $dia ;
$plazo = constante ( " antelacion_vacaciones " );
$festivo = festivo ( $dia , $mes , $ano , $oid );
if ( $festivo ){
return " <td class=dia_festivo> $dia </td> " ;
} else if ( $link = conectar ()){
//Si el d<> a se puede editar y es una fecha de solicitud v<> lida seguimos
if (( $editable == " si " ) && ( fecha_valida ( $fecha ) >= $plazo )){
$consulta = " select * from vacaciones where oid=' $oid ' and fecha=' $fecha ' " ;
$resultado = mysql_query ( $consulta );
if ( $resultado ){
$rows = mysql_num_rows ( $resultado );
}
//Si el d<> a se ha fijado como vacaciones, sea en el estado que sea, ya no se puede solicitar
//s<> lo anular o administrar.
if ( $rows > 0 ){
$aprobado = mysql_fetch_array ( $resultado );
$aprobado = $aprobado [ " aprobada " ];
/***
Estados de los d<EFBFBD> as de vacaciones :
0 - Solicitado .
1 - Concedido .
2 - Rechazado .
3 - Solicitud de anulaci<EFBFBD> n .
***/
//Un d<> a solicitado lo puede aprobar o rechazar el admin, as<61> que le aparece
//marcado y coloreado. El usuario no lo puede editar.
if ( $aprobado == 0 ){
if ( $accion == " s " ){
return " <td class=dia_vacaciones_s> $dia
< input type = 'checkbox' name = fecha [] value = '$fecha' checked ></ td >
< input type = 'hidden' name = fecha_del [] value = '$fecha' ></ td > " ;
} else {
return " <td class=dia_vacaciones_s> $dia </td> " ;
}
//Un d<> a concedido puede solicitar anularlo el usuario, a quien le
//aparece como no marcado. Si lo marca solicita anular.
} else if ( $aprobado == 1 ){
if ( $accion == " anular " ){
return " <td class=dia_vacaciones_ap> $dia
< input type = 'checkbox' name = fecha [] value = '$fecha' ></ td > " ;
} else {
return " <td class=dia_vacaciones_ap> $dia </td> " ;
}
//Un d<> a rechazado no puede editarlo nadie.
} else if ( $aprobado == 2 ){
return " <td class=dia_vacaciones_r> $dia </td> " ;
//Un d<> a que se solicita anular puede aceptarlo el admin, a quien le
//aparece como no marcado. Si lo marca est<73> echazando la anulaci<63> n.
} else if ( $aprobado == 3 ){
if ( $accion == " s " ){
return " <td class=dia_vacaciones_an> $dia
< input type = 'checkbox' name = fecha [] value = '$fecha' checked ></ td >
< input type = 'hidden' name = fecha_del [] value = '$fecha' ></ td > " ;
} else {
return " <td class=dia_vacaciones_an> $dia </td> " ;
}
}
//Si el d<> a no est<73> en ning<6E> n estado de vacaciones, el usuario puede solicitarlo.
} else {
if ( $accion == " solicitar " ){
return " <td class=dia_laboral> $dia <input type='checkbox' name=fecha[] value=' $fecha '></td> " ;
} else {
return " <td class=dia_laboral> $dia </td> " ;
}
}
} else {
return " <td class=dia_laboral> $dia </td> " ;
}
}
return $ret ;
}
//Comprueba si el d<> a es de vacaciones.
function vacaciones ( $dia , $mes , $ano , $oid ){
if ( $dia < 10 ) $fecha = $ano . " - " . $mes . " -0 " . $dia ;
else $fecha = $ano . " - " . $mes . " - " . $dia ;
$consulta = " select * from vacaciones where oid = ' $oid ' and fecha = ' $fecha ' " ;
$resultado = mysql_query ( $consulta );
$cont = mysql_num_rows ( $resultado );
if ( $cont > 0 ){
$rows = mysql_fetch_array ( $resultado );
$aprobada = $rows [ " aprobada " ];
return $aprobada ;
}
return - 1 ;
}
function actualiza_rechazados ( $oid ){
$link = conectar ();
$resultado = mysql_query ( " select * from dias_rechazados where oid=' $oid ' " , $link );
$cont = mysql_num_rows ( $resultado );
while ( $row = @ mysql_fetch_array ( $resultado )){
$fecha = $row [ " fecha " ];
$dia = $row [ " dia " ];
$cont = fecha_valida ( $fecha );
//echo "comprobando la fecha $fecha. Resultado: $cont<br>";
if ( fecha_valida ( $fecha ) <= - 7 ){
//echo "Borro<br>";
$resultado = mysql_query ( " delete from dias_rechazados where oid =' $oid ' and fecha=' $fecha ' " );
$resultado = mysql_query ( " delete from vacaciones where oid=' $oid ' and fecha=' $dia ' and aprobada='2' " );
}
}
}
//Comprueba si el d<> a es festivo para un usuario.
function festivo ( $dia , $mes , $ano , $oid ){
if ( $dia < 10 ) $fecha = $ano . " - " . $mes . " -0 " . $dia ;
else $fecha = $ano . " - " . $mes . " - " . $dia ;
$d = que_dia_de_semana ( $dia , $mes , $ano );
if (( $d == 6 ) || ( $d == 5 )) return true ;
if ( $link = conectar ()){
//Festivo nacional
$consulta = " select * from festivos_nacional where id = ' " . $fecha . " ' " ;
if ( $resultado = mysql_query ( $consulta )){
$cont = mysql_num_rows ( $resultado );
if ( $cont > 0 ){
return true ;
}
}
//Festivo local
$consulta = " select * from usuarios,festivos_local where oid = ' " . $oid . " ' and fecha = ' " . $fecha . " ' and festivos_local.localidad = usuarios.localidad_trabajo " ;
if ( $resultado = mysql_query ( $consulta )){
$cont = mysql_num_rows ( $resultado );
if ( $cont > 0 ){
return true ;
}
}
}
return false ;
}
//Comprueba si el d<> a es festivo.
function festivo_global ( $dia , $mes , $ano , $localidad ){
if ( $mes < 10 ) $mes = " 0 " . $mes ;
if ( $dia < 10 ) $fecha = $ano . " - " . $mes . " -0 " . $dia ;
else $fecha = $ano . " - " . $mes . " - " . $dia ;
$d = que_dia_de_semana ( $dia , $mes , $ano );
if (( $d == 6 ) || ( $d == 5 )) return true ;
if ( $link = conectar ()){
//Festivo nacional
$consulta = " select * from festivos_nacional where id = ' " . $fecha . " ' " ;
if ( $resultado = mysql_query ( $consulta )){
$cont = mysql_num_rows ( $resultado );
if ( $cont > 0 ){
return " nacional " ;
}
}
//Festivo local
$consulta = " select * from festivos_local where fecha = ' " . $fecha . " ' and localidad = ' " . $localidad . " ' " ;
if ( $resultado = mysql_query ( $consulta )){
$cont = mysql_num_rows ( $resultado );
if ( $cont > 0 ){
$rows = mysql_fetch_array ( $resultado );
return $localidad ;
}
}
}
return " " ;
}
//Resta un d<> a de vacaciones del calendario de un usuario
//de forma recursiva, acumulando vacaciones a<> o tras a<> o.
//Calcula la distancia en d<> as entre la fecha actual y la fecha pasada como argumento.
function fecha_valida ( $fecha ){
$hoy = date ( " Y-m-d " );
$hoy = strtotime ( $hoy , 0 );
$fecha = strtotime ( $fecha , 0 );
$cuanto = $fecha - $hoy ;
$dif = floor ( $cuanto / 86400 );
return $dif ;
}
//Calcula el n<> mero de d<> as que separan dos fechas
function distancia_fechas ( $fecha , $otra ){
$otra = strtotime ( $otra , 0 );
$fecha = strtotime ( $fecha , 0 );
$cuanto = $fecha - $otra ;
$dif = floor ( $cuanto / 86400 );
return $dif ;
}
function dia_siguiente ( $fecha ){
return date ( " 12-10-2008 " , strtotime ( " +1 day " ));
}
?>