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