git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk/src@93 e2b1556b-49f8-d141-9351-52d6861a72d9
436 lines
15 KiB
PHP
436 lines
15 KiB
PHP
<?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);
|
||
$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"));
|
||
}
|
||
|
||
?>
|