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 ""; } } ?>