reporte_alumnoscardex_ver.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. <?php
  2. setlocale(LC_TIME, 'es_MX.UTF-8');
  3. require_once("../include/nocache.php");
  4. require_once("../include/constantes.php");
  5. require_once("../include/bd_pdo.php");
  6. require_once("../include/util.php");
  7. require_once("../classes/ValidaSesion.php");
  8. require_once("../classes/MainMenu.php");
  9. include_once('../include/xTemplate/xtemplate.class.php'); // including mpdf.php
  10. $menu = 12;
  11. $submenu = 122;
  12. $pag = "reporte_alumnoscardex.php";
  13. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  14. $objSesion = new ValidaSesion($pdo, array(102, 122), GEMA);
  15. if(!$objSesion->tieneAcceso()){
  16. header("Location: ".$pag."?error=3");
  17. exit();
  18. }
  19. unset($objValida);
  20. if(!isset($_GET["id"])){
  21. header("Location: ".$pag."?error=0");
  22. exit();
  23. }
  24. $id = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  25. //Obtiene datos
  26. $stmt = $pdo->prepare('Select * from fs_alumno(:id, NULL)');
  27. $stmt->bindParam(":id", $id);
  28. if(!$stmt->execute()){
  29. header("Location: ".$pag."?error=2");
  30. //$errorDesc = "Error al cargar los datos del alumno";
  31. //print_r($stmt->errorInfo());
  32. exit();
  33. }
  34. $alumno_rs = $stmt->fetchAll();
  35. $stmt->closeCursor();
  36. if(count($alumno_rs) == 0){
  37. header("Location: ".$pag."?error=2");
  38. //$errorDesc = "Error al cargar los datos del alumno";
  39. //print_r($stmt->errorInfo());
  40. exit();
  41. }
  42. $stmt = $pdo->prepare('Select * from fs_contacto(:id, NULL, NULL)');
  43. $stmt->bindParam(":id", $id);
  44. if(!$stmt->execute()){
  45. //$err = $stmt->errorInfo();
  46. //$return["error"] = "Ocurrió un error al leer los datos del usuario.".$err[2];
  47. header("Location: ".$pag."?error=2");
  48. exit();
  49. }
  50. $contacto_rs = $stmt->fetchAll();
  51. $stmt->closeCursor();
  52. ?>
  53. <!DOCTYPE html>
  54. <html lang="es" prefix="og: http://ogp.me/ns#">
  55. <head>
  56. <title>GEMA - Facultad de Ingeniería</title>
  57. <meta charset="utf-8">
  58. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  59. <link rel="icon" type="image/png" href="../img/favicon.png" />
  60. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  61. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  62. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  63. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  64. <link rel="stylesheet" href="./css/alumnocardex.css" type="text/css">
  65. </head>
  66. <body>
  67. <div>
  68. <?php
  69. //--- Objeto que pinta menu
  70. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, GEMA, $alumno_rs[0]["Usuario_apellidos"]." ".$alumno_rs[0]["Usuario_nombre"] );//usr, menu, pdo, sist
  71. $menuObj->printMenu();
  72. ?>
  73. <main class="container-fluid content marco">
  74. <div class="row">
  75. <div class="col-12 text-center">
  76. <h4 class="text-danger mb-3"><b>CURP:</b> <?php echo $alumno_rs[0]["Usuario_curp"];?></h4>
  77. <p id="contacto-block" class="text-center mb-4">
  78. <?php
  79. foreach($contacto_rs as $contacto){
  80. ?>
  81. <span class="contacto mx-3"><span title="<?php echo $contacto["TipoContacto_desc"]." ".$contacto["SubtipoContacto_desc"]." ".$contacto["PerfilContacto_desc"];?>">
  82. <span class="<?php echo $contacto["TipoContacto_icono"];?>"></span></span> <?php echo $contacto["Contacto_valor"];?></span>
  83. <?php } ?>
  84. </p>
  85. </div>
  86. </div>
  87. <ul class="nav nav-tabs d-print-none my-4" id="myTab" role="tablist">
  88. <li class="nav-item">
  89. <a class="nav-link active" id="tabEdo-tab" data-toggle="tab" href="#tabEdo" role="tab" aria-controls="calendario" aria-selected="true">Cambios de estado</a>
  90. </li>
  91. <?php
  92. foreach($alumno_rs as $alumno){
  93. ?>
  94. <li class="nav-item">
  95. <a class="nav-link" id="tab<?php echo $alumno["Usuario_claveULSA"];?>-tab" data-toggle="tab" href="#tab<?php echo $alumno["Usuario_claveULSA"];?>" role="tab" aria-controls="calendario" aria-selected="false"><?php echo "<b>".$alumno["Usuario_claveULSA"]."</b> ".$alumno["Carrera_prefijo"];?></a>
  96. </li>
  97. <?php
  98. }
  99. ?>
  100. </ul>
  101. <div class="tab-content" id="cardexTabContent">
  102. <div class="tab-pane fade show active" id="tabEdo" role="tabpanel" aria-labelledby="tabEdo-tab">
  103. <h4 class="mb-4">Historial de cambios de estado</h4>
  104. <?php
  105. $stmt = $pdo->prepare('Select * from fs_alumnosubestado(:id, NULL)');
  106. $stmt->bindParam(":id", $alumno_rs[0]["Usuario_id"]);
  107. if(!$stmt->execute()){
  108. $tmp = $stmt->errorInfo();
  109. echo "Ocurrió un error al leer el histórico de estados del alumno.";//.$tmp[2];
  110. }
  111. $subestado_rs = $stmt->fetchAll();
  112. $stmt->closeCursor();
  113. if(count($subestado_rs)>0){
  114. ?>
  115. <div class="col-12 table-responsive">
  116. <table class="table table-sm table-striped table-white">
  117. <thead class="thead-dark">
  118. <tr>
  119. <th>Clave</th>
  120. <th>Estado</th>
  121. <th>Fecha</th>
  122. <th>Comentarios</th>
  123. </tr>
  124. </thead>
  125. <tbody>
  126. <?php
  127. foreach($subestado_rs as $sub){
  128. ?>
  129. <tr>
  130. <td class="text-center"><b><?php echo $sub["Usuario_claveULSA"];?></b></td>
  131. <td style="color:<?php echo $sub["EstadoAlumno_color"];?>"><?php echo $ICO["circulo"]." ".$sub["EstadoAlumno_desc"]." - ".$sub["SubEstadoAlumno_desc"];?></td>
  132. <td class="text-center text-nowrap"><?php echo fechaSlash($sub["SEA_fecha"]);?></td>
  133. <td class="text-info"><?php echo trim($sub["SEA_comentario"]);?></td>
  134. </tr>
  135. <?php } ?>
  136. </tbody>
  137. </table>
  138. </div>
  139. <?php
  140. }
  141. ?>
  142. </div>
  143. <?php
  144. foreach($alumno_rs as $alumno){
  145. ?>
  146. <div class="tab-pane fade" id="tab<?php echo $alumno["Usuario_claveULSA"];?>" role="tabpanel" aria-labelledby="tab<?php echo $alumno["Usuario_claveULSA"];?>-tab">
  147. <h4><b><?php echo $alumno["Carrera_desc"]." ".$alumno["PlanEstudio_desc"];?></b> - <?php echo $alumno["Nivel_desc"];?></h4>
  148. <p class="mb-0"><b>Fecha de ingreso:</b> <?php echo fechaMonthPicker($alumno["Alumno_fecha_ingreso"]);?></p>
  149. <p class="mb-4"><b>Generación:</b> <?php echo fechaMonthPicker($alumno["Alumno_generacion"]);?></p>
  150. <?php
  151. $stmt = $pdo->prepare('Select * from fs_alumnomaterias_cardex(:clave, :plan)');
  152. $stmt->bindParam(":clave", $alumno["Usuario_claveULSA"]);
  153. $stmt->bindParam(":plan", $alumno["PlanEstudio_id"]);
  154. if(!$stmt->execute()){
  155. header("Location: ".$pag."?error=1");
  156. //$errorDesc = "Ocurrió un error al cargar las materias.";
  157. //print_r($stmt->errorInfo());
  158. exit();
  159. //echo $errorDesc;
  160. }
  161. $materias_rs = $stmt->fetchAll();
  162. $stmt->closeCursor();
  163. //formato al RS de materias
  164. $materiasArr = Array();
  165. $m = 0;
  166. $mat_last = -1;
  167. foreach($materias_rs as $mat){
  168. if($mat_last != $mat["Materia_id"]){
  169. if($mat_last != -1){
  170. $materiasArr[$m]["califArr"]=$califArr;
  171. $m++;
  172. }
  173. $mat_last = $mat["Materia_id"];
  174. $califArr = array();
  175. }
  176. $materiasArr[$m] = array("id" => $mat["Materia_id"], "desc" => $mat["Materia_desc"], "clave"=>$mat["Materia_clave"],
  177. "sem"=> $mat["Materia_semestre"], "califArr"=>array());
  178. if($mat["Calificacion_calif"] > 0 || $mat["Calificacion_calif"] === 0 ){
  179. $califArr[] = array("calif"=>$mat["Calificacion_calif"], "fecha"=>$mat["Calificacion_fecha"], "calif_tipo"=>$mat["TipoCalificacion_id"], "calif_tipo_desc"=>$mat["TipoCalificacion_desc"], "calif_tipo_corta"=>$mat["TipoCalificacion_desc_corta"],
  180. "revalidada"=>$mat["TipoCalificacion_esEquivalencia"], "reprobada"=>($mat["Calificacion_calif"] <=5)?true:false,
  181. "periodo_id"=>$mat["Periodo_id"], "periodo"=>$mat["Periodo_desc"], "intersemestral"=>($mat["Periodo_intersemestral"])?true:false,
  182. "grupo"=>$mat["TipoCalificacion_id"] ==2 ? $mat["Grupo_id"]: "");
  183. }
  184. }
  185. if($mat_last != -1){
  186. $materiasArr[$m]["califArr"]=$califArr;
  187. }
  188. //-----
  189. $xtpl = new XTemplate('./tpl/alumnocardex.tpl.html');
  190. $xtpl->assign("LINK", "./export/xls_alumnocardex.php?clave=".$alumno["Usuario_claveULSA"]);
  191. $xtpl->parse("main.topweb");
  192. $xtpl->assign("CLAVE", $alumno["Usuario_claveULSA"]);
  193. $maxCol = 5;
  194. $sem = -1;
  195. if($alumno["Nivel_id"] == 1)
  196. $xtpl->assign("SEMESTRE", "Semestre");
  197. else
  198. $xtpl->assign("SEMESTRE", "Cuatrimestre");
  199. $xtpl->assign("COL_SIZE", "12");
  200. foreach($materiasArr as $mat){
  201. if($sem != intval($mat["sem"])){
  202. if($sem != -1){
  203. $xtpl->parse("main.col.semestre");
  204. }
  205. $sem = intval($mat["sem"]);
  206. $xtpl->assign("COLS", $maxCol+1);
  207. $xtpl->assign("NUM", $sem);
  208. }
  209. $xtpl->assign("MATERIA", $mat["desc"]);
  210. for($c=0; $c < $maxCol; $c++){
  211. if($c < count($mat["califArr"])){
  212. if($mat["califArr"][$c]["calif"] >0)
  213. $xtpl->assign("CALIF", $mat["califArr"][$c]["calif"]);
  214. else{
  215. if($mat["califArr"][$c]["calif_tipo"] == 2)//ordinario
  216. $xtpl->assign("CALIF", "SD");
  217. else
  218. $xtpl->assign("CALIF", "NP");
  219. }
  220. switch($mat["califArr"][$c]["calif_tipo"]){
  221. case 1:
  222. $xtpl->assign("COLOR", "calif-equivalencia");
  223. $xtpl->assign("TIPO", "Equivalencia");
  224. break;
  225. case 2:
  226. if($mat["califArr"][$c]["intersemestral"]){
  227. $xtpl->assign("COLOR", "calif-intersemestral");
  228. $xtpl->assign("TIPO", "Intersemestral");
  229. }else{
  230. $xtpl->assign("COLOR", "");
  231. $xtpl->assign("TIPO", "Ordinario");
  232. }
  233. break;
  234. default:
  235. $xtpl->assign("COLOR", "calif-extraordinario");
  236. $xtpl->assign("TIPO", "Extraordinario");
  237. break;
  238. }
  239. $xtpl->assign("PERIODO", $mat["califArr"][$c]["periodo"]);
  240. $xtpl->parse("main.col.semestre.table_row.intento.tooltip");
  241. if($mat["califArr"][$c]["grupo"] != ""){
  242. $xtpl->assign("MAT", $mat["id"]);
  243. $xtpl->assign("GPO", $mat["califArr"][$c]["grupo"]);
  244. $xtpl->assign("PER", $mat["califArr"][$c]["periodo_id"]);
  245. $xtpl->assign("ICO", $ICO["buscar"]);
  246. $xtpl->parse("main.col.semestre.table_row.intento.prof");
  247. }
  248. }else{//no hay mas intentos
  249. $xtpl->assign("CALIF", "&nbsp;");
  250. }
  251. $xtpl->parse("main.col.semestre.table_row.intento");
  252. }
  253. $xtpl->parse("main.col.semestre.table_row");
  254. }
  255. $xtpl->parse("main.col.semestre");
  256. $xtpl->parse("main.col");
  257. $xtpl->parse("main");
  258. $xtpl->out("main");
  259. ?>
  260. </div>
  261. <?php
  262. }//fin tab
  263. ?>
  264. </div><!-- /cardexTabContent -->
  265. <p class="mt-4 text-center">
  266. <a href="reporte_alumnoscardex.php" class="btn btn-outline-primary"><?php echo $ICO["cancelar"];?> Regresar</a>
  267. </p>
  268. </main>
  269. <!-- Modal profesor -->
  270. <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="modal" aria-hidden="true">
  271. <div class="modal-dialog modal-sm modal-dialog-centered" role="document">
  272. <div class="modal-content">
  273. <div class="modal-header">
  274. <h4 class="col-12 modal-title text-center" id="modalLabel">Profesores
  275. <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">
  276. <span aria-hidden="true">&times;</span>
  277. </button>
  278. </h4>
  279. </div>
  280. <div class="modal-body pb-0">
  281. <h5 class="font-weight-bold mb-4">Grupo <span id="grupo_nombre"></span></h5>
  282. <ul id="prof-block" class="pl-1" style="list-style-type: none;">
  283. <li class="profesor mb-2"></li>
  284. </ul>
  285. </div>
  286. </div>
  287. </div>
  288. </div>
  289. </div>
  290. <script src="../js/jquery.min.js"></script>
  291. <script src="../js/bootstrap/popper.min.js"></script>
  292. <script src="../js/bootstrap/bootstrap.min.js"></script>
  293. <script src="../js/sidebarmenu.js"></script>
  294. <script>
  295. $(function () {
  296. $('[data-toggle="tooltip"]').tooltip()
  297. })
  298. $(document).ready(function(){
  299. $(".modal-open").click(function(){
  300. var mat = $(this).data("mat");
  301. var gpo = $(this).data("gpo");
  302. var per = $(this).data("per");
  303. $("#errorBox").collapse('hide');
  304. $("#errorBox_text").html("");
  305. $.ajax({
  306. url: './action/profesor_select.php',
  307. type: 'POST',
  308. dataType: 'json',
  309. data: { mat: mat, gpo:gpo, per:per},
  310. success: function(result) {
  311. if(result["error"]!= "" && result["error"] !== undefined){
  312. $("#errorBox").collapse('show');
  313. $("#errorBox_text").html(result["error"]);
  314. $('#messageBox')[0].scrollIntoView({ block: "end" });
  315. }else{
  316. $("#grupo_nombre").text(result["grupo"]);
  317. //cargar datos de prof
  318. var rows = $("#prof-block > .profesor").length;//cuenta accesos actuales
  319. if(rows > result["profesor"].length){//sobran
  320. //borrar renglones extra (rows - result.length) pero dejar al menos 1
  321. while(rows > result["profesor"].length && rows > 1){
  322. $("#prof-block .profesor:last-child").remove();
  323. rows--;
  324. }
  325. }else{//faltan
  326. // clone the rest of the rows
  327. for(var i=0; i<(result["profesor"].length - rows); i++){
  328. $("#prof-block .profesor:first-child").clone(true).appendTo("#prof-block");
  329. }
  330. }
  331. console.log(result["profesor"].length);
  332. if(result["profesor"].length != 0){//hay profesores
  333. $("#prof-block").children().each(function(index) {
  334. if(index < result["profesor"].length){//llenar info
  335. $(this).text(result["profesor"][index]);
  336. console.log(index+") "+result["profesor"][index]);
  337. }
  338. });
  339. }else{
  340. $("#prof-block").find(".profesor").html("<em>Sin profesor</em>");
  341. }
  342. $('#modal').modal("show");
  343. }
  344. },
  345. error: function(jqXHR, textStatus, errorThrown ){
  346. $("#errorBox").collapse('show');
  347. $("#errorBox_text").html(errorThrown);
  348. }
  349. });//ajax
  350. });//click
  351. });
  352. </script>
  353. </body>
  354. </html>