pdf_insignias_borrador.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. $pag = "../reporte_insignias.php";
  19. //--- Objeto para validar usuario. El id de usuario lo lee desde sesión
  20. $objSesion = new ValidaSesion($pdo, 115, GEMA);
  21. if (!$objSesion->tieneAcceso()) {
  22. header("Location: " . $pag . "?error=1");
  23. exit();
  24. }
  25. unset($objValida);
  26. // die( $fecha_carta );
  27. if (!isset($alumnos)) {
  28. header("Location: " . $pag . "?error=0");
  29. exit();
  30. }
  31. # Function to query the database and return the result
  32. function query(string $sql, array $bind_params = [], bool $print = false)
  33. {
  34. global $pdo, $pag;
  35. if ($print) {
  36. echo $sql;
  37. print_r($bind_params);
  38. exit;
  39. }
  40. $stmt = $pdo->prepare($sql);
  41. foreach ($bind_params as $param => $value)
  42. $stmt->bindParam($param, $value);
  43. if (!$stmt->execute()) {
  44. $pdo->rollBack();
  45. header("Location:" . $pag . "?error=2");
  46. //print_r($stmt->errorInfo());
  47. exit();
  48. }
  49. $result_set = $stmt->fetchAll();
  50. $stmt->closeCursor();
  51. $stmt = null;
  52. return $result_set;
  53. }
  54. $defaultConfig = (new \Mpdf\Config\ConfigVariables())->getDefaults();
  55. /********* FONTS **********/
  56. $fontDirs = $defaultConfig['fontDir'];
  57. $defaultFontConfig = (new \Mpdf\Config\FontVariables())->getDefaults();
  58. $fontData = $defaultFontConfig['fontdata'] + ['indivisatext' => [
  59. 'R' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-Regular.ttf',
  60. 'I' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-RegularItalic.ttf',
  61. 'B' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-Bold.ttf',
  62. 'BI' => '../../fonts/indivisaFont/ttf/IndivisaTextSans-BoldItalic.ttf',
  63. ]] + ['indivisadisplay' => [
  64. 'R' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-Regular.ttf',
  65. 'I' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-RegularItalic.ttf',
  66. 'B' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-Heavy.ttf',
  67. 'BI' => '../../fonts/indivisaFont/ttf/IndivisaDisplaySans-HeavyItalic.ttf',
  68. ]] + ['fontawesome' => [
  69. 'R' => '../../fonts/fa/fa-regular-400.ttf',
  70. 'B' => '../../fonts/fa/fa-solid-900.ttf',
  71. ]];
  72. /********* CONFIGURACIÓN INICIAL **********/
  73. $config = [
  74. 'mode' => 'utf-8', 'format' => 'Letter',
  75. 'margin_header' => 12, 'margin_top' => 25, 'margin_left' => 15, 'margin_right' => 15, 'margin_footer' => 4,
  76. 'fontDir' => array_merge($fontDirs, [__DIR__]), 'fontdata' => $fontData, 'default_font' => 'indivisatext'
  77. ];
  78. /********* TEMPLATE **********/
  79. $carta = new XTemplate('../tpl/carta.tpl.html');
  80. $carta->parse('header');
  81. $carta->parse('footer');
  82. /********* PDF **********/
  83. $mpdf = new \Mpdf\Mpdf($config);
  84. $mpdf->SHYlang = 'es';
  85. $totalAlumnos = count($alumnos) - 1;
  86. $alumnosConInsignias = 0;
  87. foreach ($alumnos as $alumno_key => $alumno_id) {
  88. $insignias_rs = query('SELECT * FROM fs_insigniareportealumno(:id_alumno)', [':id_alumno' => $alumno_id]);
  89. if (empty($insignias_rs)) continue;
  90. else
  91. // add insignia
  92. $alumnosConInsignias++;
  93. $alumno_carta = new XTemplate('../tpl/carta.tpl.html');
  94. $usuario_rs = query('SELECT * FROM fs_alumno(:id_alumno, NULL)', [':id_alumno' => $alumno_id]);
  95. $usuario = $usuario_rs[0];
  96. // TÍTULO
  97. $alumno = $usuario['Usuario_nombre'] . ' ' . $usuario['Usuario_apellidos'];
  98. $mpdf->WriteHTML($alumno_carta->text("resumen"));
  99. $alumno_carta->assign('ALUMNO', $alumno);
  100. $carrera = mb_strtoupper($usuario['Carrera_desc'], 'UTF-8');
  101. $alumno_carta->assign('CARRERA', $carrera);
  102. foreach ($insignias_rs as $key => $insignia) {
  103. # if the insignia tipo is new
  104. if ($key == 0 || $insignia["InsigniaTipo_desc"] != $insignias_rs[$key - 1]["InsigniaTipo_desc"]) {
  105. $alumno_carta->assign('INSIGNIA_TIPO', $insignia["InsigniaTipo_desc"]);
  106. $alumno_carta->assign('INSIGNIA_COLOR', $insignia["InsigniaTipo_color"]);
  107. $alumno_carta->parse('main.insignias.tipo');
  108. $mpdf->writeHTML($alumno_carta->text("main.insignia.tipo"));
  109. }
  110. $alumno_carta->assign('INSIGNIA_TITULO', $insignia["Insignia_titulo"]);
  111. # If fecha inicial is the same as fecha final
  112. // if insignia is general entonces query fecha
  113. if (!$insignia["InsigniaTipo_general"]) {
  114. $fecha_inicial = date_create($insignia["InsigniaPersonal_fecha_inicial"]);
  115. $fecha_final = date_create($insignia["InsigniaPersonal_fecha_final"]);
  116. # If fecha inicial is the same as fecha final
  117. if ($fecha_inicial == $fecha_final || $insignia["InsigniaPersonal_fecha_inicial"] == null) {
  118. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::romanizaFecha($fecha_final));
  119. } else {
  120. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::estandarizaDia($fecha_inicial, $fecha_final, 'ultimos'));
  121. }
  122. } else {
  123. $reglas_rs = query('SELECT * FROM fs_insigniageneralreglas(:id_insignia)', [':id_insignia' => $insignia["Insignia_id"]])[0];
  124. $fecha_inicial = date_create($reglas_rs["CalendarioEvento_fecha"]);
  125. switch ($reglas_rs["CalendarioReglas_intervalo"]) {
  126. case 1: {
  127. $fecha_final = date_create($reglas_rs["CalendarioReglas_fecha_final"]);
  128. // add one day to fecha_inicial
  129. $tipo = (new DateTime($fecha_inicial->format('Y-m-d')))->modify('+1 day') == $fecha_final ? 'ultimos' : 'rango';
  130. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::estandarizaDia($fecha_inicial, $fecha_final, $tipo));
  131. break; // diario
  132. }
  133. case 2:
  134. $alumno_carta->assign('INSIGNIA_FECHA', "Pendiente semanal");
  135. break; // semanal
  136. case 3:
  137. $alumno_carta->assign('INSIGNIA_FECHA', "Pendiente mensual");
  138. break; // mensual
  139. default:
  140. $alumno_carta->assign('INSIGNIA_FECHA', Fechas::romanizaFecha($fecha_inicial));
  141. break; // una vez
  142. }
  143. $alumno_carta->parse('main.borrador.insignia');
  144. }
  145. }
  146. $alumno_carta->parse('main.borrador');
  147. $mpdf->WriteHTML($alumno_carta->text('main.borrador'));
  148. if ($mpdf->y > 180.0) $mpdf->AddPage();
  149. }
  150. if ($alumnosConInsignias > 0)
  151. $mpdf->Output('cartas.pdf', 'I');
  152. else
  153. header("Location:" . $pag . "?error=3");