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); ?>