alumnos_editar.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/util.php");
  4. require_once("../include/bd_pdo.php");
  5. require_once("../classes/ValidaSesion.php");
  6. require_once("../classes/MainMenu.php");
  7. $menu = 10;
  8. $submenu = 101;
  9. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  10. $objSesion = new ValidaSesion($pdo, $submenu, GEMA);
  11. if(!$objSesion->tieneAcceso() || !$objSesion->puedeEditar()){
  12. header("Location: main.php");
  13. exit;
  14. }
  15. $pag = "alumnos.php";
  16. if(!isset($_GET["id"])){
  17. header("Location: ".$pag."?error=0");
  18. exit;
  19. }
  20. $usr_id = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  21. /*if($usr_id == $_SESSION["usuario_id"]){
  22. header("Location: ".$pag);
  23. exit;
  24. }*/
  25. $stmt = $pdo->prepare('Select * from fs_alumno(:usr, NULL)');
  26. $stmt->bindParam(":usr", $usr_id);
  27. if(!$stmt->execute()){
  28. //print_r($stmt->errorInfo());
  29. header("Location: ".$pag."&error=2");
  30. exit;
  31. }
  32. $usuario_rs = $stmt->fetch();
  33. $stmt->closeCursor();
  34. ?>
  35. <!DOCTYPE html>
  36. <html lang="es" prefix="og: http://ogp.me/ns#">
  37. <head>
  38. <title>GEMA - Facultad de Ingeniería</title>
  39. <meta charset="utf-8">
  40. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  41. <link rel="icon" type="image/png" href="../img/favicon.png" />
  42. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  43. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  44. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  45. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  46. <link rel="stylesheet" href="../css/jquery-ui.css" type="text/css">
  47. <link rel="stylesheet" href="../css/month-picker.css" type="text/css">
  48. <link rel="stylesheet" href="../css/calendar.css" type="text/css">
  49. </head>
  50. <body>
  51. <div>
  52. <?php
  53. //--- Objeto que pinta menu
  54. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, GEMA, "Editar Alumno");//usr, menu, pdo, sist
  55. $menuObj->printMenu();
  56. //Tipo contacto
  57. $stmt = $pdo->prepare('Select * from fs_tipocontacto(NULL)');
  58. if(!$stmt->execute()){
  59. $errorDesc = "Ocurrió un error al cargar los tipos de contacto";
  60. }else{
  61. $tipocontacto_rs = $stmt->fetchAll();
  62. }
  63. $stmt->closeCursor();
  64. //Perfil contacto
  65. $stmt = $pdo->prepare('Select * from fs_perfilcontacto(NULL)');
  66. if(!$stmt->execute()){
  67. $errorDesc = "Ocurrió un error al cargar los tipos de contacto";
  68. }else{
  69. $perfilcontacto_rs = $stmt->fetchAll();
  70. }
  71. $stmt->closeCursor();
  72. //Datos de contacto
  73. $stmt = $pdo->prepare('Select * from fs_contacto(:usr_id, NULL, NULL)');//selecciona contactos
  74. $stmt->bindParam(":usr_id", $usr_id);
  75. if(!$stmt->execute()){
  76. $errorDesc = "Ocurrió un error al cargar los datos de contacto del alumno";
  77. print_r($stmt->errorInfo());
  78. }else{
  79. $contacto_rs = $stmt->fetchAll();
  80. }
  81. $stmt->closeCursor();
  82. //Plan de estudios asignables
  83. $stmt = $pdo->prepare('Select * from fs_planestudio_alumnos(NULL, NULL, true)');
  84. if(!$stmt->execute()){
  85. $errorDesc = "Ocurrió un error al cargar los planes de estudio";
  86. }else{
  87. $plan_rs = $stmt->fetchAll();
  88. }
  89. $stmt->closeCursor();
  90. //Plan de estudios asignados
  91. $stmt = $pdo->prepare('Select * from fs_alumno_planestudio(:usr_id, NULL)');
  92. $stmt->bindParam(":usr_id", $usr_id);
  93. if(!$stmt->execute()){
  94. $errorDesc = "Ocurrió un error al cargar los planes de estudio";
  95. }else{
  96. $carrera_rs = $stmt->fetchAll();
  97. }
  98. $stmt->closeCursor();
  99. //Procedencia
  100. $stmt = $pdo->prepare('Select * from fs_tipoprocedencia(NULL)');
  101. if(!$stmt->execute()){
  102. $errorDesc = "Ocurrió un error al cargar los tipos de instituciones de procedencia del alumno";
  103. }else{
  104. $procedencia_rs = $stmt->fetchAll();
  105. }
  106. $stmt->closeCursor();
  107. //--Manejo de errores y mensajes de exito
  108. if(isset($_GET["error"]) && is_numeric($_GET["error"])){
  109. switch ($_GET["error"]){
  110. case 0: $errorDesc = "No se reciberon los datos del alumno."; break;
  111. case 1: $errorDesc = "Ocurrió un error al actualizar los datos del alumno. Los prámetros pueden ser incorrectos"; break;
  112. case 2: $errorDesc = "No tienes permisos para realizar esa acción."; break;
  113. case 3: $errorDesc = "Ocurrió un error al actualizar los programas de estudio del alumno."; break;
  114. case 4: $errorDesc = "No se puede borrar el programa académico porque tiene materias o calificaciones asignadas."; break;
  115. case 5: $errorDesc = "Ya existe un alumno con ese CURP. Los cambios no se aplicaron. Revisa los datos actuales"; break;
  116. }
  117. }
  118. if(isset($_GET["ok"]) && is_numeric($_GET["ok"])){
  119. switch ($_GET["ok"]){
  120. case 0: $successDesc = "Los datos del alumno se actualizaron correctamente."; break;
  121. }
  122. }
  123. ?>
  124. <main class="container-fluid content marco">
  125. <?php include_once("../include/errorMessage.php");?>
  126. <?php if(isset($plan_rs, $carrera_rs)){
  127. ?>
  128. <div class="row">
  129. <div class="col-12">
  130. <p>Escribe el nombre utilizando mayúsculas, minúsculas y acentos.</p>
  131. <form action="./action/alumno_update.php" method="post" id="formaModal" onsubmit="return validaForm()">
  132. <input type="hidden" name="id" value="<?php echo $usr_id ?>" />
  133. <div class="form-box form-box-info">
  134. <div class="form-group row">
  135. <label for="apellidos" class="col-4 col-form-label">Apellidos *</label>
  136. <div class="col-8 col-sm-4">
  137. <input id="apellidos" name="apellidos" type="text" class="form-control" required="required" maxlength="40" value="<?php echo $usuario_rs["Usuario_apellidos"]; ?>">
  138. </div>
  139. </div>
  140. <div class="form-group row">
  141. <label for="nombre" class="col-4 col-form-label">Nombre *</label>
  142. <div class="col-8 col-sm-4">
  143. <input id="nombre" name="nombre" type="text" class="form-control" required="required" maxlength="30" value="<?php echo $usuario_rs["Usuario_nombre"]; ?>">
  144. </div>
  145. </div>
  146. <div class="form-group row">
  147. <label for="curp" class="col-4 col-form-label">CURP *</label>
  148. <div class="col-8 col-sm-4">
  149. <input id="curp" name="curp" type="text" class="form-control" required="required" maxlength="25" value="<?php echo $usuario_rs["Usuario_curp"]; ?>">
  150. </div>
  151. </div>
  152. </div>
  153. <div class="row">
  154. <div class="col-12 my-4"><h3>Programa académico</h3></div>
  155. </div>
  156. <div class="row" id="carrera-block">
  157. <?php
  158. $id =1;
  159. foreach($carrera_rs as $carrera){
  160. ?>
  161. <div class="col-12 col-sm-6 form-box">
  162. <div class="form-group row">
  163. <label class="col-4 col-form-label">Estado</label>
  164. <div class="col-8 pt-1" style="color:<?php echo $carrera["EstadoAlumno_color"];?>">
  165. <?php echo $carrera["EstadoAlumno_desc"]." - ".$carrera["SubEstadoAlumno_desc"]; ?>
  166. </div>
  167. </div>
  168. <div class="form-group row">
  169. <label for="plan<?php echo $id; ?>" class="col-4 col-form-label">Carrera</label>
  170. <div class="col-8 pt-1">
  171. <?php echo $carrera["Carrera_desc"]." ".$carrera["PlanEstudio_desc"]; ?>
  172. <input type="hidden" name="plan[]" value="<?php echo $carrera["PlanEstudio_id"]; ?>">
  173. <!--<input id="plan<?php echo $id; ?>" type="text" readonly class="form-control-plaintext" value="<?php echo $carrera["Carrera_desc"]." ".$carrera["PlanEstudio_desc"]; ?>">-->
  174. </div>
  175. </div>
  176. <div class="form-group row clave-group">
  177. <label for="clave<?php echo $id; ?>" class="col-4 col-form-label">Clave ULSA</label>
  178. <div class="col-8 ">
  179. <input id="clave<?php echo $id; ?>" name="clave[]" type="text" readonly class="form-control-plaintext" maxlength="7" value="<?php echo $carrera["Usuario_claveULSA"]; ?>">
  180. </div>
  181. </div>
  182. <div class="form-group row ingreso-group">
  183. <label for="ingreso<?php echo $id; ?>" class="col-4 col-form-label">Fecha ingreso *</label>
  184. <div class="col-8">
  185. <input id="ingreso<?php echo $id; ?>" type="text" class="form-control date-picker" placeholder="mm, aaaa" maxlength="10" readonly="readonly" required="required" value="<?php echo fechaMonthPicker($carrera["Alumno_fecha_ingreso"]); ?>">
  186. <input type="hidden" name="ingreso[]" id="ingreso-hidden<?php echo $id; ?>" value="<?php echo fechaGuion($carrera["Alumno_fecha_ingreso"]); ?>">
  187. <div class="invalid-feedback">No es una fecha válida.</div>
  188. </div>
  189. </div>
  190. <div class="form-group row ingreso-group">
  191. <label for="generacion<?php echo $id; ?>" class="col-4 col-form-label">Generación *</label>
  192. <div class="col-8">
  193. <input id="generacion<?php echo $id; ?>" type="text" class="form-control date-picker" placeholder="mm, aaaa" maxlength="10" readonly="readonly" required="required" value="<?php echo fechaMonthPicker($carrera["Alumno_generacion"]); ?>">
  194. <input type="hidden" name="generacion[]" id="generacion-hidden<?php echo $id; ?>" value="<?php echo fechaGuion($carrera["Alumno_generacion"]); ?>">
  195. <div class="invalid-feedback">No es una fecha válida.</div>
  196. </div>
  197. </div>
  198. <?php if($carrera["TipoProcedencia_id"] != ""){ ?>
  199. <div class="form-group row procedencia-group">
  200. <label for="procedencia" class="col-4 col-form-label">Institución de procedencia *</label>
  201. <div class="col-8">
  202. <select name="procedencia[]" id="procedencia<?php echo $id; ?>" class="form-control">
  203. <?php
  204. foreach($procedencia_rs as $procedencia) {
  205. $selected = ($carrera["TipoProcedencia_id"] == $procedencia["TipoProcedencia_id"])?'selected="selected"':'';
  206. ?>
  207. <option <?php echo $selected;?> value="<?php echo $procedencia["TipoProcedencia_id"];?>"><?php echo $procedencia["TipoProcedencia_desc"];?></option>
  208. <?php } ?>
  209. </select>
  210. </div>
  211. </div>
  212. <?php }else{?>
  213. <input type="hidden" name="procedencia[]" value="0">
  214. <?php } ?>
  215. </div>
  216. <?php
  217. $id++;
  218. } ?>
  219. </div><!-- row -->
  220. <div class="my-5 p-4 bg-light">
  221. <div class="row">
  222. <div class="col-12 mb-3"><h3>Contacto</h3></div>
  223. </div>
  224. <div id="contacto_list" class="col-12 px-0">
  225. <div class="form-group row contacto d-none">
  226. <div class="col-2 px-1">
  227. <select name="contacto_tipo[]" class="form-control tipo" disabled="true" readonly="true">
  228. <?php foreach($tipocontacto_rs as $tipocontacto) {?>
  229. <option value="<?php echo $tipocontacto["TipoContacto_id"];?>" data-subtipo="<?php echo $tipocontacto["SubtipoContacto"];?>"><?php echo $tipocontacto["TipoContacto_desc"];?></option>
  230. <?php } ?>
  231. </select>
  232. </div>
  233. <div class="col-2 px-1">
  234. <select name="contacto_perfil[]" class="form-control" disabled="true" readonly="true">
  235. <?php foreach($perfilcontacto_rs as $tipocontacto) {?>
  236. <option value="<?php echo $tipocontacto["PerfilContacto_id"];?>" <?php if($tipocontacto["PerfilContacto_seleccionado"]){echo 'checked="checked"';}?>><?php echo $tipocontacto["PerfilContacto_desc"];?></option>
  237. <?php } ?>
  238. </select>
  239. </div>
  240. <div class="col-2 px-1 d-none">
  241. <select name="contacto_subtipo[]" class="form-control subtipo" disabled="true" readonly="true">
  242. </select>
  243. </div>
  244. <div class="col px-1">
  245. <input name="contacto_valor[]" type="text" class="form-control" maxlength="100" placeholder="Valor" disabled="true" readonly="true">
  246. </div>
  247. <div class="col-1">
  248. <button type="button" class="btn btn-outline-danger borra-contacto"><?php echo $ICO["borrar2"];?> </button>
  249. </div>
  250. </div>
  251. <?php
  252. foreach($contacto_rs as $contacto){ ?>
  253. <div class="form-group row contacto">
  254. <div class="col-2 px-1">
  255. <select name="contacto_tipo[]" class="form-control tipo">
  256. <?php foreach($tipocontacto_rs as $tipocontacto) {
  257. $selected = ($contacto["TipoContacto_id"] == $tipocontacto["TipoContacto_id"]) ? "selected='selected'":"";
  258. ?>
  259. <option <?php echo $selected;?> value="<?php echo $tipocontacto["TipoContacto_id"];?>" data-subtipo="<?php echo $tipocontacto["SubtipoContacto"];?>"><?php echo $tipocontacto["TipoContacto_desc"];?></option>
  260. <?php } ?>
  261. </select>
  262. </div>
  263. <div class="col-2 px-1">
  264. <select name="contacto_perfil[]" class="form-control">
  265. <?php foreach($perfilcontacto_rs as $tipocontacto) {
  266. $selected = ($contacto["PerfilContacto_id"] == $tipocontacto["PerfilContacto_id"]) ? "selected='selected'":"";
  267. ?>
  268. <option <?php echo $selected;?> value="<?php echo $tipocontacto["PerfilContacto_id"];?>" <?php if($tipocontacto["PerfilContacto_seleccionado"]){echo 'checked="checked"';}?>><?php echo $tipocontacto["PerfilContacto_desc"];?></option>
  269. <?php } ?>
  270. </select>
  271. </div>
  272. <?php
  273. //Subipo contacto
  274. $stmt = $pdo->prepare('Select * from fs_subtipocontacto(:tipo, NULL)');
  275. $stmt->bindParam(":tipo", $contacto["TipoContacto_id"]);
  276. if(!$stmt->execute()){
  277. $errorDesc = "Ocurrió un error al cargar los tipos de contacto";
  278. $subtipocontacto_rs = array();
  279. }else{
  280. $subtipocontacto_rs = $stmt->fetchAll();
  281. }
  282. $stmt->closeCursor();
  283. if(count($subtipocontacto_rs) == 0){ ?>
  284. <div class="col-2 px-1 d-none">
  285. <select name="contacto_subtipo[]" class="form-control subtipo">
  286. </select>
  287. </div>
  288. <?php } else {?>
  289. <div class="col-2 px-1">
  290. <select name="contacto_subtipo[]" class="form-control subtipo">
  291. <?php foreach($subtipocontacto_rs as $tipocontacto) {
  292. $selected = ($contacto["SubtipoContacto_id"] == $tipocontacto["SubtipoContacto_id"]) ? "selected='selected'":"";
  293. ?>
  294. <option <?php echo $selected;?> value="<?php echo $tipocontacto["SubtipoContacto_id"];?>"><?php echo $tipocontacto["SubtipoContacto_desc"];?></option>
  295. <?php } ?>
  296. </select>
  297. </div>
  298. <?php } ?>
  299. <div class="col px-1">
  300. <input name="contacto_valor[]" type="text" class="form-control" maxlength="100" placeholder="Valor" value="<?php echo $contacto["Contacto_valor"]; ?>">
  301. </div>
  302. <div class="col-1">
  303. <button type="button" class="btn btn-outline-danger borra-contacto"><?php echo $ICO["borrar2"];?> </button>
  304. </div>
  305. </div>
  306. <?php } ?>
  307. </div>
  308. <div class="row">
  309. <div class="col-4 col-sm-2 px-1">
  310. <button type="button" class="btn btn-outline-secondary btn-block" id="agrega-contacto"><?php echo $ICO["mas"];?> Agregar</button>
  311. </div>
  312. </div>
  313. </div>
  314. <div class="form-group row mt-3">
  315. <div class="offset-4 col-8">
  316. <button type="submit" class="btn btn-outline-primary" id="submitBtn" data-tipo="1"><?php echo $ICO["aceptar"];?> Guardar</button>
  317. <a href="alumnos.php" class="btn btn-outline-danger"><?php echo $ICO["cancelar"];?> Cancelar</a>
  318. </div>
  319. </div>
  320. </form>
  321. </div>
  322. </div>
  323. <?php } ?>
  324. </main>
  325. <!--- FOOTER--->
  326. <?php require_once("../include/footer.php"); ?>
  327. <!-- Modal -->
  328. <div class="modal fade" id="modal_confirm" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  329. <div class="modal-dialog modal-dialog-centered" role="document">
  330. <div class="modal-content">
  331. <div class="modal-body">
  332. <div class="row">
  333. <div class="col">
  334. <p class="font-weight-bold">¿Estás seguro de que quieres quitar el programa académico del alumno?</p>
  335. <p>Sólo se puede quitar si no tiene materias asignadas.</p>
  336. </div>
  337. </div>
  338. </div>
  339. <div class="modal-footer">
  340. <input type="hidden" id="planbox_borrar" value="">
  341. <button type="button" class="btn btn-outline-primary" id="btn-borrar"><?php echo $ICO["aceptar"];?> Borrar</button>
  342. <button type="button" class="btn btn-outline-danger" data-dismiss="modal" aria-label="Close"><?php echo $ICO["cancelar"];?> Cancelar</button>
  343. </div>
  344. </div>
  345. </div>
  346. </div>
  347. </div>
  348. <script src="../js/jquery.min.js"></script>
  349. <script src="../js/jquery-ui.js"></script>
  350. <script src="../js/datepicker-es.js"></script>
  351. <script src="../js/month-picker.js"></script>
  352. <script src="../js/bootstrap/popper.min.js"></script>
  353. <script src="../js/bootstrap/bootstrap.min.js"></script>
  354. <script src="../js/fechas.js"></script>
  355. <script src="../js/util.js"></script>
  356. <script src="../js/sidebarmenu.js"></script>
  357. <script src="./js/contacto.js"></script>
  358. <script>
  359. //var datepickerOptions = { dateFormat: "dd/mm/yy", changeMonth: true, changeYear: true};
  360. var tieneNueva = false;
  361. function validaForm(){
  362. $("#contacto_list >.contacto:first-child").remove();
  363. return true;
  364. }
  365. $(document).ready(function(){
  366. /*$(".date-picker" ).datepicker(datepickerOptions);
  367. $(".date-picker" ).datepicker( $.datepicker.regional[ "es" ] );*/
  368. $('.date-picker').MonthPicker({ Button: false, MaxMonth: 2, MonthFormat: 'M, yy', AltFormat: 'yy-mm-dd'});
  369. $.each($('.date-picker'), function(index){
  370. if($(this).siblings("input[type=hidden]").length > 0){
  371. var oculto = '#'+$(this).siblings("input[type=hidden]").prop("id");
  372. $(this).MonthPicker('option', {'AltField': oculto });
  373. }
  374. });
  375. });
  376. </script>
  377. </body>
  378. </html>