pdf_insignias.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. <?php
  2. // PHP print errors
  3. ini_set('display_errors', 1);
  4. ini_set('display_startup_errors', 1);
  5. error_reporting(E_ALL);
  6. extract($_POST);
  7. setlocale(LC_TIME, 'es_MX.UTF-8'); {
  8. require_once("../../include/nocache.php");
  9. require_once("../../include/bd_pdo.php");
  10. require_once("../../include/util.php");
  11. require_once("../../include/constantes.php");
  12. require_once("../../classes/ValidaSesion.php");
  13. include_once('../../include/xTemplate/xtemplate.class.php'); // including mpdf.php
  14. include_once('../../include/mpdf/autoload.php'); // including mpdf.php
  15. require_once("../include/Fechas.php");
  16. require_once('../include/util.php');
  17. require_once('../include/encripcion.php');
  18. }
  19. $pag = "../reporte_insignias.php";
  20. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  21. $objSesion = new ValidaSesion($pdo, 115, GEMA);
  22. if (!$objSesion->tieneAcceso()) {
  23. header("Location: " . $pag . "?error=1");
  24. exit();
  25. }
  26. unset($objValida);
  27. if (!isset($alumnos, $fecha_carta, $firmado, $tamano)) {
  28. header("Location: " . $pag . "?error=0");
  29. exit();
  30. } else {
  31. // echo $fecha_carta;
  32. // exit;
  33. }
  34. # Function to query the database and return the result
  35. function query(string $sql, array $bind_params = [], bool $print = false)
  36. {
  37. global $pdo, $pag;
  38. if ($print) {
  39. echo $sql;
  40. print_r($bind_params);
  41. exit;
  42. }
  43. $stmt = $pdo->prepare($sql);
  44. foreach ($bind_params as $param => $value)
  45. $stmt->bindParam($param, $value);
  46. if (!$stmt->execute()) {
  47. $pdo->rollBack();
  48. header("Location:" . $pag . "?error=2");
  49. //print_r($stmt->errorInfo());
  50. exit();
  51. }
  52. $result_set = $stmt->fetchAll();
  53. $stmt->closeCursor();
  54. $stmt = null;
  55. return $result_set;
  56. }
  57. $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
  58. /********* FONTS **********/
  59. $fontDirs = $defaultConfig['fontDir'];
  60. $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
  61. $fontData = $defaultFontConfig['fontdata'] + ['indivisatext' => [
  62. 'R' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-Regular.ttf',
  63. 'I' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-RegularItalic.ttf',
  64. 'B' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-Bold.ttf',
  65. 'BI' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-BoldItalic.ttf',
  66. ]] + ['indivisadisplay' => [
  67. 'R' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-Regular.ttf',
  68. 'I' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-RegularItalic.ttf',
  69. 'B' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-Heavy.ttf',
  70. 'BI' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-HeavyItalic.ttf',
  71. ]] + ['fontawesome' => [
  72. 'R' => '../../fonts/fa/fa-regular-400.ttf',
  73. 'B' => '../../fonts/fa/fa-solid-900.ttf',
  74. ]];
  75. /********* CONFIGURACIÓN INICIAL **********/
  76. $config = [
  77. 'mode' => 'utf-8', 'format' => 'Letter',
  78. 'margin_header' => 12, 'margin_top' => 25, 'margin_left' => 15, 'margin_right' => 15, 'margin_footer' => 4,
  79. 'fontDir' => array_merge($fontDirs, [__DIR__]), 'fontdata' => $fontData, 'default_font' => 'indivisatext'
  80. ];
  81. /********* TEMPLATE **********/
  82. $carta = new XTemplate('../tpl/carta.tpl.html');
  83. $carta->parse('header');
  84. $carta->parse('footer');
  85. /********* PDF **********/
  86. $mpdf = new \Mpdf\Mpdf($config);
  87. $mpdf->SHYlang = 'es';
  88. # FIRMAS DE LOS DIRECTORES
  89. $carta->assign("FECHA", fechaConstancia($fecha_carta));
  90. $mpdf->SetHTMLHeader($carta->text('header'));
  91. $mpdf->SetHTMLFooter($carta->text('footer'));
  92. $mpdf->SetTitle("Insignias | $fecha_carta");
  93. $mpdf->SetAuthor('Facultad de Ingeniería. © Universidad La Salle A.C. 2022 Todos los derechos Reservados.');
  94. /********* HOJA DE ESTILOS **********/
  95. $mpdf->WriteHTML('<link rel="stylesheet" href="../css/' . $estilo . '">');
  96. //$firmas_id = [8, 27];
  97. # Get firmas from fs_constanciafirma function
  98. //$firmas = query('SELECT * FROM fs_constanciafirma(NULL, true) WHERE "Usuario_id" IN (' . implode(',', $firmas_id) . ")");
  99. $firmas_id = [1, 12];
  100. # Get firmas from fs_constanciafirma function
  101. $firmas = query('SELECT * FROM fs_constanciafirma(NULL, true) as c INNER JOIN "Puesto" p ON c."Usuario_id"=p."Usuario_id" WHERE p."Puesto_id" IN (' . implode(',', $firmas_id) . ")");
  102. // INSIGNIAS -> DESCRIPCIÓN
  103. for ($i = 0; $i < 2; $i++) {
  104. $carta->assign("NOMBRE$i", $firmas[$i]["ConstanciaFirma_grado"] . ' ' . $firmas[$i]["ConstanciaFirma_nombre"]);
  105. $carta->assign("CARGO$i", $firmas[$i]["ConstanciaFirma_puesto"]);
  106. }
  107. $marca = 'INSIGNIAS ' . fechaGuion($fecha_carta) . ' | '; //No acepta caracteres especiales
  108. // generaMarcaDeAgua($marca, "zip/");
  109. $carta->assign('MARCA', 'zip/marca.png');
  110. for ($i = 1; $i <= 2; $i++)
  111. $carta->assign("FIRMA$i", $firmado ? $firmas[$i - 1]["ConstanciaFirma_imagen"]: "fondo.png");
  112. $carta->parse('main.firmas');
  113. $totalAlumnos = count($alumnos) - 1;
  114. $alumnosConInsignias = 0;
  115. foreach ($alumnos as $alumno_key => $alumno_id) {
  116. $insignias_rs = query('SELECT * FROM fs_insigniareportealumno(:id_alumno)', [':id_alumno' => $alumno_id]);
  117. if (empty($insignias_rs)) continue;
  118. else
  119. // add insignia
  120. $alumnosConInsignias++;
  121. $alumno_carta = new XTemplate('../tpl/carta.tpl.html');
  122. $usuario_rs = query('SELECT * FROM fs_alumno(:id_alumno, NULL)', [':id_alumno' => $alumno_id]);
  123. $usuario = $usuario_rs[0];
  124. // TÍTULO
  125. $alumno = $usuario['Usuario_nombre'] . ' ' . $usuario['Usuario_apellidos'];
  126. $mpdf->WriteHTML($alumno_carta->text("resumen"));
  127. $alumno_carta->assign('ALUMNO', $alumno);
  128. $carrera = mb_strtoupper($usuario['Carrera_desc'], 'UTF-8');
  129. $alumno_carta->assign('CARRERA', $carrera);
  130. if ($alumnosConInsignias > 1) $mpdf->AddPage();
  131. $alumno_carta->parse("main.titulo");
  132. $mpdf->WriteHTML($alumno_carta->text("main.titulo"));
  133. foreach ($insignias_rs as $key => $insignia) {
  134. # if the insignia tipo is new
  135. if ($key == 0 || $insignia["InsigniaTipo_desc"] != $insignias_rs[$key - 1]["InsigniaTipo_desc"]) {
  136. $alumno_carta->assign('INSIGNIA_TIPO', $insignia["InsigniaTipo_desc"]);
  137. $alumno_carta->assign('INSIGNIA_COLOR', $insignia["InsigniaTipo_color"]);
  138. $alumno_carta->parse('main.insignias.tipo');
  139. $mpdf->writeHTML($alumno_carta->text("main.insignia.tipo"));
  140. }
  141. $alumno_carta->assign('INSIGNIA_TITULO', $insignia["Insignia_titulo"]);
  142. $alumno_carta->assign('ESPACIO', $tamano);
  143. $alumno_carta->assign('INSIGNIA_DESCRIPCION', $insignia["Insignia_desc"]);
  144. # If fecha inicial is the same as fecha final
  145. // if insignia is general entonces query fecha
  146. if (!$insignia["InsigniaTipo_general"]) {
  147. $fecha_inicial = date_create($insignia["InsigniaPersonal_fecha_inicial"]);
  148. $fecha_final = date_create($insignia["InsigniaPersonal_fecha_final"]);
  149. # If fecha inicial is the same as fecha final
  150. if ($fecha_inicial == $fecha_final || $insignia["InsigniaPersonal_fecha_inicial"] == null) {
  151. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::romanizaFecha($fecha_final));
  152. } else {
  153. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::estandarizaDia($fecha_inicial, $fecha_final, 'ultimos'));
  154. }
  155. } else {
  156. $reglas_rs = query('SELECT * FROM fs_insigniageneralreglas(:id_insignia)', [':id_insignia' => $insignia["Insignia_id"]])[0];
  157. $fecha_inicial = date_create($reglas_rs["CalendarioEvento_fecha"]);
  158. switch ($reglas_rs["CalendarioReglas_intervalo"]) {
  159. case 1: {
  160. $fecha_final = date_create($reglas_rs["CalendarioReglas_fecha_final"]);
  161. // add one day to fecha_inicial
  162. $tipo = (new DateTime($fecha_inicial->format('Y-m-d')))->modify('+1 day') == $fecha_final ? 'ultimos' : 'rango';
  163. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::estandarizaDia($fecha_inicial, $fecha_final, $tipo));
  164. break; // diario
  165. }
  166. case 2:
  167. $alumno_carta->assign('INSIGNIA_FECHA', "Pendiente semanal");
  168. break; // semanal
  169. case 3:
  170. $alumno_carta->assign('INSIGNIA_FECHA', "Pendiente mensual");
  171. break; // mensual
  172. default:
  173. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::romanizaFecha($fecha_inicial));
  174. break; // una vez
  175. }
  176. }
  177. $alumno_carta->assign('FOLIO', encripta($alumno_id . ',' . $insignia['Insignia_id']));
  178. $llevaLínea = isset($insignias_rs[$key + 1]) && $insignias_rs[$key + 1]["InsigniaTipo_desc"] == $insignia["InsigniaTipo_desc"];
  179. $alumno_carta->assign('INSIGNIA_LINEA', $llevaLínea ? 'linea' : '');
  180. $alumno_carta->parse('main.insignias.descripcion');
  181. $alumno_carta->parse('main.insignias.descripcion.calendar');
  182. $alumno_carta->parse('main.insignias');
  183. }
  184. # Prevent the blank page at the end of the document
  185. $mpdf->WriteHTML($alumno_carta->text('main.insignias'));
  186. if ($mpdf->y > 180.0) $mpdf->AddPage();
  187. $mpdf->WriteHTML($carta->text('main.firmas'));
  188. }
  189. if ($alumnosConInsignias > 0)
  190. $mpdf->Output('cartas.pdf', 'I');
  191. else
  192. header("Location:" . $pag . "?error=3");