|
@ -6,15 +6,14 @@ import com.vaadin.flow.component.button.ButtonVariant; |
|
|
import com.vaadin.flow.component.checkbox.Checkbox; |
|
|
import com.vaadin.flow.component.checkbox.Checkbox; |
|
|
import com.vaadin.flow.component.checkbox.CheckboxGroup; |
|
|
import com.vaadin.flow.component.checkbox.CheckboxGroup; |
|
|
import com.vaadin.flow.component.checkbox.CheckboxGroupVariant; |
|
|
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.dependency.CssImport; |
|
|
|
|
|
import com.vaadin.flow.component.dialog.Dialog; |
|
|
import com.vaadin.flow.component.grid.Grid; |
|
|
import com.vaadin.flow.component.grid.Grid; |
|
|
import com.vaadin.flow.component.grid.GridVariant; |
|
|
import com.vaadin.flow.component.grid.GridVariant; |
|
|
import com.vaadin.flow.component.grid.HeaderRow; |
|
|
import com.vaadin.flow.component.grid.HeaderRow; |
|
|
import com.vaadin.flow.component.grid.dataview.GridListDataView; |
|
|
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.Icon; |
|
|
import com.vaadin.flow.component.icon.VaadinIcon; |
|
|
import com.vaadin.flow.component.icon.VaadinIcon; |
|
|
import com.vaadin.flow.component.notification.Notification; |
|
|
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.function.ValueProvider; |
|
|
import com.vaadin.flow.router.PageTitle; |
|
|
import com.vaadin.flow.router.PageTitle; |
|
|
import com.vaadin.flow.router.Route; |
|
|
import com.vaadin.flow.router.Route; |
|
|
|
|
|
import com.vaadin.flow.server.StreamResource; |
|
|
import jakarta.annotation.security.PermitAll; |
|
|
import jakarta.annotation.security.PermitAll; |
|
|
import mx.gob.jumapacelaya.models.PlanAnual; |
|
|
import mx.gob.jumapacelaya.models.PlanAnual; |
|
|
import mx.gob.jumapacelaya.services.DatabaseService; |
|
|
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.commons.lang3.StringUtils; |
|
|
import org.apache.poi.ss.usermodel.*; |
|
|
import org.apache.poi.ss.usermodel.*; |
|
|
import org.springframework.core.env.Environment; |
|
|
import org.springframework.core.env.Environment; |
|
@ -41,6 +44,7 @@ import org.vaadin.lineawesome.LineAwesomeIcon; |
|
|
|
|
|
|
|
|
import java.io.*; |
|
|
import java.io.*; |
|
|
import java.lang.reflect.Array; |
|
|
import java.lang.reflect.Array; |
|
|
|
|
|
import java.sql.Date; |
|
|
import java.time.LocalDate; |
|
|
import java.time.LocalDate; |
|
|
import java.time.Year; |
|
|
import java.time.Year; |
|
|
import java.time.format.DateTimeFormatter; |
|
|
import java.time.format.DateTimeFormatter; |
|
@ -54,6 +58,7 @@ import java.util.function.Consumer; |
|
|
public class PlanAnualView extends VerticalLayout { |
|
|
public class PlanAnualView extends VerticalLayout { |
|
|
|
|
|
|
|
|
private final Environment env; |
|
|
private final Environment env; |
|
|
|
|
|
private final ReportService reportService; |
|
|
|
|
|
|
|
|
H4 titulo = new H4(); |
|
|
H4 titulo = new H4(); |
|
|
H5 titulo1 = new H5(); |
|
|
H5 titulo1 = new H5(); |
|
@ -65,10 +70,14 @@ public class PlanAnualView extends VerticalLayout { |
|
|
private final DatabaseService databaseService; |
|
|
private final DatabaseService databaseService; |
|
|
Grid<PlanAnual> planAnualGrid; |
|
|
Grid<PlanAnual> planAnualGrid; |
|
|
Button btnColumns; |
|
|
Button btnColumns; |
|
|
|
|
|
Button btnImprimirRpt; |
|
|
|
|
|
HorizontalLayout btnImprimirLayout; |
|
|
|
|
|
|
|
|
public PlanAnualView(DatabaseService databaseService, Environment env) { |
|
|
|
|
|
|
|
|
public PlanAnualView(DatabaseService databaseService, Environment env, ReportService reportService) { |
|
|
this.databaseService = databaseService; |
|
|
this.databaseService = databaseService; |
|
|
this.env = env; |
|
|
this.env = env; |
|
|
|
|
|
this.reportService = reportService; |
|
|
|
|
|
|
|
|
setupHeader(); |
|
|
setupHeader(); |
|
|
Grid<PlanAnual> planAnualGrid = setupGrid(); |
|
|
Grid<PlanAnual> planAnualGrid = setupGrid(); |
|
|
|
|
|
|
|
@ -154,7 +163,7 @@ public class PlanAnualView extends VerticalLayout { |
|
|
btnInsertar = new Button("Insertar archivo", event -> insertarDatos()); |
|
|
btnInsertar = new Button("Insertar archivo", event -> insertarDatos()); |
|
|
btnInsertar.setVisible(false); |
|
|
btnInsertar.setVisible(false); |
|
|
|
|
|
|
|
|
gridLayout.add(btnColumns,planAnualGrid); |
|
|
|
|
|
|
|
|
gridLayout.add(btnImprimirLayout,planAnualGrid); |
|
|
gridLayout.setSizeFull(); |
|
|
gridLayout.setSizeFull(); |
|
|
|
|
|
|
|
|
uploadLayout.add(upload, btnInsertar); |
|
|
uploadLayout.add(upload, btnInsertar); |
|
@ -309,6 +318,12 @@ public class PlanAnualView extends VerticalLayout { |
|
|
btnColumns = new Button(VaadinIcon.GRID_H.create()); |
|
|
btnColumns = new Button(VaadinIcon.GRID_H.create()); |
|
|
btnColumns.addThemeVariants(ButtonVariant.LUMO_ICON); |
|
|
btnColumns.addThemeVariants(ButtonVariant.LUMO_ICON); |
|
|
btnColumns.setAriaLabel("Show/Hide Columns"); |
|
|
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(); |
|
|
HorizontalLayout columnSelectorLayout = new HorizontalLayout(); |
|
|
columnSelectorLayout.setAlignItems(Alignment.END); |
|
|
columnSelectorLayout.setAlignItems(Alignment.END); |
|
@ -519,4 +534,78 @@ public class PlanAnualView extends VerticalLayout { |
|
|
gridLayout.setVisible(hasItems); |
|
|
gridLayout.setVisible(hasItems); |
|
|
uploadLayout.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<String, Object> 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(); |
|
|
|
|
|
} |
|
|
} |
|
|
} |