examen_update.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. <?php
  2. /*
  3. * Inserta los datos de un nuevo grupo
  4. * Recibe:
  5. * fecha_inicial,
  6. * hora_ini,
  7. * min_ini,
  8. * hora_fin
  9. * min_fin
  10. * isExtra
  11. * materia
  12. * salon (opcional)
  13. * gpo < para final
  14. * prof < para extra
  15. * Error:
  16. * 0 - No se recibieron los datos
  17. * 1 - Error de base de datos
  18. * Success:
  19. */
  20. require_once("../../include/constantes.php");
  21. require_once("../../include/bd_pdo.php");
  22. require_once("../../classes/ValidaSesion.php");
  23. require_once("../classes/LogActividad.php");//die on error
  24. require_once("../../include/util.php");
  25. $objSesion = new ValidaSesion($pdo, 53, APSA);
  26. if(!$objSesion->puedeEditar()){
  27. $return["error"] = "Error! No tienes permisos para realizar esta acción.";
  28. }else if(!isset($_POST["json"])){
  29. $return["error"] = "Error! No se recibió la información del examen.";
  30. }else{
  31. $json = json_decode($_POST["json"], true);
  32. $id = $json["examen"];
  33. $materia = $json["mat"];
  34. $fecha = $json["fecha_inicial"];
  35. $hora_ini = $json["hora_ini"];//limpia texto
  36. $min_ini = $json["min_ini"];
  37. $duracion = $json["duracion"];
  38. $copiar = $json["copiar"];
  39. $error = false;
  40. $fecha_ini = fechaGuion($fecha)." ".$hora_ini.":".$min_ini;
  41. $fecha_fin = date('Y-m-d H:i:00', strtotime($fecha_ini.' + '.$duracion.' minute'));
  42. if(!empty($json["profesor"]))
  43. $prof = $json["profesor"];
  44. if(!empty($json["salon"]))
  45. $salon = $json["salon"];
  46. $ex_log = array();
  47. try {
  48. $pdo->beginTransaction();
  49. if(!empty($salon) && !empty($prof)){
  50. $stmt = $pdo->prepare('Select * from fs_validasalon_examen(:f_ini, :f_fin, :periodo, :salon, :prof)');
  51. $stmt->bindParam(":f_ini", $fecha_ini);
  52. $stmt->bindParam(":f_fin", $fecha_fin);
  53. $stmt->bindParam(":salon", $salon);
  54. $stmt->bindParam(":prof", $prof);
  55. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  56. if(!$stmt->execute()){
  57. $return["error"] = "Ocurrió un error al insertar los datos del examen.";
  58. $error = true;
  59. }else{
  60. $choque = $stmt->fetch();
  61. if(!empty($choque)){
  62. $error = true;
  63. $return["error"] = "El profesor ya está asignado al salón ".$choque["Salon_desc"]." [".$choque["Materia_desc"]."] en la misma fecha y hora.";
  64. }
  65. }
  66. $stmt->closeCursor();
  67. }
  68. if(!$error){
  69. $stmt = $pdo->prepare('Select * from fs_validaprofesorsalon_examen(:f_ini, :f_fin, :periodo, :salon, :prof)');
  70. $stmt->bindParam(":f_ini", $fecha_ini);
  71. $stmt->bindParam(":f_fin", $fecha_fin);
  72. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  73. $stmt->bindParam(":salon", $salon);
  74. $stmt->bindParam(":prof", $prof);
  75. if(!$stmt->execute()){
  76. $return["error"] = "Ocurrió un error al insertar los datos del examen.";
  77. $error = true;
  78. }else{
  79. $choque = $stmt->fetch();
  80. if(!empty($choque)){
  81. $error = true;
  82. $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.";
  83. }
  84. }
  85. $stmt->closeCursor();
  86. }
  87. if(!$error){
  88. if($copiar==0 || empty($prof)){
  89. $query = "";
  90. $query.= (!empty($salon) ? ":salon," : "NULL,");
  91. $query.= (!empty($prof) ? ":prof" : "NULL");
  92. $ex_log[] = $id;
  93. $stmt = $pdo->prepare('Select * from fu_examen(:id, :f_ini, :f_fin, '.$query.')');
  94. $stmt->bindParam(":id", $id);
  95. $stmt->bindParam(":f_ini", $fecha_ini);
  96. $stmt->bindParam(":f_fin", $fecha_fin);
  97. if(!empty($salon)) $stmt->bindParam(":salon", $salon);
  98. if(!empty($prof)) $stmt->bindParam(":prof", $prof);
  99. if(!$stmt->execute()){
  100. $return["error"] = "Ocurrió un error al actualizar los datos del examen.";
  101. $error = true;
  102. }
  103. $stmt->closeCursor();
  104. $stmt = null;
  105. if(!$error){
  106. $stmt = $pdo->prepare('Select * from fd_examensubmateria(:id, NULL)');
  107. $stmt->bindParam(":id", $id);
  108. if(!$stmt->execute()){
  109. $return["error"] = "Ocurrió un error al actualizar los datos de las submaterias del examen.";
  110. $error = true;
  111. }
  112. }
  113. if(!$error){
  114. if(!empty($json["submaterias"]) && count($json["submaterias"])){
  115. foreach($json["submaterias"] as $sub){
  116. if(!empty($sub["salon"]) || !empty($sub["prof"])){
  117. $query2 = "";
  118. $query2.= (!empty($sub["salon"]) ? ":salon," : "NULL,");
  119. $query2.= (!empty($sub["prof"]) ? ":prof" : "NULL");
  120. $stmt = $pdo->prepare('Select * from fi_examensubmateria(:ex, :mat, :sub, '.$query2.')');
  121. $stmt->bindParam(":ex", $id);
  122. $stmt->bindParam(":mat", $materia);
  123. $stmt->bindParam(":sub", $sub["id"]);
  124. if(!empty($sub["salon"])) $stmt->bindParam(":salon", $sub["salon"]);
  125. if(!empty($sub["prof"])) $stmt->bindParam(":prof", $sub["prof"]);
  126. if(!$stmt->execute()){
  127. $return["error"] = "Ocurrió un error al insertar los datos del examen de la electiva.";
  128. $error = true;
  129. }
  130. }
  131. }
  132. $stmt->closeCursor();
  133. $stmt = null;
  134. }
  135. }
  136. }else{//duplicar
  137. $query = "";
  138. $query.= (isset($salon) ? ":salon," : "NULL,");
  139. $query.= (isset($prof) ? ":prof," : "NULL,");
  140. $query.= "NULL,";//grupo
  141. $stmt = $pdo->prepare('select * from fs_materiasprofesor(:periodo,:prof)');
  142. $stmt->bindParam(":prof", $prof);
  143. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  144. if(!$stmt->execute()){
  145. $return["error"] = "Ocurrió un error al obtener las materias relacionadas.";
  146. $error = true;
  147. }else{
  148. $materiasArr = $stmt->fetchAll();
  149. //$return["materias"] = $materiasArr;
  150. $stmt->closeCursor();
  151. foreach($materiasArr as $mat){
  152. //borra todas los examenes de las materias del profesor
  153. if(empty($mat["Submateria_id"])){
  154. $stmt = $pdo->prepare('Select * from fd_examenprofesorperiodo(:prof, :periodo, :mat, true)');//true es materia
  155. $stmt->bindParam(":mat", $mat["Materia_id"]);
  156. }else{
  157. $stmt = $pdo->prepare('Select * from fd_examenprofesorperiodo(:prof, :periodo, :mat, false)');//false es submateria
  158. $stmt->bindParam(":mat", $mat["Submateria_id"]);
  159. }
  160. $stmt->bindParam(":prof", $prof);
  161. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  162. if(!$stmt->execute()){
  163. $return["error"] = "Ocurrió un error al borrar los exámenes anteriores.";
  164. $error = true;
  165. }
  166. if(!$error){
  167. if(empty($mat["Submateria_id"])){
  168. $stmt = $pdo->prepare('Select * from fi_examen(:f_ini, :f_fin, :mat, true,'.$query.' :periodo)');//true es materia
  169. $stmt->bindParam(":mat", $mat["Materia_id"]);
  170. }else{
  171. $stmt = $pdo->prepare('Select * from fi_examen(:f_ini, :f_fin, :mat, false,'.$query.' :periodo)');//false es submateria
  172. $stmt->bindParam(":mat", $mat["Submateria_id"]);
  173. }
  174. $stmt->bindParam(":f_ini", $fecha_ini);
  175. $stmt->bindParam(":f_fin", $fecha_fin);
  176. if(!empty($salon)) $stmt->bindParam(":salon", $salon);
  177. if(!empty($prof)) $stmt->bindParam(":prof", $prof);
  178. $stmt->bindParam(":periodo", $_SESSION["periodo_id"]);
  179. if(!$stmt->execute()){
  180. $return["error"] = "Ocurrió un error al insertar los datos del examen.";
  181. $error = true;
  182. }else{
  183. $rs = $stmt->fetch();
  184. $ex_id = $rs["fi_examen"];
  185. $exLog[] = $ex_id;
  186. $stmt->closeCursor();
  187. $stmt = null;
  188. unset($rs);
  189. //Submaterias de materia original
  190. if(!empty($json["submaterias"]) && count($json["submaterias"])){
  191. foreach($json["submaterias"] as $sub){
  192. if(!empty($sub["salon"]) || !empty($sub["prof"])){
  193. $query2 = "";
  194. $query2.= (!empty($sub["salon"]) ? ":salon," : "NULL,");
  195. $query2.= (!empty($sub["prof"]) ? ":prof" : "NULL");
  196. $stmt = $pdo->prepare('Select * from fi_examensubmateria(:ex, :mat, :sub, '.$query2.')');
  197. $stmt->bindParam(":ex", $ex_id);
  198. $stmt->bindParam(":mat", $mat["Materia_id"]);
  199. $stmt->bindParam(":sub", $sub["id"]);
  200. if(!empty($sub["salon"])) $stmt->bindParam(":salon", $sub["salon"]);
  201. if(!empty($sub["prof"])) $stmt->bindParam(":prof", $sub["prof"]);
  202. if(!$stmt->execute()){
  203. $return["error"] = "Ocurrió un error al insertar los datos del examen de la electiva.";
  204. $error = true;
  205. }
  206. }
  207. }
  208. $stmt->closeCursor();
  209. }
  210. //if()
  211. }
  212. }
  213. }//foreach
  214. $stmt = null;
  215. }
  216. }//duplicar
  217. }
  218. if($error){
  219. $pdo->rollBack();
  220. }else{
  221. $pdo->commit();
  222. $log = new LogActividad();
  223. $desc_log = "Actualiza examen ID[".implode(",",$ex_log)."] Fechas[".$fecha_ini."][".$fecha_fin."] Periodo[".$_SESSION["periodo_id"]."] Salon[".$salon."]";
  224. $log->appendLog($_SESSION["usuario_id"], $_SESSION["usuario_nombre"]." ".$_SESSION["usuario_apellidos"], $desc_log);
  225. $return["ok"] = "Actualizado";
  226. }
  227. }catch(PDOException $e) {
  228. $pdo->rollBack();
  229. $return["error"] = "Error al actualizar el examen. ".$e->getMessage();
  230. }
  231. }
  232. $return["json"] = json_encode($return);
  233. echo json_encode($return);
  234. ?>