pdf_nombramiento_usr.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. <?php
  2. /* AJAX
  3. * Genera nombramientos en pdf
  4. * Recibe:
  5. * periodo
  6. * Return:
  7. * imprime pdf
  8. */
  9. setlocale(LC_TIME, 'es_MX.UTF-8');
  10. require_once("../../include/nocache.php");
  11. require_once("../../include/bd_pdo.php");
  12. require_once("../../include/util.php");
  13. require_once("../../include/constantes.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 generaMarcaDeAgua($marca, $carpeta) {
  18. $imagen = imagecreatetruecolor(344,143); // Crear la imagen de 591x379
  19. $textColor = imagecolorallocate($imagen, 224, 224, 224); //Colores del texto
  20. $transparente = imagecolorallocate ($imagen, 0, 0, 0); //Color que cambiará a transparene
  21. imagecolortransparent($imagen, $transparente); // Hacer el fondo transparente
  22. for ($cont = 0; $cont < 5; $cont++) { $marca .= $marca; }
  23. // Escribirlo
  24. for ($cont=1; $cont <= 50; $cont++){
  25. if ($cont%2 == 0)
  26. $val = -5;
  27. else
  28. $val = 5;
  29. imagestring($imagen,1, $val, 10*$cont, $marca, $textColor); //Escribe el texto
  30. }
  31. header('Content-Type: image/png');
  32. imagepng($imagen, $carpeta.'marca.png'); //Genera la imagen
  33. imagedestroy($imagen);
  34. }
  35. //$fechasArr[] ["busca"=>CODIGO, "reemplaza"=>fecha ]
  36. function cambiaFechas($texto, $fechasArr){
  37. $buscaArr = array();
  38. $reemplazaArr = array();
  39. foreach($fechasArr as $opt){
  40. $buscaArr[] = $opt["busca"];
  41. $reemplazaArr[] = $opt["reemplaza"];
  42. }
  43. return str_replace ($buscaArr, $reemplazaArr, $texto);
  44. }
  45. $pag = "../perfil.php";
  46. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  47. $objSesion = new ValidaSesion($pdo, 20, APSA);
  48. if(!$objSesion->tieneAcceso()){
  49. header("Location: ".$pag."?error=3");
  50. exit();
  51. }
  52. unset($objValida);
  53. if(!isset($_POST["periodo"])){
  54. header("Location: ".$pag."?error=0");
  55. exit();
  56. }
  57. $periodo_id = filter_input(INPUT_POST, "periodo", FILTER_SANITIZE_NUMBER_INT);//limpia texto
  58. $profesor = $_SESSION["usuario_id"];
  59. //Obtiene fechas de periodo
  60. $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
  61. $stmt->bindParam(":periodo", $periodo_id);
  62. if(!$stmt->execute()){
  63. header("Location:".$pag."?error=4");
  64. //print_r($stmt->errorInfo());
  65. exit();
  66. }
  67. $periodo_rs = $stmt->fetch();
  68. $nivel = $periodo_rs["Nivel_id"];
  69. $stmt->closeCursor();
  70. //---Fecha de cartas
  71. $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 4 )');//fechas profesores
  72. $stmt->bindParam(":periodo", $periodo_id);
  73. if(!$stmt->execute()){
  74. //echo "4";print_r($stmt->errorInfo());exit();
  75. header("Location:".$pag."?error=4");
  76. exit();
  77. }
  78. $rs = $stmt->fetch();
  79. $stmt->closeCursor();
  80. $fecha_carta = $rs["FechaImportante_inicial"];
  81. //-----
  82. $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 3 )');//fechas profesores
  83. $stmt->bindParam(":periodo", $periodo_id);
  84. if(!$stmt->execute()){
  85. //echo "4";print_r($stmt->errorInfo());exit();
  86. header("Location:".$pag."?error=4");
  87. exit();
  88. }
  89. $rs = $stmt->fetch();
  90. $stmt->closeCursor();
  91. $fecha_inicial = $rs["FechaImportante_inicial"];
  92. $fecha_final = $rs["FechaImportante_final"];
  93. $stmt = $pdo->prepare('Select * from fs_fechaimportante(:periodo, 2 )');//fecha de extraordinarios
  94. $stmt->bindParam(":periodo", $periodo_id);
  95. if(!$stmt->execute()){
  96. //echo "4";print_r($stmt->errorInfo());exit();
  97. header("Location:".$pag."?error=4");
  98. exit();
  99. }
  100. $rs = $stmt->fetch();
  101. $stmt->closeCursor();
  102. $fecha_inicial_extras = $rs["FechaImportante_inicial"];
  103. $fecha_final_extras = $rs["FechaImportante_final"];
  104. //Obtiene texto de carta y datos de firmas
  105. $stmt = $pdo->prepare('Select * from fs_cartanombramiento(:periodo)');
  106. $stmt->bindParam(":periodo", $periodo_id);
  107. if(!$stmt->execute()){
  108. //print_r($stmt->errorInfo());
  109. header("Location:".$pag."?error=4");
  110. exit();
  111. }
  112. $carta_rs = $stmt->fetch();
  113. $texto = $carta_rs["CartaNombramiento_texto"];
  114. $stmt->closeCursor();
  115. $stmt = null;
  116. //-----
  117. $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
  118. $fontDirs = $defaultConfig['fontDir'];
  119. $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
  120. $fontData = $defaultFontConfig['fontdata'];
  121. $defaultConfig = (new Mpdf\Config\ConfigVariables())->getDefaults();
  122. $fontDirs = $defaultConfig['fontDir'];
  123. $defaultFontConfig = (new Mpdf\Config\FontVariables())->getDefaults();
  124. $fontData = $defaultFontConfig['fontdata'];
  125. $mpdf = new \Mpdf\Mpdf([
  126. 'mode' => 'utf-8',
  127. 'format' => [215, 279],
  128. 'orientation' => 'P',
  129. 'margin_left' => 14,
  130. 'margin_right' => 14,
  131. 'margin_top' => 7,
  132. 'margin_bottom' => 7,
  133. 'fontDir' => array_merge($fontDirs, [
  134. __DIR__ . '/../../fonts/indivisaFont/ttf',
  135. ]),
  136. 'fontdata' => $fontData + [
  137. 'indivisa-display' => [
  138. 'R' => 'IndivisaDisplaySans-Regular.ttf',
  139. ],
  140. 'indivisa-title' => [
  141. 'R' => 'IndivisaDisplaySerif-RegularItalic.ttf',
  142. ],
  143. 'indivisa-text' => [
  144. 'R' => 'IndivisaTextSans-Regular.ttf',
  145. ]
  146. ],
  147. 'default_font' => 'indivisa-text'
  148. ]);
  149. $stylesheet = "<style>";
  150. $stylesheet .= file_get_contents('../../css/indivisa.css'); // external css
  151. $stylesheet .= file_get_contents('../css/carta.css'); // external css
  152. $stylesheet .= "</style>";
  153. //$hoy = strftime("%e de %B de %Y");
  154. //Obtiene fechas de periodo
  155. $stmt = $pdo->prepare('Select * from fs_periodo(:periodo, NULL, NULL, true)');
  156. $stmt->bindParam(":periodo", $periodo_id);
  157. if(!$stmt->execute()){
  158. header("Location:".$pag."?error=4");
  159. //print_r($stmt->errorInfo());
  160. exit();
  161. }
  162. $periodo_rs = $stmt->fetch();
  163. $nivel = $periodo_rs["Nivel_id"];
  164. $stmt->closeCursor();
  165. //Obtiene datos del profesor actual
  166. if($nivel == 1){
  167. $stmt = $pdo->prepare('Select * from fs_profesoresperiodo(:periodo, :prof, 0, NULL)');
  168. $stmt->bindParam(":prof", $profesor);
  169. }else{
  170. $stmt = $pdo->prepare('Select * from fs_profesoresperiodo_carrera(:periodo, :prof)');
  171. $stmt->bindParam(":prof", $profesor);
  172. }
  173. $stmt->bindParam(":periodo", $periodo_id);
  174. if(!$stmt->execute()){
  175. header("Location:".$pag."?error=5");
  176. //print_r($stmt->errorInfo());
  177. exit();
  178. }
  179. $rs = $stmt->fetchAll();
  180. $stmt->closeCursor();
  181. $stmt = null;
  182. if($nivel == 1){
  183. $xtpl = new XTemplate('../tpl/nombramiento.tpl.html');
  184. }else{
  185. $xtpl = new XTemplate('../tpl/nombramiento_pos.tpl.html');
  186. }
  187. $xtpl->assign("FECHA_HOY", fechaTexto($fecha_carta, true));
  188. $xtpl->assign("FACULTAD", FACULTAD);
  189. $cuenta = count($rs);
  190. $fechasArr = array();
  191. //Periodo tiene fechas de ciclo
  192. $fechasArr[] = array("busca"=>PR_INI, "reemplaza"=>fechaTexto($periodo_rs["Periodo_fecha_inicial"], false));
  193. $fechasArr[] = array("busca"=>PR_INI_Y, "reemplaza"=>fechaTexto($periodo_rs["Periodo_fecha_inicial"], true));
  194. $fechasArr[] = array("busca"=>PR_FIN, "reemplaza"=>fechaTexto($periodo_rs["Periodo_fecha_final"], false));
  195. $fechasArr[] = array("busca"=>PR_FIN_Y, "reemplaza"=>fechaTexto($periodo_rs["Periodo_fecha_final"], true));
  196. //forma tiene fechas periodo completo
  197. $fechasArr[] = array("busca"=>PE_INI, "reemplaza"=>fechaTexto($fecha_inicial, false));
  198. $fechasArr[] = array("busca"=>PE_INI_Y, "reemplaza"=>fechaTexto($fecha_inicial, true));
  199. $fechasArr[] = array("busca"=>PE_FIN, "reemplaza"=>fechaTexto($fecha_final, false));
  200. $fechasArr[] = array("busca"=>PE_FIN_Y, "reemplaza"=>fechaTexto($fecha_final, true));
  201. if($nivel == 1){
  202. //forma tiene fechas extraordinarios
  203. $fechasArr[] = array("busca"=>EX_INI, "reemplaza"=>fechaTexto($fecha_inicial_extras, false));
  204. $fechasArr[] = array("busca"=>EX_INI_Y, "reemplaza"=>fechaTexto($fecha_inicial_extras, true));
  205. $fechasArr[] = array("busca"=>EX_FIN, "reemplaza"=>fechaTexto($fecha_final_extras, false));
  206. $fechasArr[] = array("busca"=>EX_FIN_Y, "reemplaza"=>fechaTexto($fecha_final_extras, true));
  207. }
  208. $texto = cambiaFechas($texto, $fechasArr);
  209. $xtpl->assign("TEXTO_CARTA", $texto);
  210. //Marca de agua
  211. if (!file_exists($_SERVER['DOCUMENT_ROOT']. '/apsa/export/zip/marca.png')) {
  212. $marca = mb_strtoupper("Nombramiento",'UTF-8') . ' ' . fechaGuion($fecha_carta) . ' | '; //No acepta caracteres especiales
  213. generaMarcaDeAgua($marca, "./zip/");
  214. }
  215. //----
  216. $stmt = $pdo->prepare('Select * from fs_director()');
  217. if(!$stmt->execute()){
  218. header("Location:".$pag."?error=1");
  219. //print_r($stmt->errorInfo());
  220. exit();
  221. }
  222. $director_rs = $stmt->fetch();
  223. $stmt->closeCursor();
  224. //-----
  225. $stmt = $pdo->prepare('Select * from fs_puesto(2)');//Secretario académico
  226. if(!$stmt->execute()){
  227. header("Location:".$pag."?error=1");
  228. //print_r($stmt->errorInfo());
  229. exit();
  230. }
  231. $secretario_rs = $stmt->fetch();
  232. unset($tmp_rs);
  233. foreach($rs as $profesor){
  234. if(strtoupper($profesor["Usuario_nombre"]) != "VACANTE"){//no vacante
  235. $stmt = $pdo->prepare('Select * from fs_categoriaperiodo(:periodo, :prof )');//firmas
  236. $stmt->bindParam(":periodo", $periodo_id);
  237. $stmt->bindParam(":prof", $profesor["Usuario_id"]);
  238. if(!$stmt->execute()){
  239. $pdo->rollBack();
  240. header("Location:".$pag."?error=2");
  241. //print_r($stmt->errorInfo());
  242. exit();
  243. }
  244. $cat_rs = $stmt->fetch();
  245. $stmt->closeCursor();
  246. $nombre = $profesor["Usuario_apellidos"]." ".$profesor["Usuario_nombre"];
  247. $xtpl->assign("PROFESOR", $nombre);
  248. $xtpl->assign("CATEGORIA", $cat_rs["Categoria_desc"]);
  249. if($nivel != 1){
  250. $xtpl->assign("PLAN", $profesor["Carrera_desc"]);
  251. $stmt = $pdo->prepare('Select * from fs_horariogrupoprofesor(:prof, :periodo, :carr)');
  252. $stmt->bindParam(":carr", $profesor["Carrera_id"]);
  253. }else
  254. $stmt = $pdo->prepare('Select * from fs_horariogrupoprofesor(:prof, :periodo, NULL)');
  255. $stmt->bindParam(":prof", $profesor["Usuario_id"]);
  256. $stmt->bindParam(":periodo", $periodo_id);
  257. if(!$stmt->execute()){
  258. header("Location:".$pag."?error=2");
  259. //print_r($stmt->errorInfo());
  260. exit();
  261. }
  262. $asignatura_rs = $stmt->fetchAll();
  263. $stmt->closeCursor();
  264. $grupo_last = $asignatura_rs[0]["Grupo_id"].$asignatura_rs[0]["Materia_id"];
  265. foreach($asignatura_rs as $asignatura){
  266. if($grupo_last != $asignatura["Grupo_id"].$asignatura["Materia_id"]){
  267. $grupo_last = $asignatura["Grupo_id"].$asignatura["Materia_id"];
  268. $xtpl->parse("main.renglon");
  269. }
  270. $xtpl->assign("ASIGNATURA", $asignatura["Materia_desc"]);
  271. if($nivel == 1)
  272. $xtpl->assign("GRUPO", $asignatura["Grupo_desc"]." ".$asignatura["Carrera_prefijo"]);
  273. else
  274. $xtpl->assign("GRUPO", $asignatura["Materia_grupo_posgrado"]);
  275. if($asignatura["Salon_desc"] != "")
  276. $xtpl->assign("SALON", $asignatura["Salon_desc"]);
  277. else
  278. $xtpl->assign("SALON", "&nbsp;");
  279. $xtpl->assign("DIA", diaNombre($asignatura["Dia_id"]));
  280. //$hora_fin = date('H:i', strtotime('+'.$asignatura["Horario_duracion"].' minutes', strtotime('2019-01-01 '.$asignatura["Horario_hora"])));
  281. $xtpl->assign("HORARIO", substr($asignatura["Horario_hora"], 0, 5)." - ".substr($asignatura["Horario_hora_final"],0, 5));
  282. $xtpl->parse("main.renglon.detalle");
  283. }
  284. $xtpl->parse("main.renglon");
  285. $cuenta--;
  286. $xtpl->assign('MARCA', './zip/marca.png');
  287. if($profesor["Usuario_id"] != $director_rs["Usuario_id"]){
  288. $xtpl->assign('FIRMA', $carta_rs["Director_firma"]);
  289. $director = $carta_rs["Director_grado"]." ".$carta_rs["Director_nombre"]." ".$carta_rs["Director_apellidos"];
  290. $xtpl->assign("NOMBRE_FIRMA", $director);
  291. $xtpl->assign("PUESTO_FIRMA", $director_rs["Puesto_desc"]);
  292. }else{//TODO cambiar por secretario académico
  293. $xtpl->assign('FIRMA', $carta_rs["Secretario_imagen"]);
  294. $secretario = $carta_rs["Secretario_grado"]." ".$carta_rs["Secretario_nombre"]." ".$carta_rs["Secretario_apellidos"];
  295. $xtpl->assign("NOMBRE_FIRMA", $secretario);
  296. $xtpl->assign("PUESTO_FIRMA", $secretario_rs["Puesto_desc"]);
  297. }
  298. if($cuenta > 0) $xtpl->parse("main.pagebreak");
  299. $xtpl->parse("main");
  300. }//fin vacante
  301. }//for profesor
  302. /*echo $stylesheet;
  303. $xtpl->out("main");exit();*/
  304. $mpdf->WriteHTML($stylesheet);
  305. $mpdf->WriteHTML($xtpl->text("main"));
  306. $mpdf->Output("nombramientos.pdf", 'I');