SIU-Guarani/Version3.23.0/personalizaciones/impresiones nuevo esquema

De SIU
Saltar a: navegación, buscar

Personalizar impresiones

Guaraní realiza la impresión de comprobantes y reportes a partir de documentos PDF. Estos son creados utilizando JASPER, un motor de generación de reportes basado en JAVA soportado por SIU-Toba.


A partir de la versión 3.23.0 Empezamos a cambiar la forma de crearlos empezamos a usar Araí Reportes. Esto conlleva algunos cambios a tener en cuenta al momento de personalizar




La personalización de cualquier impresión en Guaraní dependerá de lo que se quiera personalizar, aunque comúnmente comprende desarrollar una plantilla JASPER para la impresión del formato deseado. Para ésto se utiliza iReports para la edición de las mismas, en archivos .jrxml, que luego se compilan generando sus correspondientes archivos .jasper
En términos generales, tanto agregar como modificar una plantilla existente, implicará que se agreguen los archivos .jrxml y .jasper propios correspondientes a la misma, en el path: <path proyecto Guaraní>/personalizacion/exportaciones/jasper. A partir de la versión 3.23.0 Empezamos a cambia; <path proyecto Guaraní>/personalizacion/reportes/nucleo/. Donde tendrán tres carpetas para imagenes, estilo y jasper En la carpeta imagenes es para reemplazar o agregar logos o imagenes adiciones. En la carpeta estilo es para los css. En la carpeta jasper es para reemplazar o agregar plantillas de jasper jrxml

Si se trata de un comprobante nuevo tendrá su nombre propio, en caso de estar personalizando uno existente, tendrá el mismo nombre que el provisto por Guaraní. De esta forma, el sistema al intentar levantar el archivo asociado al comprobante que se desea imprimir, verifica en primera instancia si existe un archivo con ese nombre en la carpeta indicada de personalizaciones, con lo cual se imprimirá la versión propia. En otro caso, utilizará la plantilla asociada en Guaraní para la impresión.



Dentro de todas las impresiones que se realizan en Jasper en el sistema: Constancias de solicitud manual, Certificados de Egreso, Actas, Reportes, etc, en Guaraní se utilizaron dos tipos de .jrxml diferentes, en cuanto a la forma en que se envían y recuperan los datos a mostrar:

  • Lenguaje Sql:
    En esta alternativa, en el archivo .jrxml se realiza una consulta sql a la base de datos de negocios de Guaraní para obtener los datos a mostrar en el reporte o constancia, a partir de los parámetros recibidos. Editando el jrxml desde el iReports, en la Report Query se define el query language como Sql y se especifica la consulta con los campos que se desean recuperar.

A partir de la versión 3.23.0 Empezamos a cambia; ya no usaremos querys Para recuperar datos del reporte, lo que antes era la query embebida en el mismo:

// Recupero datos para el detalle del reporte si corresponde
if (isset($informacionReporte['clase_consulta']) && isset($informacionReporte['metodo_consulta'])) {
    $clase_consulta = $informacionReporte['clase_consulta'];
    $metodo_consulta = $informacionReporte['metodo_consulta'];
    $datos  = \toba::consulta_php($clase_consulta)->$metodo_consulta($solicitud);

    // Seteo datos para el reporte
    $report->set_json(rest_encode($datos));
}
  • Lenguaje Xml:
    En este caso, además de los parámetros básicos que se envían, se pasan los datos desde el código PHP a Jasper en formato xml, para lo cual Toba crea un archivo temporal (en <path proyecto Guaraní>/temp), que se elimina una vez generado el pdf. En la Report Query, se define el query language como XPath y se especifica dónde se ubicará el contenido ('/tabla/datos/fila'). Esto permite definir los diferentes campos a utilizar para mostrar en el contenido de la plantilla, con valores como por ej: para el campo: id_clave, valor: dato[@clave="id_clave"]/@valor.
    Esta alternativa se utiliza generalmente cuando en la operación del sistema desde la cual se realiza la impresión, se previsualizan en pantalla los mismos datos que desean mostrarse en el pdf. Por ejemplo, para el caso de un reporte básico, o en Actas, tanto de Exámenes como Cursadas, donde en la operación se visualiza el cuadro de Alumnos con sus datos asociados.


Dentro del código de la clase PHP en la cual se implementa la impresión (asociada al componente Toba que define el evento), se encontrará el método: vista_jasperreports, dónde se codifican los detalles de la misma. En dicho método se incluirá la asociación con la plantilla .jrmxl correspondiente, a partir de las sentencias:

$path = guarani::get_path_reporte_jasper('plantilla.jasper');
$report->set_path_reporte($path);

A partir de la versión 3.23.0 Empezamos a cambia;

Para recuperar URI del reporte:

// Recupero la URI del reporte
$uri    = \toba::consulta_php('co_arai_reportes')->get_uri_reporte($informacionReporte['id']);

// Se debe instanciar toba_vista_araireportes
$report = new toba_vista_araireportes();
$report->set_path_reporte($uri);

(Observar que en el método get_path_reporte_jasper de la clase guarani_nucleo.php es dónde se define el mecanismo de buscar primero el archivo .jrmxl en la carpeta de personalizaciones, o tomar la plantilla brindada por Guaraní, en caso de no existir la propia.)

Aquí también se realizará el pasaje de parámetros a la plantilla con sentencias del estilo:

$report->set_parametros($params); dónde $params es un arreglo asociativo

Y, para el caso de la segunda alternativa, también se encontrarán las sentencias donde se asocia el xml correspondiente, por ejemplo:

$xml = $this->dep('cuadro')->vista_xml(); //Se genera un xml a partir de los datos del cuadro
$report->set_xml(utf8_e_seguro($xml));


A partir de la versión 3.23.0 cambia; Hacer uso de la clase arai_reportes y toba_vista_araireportes :

use siu\modelo_g3\arai_reportes; use siu\modelo_g3\toba_vista_araireportes;

Para saber si un reporte esta habilitado en Araí Reportes:

// Me fijo si esta habilitado para Araí Reportes $reporteHabilitado = arai_reportes::esReporteHabilitado($id); Para recuperar información de un reporte:

// Recupero información del reporte $informacionReporte = arai_reportes::getInformacionReporteById($id); Setear parámetros, como por ejemplo logo y titulo:

// Recupero la URI del logo $uri_img = arai_reportes::getUriLogoImpresion(); $report->set_parametro('uri_logo', 'S', $uri_img);

// Seteo el título del reporte $report->set_parametro('titulo', 'S', $informacionReporte['titulo']); Luego el logo se puede mostrar de la siguiente manera en el .jrxml:

<imageExpression><![CDATA["repo:" + $P{uri_logo}]]></imageExpression> Pasar imágenes en BASE64, ej QR:

// Genero el base64 del QR a partir de la imagen $base64_qr = base64_encode(file_get_contents($path_qr)); // Elimino la imagen del QR unlink($path_qr); $report->set_parametro('verificacion_qr', 'S', $base64_qr); Luego el QR se puede mostrar de la siguiente manera en el .jrxml:

<import value="java.util.Base64"/>

<imageExpression><![CDATA[Base64.getDecoder().decode($P{verificacion_qr})]]></imageExpression>

Se utilizará <path proyecto Guaraní> para referirse al path donde se encuentra instalado el SIU-Guaraní Gestión.

Luego ejecutar el comando bin/instalador reportes:actualizar para que se suban a Araí-Reportes (se elimina todo y se vuelve a crear en Araí-Reportes). También se guardan en la tabla arai_reportes y arai_reportes_archivos .

Los reportes agregados también se deben registrar en la función getReportes de la clase php/nucleo/arai/arai_reportes_nucleo.php.