reporte_materiasprofesor.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. <?php
  2. require_once("../include/constantes.php");
  3. require_once("../include/bd_pdo.php");
  4. require_once("../classes/ValidaSesion.php");
  5. require_once("../classes/MainMenu.php");
  6. $menu = 7;
  7. $submenu = 74;
  8. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  9. $objSesion = new ValidaSesion($pdo, $submenu, APSA);
  10. if(!$objSesion->tieneAcceso()){
  11. $objSesion->terminaSesion();
  12. }
  13. $objSesion->validaPeriodoUsuario();//si no tiene periodo manda a main
  14. ?>
  15. <!DOCTYPE html>
  16. <html lang="es" prefix="og: http://ogp.me/ns#">
  17. <head>
  18. <title>APSA - Facultad de Ingeniería</title>
  19. <meta charset="utf-8">
  20. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  21. <link rel="icon" type="image/png" href="../img/favicon.png" />
  22. <link rel="stylesheet" href="../css/bootstrap-ulsa.min.css" type="text/css">
  23. <link rel="stylesheet" href="../css/indivisa.css" type="text/css">
  24. <link rel="stylesheet" href="../css/sgi.css?rand=<?php echo rand();?>" type="text/css">
  25. <link rel="stylesheet" href="../css/fa_all.css" type="text/css">
  26. <script src="../js/util.js"></script>
  27. </head>
  28. <body>
  29. <div>
  30. <?php
  31. //--- Objeto que pinta menu
  32. $menuObj = new MainMenu($_SESSION["usuario_id"], $menu, $pdo, APSA, "Materias de profesores");//usr, menu, pdo, sist
  33. $menuObj->printMenu();
  34. //Area
  35. $stmt = $pdo->prepare('Select * from fs_areaacademica(NULL, :nivel)');
  36. $stmt->bindParam(":nivel", $_SESSION["nivel_id"]);
  37. if(!$stmt->execute()){
  38. $errorDesc = "Ocurrió un error al cargar las áreas académicas";
  39. }else{
  40. $area_rs = $stmt->fetchAll();
  41. }
  42. $stmt->closeCursor();
  43. //Obtiene profesores
  44. $query = "";
  45. if(isset($_POST["area"]) && is_numeric($_POST["area"]) && trim($_POST["area"]) != ""){
  46. $query .= ":area,";
  47. $filter_area = filter_input(INPUT_POST, "area", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  48. }else{
  49. $query .= "NULL,";
  50. }
  51. if(isset($_POST["desc"]) && trim($_POST["desc"]) != ""){
  52. $query .= ":desc,";
  53. $filter_desc = trim(filter_input(INPUT_POST, "desc", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW)));//limpia texto
  54. }else{
  55. $query .= "NULL,";
  56. }
  57. $stmt = $pdo->prepare('Select * from fs_profesoresareahoras(:per, '.$query.' 1, 0, '.MAX_ROWS.')');//sólo activos
  58. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  59. if(isset($filter_area)) $stmt->bindParam(":area", $filter_area);
  60. if(isset($filter_desc)) $stmt->bindParam(":desc", $filter_desc);
  61. if(!$stmt->execute()){
  62. $errorDesc = "Ocurrió un error al cargar los profesores";
  63. //print_r($stmt->errorInfo());
  64. }else{
  65. $profesores_rs = $stmt->fetchAll();
  66. }
  67. $stmt->closeCursor();
  68. ?>
  69. <main class="container-fluid content marco">
  70. <?php include_once("../include/errorMessage.php"); ?>
  71. <?php include("../include/periodoCambio.php");?>
  72. <?php
  73. if(isset($area_rs)){
  74. ?>
  75. <!-- Filtro -->
  76. <div class="row">
  77. <div class="col-12">
  78. <form action="reporte_materiasprofesor.php" method="post">
  79. <div class="form-box">
  80. <div class="form-group row">
  81. <label for="filter_desc" class="col-4 col-form-label">Profesor</label>
  82. <div class="col-8 col-sm-4">
  83. <input id="filter_desc" name="desc" type="text" class="form-control" <?php if(isset($filter_desc) ){echo 'value="'.$filter_desc.'"';}?>>
  84. </div>
  85. </div>
  86. <?php if(count($area_rs) > 1){ ?>
  87. <div class="form-group row">
  88. <label for="filter_area" class="col-4 col-form-label">Área</label>
  89. <div class="col-8 col-sm-4">
  90. <select id="filter_area" name="area" class="form-control">
  91. <option value="">Mostrar todas</option>
  92. <?php foreach($area_rs as $area) {?>
  93. <option value="<?php echo $area["Area_id"];?>" <?php if(isset($filter_area) && $filter_area == $area["Area_id"]){echo "selected='selected'";}?> ><?php echo $area["Area_desc"];?></option>
  94. <?php } ?>
  95. </select>
  96. </div>
  97. </div>
  98. <?php } ?>
  99. </div>
  100. <div class="form-group row">
  101. <div class="col-12 text-center">
  102. <button type="submit" class="btn btn-outline-primary"><?php echo $ICO["buscar"]; ?> Filtrar</button>
  103. <button type="button" class="btn btn-outline-danger btn-reset"><?php echo $ICO["borrar"]?> Limpiar</button>
  104. </div>
  105. </div>
  106. </form>
  107. </div>
  108. </div>
  109. <form action="./export/pdf_materiasprofesor.php" target="_blank" method="post">
  110. <input type="hidden" name="area" value="<?php if(isset($filter_area)){ echo $filter_area; }?>">
  111. <input type="hidden" name="desc" value="<?php if(isset($filter_desc)){ echo $filter_desc; }?>">
  112. <p class="text-right">
  113. <!--<button type="submit" class="btn btn-outline-secondary btn-generar" data-tipo="xls" ><?php echo $ICO["descargar"];?> Generar xls</button> -->
  114. <button type="submit" class="btn btn-outline-secondary btn-generar" data-tipo="pdf" ><?php echo $ICO["descargar"];?> Generar pdf</button>
  115. </p>
  116. </form>
  117. <div class="row">
  118. <div class="col-12 table-responsive">
  119. <p>Se muestran los primeros <strong><?php echo MAX_ROWS;?></strong> resultados. Utiliza los filtros para encontrar el usuario que buscas.</p>
  120. <table class="table table-sm table-striped table-white">
  121. <thead class="thead-dark">
  122. <tr >
  123. <th>Clave ULSA</th>
  124. <th>Profesor</th>
  125. <th>
  126. <div class="row">
  127. <div class="col-8">Materias</div>
  128. <div class="col-4 text-center">Horas</div>
  129. </div>
  130. </th>
  131. <th>Total</th>
  132. </tr>
  133. </thead>
  134. <tbody>
  135. <?php
  136. //$i=0;
  137. $query = "";
  138. if(isset($filter_area)){
  139. $query .= ' AND "Area_id" = :area';
  140. }
  141. //Obtiene horario del usuario
  142. $stmt = $pdo->prepare('Select * from fs_mihorario(:usr, :per, 3) WHERE "TipoHorario_id" = 3 '.$query);//Obtiene calendario docente
  143. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  144. if($query != "") $stmt->bindParam(":area", $filter_area);
  145. foreach($profesores_rs as $profesor){
  146. // if($i >= MAX_ROWS) break;
  147. $stmt->bindParam(":usr", $profesor["Usuario_id"]);
  148. if(!$stmt->execute()){
  149. //$t = $stmt->errorInfo();
  150. echo "Ocurrió un error al obtener los horarios de los profesores";
  151. //print_r($stmt->errorInfo());
  152. break;
  153. }
  154. $horario_rs = $stmt->fetchAll();
  155. $materiasArr = array();
  156. if(count($horario_rs) > 0){
  157. //$i++;
  158. for($rs_i = 0; $rs_i < count($horario_rs);){
  159. if((!isset($filter_area) || $filter_area=="" ) || (isset($filter_area) && $filter_area == $horario_rs[$rs_i]["Area_id"])){
  160. $horas = $horario_rs[$rs_i]["Duracion"]/60;
  161. $nombreArr = array();
  162. $key = "";//lave para guardar cuáles se agruparán
  163. do{
  164. $nombreArr[] = $horario_rs[$rs_i]["Materia_desc"]." (".$horario_rs[$rs_i]["Carrera_prefijo"].")";
  165. $key .= $horario_rs[$rs_i]["Materia_desc"].$horario_rs[$rs_i]["Carrera_prefijo"];
  166. $rs_i++;
  167. }while($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i-1]["Hora_inicio"])) == date('H:i', strtotime($horario_rs[$rs_i]["Hora_inicio"])) && $horario_rs[$rs_i]["Dia_id"] == $horario_rs[$rs_i-1]["Dia_id"]);
  168. $materiasArr[] = array("key"=>md5($key), "nombreArr" => $nombreArr, "horas"=>$horas);
  169. }
  170. }
  171. //fusiona horarios por llaves iguales
  172. for($ii = 0; $ii < count($materiasArr)-1; $ii++){
  173. for($jj = $ii+1; $jj < count($materiasArr); ){
  174. if($materiasArr[$ii]["key"] == $materiasArr[$jj]["key"]){
  175. $materiasArr[$ii]["horas"] += $materiasArr[$jj]["horas"];
  176. array_splice($materiasArr, $jj, 1);
  177. }else
  178. $jj++;
  179. }
  180. }
  181. ?>
  182. <tr>
  183. <td class="text-center font-weight-bold"><?php echo $profesor["Usuario_claveULSA"];?></td>
  184. <td><?php echo $profesor["Usuario_apellidos"]." ".$profesor["Usuario_nombre"]; ?></td>
  185. <td>
  186. <?php
  187. $sumMat = 0;
  188. foreach($materiasArr as $materia){ ?>
  189. <div class="row border-mid">
  190. <div class="col-8">
  191. <?php
  192. foreach($materia["nombreArr"] as $nombre){
  193. echo $nombre."<br>";
  194. }
  195. $sumMat+=$materia["horas"];
  196. ?>
  197. </div>
  198. <div class="col-4 text-center">
  199. <?php echo sprintf('%0.2f', $materia["horas"]);?> hrs.
  200. </div>
  201. </div>
  202. <?php } ?>
  203. </td>
  204. <td class="text-center">
  205. <?php echo sprintf('%0.2f', $sumMat);?> hrs.
  206. </td>
  207. </tr>
  208. <?php
  209. }
  210. }//foreach prof
  211. $stmt->closeCursor();
  212. //---------------
  213. ?>
  214. </tbody>
  215. </table>
  216. </div>
  217. </div>
  218. <?php } ?>
  219. </main>
  220. <!--- FOOTER--->
  221. <?php require_once("../include/footer.php"); ?>
  222. </div>
  223. <script src="../js/jquery.min.js"></script>
  224. <script src="../js/bootstrap/popper.min.js"></script>
  225. <script src="../js/bootstrap/bootstrap.min.js"></script>
  226. <script src="../js/sidebarmenu.js"></script>
  227. <script src="../js/datalist.js"></script>
  228. <script>
  229. setDatalist("#periodo", <?php echo $_SESSION["periodo_id"]; ?>);
  230. $(document).on('click', '#dlPeriodo ul li' ,function(){
  231. $("#formaPeriodo").submit();
  232. });
  233. $(document).on( "click", ".btn-reset", function(event){
  234. var forma = $(this).parents("form");
  235. forma.find("input[type=text]").val("");
  236. forma.find("select").prop("selectedIndex",0);
  237. forma.submit();
  238. });
  239. $(".btn-generar").click(function(){
  240. if($(this).data("tipo")=="xls"){
  241. $(this).parents("form").attr("action", "./export/xls_materiasprofesor.php");
  242. }else{
  243. $(this).parents("form").attr("action", "./export/pdf_materiasprofesor.php");
  244. }
  245. });
  246. </script>
  247. </body>
  248. </html>