<?php

require_once("class/class.personal.php");
require_once("class/class.horario.php");
require_once("class/class.usutrab.php");
require_once("class/class.horaprog.php");
require_once("class/class.horareprog.php");
require_once("class/class.hrpermiso.php");
require_once("class/class.vacaciones.php");
require_once("class/class.descmed.php");
require_once("class/class.licencia.php");
require_once("class/class.descrad.php");


function validaprog($conex, $anno, $mm, $i, $idj, $ids, $idtp, $codprog, $idga, $ida, $idh, $tipohora){


// consulta de cruce de horario
$Objh = new Horario();
$Objut = new UsuarioTrabaja();
$res_h=array();$res_hs=array();

$codper=$Objut->buscar_per_trab_codper($conex,$anno,$mm,$idj,$ids,$idtp,$codprog);

$res_hr=$Objh->buscar_horario_det($conex,$idh);

$a=0;
$valor = 0;
$cont=0;

if(count($res_hr)>0){
$hini = $res_hr[0]['hori'];
$hfin = $res_hr[0]['horf'];
}

$res_h=$Objh->lis_horario_per($conex,$anno,$mm,$idj,$ids,$idtp,$i,$codprog);



if(count($res_h)>0){
$filaa = array();
$filab = array();
$filac = array();
$filad = array();
$filae = array();
$filaidga = array();
$filaida = array();
$filaidh = array();

for($ih=0;$ih<sizeof($res_h);$ih++){
$a = $a + 1;
$filaa[$a]=$res_h[$ih]['cod'];
$filab[$a]=$res_h[$ih]['hori'];
$filac[$a]=$res_h[$ih]['horf'];
$filad[$a]=$res_h[$ih]['hort'];
$filae[$a]=$res_h[$ih]['horn'];
$filaidga[$a] = $res_h[$ih]['idga'];
$filaida[$a] = $res_h[$ih]['ida'];
$filaidh[$a] = $res_h[$ih]['idh'];
}}


for($t=1;$t<=count($filaa);$t++){
//revisar para los cruces entre servicio
if($filaidh[$t]!= $idh && $filaida[$t]!= $ida){
//echo "Hueco 1<br>";

if($hfin > $hini){
//echo $hfin."-".$hini."<br>";
if($hfin > $filac[$t]){
	if(($hini > $filab[$t]) && ($hini > $filac[$t])){
	 $hc = $filac[$t] - $hini; break;
	}
	if(($hini < $filab[$t]) && ($filac[$t]>$filab[$t])){
	 $valor = 1; break;
	}
	if($hini < $filac[$t]){
	 $valor = 1; break;
	}
	if($hfin == $filac[$t]){
	 $valor = 1; break;
	}
	if($hini == $filab[$t]){
	 $valor = 1; break;
	}
	//T y N
	$cont = sumahoras($conex,$i,$idj,$ids, $idtp, $mm, $anno,$codper);
	if($cont==1 && ($hfin==$filab[$t])){
	$valor = 1; break;
	}
	
}

if ($hfin < $filac[$t]){
	
	if(($filab[$t] > $hini) && ($filab[$t] > $hfin)){
	 $hc = $hfin - $filab[$t]; break;
	}
	if($filab[$t] < $hini){
	 $valor = 1; break;
	}
	if($hfin > $filab[$t]){
	 $valor = 1; break;
	}
	if($hini == $filab[$t]){
	 $valor = 1; break;
	}
	$cont = sumahoras($conex,$i,$idj,$ids, $idtp, $mm, $anno,$codper);
	if($cont==1 && ($hini==$filac[$t])){
	$valor = 1; break;
	}
}
}
if (($hfin == $filac[$t])||($hini == $filab[$t]) || ($hini==$filac[$t] and $hfin==$filab[$t])){
	$valor= 1; break;
	}

}
///
if($filaidh[$t]!= $idh && $filaida[$t]== $ida){

if($hfin > $hini){
if($hfin > $filac[$t]){
	if(($hini > $filab[$t]) && ($hini > $filac[$t])){
	 $hc = $filac[$t] - $hini; break;
	}
}
	if($filab[$t] < $hini && $filac[$t] > $hini){
	 $valor = 1; break;
	}
	if($hini == $filab[$t]){
	 $valor = 1; break;
	}
	if($hfin == $filac[$t]){
	 $valor = 1; break;
	}
}}

if($hfin > $hini){

$cont = sumahoras($conex,$i,$idj,$ids, $idtp, $mm, $anno,$codper);
	if($cont==1 && ($hfin==$filab[$t])){
	$valor = 1; break;
	}	
}
if($hfin < $hini){

$cont = sumahoras($conex,$i,$idj,$ids, $idtp, $mm, $anno,$codper);
	if($cont==1 && ($hini==$filac[$t])){
	$valor = 1; break;
	}	
}
if ($filaidh[$t]== $idh)
{ 
	if(($filaida[$t]!= $ida) || ($filaidga[$t]!= $idga)){
		$valor= 1; break;
	}
}
if($filaidh[$t]!= $idh && $filaida[$t]== $ida and $hini==$filac[$t] and $hfin==$filab[$t]){
$valor= 1; break;	
}
}


//consulta cruce de horarios en otro servicio
if($valor==0){

$Objhs = new Horario();
$res_hrs=array();
$res_hrs=$Objhs->buscar_horario_det($conex,$idh);

if(count($res_hrs)>0){
$hini = $res_hrs[0]['hori'];
$hfin = $res_hrs[0]['horf'];
}

$res_hos=array();
$res_hos=$Objhs->lis_horario_per_all($conex,$anno,$mm,$idj,$idtp,$i,$codper);
$a=0;
if(count($res_hos)>0){
$filaa = array();
$filab = array();
$filac = array();
$filad = array();
$filae = array();
$filaidga = array();
$filaida = array();
$filaidh = array();
for($iho=0;$iho<sizeof($res_hos);$iho++){
//if($res_hos[$iho]['serva']==$ids && $res_hos[$iho]['idh']==$idh){
//$hini = $res_hos[$iho]['hori'];
//$hfin = $res_hos[$iho]['horf'];
//}else{
	if($res_hos[$iho]['serva']!=$ids){
	$a = $a + 1;
	$filaa[$a]=$res_hos[$iho]['cod'];
	$filab[$a]=$res_hos[$iho]['hori'];
	$filac[$a]=$res_hos[$iho]['horf'];
	$filad[$a]=$res_hos[$iho]['hort'];
	$filae[$a]=$res_hos[$iho]['horn'];
	$filaidga[$a]=$res_hos[$iho]['idga'];
	$filaida[$a]=$res_hos[$iho]['ida'];
	$filaidsa[$a] = $res_hos[$iho]['serva'];
	$filaidh[$a] = $res_hos[$iho]['idh'];
	}
}
//}
//print_r($filac);

for($t=1;$t<=count($filaa);$t++){

if($filaidh[$t]!= $idh){
if($hfin > $hini){
//echo $hfin."-".$hini."<br>";
if($hfin > $filac[$t]){
	if(($hini > $filab[$t]) && ($hini > $filac[$t])){
	 $hc = $filac[$t] - $hini; break;
	}
	if(($hini < $filab[$t]) && ($filac[$t]>$filab[$t])){
	 $valor = 6; break;
	}
	if($hini < $filac[$t]){
	 $valor = 6; break;
	}
}

if ($hfin < $filac[$t]){
	
	if(($filab[$t] > $hini) && ($filab[$t] > $hfin)){
	 $hc = $hfin - $filab[$t]; break;
	}
	if($filab[$t] < $hini){
	 $valor = 6; break;
	}
	if($hfin > $filab[$t]){
	 $valor = 6; break;
	}
}
}
if (($hfin == $filac[$t])||($hini == $filab[$t]) || ($hini==$filac[$t] and $hfin==$filab[$t])){
	$valor= 6; break;
	}

	
}
if ($filaidh[$t]== $idh)
{ 
	if($filaida[$t]!= $ida){
		$valor= 6; break;
	}
}
if($filaidh[$t]!= $idh and $hini==$filac[$t] and $hfin==$filab[$t]){
$valor= 6; break;	
}

}// termina el for de analisis
}// captura el resultado de los horarios programados
}//fin del if ask sobre el indicador


// verifica lo post guardias
if($valor==0){
if($i==1 && $mm==1){
$annoa=$anno-1;
$mesa= 12;
$mmesa = mktime( 0, 0, 0, $mesa, 1, $annoa ); 
$udia = intval(date("t",$mmesa)); 
$Objhrp = new HoraReprogramacion();
$res_hrp = array();
$res_hrp = $Objhrp->listar_hrreprog_pos_gd($conex,$annoa,$mesa,$idj,$ids,$idtp,$udia,$codper);
	if(count($res_hrp)>0){
		if($res_hrp[0]['idso']==$ids){
			$valor =2; 
		}elseif($res_hrp[0]['idso']!=$ids){
			$valor =7;
		}	
	}
}else{
		//pregunta por el dia
		if($i==1){
				$mesa= $mm - 1;
				$mmesa = mktime( 0, 0, 0, $mesa, 1, $anno ); 
				$udia = intval(date("t",$mmesa)); 
				$Objhrp = new HoraReprogramacion();
				$res_hrp = array();
				$res_hrp = $Objhrp->listar_hrreprog_pos_gd($conex,$anno,$mesa,$idj,$ids,$idtp,$udia,$codper);
					if(count($res_hrp)>0){
					if($res_hrp[0]['idso']==$ids){
						$valor =2; 
					}elseif($res_hrp[0]['idso']!=$ids){
						$valor =7; 
					}	
				}
		
		}else{
		$da = $i - 1;
		$Objhp = new HoraProgramacion();
		$res_hp = array();
		$res_hp = $Objhp->listar_hrprog_pos_gd($conex,$anno,$mm,$idj,$ids,$idtp,$da,$codper);
		if(count($res_hp)>0){
			if($res_hp[0]['idso']==$ids){
			$valor =2; 
			}elseif($res_hp[0]['idso']!=$ids){
			$valor =7; 
		}	
		}
		}
}//cierra la consulta de post guardia por servicio
}


//pregunta por cumpleanos
if($valor==0){
$Objp = new Personal();
$res_p=array();
$res_p=$Objp->ask_cumple($conex,$i,$mm,$codper);
if(count($res_p)>0){
$valor =3; 
}
}


//pregunta por vacaciones
if($valor==0){
$fecha = $anno.'-'.$mm.'-'.$i;
$Objv = new Vacaciones();
$res_v=array();
$res_v=$Objv->consultar_vacaciones_fecha($conex,$codper,$fecha);
	if(count($res_v)>0){
	$valor =4; 
	}
}


//pregunta por descanso medico
if($valor==0){
$fecha = $anno.'-'.$mm.'-'.$i;
$Objdm = new DescansoMedico();
$res_dm=array();
$res_dm=$Objdm->consultar_descmed_fecha($conex,$codper,$fecha);
if(count($res_dm)>0){
$valor =5; 
}
}


//cuentas las cantidad de guardias
/*
if($valor==0 && $tipohora==0){
$Objha = new Horario();
$res_hr = array();
$res_hr=$Objha->buscar_horario_det($conex,$idh);
$turnH=$res_hr[0]['hort'];
//contabiliza las guardias
$Objhp = new HoraProgramacion();
$numgd=$Objhp->contar_gd_prog($conex,$anno,$mm,$idj,$ids,$idtp,$codper,0);
if(($turnH=='D' or $turnH=='N') && $numgd>10){
$valor =8; 
}}
*/

//EVALUAR
//pregunta por dias max de separacion programados
$mes = mktime( 0, 0, 0, $mm, 1, $anno ); 
$numeroDeDias = intval(date("t",$mes)); 
$diascontrol = $numeroDeDias - 3;
if($valor==0 && $tipohora==0 && $i>3 && $i<$diascontrol){
$fecha = $anno.'-'.$mm.'-'.$i;
$fechaDPi= ($i+1);
$fechaDPf= ($i+4);
$fechaAPi = ($i-1);
$fechaAPf=($i-4);
$fechaVacaA= $anno.'-'.$mm.'-'.$fechaAPf;
$fechaVacaD= $anno.'-'.$mm.'-'.$fechaDPf;

$Objhp1 = new HoraProgramacion();
$Objhp2 = new HoraProgramacion();
$res_hpA=array();$res_hpD=array();
$res_hpA=$Objhp1->ask_separacion_dias($conex,$anno,$mm,$idj,$ids,$idtp,$codper,0,$fechaDPi,$fechaDPf);
$res_hpD=$Objhp2->ask_separacion_dias($conex,$anno,$mm,$idj,$ids,$idtp,$codper,0,$fechaAPf,$fechaAPi);

$Objv = new Vacaciones();
$res_vA=array();$res_vD=array();
$res_vA=$Objv->consultar_vacaciones_fecha_eje($conex,$codper,$fechaVacaA);
$res_vD=$Objv->consultar_vacaciones_fecha_eje($conex,$codper,$fechaVacaD);

if(((count($res_hpA)==0) || (count($res_hpD)==0)) && ((count($res_vA)==0) && (count($res_vD)==0)) ){
$valor =9; 
}
}


//trabajando en la superposicion
if($valor==0){
$Objhp = new HoraProgramacion();
$res_hp1=array(); $res_hp2=array();
$res_hp1=$Objhp->ask_superposicion1($conex,$anno,$mm,$idj,$ids,$idtp,$i,$idga,$ida);
$res_hp2=$Objhp->ask_superposicion2($conex,$anno,$mm,$idj,$ids,$idtp,$i,$idga,$ida);
	if((count($res_hp1)>1) or (count($res_hp2)>1)){
	$valor =10; 
	}
}


//////////////////
//cuentas las cantidad de horas extras por dia
if($valor==0){
$Objhp = new HoraProgramacion();
$res_hp=array();
$res_hp=$Objhp->ask_sum_hrs_prog($conex,$anno,$mm,$idj,$ids,$idtp,$i,$codper,1);

	if(count($res_hp)>0){
		if($res_hp[0]['sumahrs']>12){
		$valor=1; 
		}
	}
}


//cuentas la CANTIDAD DE HRS TRABAJADOS X DIA
if($valor==0){
$Objhpo = new HoraProgramacion();
$Objhpe = new HoraProgramacion();
$res_hpo=array();
$res_hpe=array();
$opex1=0;
$opex2=0;
$opex3=0;
$res_hpo=$Objhpo->ask_sum_hrs_prog($conex,$anno,$mm,$idj,$ids,$idtp,$i,$codper,0);
$res_hpe=$Objhpe->ask_sum_hrs_prog($conex,$anno,$mm,$idj,$ids,$idtp,$i,$codper,1);

	if(count($res_hpo)>0){
	     $opex1 = $res_hpo[0]['sumahrs'];
	}
	if(count($res_hpe)>0){
	     $opex2 = $res_hpe[0]['sumahrs'];
	}
	    $opex3 = $opex1 + $opex2;
		if($opex3>18){
		$valor=1; 
		}
}


//2 TURNOS DE EXTRAS POR DIA
if($valor==0 && $tipohora==1){
$Objhp = new HoraProgramacion();
$res_hp=array();
$res_hp=$Objhp->ask_contar_turnos_prog($conex,$anno,$mm,$idj,$ids,$idtp,$i,$codper,1);

	if(count($res_hp)>0){
		if($res_hp[0]['numtn']>1){
		$valor=1; 
		}
	}
}



//Conuslta si el turno de Guardia Diurna esta de extra
if($valor==0 && $tipohora==1){
$Objh = new Horario();
$res_hr = array();
$res_hr=$Objh->buscar_horario_det($conex,$idh);
$turnH=$res_hr[0]['hort'];
	if($turnH=='D'){
	$valor=1; 
	}
}


// VERIFICAR LAS LICENCIAS
if($valor==0){
$fecha = $anno.'-'.$mm.'-'.$i;

$Objl = new Licencia();
$res_l = array();
$res_l=$Objl->consultar_licencia_anterior($conex,$codper,$fecha);
	if(count($res_l)>0){
	$valor =11; 
	}
}


// VERIFICAR DESCANSO POR RADIACION
if($valor==0){
$fecha = $anno.'-'.$mm.'-'.$i;
$Objdr = new DescansoRadiacion();
$res_dr = array();
$res_dr=$Objdr->consultar_descrad($conex,$codper,$fecha);
	if(count($res_dr)>0){
	$valor =12; 
	}
}


// VERIFICAR HORAS PERMISO
if($valor==0){
$fecha = $anno.'-'.$mm.'-'.$i;
$Objh = new Horario();
$res_hr=$Objh->buscar_horario_det($conex,$idh);
$hini = $res_hr[0]['hori'];
$hfin = $res_hr[0]['horf'];

$Objhrp = new HoraPermiso();
$res_hrp=array(); 
$res_hrp=$Objhrp->consultar_hpermiso_ask($conex,$codper, $anno,$mm,$i, $hini, $hfin);
if(count($res_hrp)>0){
$valor =13; 
}
}

return $valor;
}


function sumahoras($conex, $dia,$idj,$ids, $idtp, $mes, $anno,$codper){

$val=0;
$Objut = new HoraProgramacion();
$res_hp=array();
$res_hp=$Objut->ask_sum_hrs_prog_sinth($conex,$anno,$mes,$idj,$ids,$idtp,$dia,$codper);

if($res_hp[0]['sumahrs']>=18){
$val =1;
}
return $val;
}

function consulta_hrpermiso($conex,$codprog,$fecha,$idtp,$anno,$mm,$idj,$ids){

$Objut = new UsuarioTrabaja();
$codper=$Objut->buscar_per_trab_codper($conex,$anno,$mm,$idj,$ids,$idtp,$codprog);

$Objhrp = new HoraPermiso();
$res_hrp=array();
$res_hrp=$Objhrp->consultar_detalle_hora_permiso($conex,$codper,$fecha);

	if(count($res_hrp)>0){
	$cadena =  $cadena.$res_hrp[0]['deschrsper']." ".$res_hrp[0]['hora'];
	}
return $cadena;
}
?>