From 3c3a5554d26262b198e2740f85775b112542538e Mon Sep 17 00:00:00 2001 From: mramirezg Date: Tue, 15 Jul 2025 10:29:19 -0600 Subject: [PATCH] Feature con reporte de mantenimiento --- pom.xml | 18 ++++++++ .../jumapacelaya/services/ReportService.java | 41 ++++++++++++++++++ .../gob/jumapacelaya/ui/DetallesMantView.java | 41 +++++++++++++++++- .../jumapacelaya/ui/MantenimientoView.java | 4 +- .../resources/images/FirmaGerenteTI.png | Bin 0 -> 13899 bytes .../META-INF/resources/images/firmaGcia.png | Bin 7117 -> 0 bytes .../reportes/mantenimientoReport.jasper | Bin 0 -> 48060 bytes 7 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 src/main/java/mx/gob/jumapacelaya/services/ReportService.java create mode 100644 src/main/resources/META-INF/resources/images/FirmaGerenteTI.png delete mode 100644 src/main/resources/META-INF/resources/images/firmaGcia.png create mode 100644 src/main/resources/META-INF/resources/reportes/mantenimientoReport.jasper 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 0000000000000000000000000000000000000000..abf93fb1986bd2a85ca841fdb0d2dd31848337f7 GIT binary patch literal 13899 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 Ima~ccKdo2XzoIXNP5C$fW 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 literal 0 HcmV?d00001