0){
$pos = 0;
foreach($arr as $elem){
if(intval($sub) == intval($elem["submateria"]))
return $pos;
$pos++;
}
}
return -1;
}
function getFecha($arr, $id, $campo){
foreach($arr as $sub){
if($sub["submateria"] == $id)
return $sub[$campo];
}
}
function validaHorasMateria($pdo, $grupo, $materia, $materia_nombre, $duracion, $vinculadas = false){
$stmt = $pdo->prepare('Select * from fs_valida_horasmateria(:gpo, :mat, :duracion)');
$stmt->bindParam(":gpo", $grupo);
$stmt->bindParam(":mat", $materia);
$stmt->bindParam(":duracion", $duracion);
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede grabar el horario. Ocurrió un error al validar las horas de la materia '".$materia_nombre."'. ";//.$t[2];
}
$invalido_rs = $stmt->fetch();
$stmt->closeCursor();
$stmt = null;
$vinculadasTxt = ".";
if($vinculadas){
$vinculadasTxt = " en la materia vinculada.";
}
if(count($invalido_rs) > 0 && !$invalido_rs["fs_valida_horasmateria"]){
return "No se puede grabar el horario. La materia ".$materia_nombre." sobrepasa el límite de horas del grupo".$vinculadasTxt;
}
return "";
}
function validaConflictoHoras($pdo, $grupo, $dia, $hora, $materia, $materia_nombre, $fecha_inicial, $fecha_final, $duracion, $vinculadas = false){
$stmt = $pdo->prepare('Select * from fs_valida_horariogrupo(:gpo, :dia, :hora, :mat, :fecha_ini, :fecha_fin, :duracion)');
$stmt->bindParam(":gpo", $grupo);
$stmt->bindParam(":dia", $dia);
$stmt->bindParam(":hora", $hora);
$stmt->bindParam(":mat", $materia);
$stmt->bindParam(":fecha_ini", $fecha_inicial);
$stmt->bindParam(":fecha_fin", $fecha_final);
$stmt->bindParam(":duracion", $duracion);
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede grabar el horario. Ocurrió un error al validar la materia '".$materia_nombre."'. ";//.$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$stmt = null;
$vinculadasTxt = ".";
if($vinculadas){
$vinculadasTxt = " en la materia vinculada.";
}
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){
return "No se puede grabar el horario. La materia ".$invalido_rs[0]["Materia_desc"]." ya está ocupando el horario".$vinculadasTxt;
}
return "";
}
function validaConflictoSalon($pdo, $grupo, $dia, $hora, $materia, $materia_nombre, $fecha_inicial, $fecha_final, $duracion, $salon, $profesores, $submaterias, $vinculadas = false){
if($salon == ""){
$stmt = $pdo->prepare('Select * from fs_validasalon_horariogrupo(:gpo, :dia, :hora, :mat, NULL, :fecha_ini, :fecha_fin, :duracion)');
}else{
$stmt = $pdo->prepare('Select * from fs_validasalon_horariogrupo(:gpo, :dia, :hora, :mat, :salon, :fecha_ini, :fecha_fin, :duracion)');
$stmt->bindParam(":salon", $salon);
}
$stmt->bindParam(":gpo", $grupo);
$stmt->bindParam(":dia", $dia);
$stmt->bindParam(":hora", $hora);
$stmt->bindParam(":mat", $materia);
$stmt->bindParam(":fecha_ini", $fecha_inicial);
$stmt->bindParam(":fecha_fin", $fecha_final);
$stmt->bindParam(":duracion", $duracion);
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede grabar el horario. Ocurrió un error al validar la materia '".$materia_nombre."'. ";//.$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$vinculadasTxt = "";
if($vinculadas){
$vinculadasTxt = " en la materia vinculada";
}
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){
return "No se puede grabar el horario".$vinculadasTxt.". La materia ".$materia_nombre." utiliza el mismo salón (".$invalido_rs[0]["Salon_desc"].") que ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"]." el mismo día a la misma hora.";
}
if(is_array($profesores) ){
foreach($profesores as $profesor){
if(!isset($profesor["salon"]) || $profesor["salon"] == ""){
$stmt = $pdo->prepare('Select * from fs_validasalon_horariogrupo(:gpo, :dia, :hora, :mat, NULL, :fecha_ini, :fecha_fin, :duracion)');
}else{
$stmt = $pdo->prepare('Select * from fs_validasalon_horariogrupo(:gpo, :dia, :hora, :mat, :salon, :fecha_ini, :fecha_fin, :duracion)');
$stmt->bindParam(":salon", $profesor["salon"]);
}
$stmt->bindParam(":mat", $materia);
$stmt->bindParam(":gpo", $grupo);
$stmt->bindParam(":dia", $dia);
$stmt->bindParam(":hora", $hora);
$fecha_tmp = isset($profesor["submateria"])?fechaGuion(getFecha($submaterias, $profesor["submateria"], "fecha_inicial")):"";
if($fecha_tmp == "")
$fecha_tmp = $fecha_inicial;
$stmt->bindParam(":fecha_ini", $fecha_tmp);
$fecha_tmp = isset($profesor["submateria"])?fechaGuion(getFecha($submaterias, $profesor["submateria"], "fecha_final")):"";
if($fecha_tmp == "")
$fecha_tmp = $fecha_final;
$stmt->bindParam(":fecha_fin", $fecha_tmp);
$stmt->bindParam(":duracion", $duracion);
$vinculadasTxt = ".";
if($vinculadas){
$vinculadasTxt = " en la materia vinculada.";
}
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede grabar el horario. Ocurrió un error al validar el salón de la materia '".$materia_nombre."'".$vinculadasTxt;//.$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$stmt = null;
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){
return "No se puede grabar el horario. La materia ".$materia_nombre." utiliza el mismo salón (".$invalido_rs[0]["Salon_desc"].") que ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"]." el mismo día a la misma hora.";
}
}
}//fin submaterias
return "";
}
function validaConflictoProfesor($pdo, $grupo, $dia, $hora, $materia, $materia_nombre, $fecha_inicial, $fecha_final, $duracion, $profesores, $submaterias, $tipo, $vinculadas = false){
if(is_array($profesores) ){
//--Materias sin submaterias
foreach($profesores as $profesor){
if($profesor["profesor"] != ""){
$stmt = $pdo->prepare('Select * from fs_validaprofesor_horariogrupo(:gpo, :dia, :hora, :mat, :prof, :fecha_ini, :fecha_fin, :duracion)');
$stmt->bindParam(":gpo", $grupo);
$stmt->bindParam(":dia", $dia);
$stmt->bindParam(":hora", $hora);
$stmt->bindParam(":mat", $materia);
$stmt->bindParam(":prof", $profesor["profesor"]);
if($tipo == 0){//sin submaterias
$fecha_tmpI = $fecha_inicial;
$fecha_tmpF = $fecha_final;
}else{//con submaterias
$i = profesorEnSubmateria($profesor["submateria"], $submaterias);//obtiene pos en el arreglo de submaterias
if($i == -1 || fechaGuion($submaterias[$i]["fecha_inicial"]) == ""){
$fecha_tmpI = $fecha_inicial;
$fecha_tmpF = $fecha_final;
}else{//periodo completo
$fecha_tmpI = fechaGuion($submaterias[$i]["fecha_inicial"]);
$fecha_tmpF = fechaGuion($submaterias[$i]["fecha_final"]);
}
}
$stmt->bindParam(":fecha_ini", $fecha_tmpI);
$stmt->bindParam(":fecha_fin", $fecha_tmpF);
$stmt->bindParam(":duracion", $duracion);
$vinculadasTxt = ".";
if($vinculadas){
$vinculadasTxt = " en la materia vinculada.";
}
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede grabar el horario. Ocurrió un error al validar el profesor de la materia '".$materia_nombre."'".$vinculadasTxt;//.$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$stmt = null;
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){
$debug = "Select * from fs_validaprofesor_horariogrupo( $grupo, $dia, $hora, $materia, ".$profesor["profesor"].", $fecha_tmpI, $fecha_tmpF, $duracion)";
return "No se puede grabar el horario".$vinculadasTxt." El profesor ya está asignado el mismo día al mismo tiempo a la materia ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"].".".$debug;
}
}
}//fin foreach
}
}
function validaConflictoProfesorSalon($pdo, $grupo, $dia, $hora, $mat, $salon, $salon_nombre, $fecha_inicial, $fecha_final, $duracion, $profesores, $submaterias, $tipo, $vinculadas = false){
if(is_array($profesores) ){
//--Materias sin submaterias
foreach($profesores as $profesor){
if($profesor["profesor"] != ""){
$stmt = $pdo->prepare('Select * from fs_validaprofesorsalon_horariogrupo(:gpo, :dia, :hora, :mat, :sal, :prof, :fecha_ini, :fecha_fin, :duracion)');
$stmt->bindParam(":gpo", $grupo);
$stmt->bindParam(":dia", $dia);
$stmt->bindParam(":hora", $hora);
$stmt->bindParam(":mat", $mat);
$stmt->bindParam(":sal", $salon);
$stmt->bindParam(":prof", $profesor["profesor"]);
if($tipo == 0){//sin submaterias
$fecha_tmpI = $fecha_inicial;
$fecha_tmpF = $fecha_final;
}else{//con submaterias
$i = profesorEnSubmateria($profesor["submateria"], $submaterias);//obtiene pos en el arreglo de submaterias
if($i == -1 || fechaGuion($submaterias[$i]["fecha_inicial"]) == ""){
$fecha_tmpI = $fecha_inicial;
$fecha_tmpF = $fecha_final;
}else{//periodo completo
$fecha_tmpI = fechaGuion($submaterias[$i]["fecha_inicial"]);
$fecha_tmpF = fechaGuion($submaterias[$i]["fecha_final"]);
}
}
$stmt->bindParam(":fecha_ini", $fecha_tmpI);
$stmt->bindParam(":fecha_fin", $fecha_tmpF);
$stmt->bindParam(":duracion", $duracion);
$vinculadasTxt = ".";
if($vinculadas){
$vinculadasTxt = " en la materia vinculada.";
}
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede grabar el horario. Ocurrió un error al validar el profesor ".$vinculadasTxt.$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$stmt = null;
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Salon_desc"])){
return "No se puede grabar el horario".$vinculadasTxt." El profesor está asignado el mismo día al mismo tiempo en un salón distinto al ".$salon_nombre." en el grupo ".$invalido_rs[0]["Grupo_desc"].".";
}
}
}//fin foreach
}
}
function validaConflictoReposicionSalon($pdo, $reposicion, $periodo, $fecha_ini, $duracion, $salon){
$fecha_fin = date('Y-m-d H:i:00', strtotime($fecha_ini.' + '.$duracion.' minute'));
$stmt = $pdo->prepare('Select * from fs_validasalon_reposicion(:rep, :periodo, :salon, :fecha_ini, :fecha_fin)');
$stmt->bindParam(":rep", $reposicion);
$stmt->bindParam(":salon", $salon);
$stmt->bindParam(":periodo", $periodo);
$stmt->bindParam(":fecha_ini", $fecha_ini);
$stmt->bindParam(":fecha_fin", $fecha_fin);
//echo "Select * from fs_validasalon_reposicion($reposicion, $periodo, $salon, '$fecha_ini', '$fecha_fin')
";
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede validar el salón. Ocurrió un error al validar la reposición. ".$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$stmt = null;
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){
return "La reposición utiliza el mismo salón (".$invalido_rs[0]["Salon_desc"].") que la reposición de ".$invalido_rs[0]["Materia_desc"]." del grupo ".$invalido_rs[0]["Grupo_desc"]." el mismo día a la misma hora.";
}
return "";
}
function validaConflictoReposicionProfesorSalon($pdo, $reposicion, $periodo, $fecha_ini, $duracion, $profesor){
if($profesor != ""){
$fecha_fin = date('Y-m-d H:i:00', strtotime($fecha_ini.' + '.$duracion.' minute'));
$stmt = $pdo->prepare('Select * from fs_validaprofesorsalon_reposicion(:rep, :periodo, :prof, :fecha_ini, :fecha_fin)');
$stmt->bindParam(":rep", $reposicion);
$stmt->bindParam(":periodo", $periodo);
$stmt->bindParam(":fecha_ini", $fecha_ini);
$stmt->bindParam(":fecha_fin", $fecha_fin);
$stmt->bindParam(":prof", $profesor);
if(!$stmt->execute()){
$t = $stmt->errorInfo();
return "No se puede validar el profesor. Ocurrió un error al validar la reposición. ".$t[2];
}
$invalido_rs = $stmt->fetchAll();
$stmt->closeCursor();
$stmt = null;
if(count($invalido_rs) > 0 && isset($invalido_rs[0]["Materia_desc"])){
return "El profesor ya está asignado a una reposición (".$invalido_rs[0]["Materia_desc"].") el mismo día al mismo tiempo.";
}
return "";
}
}
?>