Browse Source

Se agrego la posibilidad de filtrar las columnas del plan anual seleccionando las que solamente se deseen ver y se re organizaron los mantenimientos planeados por fecha

master
mramirezg 2 weeks ago
parent
commit
a3e93f85d7
6 changed files with 2550 additions and 2389 deletions
  1. +2404
    -2283
      package-lock.json
  2. +55
    -56
      package.json
  3. +1
    -1
      pom.xml
  4. BIN
      src/main/bundles/dev.bundle
  5. +5
    -5
      src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
  6. +85
    -44
      src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java

+ 2404
- 2283
package-lock.json
File diff suppressed because it is too large
View File


+ 55
- 56
package.json View File

@ -3,97 +3,96 @@
"license": "UNLICENSED", "license": "UNLICENSED",
"type": "module", "type": "module",
"dependencies": { "dependencies": {
"@polymer/polymer": "3.5.1",
"@vaadin/bundles": "24.4.5",
"@polymer/polymer": "3.5.2",
"@vaadin/bundles": "24.5.5",
"@vaadin/common-frontend": "0.0.19", "@vaadin/common-frontend": "0.0.19",
"@vaadin/polymer-legacy-adapter": "24.4.5",
"@vaadin/react-components": "24.4.5",
"@vaadin/react-components-pro": "24.4.5",
"@vaadin/router": "1.7.5",
"@vaadin/polymer-legacy-adapter": "24.5.5",
"@vaadin/react-components": "24.5.5",
"@vaadin/react-components-pro": "24.5.5",
"@vaadin/vaadin-development-mode-detector": "2.0.7", "@vaadin/vaadin-development-mode-detector": "2.0.7",
"@vaadin/vaadin-lumo-styles": "24.4.5",
"@vaadin/vaadin-material-styles": "24.4.5",
"@vaadin/vaadin-themable-mixin": "24.4.5",
"@vaadin/vaadin-usage-statistics": "2.1.2",
"@vaadin/vaadin-lumo-styles": "24.5.5",
"@vaadin/vaadin-material-styles": "24.5.5",
"@vaadin/vaadin-themable-mixin": "24.5.5",
"@vaadin/vaadin-usage-statistics": "2.1.3",
"construct-style-sheets-polyfill": "3.1.0", "construct-style-sheets-polyfill": "3.1.0",
"date-fns": "2.29.3", "date-fns": "2.29.3",
"lit": "3.1.4",
"proj4": "2.11.0",
"lit": "3.2.1",
"proj4": "2.12.1",
"react": "18.3.1", "react": "18.3.1",
"react-dom": "18.3.1", "react-dom": "18.3.1",
"react-router-dom": "6.23.1",
"react-router-dom": "6.28.0",
"signature_pad": "4.1.5" "signature_pad": "4.1.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-react": "7.24.7",
"@rollup/plugin-replace": "5.0.7",
"@rollup/pluginutils": "5.1.0",
"@types/react": "18.3.3",
"@types/react-dom": "18.3.0",
"@vitejs/plugin-react": "4.3.1",
"async": "3.2.5",
"glob": "10.4.1",
"@babel/preset-react": "7.26.3",
"@preact/signals-react-transform": "0.4.0",
"@rollup/plugin-replace": "6.0.1",
"@rollup/pluginutils": "5.1.3",
"@types/react": "18.3.13",
"@types/react-dom": "18.3.1",
"@vitejs/plugin-react": "4.3.3",
"async": "3.2.6",
"glob": "10.4.5",
"rollup-plugin-brotli": "3.1.0", "rollup-plugin-brotli": "3.1.0",
"rollup-plugin-visualizer": "5.12.0", "rollup-plugin-visualizer": "5.12.0",
"strip-css-comments": "5.0.0", "strip-css-comments": "5.0.0",
"transform-ast": "2.4.4", "transform-ast": "2.4.4",
"typescript": "5.4.5",
"vite": "5.3.3",
"vite-plugin-checker": "0.6.4",
"workbox-build": "7.1.1",
"workbox-core": "7.1.0",
"workbox-precaching": "7.1.0"
"typescript": "5.6.3",
"vite": "5.4.11",
"vite-plugin-checker": "0.8.0",
"workbox-build": "7.3.0",
"workbox-core": "7.3.0",
"workbox-precaching": "7.3.0"
}, },
"vaadin": { "vaadin": {
"dependencies": { "dependencies": {
"@polymer/polymer": "3.5.1",
"@vaadin/bundles": "24.4.5",
"@polymer/polymer": "3.5.2",
"@vaadin/bundles": "24.5.5",
"@vaadin/common-frontend": "0.0.19", "@vaadin/common-frontend": "0.0.19",
"@vaadin/polymer-legacy-adapter": "24.4.5",
"@vaadin/react-components": "24.4.5",
"@vaadin/react-components-pro": "24.4.5",
"@vaadin/router": "1.7.5",
"@vaadin/polymer-legacy-adapter": "24.5.5",
"@vaadin/react-components": "24.5.5",
"@vaadin/react-components-pro": "24.5.5",
"@vaadin/vaadin-development-mode-detector": "2.0.7", "@vaadin/vaadin-development-mode-detector": "2.0.7",
"@vaadin/vaadin-lumo-styles": "24.4.5",
"@vaadin/vaadin-material-styles": "24.4.5",
"@vaadin/vaadin-themable-mixin": "24.4.5",
"@vaadin/vaadin-usage-statistics": "2.1.2",
"@vaadin/vaadin-lumo-styles": "24.5.5",
"@vaadin/vaadin-material-styles": "24.5.5",
"@vaadin/vaadin-themable-mixin": "24.5.5",
"@vaadin/vaadin-usage-statistics": "2.1.3",
"construct-style-sheets-polyfill": "3.1.0", "construct-style-sheets-polyfill": "3.1.0",
"date-fns": "2.29.3", "date-fns": "2.29.3",
"lit": "3.1.4",
"proj4": "2.11.0",
"lit": "3.2.1",
"proj4": "2.12.1",
"react": "18.3.1", "react": "18.3.1",
"react-dom": "18.3.1", "react-dom": "18.3.1",
"react-router-dom": "6.23.1",
"react-router-dom": "6.28.0",
"signature_pad": "4.1.5" "signature_pad": "4.1.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/preset-react": "7.24.7",
"@rollup/plugin-replace": "5.0.7",
"@rollup/pluginutils": "5.1.0",
"@types/react": "18.3.3",
"@types/react-dom": "18.3.0",
"@vitejs/plugin-react": "4.3.1",
"async": "3.2.5",
"glob": "10.4.1",
"@babel/preset-react": "7.26.3",
"@preact/signals-react-transform": "0.4.0",
"@rollup/plugin-replace": "6.0.1",
"@rollup/pluginutils": "5.1.3",
"@types/react": "18.3.13",
"@types/react-dom": "18.3.1",
"@vitejs/plugin-react": "4.3.3",
"async": "3.2.6",
"glob": "10.4.5",
"rollup-plugin-brotli": "3.1.0", "rollup-plugin-brotli": "3.1.0",
"rollup-plugin-visualizer": "5.12.0", "rollup-plugin-visualizer": "5.12.0",
"strip-css-comments": "5.0.0", "strip-css-comments": "5.0.0",
"transform-ast": "2.4.4", "transform-ast": "2.4.4",
"typescript": "5.4.5",
"vite": "5.3.3",
"vite-plugin-checker": "0.6.4",
"workbox-build": "7.1.1",
"workbox-core": "7.1.0",
"workbox-precaching": "7.1.0"
"typescript": "5.6.3",
"vite": "5.4.11",
"vite-plugin-checker": "0.8.0",
"workbox-build": "7.3.0",
"workbox-core": "7.3.0",
"workbox-precaching": "7.3.0"
}, },
"hash": "cecfde44fdf74f05a518ad5c890570bd04aa35ca261dade379aac8545a81171b"
"hash": "6126bd412c2a8696938f50edd1abae217c30c0119a0496af47b9d6ba1762921f"
}, },
"overrides": { "overrides": {
"@vaadin/bundles": "$@vaadin/bundles", "@vaadin/bundles": "$@vaadin/bundles",
"@vaadin/polymer-legacy-adapter": "$@vaadin/polymer-legacy-adapter", "@vaadin/polymer-legacy-adapter": "$@vaadin/polymer-legacy-adapter",
"@vaadin/vaadin-development-mode-detector": "$@vaadin/vaadin-development-mode-detector", "@vaadin/vaadin-development-mode-detector": "$@vaadin/vaadin-development-mode-detector",
"@vaadin/router": "$@vaadin/router",
"@vaadin/vaadin-usage-statistics": "$@vaadin/vaadin-usage-statistics", "@vaadin/vaadin-usage-statistics": "$@vaadin/vaadin-usage-statistics",
"@vaadin/react-components": "$@vaadin/react-components", "@vaadin/react-components": "$@vaadin/react-components",
"@vaadin/react-components-pro": "$@vaadin/react-components-pro", "@vaadin/react-components-pro": "$@vaadin/react-components-pro",


+ 1
- 1
pom.xml View File

@ -11,7 +11,7 @@
<properties> <properties>
<java.version>17</java.version> <java.version>17</java.version>
<vaadin.version>24.4.8</vaadin.version>
<vaadin.version>24.5.8</vaadin.version>
</properties> </properties>
<parent> <parent>


BIN
src/main/bundles/dev.bundle View File


+ 5
- 5
src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java View File

@ -168,11 +168,11 @@ public class DatabaseService {
" p.fechaprog, m.fecha AS fechaMantenimiento,\n" + " p.fechaprog, m.fecha AS fechaMantenimiento,\n" +
" me.NOMBRE AS MESPLANEADO, p.tecnicosmt, p.estado,\n" + " me.NOMBRE AS MESPLANEADO, p.tecnicosmt, p.estado,\n" +
" COALESCE(v.SITUACION, 'NO REALIZADO') AS SITUACION\n" + " COALESCE(v.SITUACION, 'NO REALIZADO') AS SITUACION\n" +
"FROM PLANANUAL p\n" +
"LEFT JOIN MANTENIMIENTOS m ON p.plananualid = m.plananualid\n" +
"LEFT JOIN MESES me ON p.MESID = me.MESID\n" +
"LEFT JOIN VW_SITUACION_MANTENIMIENTO v ON v.PLANANUALID = p.PLANANUALID\n" +
"ORDER BY p.plananualid ASC";
" FROM PLANANUAL p\n" +
" LEFT JOIN MANTENIMIENTOS m ON p.plananualid = m.plananualid\n" +
" LEFT JOIN MESES me ON p.MESID = me.MESID\n" +
" LEFT JOIN VW_SITUACION_MANTENIMIENTO v ON v.PLANANUALID = p.PLANANUALID\n" +
" ORDER BY p.FECHAPROG ASC";
try (Connection connection = getMysqlConnection(); try (Connection connection = getMysqlConnection();
Statement statement = connection.createStatement(); Statement statement = connection.createStatement();


+ 85
- 44
src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java View File

@ -4,11 +4,14 @@ import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant; 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.CheckboxGroupVariant;
import com.vaadin.flow.component.dependency.CssImport; import com.vaadin.flow.component.dependency.CssImport;
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.H4;
import com.vaadin.flow.component.html.H5; import com.vaadin.flow.component.html.H5;
import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.html.Span;
@ -18,6 +21,8 @@ import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.notification.NotificationVariant; import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.popover.Popover;
import com.vaadin.flow.component.popover.PopoverPosition;
import com.vaadin.flow.component.radiobutton.RadioButtonGroup; import com.vaadin.flow.component.radiobutton.RadioButtonGroup;
import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.component.upload.Upload; import com.vaadin.flow.component.upload.Upload;
@ -29,26 +34,19 @@ import com.vaadin.flow.router.Route;
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 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;
import org.vaadin.lineawesome.LineAwesomeIcon;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.lang.reflect.Array; import java.lang.reflect.Array;
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;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.xml.crypto.Data;
import static java.util.regex.Pattern.matches;
@PermitAll @PermitAll
@PageTitle("Plan Anual de Mantenimiento") @PageTitle("Plan Anual de Mantenimiento")
@Route(value = "/", layout = MainLayout.class) @Route(value = "/", layout = MainLayout.class)
@ -65,6 +63,8 @@ public class PlanAnualView extends VerticalLayout {
HorizontalLayout uploadLayout = new HorizontalLayout(); HorizontalLayout uploadLayout = new HorizontalLayout();
HorizontalLayout filtrosLayout = new HorizontalLayout(); HorizontalLayout filtrosLayout = new HorizontalLayout();
private final DatabaseService databaseService; private final DatabaseService databaseService;
Grid<PlanAnual> planAnualGrid;
Button btnColumns;
public PlanAnualView(DatabaseService databaseService, Environment env) { public PlanAnualView(DatabaseService databaseService, Environment env) {
this.databaseService = databaseService; this.databaseService = databaseService;
@ -92,17 +92,17 @@ public class PlanAnualView extends VerticalLayout {
/*headerRow.getCell(planAnualGrid.getColumnByKey("smtColumnKey")) /*headerRow.getCell(planAnualGrid.getColumnByKey("smtColumnKey"))
.setComponent(createFilterHeader("S.M.T", planAnualFilter::setSmt));*/ .setComponent(createFilterHeader("S.M.T", planAnualFilter::setSmt));*/
headerRow.getCell(planAnualGrid.getColumnByKey("equipoColumnKey"))
headerRow.getCell(planAnualGrid.getColumnByKey("equipo"))
.setComponent(createFilterHeader("Equipo", planAnualFilter::setEquipo)); .setComponent(createFilterHeader("Equipo", planAnualFilter::setEquipo));
headerRow.getCell(planAnualGrid.getColumnByKey("departamentoColumnKey"))
headerRow.getCell(planAnualGrid.getColumnByKey("departamento"))
.setComponent(createFilterHeader("Departamento", planAnualFilter::setDepartamento)); .setComponent(createFilterHeader("Departamento", planAnualFilter::setDepartamento));
// Componente UPLOAD para subir archivos // Componente UPLOAD para subir archivos
MemoryBuffer buffer = new MemoryBuffer(); MemoryBuffer buffer = new MemoryBuffer();
Upload upload = new Upload(buffer);
Upload upload = new Upload();
upload.setAcceptedFileTypes(".xls", ".xlsx"); upload.setAcceptedFileTypes(".xls", ".xlsx");
upload.setMaxFiles(1); upload.setMaxFiles(1);
upload.setDropLabel(new com.vaadin.flow.component.html.Span("Arrastra un archivo Excel aquí o selecciona uno")); upload.setDropLabel(new com.vaadin.flow.component.html.Span("Arrastra un archivo Excel aquí o selecciona uno"));
@ -111,7 +111,7 @@ public class PlanAnualView extends VerticalLayout {
try { try {
// Almacena el contenido del archivo en un arreglo de bytes // Almacena el contenido del archivo en un arreglo de bytes
try (InputStream inputStream = buffer.getInputStream(); try (InputStream inputStream = buffer.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
inputStream.transferTo(byteArrayOutputStream); inputStream.transferTo(byteArrayOutputStream);
fileContent = byteArrayOutputStream.toByteArray(); fileContent = byteArrayOutputStream.toByteArray();
@ -140,7 +140,6 @@ public class PlanAnualView extends VerticalLayout {
ntfError.add(notificationLayout); ntfError.add(notificationLayout);
ntfError.open(); // Abrir la notificación en pantalla ntfError.open(); // Abrir la notificación en pantalla
// Ocultar el botón de insertar si hay errores // Ocultar el botón de insertar si hay errores
btnInsertar.setVisible(false); btnInsertar.setVisible(false);
} else { } else {
@ -155,7 +154,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(planAnualGrid);
gridLayout.add(btnColumns,planAnualGrid);
gridLayout.setSizeFull(); gridLayout.setSizeFull();
uploadLayout.add(upload, btnInsertar); uploadLayout.add(upload, btnInsertar);
@ -166,11 +165,8 @@ public class PlanAnualView extends VerticalLayout {
filtrosLayout.setWidthFull(); filtrosLayout.setWidthFull();
filtrosLayout.setJustifyContentMode(JustifyContentMode.CENTER); filtrosLayout.setJustifyContentMode(JustifyContentMode.CENTER);
Button btnPendientes = new Button("Pendientes");
Button btnRealizados = new Button("Realizados");
//btnPendientes.addThemeVariants(ButtonVariant.LUMO_TERTIARY_INLINE);
//btnRealizados.addThemeVariants(ButtonVariant.LUMO_TERTIARY_INLINE);
Button btnPendientes = new Button("Pendientes", VaadinIcon.CLOCK.create());
Button btnRealizados = new Button("Realizados", VaadinIcon.CHECK_CIRCLE.create());
btnPendientes.addClassName("selected-tab"); btnPendientes.addClassName("selected-tab");
@ -214,10 +210,10 @@ public class PlanAnualView extends VerticalLayout {
add(headerLayout); add(headerLayout);
} }
private Grid<PlanAnual> setupGrid() {
Grid<PlanAnual> planAnualGrid = new Grid<>(PlanAnual.class, false);
private Grid<PlanAnual> setupGrid() {
planAnualGrid = new Grid<>(PlanAnual.class, false);
planAnualGrid.addColumn((ValueProvider<PlanAnual, Integer>) PlanAnual::getNumero) planAnualGrid.addColumn((ValueProvider<PlanAnual, Integer>) PlanAnual::getNumero)
.setHeader("No.").setSortable(true).setAutoWidth(true).setFrozen(true); .setHeader("No.").setSortable(true).setAutoWidth(true).setFrozen(true);
@ -264,52 +260,97 @@ public class PlanAnualView extends VerticalLayout {
}).setAutoWidth(true).setFrozen(true); }).setAutoWidth(true).setFrozen(true);
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getNomEquipo) planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getNomEquipo)
.setHeader("Equipo").setAutoWidth(true).setKey("equipoColumnKey");
.setHeader("Equipo").setAutoWidth(true).setKey("equipo");
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getDepartamento) planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getDepartamento)
.setHeader("Departamento").setAutoWidth(true).setKey("departamentoColumnKey");
planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT);
planAnualGrid.addThemeVariants(GridVariant.LUMO_ROW_STRIPES);
.setHeader("Departamento").setAutoWidth(true).setKey("departamento");
planAnualGrid.addColumn(planAnual -> { planAnualGrid.addColumn(planAnual -> {
String mesPlaneado = planAnual.getMesplaneado(); String mesPlaneado = planAnual.getMesplaneado();
return mesPlaneado != null ? mesPlaneado.toUpperCase() : "N/A"; return mesPlaneado != null ? mesPlaneado.toUpperCase() : "N/A";
}).setHeader("Mes Planeado").setAutoWidth(true);
}).setHeader("Mes Planeado").setAutoWidth(true).setKey("mesplaneado");
// Fechas formateadas // Fechas formateadas
planAnualGrid.addColumn(planAnual -> { planAnualGrid.addColumn(planAnual -> {
LocalDate fecha = planAnual.getFechaProgramada(); LocalDate fecha = planAnual.getFechaProgramada();
return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "No programada"; return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "No programada";
}).setHeader("Fecha Programada").setAutoWidth(true).setSortable(true);
}).setHeader("Fecha Programada").setAutoWidth(true).setSortable(true).setKey("fechaProgramada");
planAnualGrid.addColumn(planAnual -> { planAnualGrid.addColumn(planAnual -> {
LocalDate fecha = planAnual.getFechaMantenimiento(); LocalDate fecha = planAnual.getFechaMantenimiento();
return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : ""; return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "";
}).setHeader("Fecha Realización").setAutoWidth(true).setSortable(true);
}).setHeader("Fecha Realización").setAutoWidth(true).setSortable(true).setKey("fechaMantenimiento");
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getEstado) planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getEstado)
.setHeader("Estado").setAutoWidth(true);
.setHeader("Estado").setAutoWidth(true).setKey("estado");
planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSituacion) planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSituacion)
.setHeader("Situación").setAutoWidth(true);
.setHeader("Situación").setAutoWidth(true).setKey("situacion");
/*planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSmt) /*planAnualGrid.addColumn((ValueProvider<PlanAnual, String>) PlanAnual::getSmt)
.setHeader("S.M.T").setKey("smtColumnKey");*/ .setHeader("S.M.T").setKey("smtColumnKey");*/
// Iconos en columnas booleanas // Iconos en columnas booleanas
/*planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMonitor())).setHeader("Monitor");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isTeclado())).setHeader("Teclado");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMouse())).setHeader("Mouse");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isRegulador())).setHeader("Regulador");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isCpu())).setHeader("CPU");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isImpresora())).setHeader("Impresora");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMiniPrint())).setHeader("MiniPrint");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isLaptop())).setHeader("Laptop");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isEscaner())).setHeader("Escáner");*/
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMonitor())).setHeader("Monitor").setKey("monitor");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isTeclado())).setHeader("Teclado").setKey("teclado");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMouse())).setHeader("Mouse").setKey("mouse");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isRegulador())).setHeader("Regulador").setKey("regulador");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isCpu())).setHeader("CPU").setKey("cpu");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isImpresora())).setHeader("Impresora").setKey("impresora");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMiniPrint())).setHeader("MiniPrint").setKey("miniprint");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isLaptop())).setHeader("Laptop").setKey("laptop");
planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isEscaner())).setHeader("Escáner").setKey("escaner");
planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT);
planAnualGrid.addThemeVariants(GridVariant.LUMO_ROW_STRIPES);
btnColumns = new Button(VaadinIcon.GRID_H.create());
btnColumns.addThemeVariants(ButtonVariant.LUMO_ICON);
btnColumns.setAriaLabel("Show/Hide Columns");
HorizontalLayout columnSelectorLayout = new HorizontalLayout();
columnSelectorLayout.setAlignItems(Alignment.END);
Popover popover = new Popover();
popover.setModal(true);
popover.setBackdropVisible(true);
popover.setPosition(PopoverPosition.BOTTOM_END);
popover.setTarget(btnColumns);
Div heading = new Div("Ver/Ocultar columnas");
heading.getStyle().set("font-weight", "600");
heading.getStyle().set("padding", "var(--lumo-space-xs)");
List<String> columns = List.of("equipo", "departamento", "mesplaneado", "fechaProgramada",
"fechaMantenimiento", "estado", "situacion", "monitor", "teclado", "mouse", "regulador",
"cpu", "impresora", "miniprint", "laptop", "escaner");
CheckboxGroup<String> chkColumns = new CheckboxGroup<>();
chkColumns.addThemeVariants(CheckboxGroupVariant.LUMO_VERTICAL);
chkColumns.setItems(columns);
chkColumns.setItemLabelGenerator((item) -> {
String label = StringUtils
.join(StringUtils.splitByCharacterTypeCamelCase(item), " ");
return StringUtils.capitalize(label.toLowerCase());
});
chkColumns.addValueChangeListener((e) -> {
columns.forEach((key) -> {
Grid.Column<?> col = planAnualGrid.getColumnByKey(key);
if (col != null) {
col.setVisible(e.getValue().contains(key));
} else {
System.out.println("Columna no encontrada para key: " + key);
}
});
});
Set<String> defaultColumns = Set.of("equipo", "departamento", "mesplaneado",
"fechaProgramada", "fechaMantenimiento", "estado", "situacion");
chkColumns.setValue(defaultColumns);
popover.add(heading, chkColumns);
// Cargar datos // Cargar datos
planAnualGrid.setItems(databaseService.getPlanAnual()); planAnualGrid.setItems(databaseService.getPlanAnual());
return planAnualGrid; return planAnualGrid;


Loading…
Cancel
Save