Incam_Intranet/functions_calendario.php

436 lines
15 KiB
PHP
Raw Permalink Blame History

<?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&aacute;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);
$hora = explode(" ",$res[2]);
return $hora[0]." de ".nombre_mes($res[1])." del ".$locale['329']." ".$res[0]. " (". $hora[1] .")";
}
//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<>as de vacaciones:
0 - Solicitado.
1 - Concedido.
2 - Rechazado.
3 - Solicitud de anulaci<63>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"));
}
?>