diff --git a/pom.xml b/pom.xml
index 98528a2..219ee84 100644
--- a/pom.xml
+++ b/pom.xml
@@ -159,6 +159,24 @@
commons-io
2.16.1
+
+
+ net.sf.jasperreports
+ jasperreports
+ 7.0.3
+
+
+
+ net.sf.jasperreports
+ jasperreports-pdf
+ 7.0.3
+
+
+
+ com.lowagie
+ itext
+ 2.1.7.js10
+
diff --git a/src/main/java/mx/gob/jumapacelaya/services/ReportService.java b/src/main/java/mx/gob/jumapacelaya/services/ReportService.java
new file mode 100644
index 0000000..e05d613
--- /dev/null
+++ b/src/main/java/mx/gob/jumapacelaya/services/ReportService.java
@@ -0,0 +1,41 @@
+package mx.gob.jumapacelaya.services;
+
+import net.sf.jasperreports.engine.JasperExportManager;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.Map;
+
+@Service
+public class ReportService {
+
+ @Value("${db.url}")
+ private String dbUrl;
+ @Value("${db.user}")
+ private String dbUser;
+ @Value("${db.pass}")
+ private String dbPass;
+
+ public byte[] generarReporte(String nombreReporte, Map parametros) throws Exception {
+
+ InputStream logo = getClass().getResourceAsStream("/META-INF/resources/images/LOGO_24'27.png");
+ parametros.put("logo", logo);
+ InputStream firmaGcia = getClass().getResourceAsStream("/META-INF/resources/images/FirmaGerenteTI.png");
+ parametros.put("firmaGcia", firmaGcia);
+
+ InputStream jasperStream = getClass().getResourceAsStream("/META-INF/resources/reportes/" + nombreReporte + ".jasper");
+ if (jasperStream == null) {
+ throw new IllegalArgumentException("No se encontro el archivo del reporte: " + nombreReporte);
+ }
+
+ try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPass)) {
+ JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parametros, conn);
+ return JasperExportManager.exportReportToPdf(jasperPrint);
+ }
+ }
+}
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
index cbcdcca..8317477 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
@@ -1,9 +1,16 @@
package mx.gob.jumapacelaya.ui;
+import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+
+import com.vaadin.flow.component.html.Anchor;
+import com.vaadin.flow.server.StreamResource;
+import mx.gob.jumapacelaya.services.ReportService;
import org.springframework.security.core.Authentication;
import org.springframework.cglib.core.Local;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -90,10 +97,12 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
private final SecurityService securityService;
private final DatabaseService service;
+ private final ReportService reportService;
- public DetallesMantView(SecurityService securityService, DatabaseService service) {
+ public DetallesMantView(SecurityService securityService, DatabaseService service, ReportService reportService) {
this.service = service;
this.securityService = securityService;
+ this.reportService = reportService;
setPadding(true);
mainLayout = new VerticalLayout();
@@ -268,6 +277,34 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
});
+ btnImprimirRepo.addClickListener(e -> {
+ try {
+ // Prepara los parámetros para el reporte
+ Map parametros = new HashMap<>();
+ parametros.put("PLAN_ID", planAnualIdActual);
+
+ // Genera el PDF
+ byte[] pdf = reportService.generarReporte("mantenimientoReport", parametros);
+
+ // Se crea el recurso para descarga
+ StreamResource resource = new StreamResource("reporte.pdf", () -> new ByteArrayInputStream(pdf));
+ Anchor downloadLink = new Anchor(resource, "Descargar Reporte");
+ downloadLink.getElement().setAttribute("download", true);
+ downloadLink.setId("descargar-reporte-link");
+ add(downloadLink);
+
+ getUI().ifPresent(ui ->
+ ui.getPage().executeJs("document.getElementById('descargar-reporte-link').click();")
+ );
+
+ } catch (Exception ex) {
+ Notification.show("Error al generar el reporte: " + ex.getMessage(), 4000, Notification.Position.MIDDLE)
+ .addThemeVariants(NotificationVariant.LUMO_ERROR);
+ ex.printStackTrace();
+ }
+ });
+
+
// Se dispara el dialogo de confirmacion
btnGuardar.addClickListener(e -> confirmDialog.open());
@@ -554,7 +591,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
smtSignLayout.replace(smtSignPad, firmaSmtImg);
}
- Image firmaGcia = new Image("images/firmaGcia.png", "Firma de la Gcia. de T.I");
+ Image firmaGcia = new Image("images/FirmaGerenteTI.png", "Firma de la Gcia. de T.I");
firmaGcia.setHeight("200px");
firmaGcia.setWidthFull();
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
index 1ee35e2..fe8b98e 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
@@ -460,10 +460,10 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
smtSignLayout.add(smtSignPad, smtSignSpan, tituloSMT);
VerticalLayout gcialSignLayout = new VerticalLayout();
- Image firmaGcia = new Image("images/firmaGcia.png", "Firma Gerente de Sistemas");
+ Image firmaGcia = new Image("images/FirmaGerenteTI.png", "Firma Gerente de Sistemas");
firmaGcia.setHeight("200px");
firmaGcia.setWidthFull();
- Span gciatiSignSpan = new Span("Lic. Juan Pablo Torres Alvárez");
+ Span gciatiSignSpan = new Span("Ing. Javier Patiño Martinez");
Span tituloGerente = new Span("Gerente de T.I");
gcialSignLayout.setSizeFull();
gcialSignLayout.setSpacing(false);
diff --git a/src/main/resources/META-INF/resources/images/FirmaGerenteTI.png b/src/main/resources/META-INF/resources/images/FirmaGerenteTI.png
new file mode 100644
index 0000000..abf93fb
Binary files /dev/null and b/src/main/resources/META-INF/resources/images/FirmaGerenteTI.png differ
diff --git a/src/main/resources/META-INF/resources/images/firmaGcia.png b/src/main/resources/META-INF/resources/images/firmaGcia.png
deleted file mode 100644
index 6567f06..0000000
Binary files a/src/main/resources/META-INF/resources/images/firmaGcia.png and /dev/null differ
diff --git a/src/main/resources/META-INF/resources/reportes/mantenimientoReport.jasper b/src/main/resources/META-INF/resources/reportes/mantenimientoReport.jasper
new file mode 100644
index 0000000..0628cd0
Binary files /dev/null and b/src/main/resources/META-INF/resources/reportes/mantenimientoReport.jasper differ