pdf_horariousuario.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <?php
  2. /* AJAX
  3. * Genera nombramientos en pdf
  4. * Recibe:
  5. * id (de usuario)
  6. * Return:
  7. * imprime pdf
  8. */
  9. setlocale(LC_TIME, 'es_MX.UTF-8');
  10. require_once("../../include/nocache.php");
  11. require_once("../../include/constantes.php");
  12. require_once("../../include/bd_pdo.php");
  13. require_once("../../include/util.php");
  14. require_once("../../classes/ValidaSesion.php");
  15. include_once('../../include/xTemplate/xtemplate.class.php'); // including mpdf.php
  16. include_once('../../include/mpdf/autoload.php'); // including mpdf.php
  17. function validaHorarios($arr){
  18. $erroresArr = array();
  19. for($i = 0; $i < count($arr)-1; $i++){
  20. for($j = $i+1; $j < count($arr); $j++){
  21. if($arr[$i]["Dia_id"] == $arr[$j]["Dia_id"] && !($arr[$i]["TipoHorario_id"] == 3 && $arr[$i]["TipoHorario_id"] == $arr[$j]["TipoHorario_id"])){
  22. if( (date('H:i', strtotime($arr[$i]["Hora_inicio"])) <= date('H:i', strtotime($arr[$j]["Hora_inicio"])) && date('H:i', strtotime($arr[$i]["Hora_final"])) > date('H:i', strtotime($arr[$j]["Hora_inicio"])) )
  23. || (date('H:i', strtotime($arr[$j]["Hora_inicio"])) <= date('H:i', strtotime($arr[$i]["Hora_inicio"])) && date('H:i', strtotime($arr[$j]["Hora_final"])) > date('H:i', strtotime($arr[$i]["Hora_inicio"])) )
  24. ){
  25. if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"]){
  26. $arr[$i]["Duracion"] = (strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]))/60;
  27. if($arr[$i]["Duracion"] <= 0) array_splice($arr, $i, 1);
  28. $erroresArr[] = array('nombre'=>$arr[$i]["TipoHorario_desc"], 'dia'=> diaNombre($arr[$i]["Dia_id"]), 'hora_i'=>date('H:i', strtotime($arr[$i]["Hora_inicio"])), 'hora_f'=> date('H:i', strtotime($arr[$i]["Hora_final"])));
  29. }else{ //if($arr[$i]["TipoHorario_id"] < $arr[$j]["TipoHorario_id"])
  30. $arr[$j]["Duracion"] = (strtotime('2019-01-01 '.$arr[$i]["Hora_inicio"]) - strtotime('2019-01-01 '.$arr[$j]["Hora_inicio"]))/60;
  31. if($arr[$j]["Duracion"] <= 0) array_splice($arr, $j, 1);
  32. $erroresArr[] = array('nombre'=>$arr[$i]["TipoHorario_desc"], 'dia'=> diaNombre($arr[$i]["Dia_id"]), 'hora_i'=>date('H:i', strtotime($arr[$i]["Hora_inicio"])), 'hora_f'=> date('H:i', strtotime($arr[$i]["Hora_final"])));
  33. }
  34. }
  35. }
  36. }
  37. }
  38. return $erroresArr;
  39. }
  40. $pag = "../horarioautorizacion.php";
  41. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  42. $objSesion = new ValidaSesion($pdo, array(271,71), APSA);
  43. if(!$objSesion->tieneAcceso()){
  44. header("Location: ".$pag."?error=3");
  45. exit();
  46. }
  47. unset($objValida);
  48. if(!isset($_POST["id"])){
  49. header("Location: ".$pag."?error=0");
  50. exit();
  51. }
  52. if(!isset($_SESSION["periodo_id"]) || $_SESSION["periodo_id"] ==""){
  53. echo "Necesitas seleccionar un periodo.";
  54. exit();
  55. }
  56. $usr = filter_input(INPUT_POST, "id", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  57. if(!empty($_POST["tipo"])){
  58. $solo_docencia = filter_input(INPUT_POST, "tipo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  59. $docencia = ' where "TipoHorario_id" = 3';
  60. }else{
  61. $solo_docencia = 0;
  62. $docencia = '';
  63. }
  64. if(isset($_POST["fecha"]) && $_POST["fecha"] != ""){
  65. $filter_fecha = fechaGuion(trim(filter_input(INPUT_POST, "fecha", FILTER_SANITIZE_STRING,array('flags' => FILTER_FLAG_STRIP_LOW))));//limpia texto
  66. }
  67. //Obtiene horario del usuario
  68. if(!isset($filter_fecha)){
  69. $stmt = $pdo->prepare('Select * from fs_mihorario(:usr, :per, 3)'.$docencia);//Obtiene todo el calendario
  70. $stmt->bindParam(":per", $_SESSION["periodo_id"]);
  71. }else{
  72. $stmt = $pdo->prepare('Select * from fs_mihorariofull(:usr, :fecha, 3)'.$docencia);//Obtiene todo el calendario
  73. $stmt->bindParam(":fecha", $filter_fecha);
  74. }
  75. $stmt->bindParam(":usr", $usr);
  76. if(!$stmt->execute()){
  77. $t = $stmt->errorInfo();
  78. echo "Ocurrió un error al obtener los horarios ".$t[2];
  79. exit();
  80. }
  81. $horario_rs = $stmt->fetchAll(); // print_r($horario_rs); exit();
  82. /*$horaMin = horaMin($horario_rs, "Hora_inicio");
  83. $horaMax = horaMax($horario_rs, "Hora_final");*/
  84. $horaMin = HORA_INICIO.":00";
  85. $horaMax = HORA_FINAL.":00";
  86. $stmt->closeCursor();
  87. //---
  88. $stmt = $pdo->prepare('Select * from fs_dia(NULL)');
  89. if(!$stmt->execute()){
  90. echo "Error al obtener los dí­as";
  91. exit();
  92. }
  93. $dias_rs = $stmt->fetchAll();
  94. $stmt->closeCursor();
  95. //---
  96. $stmt = $pdo->prepare('Select * from fs_usuario(:usr)');
  97. $stmt->bindParam(":usr", $usr);
  98. if(!$stmt->execute()){
  99. echo "Error al obtener los datos del usuario";
  100. exit();
  101. }
  102. $usr_rs = $stmt->fetch();
  103. $stmt->closeCursor();
  104. $nombre_usr = $usr_rs["Usuario_apellidos"]." ".$usr_rs["Usuario_nombre"];
  105. unset($usr_rs);
  106. //---
  107. $stmt = $pdo->prepare('Select * from fs_superiorusuario(:usr, NULL)');
  108. $stmt->bindParam(":usr", $usr);
  109. //$stmt->bindParam(":puesto", $puesto_id);
  110. if(!$stmt->execute()){
  111. echo "Error al obtener los datos del usuario superior";
  112. exit();
  113. }
  114. $usr_rs = $stmt->fetch();
  115. $stmt->closeCursor();
  116. $nombreSup_usr = $usr_rs["Usuario_apellidos"]." ".$usr_rs["Usuario_nombre"];
  117. unset($usr_rs);
  118. //Obtiene 2 corrreos
  119. $stmt = $pdo->prepare('Select * from fs_contacto(:id, 3 , NULL) ORDER BY "PerfilContacto_id"');//3 correo, Null todos
  120. $stmt->bindParam(":id", $usr);
  121. if(!$stmt->execute()){
  122. echo "Error al obtener los datos del correo";
  123. exit();
  124. }else{
  125. $contacto_rs = $stmt->fetchAll();
  126. $correos = array();
  127. $c_i = 0;
  128. $c_j = 0;
  129. for($c_j=0; $c_j< count($contacto_rs); $c_j++ ){
  130. if( strpos($contacto_rs[$c_j]["Contacto_valor"], "lasalle.mx") !== false || strpos($contacto_rs[$c_j]["Contacto_valor"], "lasallistas.org.mx") !== false ){
  131. $correos[] = $contacto_rs[$c_j]["Contacto_valor"];
  132. $c_i++;
  133. }
  134. }
  135. $datos["correo1"] = "";
  136. $datos["correo2"] = "";
  137. if($c_i>0){
  138. $datos["correo1"] = $correos[0];
  139. }
  140. if($c_i>1){
  141. $datos["correo2"] = $correos[1];
  142. }
  143. }
  144. $stmt->closeCursor(); // cierra conexion de resultado
  145. //-----
  146. $mpdf = new \Mpdf\Mpdf([
  147. 'mode' => 'utf-8',
  148. 'format' => [215, 279],
  149. 'orientation' => 'P'
  150. ]);
  151. //$mpdf->SetDisplayMode('fullpage');
  152. $stylesheet = "<style>";
  153. $stylesheet .= file_get_contents('../../css/indivisa.css'); // external css
  154. $stylesheet .= file_get_contents('../css/mihorario_reporte.css'); // external css
  155. $stylesheet .= "</style>";
  156. $mpdf->WriteHTML($stylesheet);
  157. //echo $stylesheet;
  158. $xtpl = new XTemplate('../tpl/mihorario_reporte.tpl.html');
  159. $xtpl->assign("NOMBRE", $nombre_usr);
  160. if($datos["correo1"] != ""){
  161. $xtpl->assign("CORREO", $datos["correo1"]);
  162. $xtpl->parse("main.datos.correo");
  163. }
  164. if($datos["correo2"] != ""){
  165. $xtpl->assign("CORREO", $datos["correo2"]);
  166. $xtpl->parse("main.datos.correo");
  167. }
  168. $xtpl->assign("PUESTO", "");
  169. $xtpl->assign("AREA", "");
  170. $xtpl->assign("SUPERIOR", $nombreSup_usr);
  171. $xtpl->assign("HOY", date("d/m/Y"));
  172. $xtpl->assign("PERIODO", $_SESSION["periodo_desc"]);
  173. $xtpl->parse("main.datos");
  174. foreach($dias_rs as $dia){
  175. $xtpl->assign("DIA", $dia["Dia_desc"]);
  176. $xtpl->parse("main.header");
  177. }
  178. $rs_i = 0;
  179. $spacerArr = array(1=>0,0,0,0,0,0);
  180. $total_tipo = array(1=>0,0,0);
  181. if(intval($solo_docencia) == 0 ){//no son solo de docencia, busca errores
  182. $erroresArr = validaHorarios($horario_rs);
  183. if(count($erroresArr) > 0){
  184. $errorDesc = '<div style="padding: 50px; color:red"><h3 style="text-center">( ! ) Error al cargar el horario</h3>';
  185. foreach($erroresArr as $err){
  186. $errorDesc.= '<p>Un horario se sobrepone con el bloque de <b>'.$err['nombre'].' ( '.$err['dia'].' '.$err['hora_i'].' - '.$err['hora_f'].' )</b>.</p>';
  187. }
  188. $errorDesc .= '<p>Se debe modificar el horario administrativo para mostrarse correctamente.</p>';
  189. $errorDesc .= '</div>';
  190. $mpdf->WriteHTML($errorDesc);
  191. $mpdf->AddPage();
  192. }
  193. }
  194. for($h = date('H', strtotime($horaMin)); $h < date('H', strtotime($horaMax)); $h++){
  195. $xtpl->assign("HORA", date('H', strtotime($h.":00")));
  196. $xtpl->assign("FRACCIONES", FRACCION_HORA);
  197. $xtpl->parse("main.hora_row.hora");
  198. for($f = 0; $f < FRACCION_HORA; $f++){
  199. foreach($dias_rs as $dia){
  200. if($rs_i < count($horario_rs) && date('H:i', strtotime($horario_rs[$rs_i]["Hora_inicio"])) == date('H:i', strtotime($h.":".($f * (60/FRACCION_HORA))))
  201. && $horario_rs[$rs_i]["Dia_id"] == $dia["Dia_id"]
  202. ){
  203. $size = $horario_rs[$rs_i]["Duracion"]/(60/FRACCION_HORA);
  204. $spacerArr[$dia["Dia_id"]] = $size -1;
  205. $xtpl->assign("DURACION_SIZE", $size);
  206. $xtpl->assign("COLOR", $horario_rs[$rs_i]["TipoHorario_color"]);
  207. $xtpl->assign("TIPO", $horario_rs[$rs_i]["TipoHorario_desc"]);
  208. $total_tipo[$horario_rs[$rs_i]["TipoHorario_id"]]+= $horario_rs[$rs_i]["Duracion"]/60;
  209. $xtpl->assign("HORA_I", date('H:i', strtotime($horario_rs[$rs_i]["Hora_inicio"])));
  210. $xtpl->assign("HORA_F", date('H:i', strtotime($horario_rs[$rs_i]["Hora_final"])));
  211. $xtpl->parse("main.hora_row.td.td_mihorario.hora");
  212. $salon = "";
  213. $first = true;
  214. do{
  215. if($horario_rs[$rs_i]["Salon_desc"] != "") $salon = "Salón: ".$horario_rs[$rs_i]["Salon_desc"];
  216. else if($horario_rs[$rs_i]["Materia_desc"] != "") $salon = "<em>Pendiente</em>";
  217. $xtpl->assign("MATERIA", $horario_rs[$rs_i]["Materia_desc"]);
  218. $xtpl->assign("GRUPO", $horario_rs[$rs_i]["Grupo_desc"]." ".$horario_rs[$rs_i]["Carrera_prefijo"]);
  219. if($horario_rs[$rs_i]["Materia_desc"] != "")
  220. if($first || !$horario_rs[$rs_i]["Materia_esSubmateria"]){
  221. $xtpl->parse("main.hora_row.td.td_mihorario.texto");
  222. $first = false;
  223. }else{
  224. $xtpl->parse("main.hora_row.td.td_mihorario.grupo");
  225. }
  226. $rs_i++;
  227. }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"] == $dia["Dia_id"]);
  228. $xtpl->assign("SALON", $salon);
  229. $xtpl->parse("main.hora_row.td.td_mihorario");
  230. }else{
  231. if(!isset($spacerArr[$dia["Dia_id"]]) || $spacerArr[$dia["Dia_id"]] == 0)
  232. $xtpl->parse("main.hora_row.td.td_vacio");
  233. else
  234. $spacerArr[$dia["Dia_id"]]--;
  235. }
  236. $xtpl->parse("main.hora_row.td");
  237. }
  238. $xtpl->parse("main.hora_row");
  239. }
  240. }
  241. $xtpl->parse("main.logo");
  242. $stmt = $pdo->prepare('Select * from fs_tipohorario(NULL, NULL)');
  243. $stmt->execute();
  244. $tipo_rs = $stmt->fetchAll();
  245. $stmt->closeCursor();
  246. foreach($tipo_rs as $tipo){
  247. $xtpl->assign("COLOR", $tipo["TipoHorario_color"]);
  248. $xtpl->assign("DESC", $tipo["TipoHorario_desc"]);
  249. $xtpl->assign("TOTAL", $total_tipo[$tipo["TipoHorario_id"]]);
  250. $xtpl->parse("main.tipo_row");
  251. }
  252. $xtpl->assign("COLOR", '#fff');
  253. $xtpl->assign("DESC", "Total de horas");
  254. $xtpl->assign("TOTAL", $total_tipo[1]+$total_tipo[2]+$total_tipo[3]);
  255. $xtpl->parse("main.tipo_row");
  256. $xtpl->parse("main");
  257. //$xtpl->out("main");exit();
  258. //if(!isset($errorDesc))
  259. $mpdf->WriteHTML($xtpl->text("main"));
  260. /*else
  261. $mpdf->WriteHTML($errorDesc);*/
  262. $mpdf->Output("horariousuario.pdf", 'I');
  263. ?>