123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- <?php
- /*
- * Inserta los datos de un nuevo grupo
- * Recibe:
- * fecha_inicial,
- * hora_ini,
- * min_ini,
- * duracion
- * plan
- * materia
- * salon (opcional)
- * gpo < para final
- * prof < para extra
- * Error:
- * 0 - No se recibieron los datos
- * 1 - Error de base de datos
- * Success:
- */
- require_once("../../include/constantes.php");
- require_once("../../include/bd_pdo.php");
- require_once("../../classes/ValidaSesion.php");
- require_once("../classes/LogActividad.php");//die on error
- require_once("../../include/util.php");
- $pag = "../examenes.php";
- //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
- $objSesion = new ValidaSesion($pdo, 53, APSA);
- if(!$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 examen.";
- }else{
- $json = json_decode($_POST["json"], true);
- $materia = $json["mat"];
- $fecha = $json["fecha_inicial"];
- $hora_ini = $json["hora_ini"];//limpia texto
- $min_ini = $json["min_ini"];
- $duracion = $json["duracion"];
- //$copiar = $json["copiar"];
- $copiar = 0;
-
- if(!empty($json["profesor"]))
- $prof = $json["profesor"];
- if(!empty($json["salon"]))
- $salon = $json["salon"];
- $query = "";
- $query.= (!empty($salon) ? ":salon," : "NULL,");
- $query.= (!empty($prof) ? ":prof" : "NULL");
- $fecha_ini = fechaGuion($fecha)." ".$hora_ini.":".$min_ini;
- $fecha_fin = date('Y-m-d H:i:00', strtotime($fecha_ini.' + '.$duracion.' minute'));
- $exLog = array();
- $error = false;
- try {
- $pdo->beginTransaction();
- if(!empty($salon) && !empty($prof)){//revisa que el profesor actual no esté en otros salones a la misma hora
- $stmt = $pdo->prepare('Select * from fs_validasalon_examen(:f_ini, :f_fin, :periodo, :salon, :prof)');
-
- $stmt->bindParam(":f_ini", $fecha_ini);
- $stmt->bindParam(":f_fin", $fecha_fin);
- $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
- $stmt->bindParam(":salon", $salon);
- $stmt->bindParam(":prof", $prof);
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al insertar los datos del examen.";
- $error = true;
- }else{
- $choque = $stmt->fetch();
- if(!empty($choque)){
- $error = true;
- $return["error"] = "El profesor ya está asignado al salón ".$choque["Salon_desc"]." [".$choque["Materia_desc"]."] en la misma fecha y hora.";
- }
- }
- $stmt->closeCursor();
- if(!$error){
- $stmt = $pdo->prepare('Select * from fs_validaprofesorsalon_examen(:f_ini, :f_fin, :periodo, :salon, :prof)');
- $stmt->bindParam(":f_ini", $fecha_ini);
- $stmt->bindParam(":f_fin", $fecha_fin);
- $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
- $stmt->bindParam(":salon", $salon);
- $stmt->bindParam(":prof", $prof);
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al insertar los datos del examen.";
- $error = true;
- }else{
- $choque = $stmt->fetch();
- if(!empty($choque)){
- $error = true;
- $return["error"] = "El salón ya está asignado al profesor ".$choque["Usuario_nombre"]." ".$choque["Usuario_apellidos"]."[".$choque["Materia_desc"]."] en la misma fecha y hora.";
- }
- }
- $stmt->closeCursor();
- }
- }
- if(!$error){
- // --- Si no existe inserta
- $query = "";
- $query.= (isset($salon) ? ":salon," : "NULL,");
- $query.= (isset($prof) ? ":prof," : "NULL,");
- $query.= "NULL,";//grupo
- if($copiar==0 || empty($prof)){
- $stmt = $pdo->prepare('Select * from fi_examen(:f_ini, :f_fin, :mat, true,'.$query.' :periodo)');
- $stmt->bindParam(":f_ini", $fecha_ini);
- $stmt->bindParam(":f_fin", $fecha_fin);
- if(!empty($salon)) $stmt->bindParam(":salon", $salon);
- if(!empty($prof)) $stmt->bindParam(":prof", $prof);
- $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
- $stmt->bindParam(":mat", $materia);
-
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al insertar los datos del examen.";
- $error = true;
- }else{
- $rs = $stmt->fetch();
- $ex_id = $rs["fi_examen"];
- $exLog[] = $ex_id;//solo para el log
- $stmt->closeCursor();
- $stmt = null;
- unset($rs);
- if(!empty($json["submaterias"]) && count($json["submaterias"])){
- foreach($json["submaterias"] as $sub){
-
- if(!empty($sub["salon"]) || !empty($sub["prof"])){
- $query = "";
- $query.= (!empty($sub["salon"]) ? ":salon," : "NULL,");
- $query.= (!empty($sub["prof"]) ? ":prof" : "NULL");
-
- $stmt = $pdo->prepare('Select * from fi_examensubmateria(:ex, :mat, :sub, '.$query.')');
- $stmt->bindParam(":ex", $ex_id);
- $stmt->bindParam(":mat", $materia);
- $stmt->bindParam(":sub", $sub["id"]);
- if(!empty($sub["salon"])) $stmt->bindParam(":salon", $sub["salon"]);
- if(!empty($sub["prof"])) $stmt->bindParam(":prof", $sub["prof"]);
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al insertar los datos del examen de la electiva.";
- $error = true;
- }
- }
- }
- if(!empty($stmt))
- $stmt->closeCursor();
- }
-
- $stmt = null;
- }
- }else {//duplicar y sí hay profesor
- $stmt = $pdo->prepare('select * from fs_materiasprofesor(:periodo,:prof)');
- $stmt->bindParam(":prof", $prof);
- $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al obtener las materias relacionadas.";
- $error = true;
- }else{
- $materiasArr = $stmt->fetchAll();
- //$return["materias"] = $materiasArr;
- $stmt->closeCursor();
-
- foreach($materiasArr as $mat){
- //borra todas los examenes de las materias del profesor
- if(empty($mat["Submateria_id"]))
- $stmt = $pdo->prepare('Select * from fd_examenprofesorperiodo(:prof, :periodo, :mat, true)');//true es materia
- else
- $stmt = $pdo->prepare('Select * from fd_examenprofesorperiodo(:prof, :periodo, :mat, false)');//false es submateri
- $stmt->bindParam(":prof", $prof);
- $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
- $stmt->bindParam(":mat", $mat["Materia_id"]);
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al borrar los exámenes anteriores.";
- $error = true;
- }
- if(!$error){
- if(empty($mat["Submateria_id"]))
- $stmt = $pdo->prepare('Select * from fi_examen(:f_ini, :f_fin, :mat, true,'.$query.' :periodo)');//true es materia
- else
- $stmt = $pdo->prepare('Select * from fi_examen(:f_ini, :f_fin, :mat, false,'.$query.' :periodo)');//false es submateria
- $stmt->bindParam(":f_ini", $fecha_ini);
- $stmt->bindParam(":f_fin", $fecha_fin);
- if(!empty($salon)) $stmt->bindParam(":salon", $salon);
- if(!empty($prof)) $stmt->bindParam(":prof", $prof);
- $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
- $stmt->bindParam(":mat", $mat["Materia_id"]);
-
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al insertar los datos del examen.";
- $error = true;
- }else{
- $rs = $stmt->fetch();
- $ex_id = $rs["fi_examen"];
- $exLog[] = $ex_id;
- $stmt->closeCursor();
- $stmt = null;
- unset($rs);
- if(!empty($json["submaterias"]) && count($json["submaterias"])){
- foreach($json["submaterias"] as $sub){
-
- if(!empty($sub["salon"]) || !empty($sub["prof"])){
- $query2 = "";
- $query2.= (!empty($sub["salon"]) ? ":salon," : "NULL,");
- $query2.= (!empty($sub["prof"]) ? ":prof" : "NULL");
-
- $stmt = $pdo->prepare('Select * from fi_examensubmateria(:ex, :mat, :sub, '.$query2.')');
- $stmt->bindParam(":ex", $ex_id);
- $stmt->bindParam(":mat", $mat["Materia_id"]);
- $stmt->bindParam(":sub", $sub["id"]);
- if(!empty($sub["salon"])) $stmt->bindParam(":salon", $sub["salon"]);
- if(!empty($sub["prof"])) $stmt->bindParam(":prof", $sub["prof"]);
- if(!$stmt->execute()){
- $return["error"] = "Ocurrió un error al insertar los datos del examen de la electiva.";
- $error = true;
- }
- }
- }
- $stmt->closeCursor();
- }
- }
- }
-
- }//foreach
-
- $stmt = null;
- }
- }//copiar
- }
- if($error){
- $pdo->rollBack();
- }else{
- $pdo->commit();
- $log = new LogActividad();
- $desc_log = "Inserta examen nuevo ID[".implode(',', $exLog)."] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Salon[".$salon."]";
- //$desc_log = "Inserta examen nuevo ID[] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Materia[".$materia."] Salon[".$salon."]";
- $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
- $return["ok"] = "ok";
- }
- }catch(PDOException $e) {
- $pdo->rollBack();
- $return["error"] = "Error al insertar el examen".$e->getMessage();
- }
- }
- $return["json"] = json_encode($return);
- echo json_encode($return);
- ?>
|