123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- <?php
- /*
- * Valida conflictos de horario, salones y profesores
- * Recibe: conexión pdo
- * Regresan: textos de error
- * Success: texto vacío
- */
- function profesorEnSubmateria($sub, $arr){
- if(count($arr) > 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 <strong>".$materia_nombre."</strong> 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 <strong>".$invalido_rs[0]["Materia_desc"]."</strong> 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 <strong>".$materia_nombre."</strong> utiliza el mismo salón (<strong>".$invalido_rs[0]["Salon_desc"]."</strong>) que <strong>".$invalido_rs[0]["Materia_desc"]."</strong> del grupo <strong>".$invalido_rs[0]["Grupo_desc"]."</strong> 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 <strong>".$materia_nombre."</strong> utiliza el mismo salón (<strong>".$invalido_rs[0]["Salon_desc"]."</strong>) que <strong>".$invalido_rs[0]["Materia_desc"]."</strong> del grupo <strong>".$invalido_rs[0]["Grupo_desc"]."</strong> 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 <strong>".$invalido_rs[0]["Materia_desc"]."</strong> del grupo <strong>".$invalido_rs[0]["Grupo_desc"]."</strong>.".$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 <strong>".$salon_nombre."</strong> en el grupo <strong>".$invalido_rs[0]["Grupo_desc"]."</strong>.";
- }
- }
- }//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')<br>";
-
- 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 (<strong>".$invalido_rs[0]["Salon_desc"]."</strong>) que la reposición de <strong>".$invalido_rs[0]["Materia_desc"]."</strong> del grupo <strong>".$invalido_rs[0]["Grupo_desc"]."</strong> 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 (<strong>".$invalido_rs[0]["Materia_desc"]."</strong>) el mismo día al mismo tiempo.";
- }
- return "";
- }
- }
- ?>
|