diff --git a/pom.xml b/pom.xml
index e9d29a8..3e8e00d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -178,6 +178,11 @@
7.0.3
+
+ com.google.code.gson
+ gson
+
+
diff --git a/src/main/bundles/prod.bundle b/src/main/bundles/prod.bundle
index 2a14c7c..b3a8225 100644
Binary files a/src/main/bundles/prod.bundle and b/src/main/bundles/prod.bundle differ
diff --git a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java
index 6d57e34..cf24a25 100644
--- a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java
+++ b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java
@@ -1,9 +1,6 @@
package mx.gob.jumapacelaya.api;
-import com.nimbusds.jose.shaded.gson.*;
-import com.vaadin.flow.component.button.Button;
-import com.vaadin.flow.component.notification.Notification;
-import com.vaadin.flow.data.renderer.ComponentRenderer;
+import com.google.gson.*;
import mx.gob.jumapacelaya.models.RedmineUser;
import mx.gob.jumapacelaya.models.Ticket;
import org.springframework.beans.factory.annotation.Value;
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
index 9d26f53..5bb8c8d 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
@@ -283,7 +283,7 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
// 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.setTarget("_blank");
downloadLink.setId("descargar-reporte-link");
add(downloadLink);
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java
index ad2aa6d..fec2ed8 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java
@@ -6,15 +6,14 @@ import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.checkbox.CheckboxGroup;
import com.vaadin.flow.component.checkbox.CheckboxGroupVariant;
+import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.grid.GridVariant;
import com.vaadin.flow.component.grid.HeaderRow;
import com.vaadin.flow.component.grid.dataview.GridListDataView;
-import com.vaadin.flow.component.html.Div;
-import com.vaadin.flow.component.html.H4;
-import com.vaadin.flow.component.html.H5;
-import com.vaadin.flow.component.html.Span;
+import com.vaadin.flow.component.html.*;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification;
@@ -31,9 +30,13 @@ import com.vaadin.flow.data.value.ValueChangeMode;
import com.vaadin.flow.function.ValueProvider;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
+import com.vaadin.flow.server.StreamResource;
import jakarta.annotation.security.PermitAll;
import mx.gob.jumapacelaya.models.PlanAnual;
import mx.gob.jumapacelaya.services.DatabaseService;
+import mx.gob.jumapacelaya.services.ReportService;
+import net.sf.jasperreports.engine.JasperFillManager;
+import net.sf.jasperreports.engine.JasperPrint;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*;
import org.springframework.core.env.Environment;
@@ -41,6 +44,7 @@ import org.vaadin.lineawesome.LineAwesomeIcon;
import java.io.*;
import java.lang.reflect.Array;
+import java.sql.Date;
import java.time.LocalDate;
import java.time.Year;
import java.time.format.DateTimeFormatter;
@@ -54,6 +58,7 @@ import java.util.function.Consumer;
public class PlanAnualView extends VerticalLayout {
private final Environment env;
+ private final ReportService reportService;
H4 titulo = new H4();
H5 titulo1 = new H5();
@@ -65,10 +70,14 @@ public class PlanAnualView extends VerticalLayout {
private final DatabaseService databaseService;
Grid planAnualGrid;
Button btnColumns;
+ Button btnImprimirRpt;
+ HorizontalLayout btnImprimirLayout;
- public PlanAnualView(DatabaseService databaseService, Environment env) {
+ public PlanAnualView(DatabaseService databaseService, Environment env, ReportService reportService) {
this.databaseService = databaseService;
this.env = env;
+ this.reportService = reportService;
+
setupHeader();
Grid planAnualGrid = setupGrid();
@@ -154,7 +163,7 @@ public class PlanAnualView extends VerticalLayout {
btnInsertar = new Button("Insertar archivo", event -> insertarDatos());
btnInsertar.setVisible(false);
- gridLayout.add(btnColumns,planAnualGrid);
+ gridLayout.add(btnImprimirLayout,planAnualGrid);
gridLayout.setSizeFull();
uploadLayout.add(upload, btnInsertar);
@@ -309,6 +318,12 @@ public class PlanAnualView extends VerticalLayout {
btnColumns = new Button(VaadinIcon.GRID_H.create());
btnColumns.addThemeVariants(ButtonVariant.LUMO_ICON);
btnColumns.setAriaLabel("Show/Hide Columns");
+ btnColumns.setTooltipText("Show/Hide Columns");
+
+ btnImprimirRpt = new Button(VaadinIcon.PRINT.create());
+ btnImprimirRpt.addClickListener(event -> sacarReporte());
+ btnImprimirRpt.setTooltipText("Imprimir reporte");
+ btnImprimirLayout = new HorizontalLayout(btnColumns, btnImprimirRpt);
HorizontalLayout columnSelectorLayout = new HorizontalLayout();
columnSelectorLayout.setAlignItems(Alignment.END);
@@ -519,4 +534,78 @@ public class PlanAnualView extends VerticalLayout {
gridLayout.setVisible(hasItems);
uploadLayout.setVisible(!hasItems);
}
+
+
+ private void sacarReporte() {
+ Dialog dialog = new Dialog();
+ dialog.setHeaderTitle("Seleccione la fecha de inicio y fin");
+
+ DatePicker.DatePickerI18n i18n = new DatePicker.DatePickerI18n()
+ .setWeekdays(List.of("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sabado"))
+ .setWeekdaysShort(List.of("Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"))
+ .setMonthNames(List.of("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"))
+ .setFirstDayOfWeek(1)
+ .setToday("Hoy")
+ .setCancel("Cancelar")
+ .setDateFormat("dd/MM/yyyy");
+
+ DatePicker fechaInicio = new DatePicker("Fecha de inicio:");
+ fechaInicio.setRequired(true);
+ fechaInicio.setI18n(i18n);
+
+ DatePicker fechaFin = new DatePicker("Fecha de fin:");
+ fechaFin.setRequired(true);
+ fechaFin.setI18n(i18n);
+
+
+ Button btnGenerar = new Button("Generar", VaadinIcon.PRINT.create());
+ btnGenerar.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+ btnGenerar.addClickListener(e -> {
+ if (fechaInicio.getValue() == null || fechaFin.getValue() == null) {
+ Notification.show("Por favor, seleccione ambas fechas.", 3000, Notification.Position.MIDDLE)
+ .addThemeVariants(NotificationVariant.LUMO_ERROR);
+ return;
+ }
+
+ LocalDate inicio = fechaInicio.getValue();
+ LocalDate fin = fechaFin.getValue();
+
+
+ try {
+ // Prepara los parámetros para el reporte
+ Map parametros = new HashMap<>();
+ parametros.put("FECHAINICIO", java.sql.Date.valueOf(inicio));
+ parametros.put("FECHAFIN", java.sql.Date.valueOf(fin));
+
+ // Genera el PDF
+ byte[] pdf = reportService.generarReporte("mantenimientoFechas", parametros);
+
+ // Creando el recurso de descarga
+ StreamResource resource = new StreamResource("reporte.pdf", () -> new ByteArrayInputStream(pdf));
+ Anchor downloadLink = new Anchor(resource, "Descargar Reporte");
+ downloadLink.setTarget("_blank");
+ 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 genrar el reporte: " + ex.getMessage(), 5000, Notification.Position.MIDDLE)
+ .addThemeVariants(NotificationVariant.LUMO_ERROR);
+ ex.printStackTrace();
+ }
+ });
+
+ Button btnCancelar = new Button("Cancelar", VaadinIcon.CLOSE_CIRCLE.create(), e -> dialog.close());
+ dialog.getFooter().add(btnCancelar);
+ dialog.getFooter().add(btnGenerar);
+
+ HorizontalLayout fechasLayout = new HorizontalLayout(fechaInicio, fechaFin);
+ dialog.add(fechasLayout);
+
+ dialog.open();
+ }
}
diff --git a/src/main/resources/META-INF/resources/reportes/mantenimientoFechas.jasper b/src/main/resources/META-INF/resources/reportes/mantenimientoFechas.jasper
new file mode 100644
index 0000000..ce2edb7
Binary files /dev/null and b/src/main/resources/META-INF/resources/reportes/mantenimientoFechas.jasper differ