123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395 |
- <?php
- /* AJAX
- * Selecciona los datos de la carrera
- * Recibe:
- * id - ID de grupo,
- * json
- * Return:
- * resultado o cadena de error
- */
- require_once("../../include/constantes.php");
- require_once("../../include/nocache.php");
- require_once("../../include/bd_pdo.php");
- require_once("../../include/util.php");
- require_once("../include/validacionesHorario.php");
- require_once("../../classes/ValidaSesion.php");
- require_once("../classes/LogActividad.php");//die on error
- /*function buscaSubmateriaProfesor($sub, $arr){
- if(count($arr) > 0){
- $pos = 0;
- foreach($arr as $elem){
- if(intval($sub) == intval($elem["submateria"]))
- return $pos;
- $pos++;
- }
- }
- return -1;
- }*/
- function submateriaTieneProfesor($sub_id, $profesoresArr){
- foreach($profesoresArr as $prof){
- if(intval($prof["submateria"]) == intval($sub_id)){
- return true;
- }
- }
- return false;
- }
- //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
- $objSesion = new ValidaSesion($pdo, 51, APSA);
- if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
- $return["error"] = "Error! No tienes permisos para realizar esta acción.";
- }else if(!isset($_POST["json"])){
- $return["error"] = "Error! No se recibió la información del grupo.";
- }else{
- $clase = json_decode($_POST["json"], true);
-
- $return["error"] = "";
-
- try {
- $pdo->beginTransaction();
- $error = false;
- $arregloQuery = array();
-
- //---- Valida número de horas ----------
- /*$errorTxt = validaHorasMateria($pdo, $clase["grupo"], $clase["materia"], $clase["materia_nombre"], $clase["duracion"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }*/
-
- //---- Valida que no haya conflicto de horas ----------
- $errorTxt = validaConflictoHoras($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
-
- //---- Valida que no haya conflicto de salon en mismo dia hora ----------
- $errorTxt = validaConflictoSalon($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["salon"], $clase["profesores"], $clase["submaterias"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de profesores ----------
- $errorTxt = validaConflictoProfesor($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
-
- //---- Valida que no haya conflicto de profesores con salón ----------
- $errorTxt = validaConflictoProfesorSalon($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["salon"], $clase["salon_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"]);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
-
- //Si tiene vinculos, revisa que no haya conflictos en su grupo
- if(count($clase["vinculos"]) > 0){
- foreach($clase["vinculos"] as $vinculo){
- $grupo = $vinculo["grupo"];
-
- //---- Valida número de horas ----------
- /*$errorTxt = validaHorasMateria($pdo, $grupo, $clase["materia"], $clase["materia_nombre"], $clase["duracion"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }*/
-
- //---- Valida que no haya conflicto de horas ----------
- $errorTxt = validaConflictoHoras($pdo, $grupo, $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de salon en mismo dia hora ----------
- $errorTxt = validaConflictoSalon($pdo, $grupo, $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["salon"], $clase["profesores"], $clase["submaterias"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
- //---- Valida que no haya conflicto de profesores ----------
- $errorTxt = validaConflictoProfesor($pdo, $grupo, $clase["dia"], $clase["hora"], $clase["materia"], $clase["materia_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
-
- //---- Valida que no haya conflicto de profesores con salón ----------
- $errorTxt = validaConflictoProfesorSalon($pdo, $clase["grupo"], $clase["dia"], $clase["hora"], $clase["materia"], $clase["salon"], $clase["salon_nombre"], fechaGuion($clase["fecha_inicial"]), fechaGuion($clase["fecha_final"]), $clase["duracion"], $clase["profesores"], $clase["submaterias"], $clase["tipo"], true);
- if($errorTxt != ""){
- $return["error"] = $errorTxt;
- $return["json"] = json_encode($return);
- $return["reload"] = true;
- echo json_encode($return);
- exit();
- }
-
- }
- }
-
- //---- Insertar ----------
- //Inserta Horario grupo
- if($clase["salon"] == "")
- $stmt = $pdo->prepare('Select * from fi_horariogrupo(:gpo, :dia, :hora, :mat, NULL, :usr, :fecha_ini, :fecha_fin, :duracion)');
- else{
- $stmt = $pdo->prepare('Select * from fi_horariogrupo(:gpo, :dia, :hora, :mat, :salon, :usr, :fecha_ini, :fecha_fin, :duracion)');
- $stmt->bindParam(":salon", $clase["salon"]);
- }
- $stmt->bindParam(":gpo", $clase["grupo"]);
- $stmt->bindParam(":dia", $clase["dia"]);
- $stmt->bindParam(":hora", $clase["hora"]);
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- $fecha_tmpI = fechaGuion($clase["fecha_inicial"]);
- $stmt->bindParam(":fecha_ini", $fecha_tmpI);
- $fecha_tmpF = fechaGuion($clase["fecha_final"]);
- $stmt->bindParam(":fecha_fin", $fecha_tmpF);
- $stmt->bindParam(":duracion", $clase["duracion"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar el horario de la materia '".$clase["materia_nombre"]."'. Verifica que no esté ocupado. ".$t[2];
- $error = true;
- }
- $rs = $stmt->fetch();
- $id = intval($rs["fi_horariogrupo"]);
- $stmt->closeCursor();
- unset($rs);
- if(!$error && $clase["tipo"] != 0 && is_array($clase["submaterias"]) ){//Con submaterias
- foreach($clase["submaterias"] as $submateria){
- if(!$error && $submateria["submateria"] != "" && $submateria["submateria"] > 0 && intval($submateria["submateria"]) != 0 && $submateria["activa"]){
- //submateriaTieneProfesor($submateria["submateria"], $clase["profesores"])){
- //si no hay submateria o no hay profesor, no guarda
- $query = ":id, :mat, :sub,";
- if($submateria["fecha_inicial"] != "" && $submateria["fecha_final"] != ""){
- $query .=":fecha_ini, :fecha_fin ";
- }else{
- $query .="NULL, NULL ";
- }
-
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupo('.$query.')');//inserta submaterias
- $stmt->bindParam(":id", $id);
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":sub", $submateria["submateria"]);
- if($submateria["fecha_inicial"] != "" && $submateria["fecha_final"] != ""){ $stmt->bindParam(":fecha_ini", $submateria["fecha_inicial"]); $stmt->bindParam(":fecha_fin", $submateria["fecha_final"]);}
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar la submateria '".$submateria["submateria_nombre"]."' ";//.$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- }//fin submaterias
- //Inserta Profesores/submaterias
- if(!$error && is_array($clase["profesores"]) ){
- foreach($clase["profesores"] as $profesor){
- if(!$error && $profesor["profesor"] != "" && $profesor["profesor"] > 0 && intval($profesor["profesor"]) != 0){
- //si no hay profesor, no guarda
- if($clase["tipo"] == 0){
- $stmt = $pdo->prepare('Select * from fi_profesorhorariogrupo(:id, :prof)');//Sin submaterias
- }else{
- if($profesor["salon"] != ""){
- $query =":salon";
- }else{
- $query ="NULL";
- }
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupoprofesor(:id, :mat, :sub, :prof,'. $query.')');
- $stmt->bindParam(":mat", $clase["materia"]);
- $stmt->bindParam(":sub", $profesor["submateria"]);
- if($profesor["salon"] != "") $stmt->bindParam(":salon", $profesor["salon"]);
- }
- $stmt->bindParam(":id", $id);
- $stmt->bindParam(":prof", $profesor["profesor"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar al profesor '".$profesor["profesor_nombre"]."'. Verifica que no esté repetido. ";//.$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- }//fin profesores
-
- $return["vinculos"] = array();
- //---Inserta vinculos
- if(!$error && count($clase["vinculos"]) > 0){
- foreach($clase["vinculos"] as $vinculo){
- //Inserta Horario grupo
- if($clase["salon"] == "")
- $stmt = $pdo->prepare('Select * from fi_horariogrupo(:gpo, :dia, :hora, :mat, NULL, :usr, :fecha_ini, :fecha_fin, :duracion)');
- else{
- $stmt = $pdo->prepare('Select * from fi_horariogrupo(:gpo, :dia, :hora, :mat, :salon, :usr, :fecha_ini, :fecha_fin, :duracion)');
- $stmt->bindParam(":salon", $clase["salon"]);
- }
- $stmt->bindParam(":gpo", $vinculo["grupo"]);
- $stmt->bindParam(":dia", $clase["dia"]);
- $stmt->bindParam(":hora", $clase["hora"]);
- $stmt->bindParam(":mat", $vinculo["materia"]);
- $stmt->bindParam(":usr", $_SESSION["usuario_id"]);
- $fecha_tmpI = fechaGuion($clase["fecha_inicial"]);
- $stmt->bindParam(":fecha_ini", $fecha_tmpI);
- $fecha_tmpF = fechaGuion($clase["fecha_final"]);
- $stmt->bindParam(":fecha_fin", $fecha_tmpF);
- $stmt->bindParam(":duracion", $clase["duracion"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar el horario de la materia vinculada '".$clase["materia_nombre"]."'. Verifica que no esté ocupado. ".$t[2];
- $error = true;
- }
- $rs = $stmt->fetch();
- $id_link = intval($rs["fi_horariogrupo"]);
- $stmt->closeCursor();
- unset($rs);
- $return["vinculos"][] = $id_link;//devuelve horarios vinculados
- //Vinculadas-----
- /*
- //inserta submaterias a vinculadas
- if(!$error && $clase["tipo"] != 0 && is_array($clase["submaterias"]) ){//Con submaterias
- foreach($clase["submaterias"] as $submateria){
- if(!$error && $submateria["submateria"] != "" && $submateria["submateria"] > 0 && intval($submateria["submateria"]) != 0
- && $submateria["activa"]){
- //si no hay submateria o no hay profesor, no guarda (son PK)
- $query = ":id, :mat, :sub,";
- if($submateria["fecha_inicial"] != "" && $submateria["fecha_final"] != ""){
- $query .=":fecha_ini, :fecha_fin ";
- }else{
- $query .="NULL, NULL ";
- }
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupo('.$query.')');//inserta vinculadas
- $stmt->bindParam(":id", $id_link);
- $stmt->bindParam(":mat", $vinculo["materia"]);
- $stmt->bindParam(":sub", $submateria["submateria"]);
- if($submateria["fecha_inicial"] != "" && $submateria["fecha_final"] != ""){ $stmt->bindParam(":fecha_ini", $submateria["fecha_inicial"]); $stmt->bindParam(":fecha_fin", $submateria["fecha_final"]);}
- //if($submateria["salon"] != "") $stmt->bindParam(":salon", $submateria["salon"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar la submateria vinculada '".$submateria["submateria_nombre"]."' ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- }//fin submaterias*/
- //Inserta Profesores/submaterias
- /*if(!$error && is_array($clase["profesores"]) ){//submaterias
- foreach($clase["profesores"] as $profesor){
- if(!$error && $profesor["profesor"] != "" && $profesor["profesor"] > 0 && intval($profesor["profesor"]) != 0){
- //si no hay profesor, no guarda
- if($clase["tipo"] == 0){
- $stmt = $pdo->prepare('Select * from fi_profesorhorariogrupo(:id, :prof)');
- }else{
- if($profesor["salon"] != ""){
- $query =":salon";
- }else{
- $query ="NULL";
- }
- $stmt = $pdo->prepare('Select * from fi_submateriahorariogrupoprofesor(:id, :mat, :sub, :prof,'. $query.')');
- $stmt->bindParam(":mat", $vinculo["materia"]);
- $stmt->bindParam(":sub", $profesor["submateria"]);
- if($profesor["salon"] != "") $stmt->bindParam(":salon", $profesor["salon"]);
-
- }
- $stmt->bindParam(":id", $id_link);
- $stmt->bindParam(":prof", $profesor["profesor"]);
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al insertar al profesor vinculado '".$profesor["profesor_nombre"]."'. Verifica que no esté repetido. ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
- }
- }
- }//fin profesores*/
-
- //Inserta vínculo
- $stmt = $pdo->prepare('Select * from fi_horariogrupovinculado(:id_base, :id_link)');
- $stmt->bindParam(":id_base", $id);
- $stmt->bindParam(":id_link", $id_link);
-
- if(!$stmt->execute()){
- $t = $stmt->errorInfo();
- $return["error"] .= "Ocurrió un error al vincular los horarios de '".$clase["materia_nombre"]."' y '".$vinculo["materia_nombre"]."'. ".$t[2];
- $error = true;
- }
- $stmt->closeCursor();
-
- }//fin foreach
- }//Fin vínculos
-
- if(!$error){
- $pdo->commit();
- unset($return["error"]);
- $return["ok"] = "El horario se guardó correctamente";
- $return["id"] = $id;
-
- //Inserta Log
- $log = new LogActividad();
- $desc_log = "Inserta en horario GrupoID[".$clase["grupo"]."] [".$clase["materia"]."] Nombre[".$clase["materia_nombre"]."] Día[".$clase["dia"]."] Hora[".$clase["hora"]."] Duración[".$clase["duracion"]."] Fecha de inicio[".$clase["fecha_inicial"]."] Fecha de fin[".$clase["fecha_final"]."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
-
- //---Inserta vinculos
- if(count($clase["vinculos"]) > 0){
- foreach($clase["vinculos"] as $vinculo){
- $desc_log = "Inserta en horario GrupoID[".$vinculo["grupo"]."] [".$vinculo["materia"]."] Nombre[".$vinculo["materia_nombre"]."] Día[".$clase["dia"]."] Hora[".$clase["hora"]."] Duración[".$clase["duracion"]."] Fecha de inicio[".$clase["fecha_inicial"]."] Fecha de fin[".$clase["fecha_final"]."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- }
- }
- }else
- $pdo->rollBack();
- $stmt = null; // cierra conexion
- } catch(PDOException $e) {
- $pdo->rollBack();
- $return["error"] = "Ocurrió un error al insertar los datos de los horarios.";
- }
- }
- $return["json"] = json_encode($return);
- echo json_encode($return);
- ?>
|