From 5c4890d400cbd6356c0ddfe8b069aed77604dca6 Mon Sep 17 00:00:00 2001 From: mramirezg Date: Thu, 5 Jun 2025 10:03:03 -0600 Subject: [PATCH] Se agrego la vista para que se pueda ver informacion sobre el mantenimiento realizado ya se muestran los datos, falta agregar funcionalidad a los botones --- .gitignore | 1 + .../models/DetalleMantenimientoModel.java | 62 +++++++ .../jumapacelaya/models/HardwareDetalle.java | 35 ++++ .../services/DatabaseService.java | 126 +++++++++++--- .../gob/jumapacelaya/ui/DetallesMantView.java | 157 ++++++++++++++++++ .../mx/gob/jumapacelaya/ui/PlanAnualView.java | 120 ++++++++----- 6 files changed, 435 insertions(+), 66 deletions(-) create mode 100644 src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java create mode 100644 src/main/java/mx/gob/jumapacelaya/models/HardwareDetalle.java create mode 100644 src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java diff --git a/.gitignore b/.gitignore index d0b9d6a..b79e5e6 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ drivers/ # Error screenshots generated by TestBench for failed integration tests error-screenshots/ webpack.generated.js +/bin/ diff --git a/src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java b/src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java new file mode 100644 index 0000000..11b65d3 --- /dev/null +++ b/src/main/java/mx/gob/jumapacelaya/models/DetalleMantenimientoModel.java @@ -0,0 +1,62 @@ +package mx.gob.jumapacelaya.models; + +import java.time.LocalDate; + +public class DetalleMantenimientoModel { + private int id; + private int planAnualId; + private String tipo; + private String departamento; + private String usuario; + private LocalDate fechaprog; + private LocalDate fecha; + private String nombreEquipo; + private String formaMant; + private String firmaUser; + private String firmaSmt; + private String firmaGcia; + + public DetalleMantenimientoModel(int id, int planAnualId, String tipo, String departamento, + String usuario, LocalDate fechaprog, LocalDate fecha, String nombreEquipo, String formaMant, + String firmaUser, String firmaSmt, String firmaGcia) { + + this.id = id; + this.planAnualId = planAnualId; + this.tipo = tipo; + this.departamento = departamento; + this.usuario = usuario; + this.fechaprog = fechaprog; + this.fecha = fecha; + this.nombreEquipo = nombreEquipo; + this.formaMant = formaMant; + this.firmaUser = firmaUser; + this.firmaSmt = firmaSmt; + this.firmaGcia = firmaGcia; + } + + public int getId() { return id; } + public int getPlanAnualId() { return planAnualId; } + public String getTipo() { return tipo; } + public String getDepartamento() { return departamento; } + public String getUsuario() { return usuario; } + public LocalDate getFechaprog() { return fechaprog; } + public LocalDate getFecha() { return fecha; } + public String getNombreEquipo() { return nombreEquipo; } + public String getFormaMant() { return formaMant; } + public String getFirmaUser() { return firmaUser; } + public String getFirmaSmt() { return firmaSmt; } + public String getFirmaGcia() { return firmaGcia; } + + public void setId(int id) { this.id = id; } + public void setPlanAnualId(int planAnualId) { this.planAnualId = planAnualId; } + public void setTipo(String tipo) { this.tipo = tipo; } + public void setDepartamento(String departamento) { this.departamento = departamento; } + public void setUsuario(String usuario) { this.usuario = usuario; } + public void setFechaprog(LocalDate fechaprog) { this.fechaprog = fechaprog; } + public void setFecha(LocalDate fecha) { this.fecha = fecha; } + public void setNombreEquipo(String nombreEquipo) { this.nombreEquipo = nombreEquipo; } + public void setFormaMant(String formaMant) { this.formaMant = formaMant; } + public void setFirmaUser(String firmaUser) { this.firmaUser = firmaUser; } + public void setFirmaSmt(String firmaSmt) { this.firmaSmt = firmaSmt; } + public void setFirmaGcia(String firmaGcia) { this.firmaGcia = firmaGcia; } +} diff --git a/src/main/java/mx/gob/jumapacelaya/models/HardwareDetalle.java b/src/main/java/mx/gob/jumapacelaya/models/HardwareDetalle.java new file mode 100644 index 0000000..4d2de4c --- /dev/null +++ b/src/main/java/mx/gob/jumapacelaya/models/HardwareDetalle.java @@ -0,0 +1,35 @@ +package mx.gob.jumapacelaya.models; + +public class HardwareDetalle { + private int mantenimientoId; + private int hardwareDetId; + private String descripcion; + private String modelo; + private String numSerie; + private String placa; + + public HardwareDetalle(int mantenimientoId, int hardwareDetId, String descripcion, + String modelo, String numSerie, String placa) { + + this.mantenimientoId = mantenimientoId; + this.hardwareDetId = hardwareDetId; + this.descripcion = descripcion; + this.modelo = modelo; + this.numSerie = numSerie; + this.placa = placa; + } + + public int getMantenimientoId() { return mantenimientoId; } + public int getHardwareDetId() { return hardwareDetId; } + public String getDescripcion() { return descripcion; } + public String getModelo() { return modelo; } + public String getNumSerie() { return numSerie; } + public String getPlaca() { return placa; } + + public void setMantenimientoId(int mantenimientoId) { this.mantenimientoId = mantenimientoId; } + public void setHardwareDetId(int hardwareDetId) { this.hardwareDetId = hardwareDetId; } + public void setDescripcion(String descripcion) { this.descripcion = descripcion; } + public void setModelo(String modelo) { this.modelo = modelo; } + public void setNumSerie(String numSerie) { this.numSerie = numSerie; } + public void setPlaca(String placa) { this.placa = placa; } +} diff --git a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java index 0208638..b35734e 100644 --- a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java +++ b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java @@ -10,6 +10,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; +import java.security.interfaces.RSAKey; import java.sql.*; import java.time.LocalDate; import java.util.ArrayList; @@ -43,8 +44,8 @@ public class DatabaseService { String query = "SELECT tipomantid, nombre FROM MANTENIMIENTOS.TIPOMANT"; try (Connection connection = getMysqlConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(query)) { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { TiposMantenimiento tipo = new TiposMantenimiento( @@ -65,7 +66,7 @@ public class DatabaseService { String query = "SELECT nomenclatura FROM TIPOMANT where TIPOMANTID = ?"; try (Connection connection = getMysqlConnection(); - PreparedStatement preparedStatement = connection.prepareStatement(query)) { + PreparedStatement preparedStatement = connection.prepareStatement(query)) { preparedStatement.setString(1, tipoMantenimiento); try (ResultSet resultSet = preparedStatement.executeQuery()) { @@ -89,8 +90,8 @@ public class DatabaseService { "FROM MANTENIMIENTOS.USUARIOS u"; try (Connection connection = getMysqlConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(query)) { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { Usuario usuario = new Usuario( @@ -113,8 +114,8 @@ public class DatabaseService { String query = "select DEPARTAMENTOID, DESCRIPCION from MANTENIMIENTOS.DEPARTAMENTOS"; try (Connection connection = getMysqlConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(query)) { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { DepartamentosModel departamentosModel = new DepartamentosModel( @@ -136,8 +137,8 @@ public class DatabaseService { String query = "select TIPOHARDWAREID, DESCRIPCION from MANTENIMIENTOS.TIPOSHARDWARE"; try (Connection connection = getMysqlConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(query)) { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { TiposHardware tiposHardwareModel = new TiposHardware( @@ -157,16 +158,18 @@ public class DatabaseService { /* ----------------Obtener el Plan Anual de Mantenimiento ---------------- */ public List getPlanAnual() { List planAnualList = new ArrayList<>(); - String query = "SELECT p.plananualid, p.nomEquipo, p.area, " + - "p.monitor, p.teclado, p.mouse, p.regulador, " + - "p.cpu, p.impresora, p.miniPrint, p.laptop, p.escaner, " + - "p.fechaprog, m.fecha AS fechaMantenimiento, p.tecnicosmt, p.estado " + - "FROM MANTENIMIENTOS.PLANANUAL p " + - "LEFT JOIN MANTENIMIENTOS.MANTENIMIENTOS m ON p.plananualid = m.plananualid"; + String query = "SELECT p.plananualid, p.nomEquipo, p.area, \r\n" + // + " p.monitor, p.teclado, p.mouse, p.regulador, \r\n" + // + " p.cpu, p.impresora, p.miniPrint, p.laptop, p.escaner, \r\n" + // + " p.fechaprog, m.fecha AS fechaMantenimiento, \r\n" + // + " p.tecnicosmt, p.estado\r\n" + // + "FROM MANTENIMIENTOS.PLANANUAL p\r\n" + // + "LEFT JOIN MANTENIMIENTOS.MANTENIMIENTOS m ON p.plananualid = m.plananualid\r\n" + // + "ORDER BY p.plananualid ASC"; try (Connection connection = getMysqlConnection(); - Statement statement = connection.createStatement(); - ResultSet resultSet = statement.executeQuery(query)) { + Statement statement = connection.createStatement(); + ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { PlanAnual planAnual = new PlanAnual( @@ -197,6 +200,85 @@ public class DatabaseService { } + + /* ----------------Obtener detalles del mantenimiento ---------------- */ + public DetalleMantenimientoModel getDetalleMantenimientoPorPlanAnualId(int planAnualId) { + String query = "SELECT\r\n" + // + "\tm.MANTENIMIENTOID ID, p.PLANANUALID, t.NOMBRE TIPO,\r\n" + // + "\td.DESCRIPCION DEPARTAMENTO, u.NOMBRE USUARIO, pa.FECHAPROG,\r\n" + // + "\tm.FECHA FECHAREALIZADO, NOMBREEQUIPO, FORMAMANT, FIRMAUSUARIO, FIRMASMT, FIRMAGCIA \r\n" + // + "FROM MANTENIMIENTOS.MANTENIMIENTOS m\r\n" + // + "INNER JOIN MANTENIMIENTOS.TIPOMANT t ON m.TIPOMANTID = t.TIPOMANTID\r\n" + // + "INNER JOIN MANTENIMIENTOS.DEPARTAMENTOS d ON m.DEPARTAMENTOID = d.DEPARTAMENTOID\r\n" + // + "INNER JOIN MANTENIMIENTOS.USUARIOS u ON u.EMPLEADOID = m.EMPLEADOID\r\n" + // + "INNER JOIN MANTENIMIENTOS.PLANANUAL p ON m.PLANANUALID = p.PLANANUALID\r\n" + // + "INNER JOIN MANTENIMIENTOS.PLANANUAL pa ON m.PLANANUALID = pa.PLANANUALID \r\n" + // + "WHERE p.PLANANUALID = ?"; + + try (Connection connection = getMysqlConnection(); + PreparedStatement statement = connection.prepareStatement(query)) { + + statement.setInt(1, planAnualId); + + try (ResultSet rs = statement.executeQuery()) { + if (rs.next()) { + return new DetalleMantenimientoModel( + rs.getInt("ID"), + rs.getInt("PLANANUALID"), + rs.getString("TIPO"), + rs.getString("DEPARTAMENTO"), + rs.getString("USUARIO"), + rs.getDate("FECHAPROG").toLocalDate(), + rs.getDate("FECHAREALIZADO").toLocalDate(), + rs.getString("NOMBREEQUIPO"), + rs.getString("FORMAMANT"), + rs.getString("FIRMAUSUARIO"), + rs.getString("FIRMASMT"), + rs.getString("FIRMAGCIA") + ); + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return null; + } + + + /* ----------------Obtener detalles del hardaware por ID ---------------- */ + public List getHardwaredetallePorMantId(int mantenimientoId) { + List detalles = new ArrayList<>(); + String query = "SELECT h.MANTENIMIENTOID, h.HARDWAREDETID, t.DESCRIPCION, h.MODELO, h.NUMSERIE, h.PLACA\r\n" + // + "FROM MANTENIMIENTOS.HARDWAREDET h\r\n" + // + "INNER JOIN MANTENIMIENTOS.TIPOSHARDWARE t ON h.TIPOHARDWAREID = t.TIPOHARDWAREID \r\n" + // + "WHERE h.MANTENIMIENTOID = ?"; + + try (Connection conn = getMysqlConnection(); + PreparedStatement stmt = conn.prepareStatement(query)) { + + stmt.setInt(1, mantenimientoId); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + HardwareDetalle detalle = new HardwareDetalle( + rs.getInt("MANTENIMIENTOID"), + rs.getInt("HARDWAREDETID"), + rs.getString("DESCRIPCION"), + rs.getString("MODELO"), + rs.getString("NUMSERIE"), + rs.getString("PLACA") + ); + detalles.add(detalle); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + return detalles; + } + + /*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/ /*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/ /*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/ @@ -205,8 +287,8 @@ public class DatabaseService { /* ( ͡° ͜ʖ ͡°) Metodos para insetar en la BD ( ͡° ͜ʖ ͡°) ( ͡° ͜ʖ ͡°) Metodos para insetar en la BD ( ͡° ͜ʖ ͡°) ( ͡° ͜ʖ ͡°) Metodos para insetar en la BD ( ͡° ͜ʖ ͡°) */ // INSERTAR EN TABLA: MANTENIMINETOS public int insertarMantenimiento(LocalDate fecha, String tipoMantId, String departamentoId, String empleadoId, - String formaMant, String equipoId, String userSignatureBase64, - String smtSignatureBase64, String gciaSignatureBase64, String planAnualId) { + String formaMant, String equipoId, String userSignatureBase64, + String smtSignatureBase64, String gciaSignatureBase64, String planAnualId) { String query = "INSERT INTO MANTENIMIENTOS.MANTENIMIENTOS (fecha, tipoMantId, departamentoId, empleadoId, formaMant, nombreequipo," + " firmaUsuario, firmaSmt, firmaGcia, planAnualId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING MANTENIMIENTOID INTO ?"; @@ -310,7 +392,7 @@ public class DatabaseService { boolean isInserted = false; try (Connection connection = getMysqlConnection(); - PreparedStatement preparedStatement = connection.prepareStatement(query)) { + PreparedStatement preparedStatement = connection.prepareStatement(query)) { preparedStatement.setInt(1, Integer.parseInt(tipoHardwareId)); preparedStatement.setString(2, numSerie); @@ -349,7 +431,7 @@ public class DatabaseService { String query = "INSERT INTO MANTENIMIENTOS.ACTUALIZACIONESSEG (descripcion, otrasactualizaciones, mantenimientoid) VALUES (?, ?, ?)"; try (Connection connection = getMysqlConnection(); - PreparedStatement preparedStatement = connection.prepareStatement(query)) { + PreparedStatement preparedStatement = connection.prepareStatement(query)) { preparedStatement.setString(1, descripcion); preparedStatement.setString(2, otras); @@ -371,7 +453,7 @@ public class DatabaseService { try (Connection connection = getMysqlConnection(); //FileInputStream file = new FileInputStream(rutaArchivoExcel); - Workbook workbook = new XSSFWorkbook(inputStream)) { + Workbook workbook = new XSSFWorkbook(inputStream)) { Sheet sheet = workbook.getSheetAt(0); // Primera hoja del archivo Excel diff --git a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java new file mode 100644 index 0000000..764b1ed --- /dev/null +++ b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java @@ -0,0 +1,157 @@ +package mx.gob.jumapacelaya.ui; + +import java.time.format.DateTimeFormatter; +import java.util.List; + +import com.vaadin.flow.component.button.Button; +import com.vaadin.flow.component.dependency.CssImport; +import com.vaadin.flow.component.grid.Grid; +import com.vaadin.flow.component.grid.GridVariant; +import com.vaadin.flow.component.html.H3; +import com.vaadin.flow.component.icon.Icon; +import com.vaadin.flow.component.icon.VaadinIcon; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.component.textfield.TextField; +import com.vaadin.flow.function.ValueProvider; +import com.vaadin.flow.router.BeforeEnterEvent; +import com.vaadin.flow.router.BeforeEnterObserver; +import com.vaadin.flow.router.PageTitle; +import com.vaadin.flow.router.Route; + +import jakarta.annotation.security.PermitAll; +import mx.gob.jumapacelaya.models.DetalleMantenimientoModel; +import mx.gob.jumapacelaya.models.HardwareDetalle; +import mx.gob.jumapacelaya.services.DatabaseService; + +@PageTitle("Detalles del mantenimiento") +@Route(value = "detalles", layout = MainLayout.class) +@PermitAll +@CssImport("./themes/sistema-mantenimiento/styles.css") +public class DetallesMantView extends VerticalLayout implements BeforeEnterObserver { + + private H3 id; + private VerticalLayout mainLayout; + private HorizontalLayout headerLayout; + private HorizontalLayout layout2; + private HorizontalLayout layout3; + private HorizontalLayout botonesLayout; + private HorizontalLayout fechasLayout; + private TextField txtId; + private TextField txtEquipo; + private TextField txtTipo; + private TextField txtFecha; + private TextField txtFechaRealizacion; + private TextField txtUsuario; + private TextField txtDepartamento; + private Grid gridHardware; + private Button btnEditar; + private Button btnImprimirRepo; + + public DetallesMantView() { + setPadding(true); + + mainLayout = new VerticalLayout(); + mainLayout.setHeightFull(); + mainLayout.getStyle() + .set("box-shadow","0 4px 8px rgba(0,0,0,0.2)") + .set("border-radius", "12px") + .set("background-color", "white") + .set("padding", "1rem") + .set("margin", "1rem auto"); + + + id = new H3(); + + headerLayout = new HorizontalLayout(); + headerLayout.setWidthFull(); + headerLayout.add(id); + + + layout2 = new HorizontalLayout(); + layout2.setWidthFull(); + txtEquipo = new TextField("Equipo:"); + txtTipo = new TextField("Tipo:"); + txtEquipo.setReadOnly(true); + txtTipo.setReadOnly(true); + layout2.add(txtEquipo,txtTipo); + + + fechasLayout = new HorizontalLayout(); + fechasLayout.setWidthFull(); + txtFecha = new TextField("Fecha realización:"); + txtFechaRealizacion = new TextField("Fecha programada:"); + txtFecha.setReadOnly(true); + txtFechaRealizacion.setReadOnly(true); + fechasLayout.add(txtFechaRealizacion,txtFecha); + + layout3 = new HorizontalLayout(); + layout3.setWidthFull(); + txtUsuario = new TextField("Usuario:"); + txtDepartamento = new TextField("Area:"); + txtUsuario.setReadOnly(true); + txtDepartamento.setReadOnly(true); + txtUsuario.setWidthFull(); + txtDepartamento.setWidthFull(); + layout3.add(txtUsuario,txtDepartamento); + + gridHardware = new Grid<>(); + gridHardware.addColumn(HardwareDetalle::getDescripcion).setHeader("Descripción"); + gridHardware.addColumn(HardwareDetalle::getModelo).setHeader("Modelo"); + gridHardware.addColumn(HardwareDetalle::getNumSerie).setHeader("No. Serie"); + gridHardware.addColumn(HardwareDetalle::getPlaca).setHeader("Placa"); + gridHardware.setWidthFull(); + gridHardware.setHeight("250px"); + gridHardware.addThemeVariants(GridVariant.LUMO_ROW_STRIPES); + + + botonesLayout = new HorizontalLayout(); + botonesLayout.setWidthFull(); + botonesLayout.setJustifyContentMode(JustifyContentMode.CENTER); + btnEditar = new Button("Editar", new Icon(VaadinIcon.EDIT)); + btnImprimirRepo = new Button("Imprimir Reporte", new Icon(VaadinIcon.PRINT)); + botonesLayout.add(btnEditar,btnImprimirRepo); + + mainLayout.add(headerLayout,layout2,fechasLayout,layout3,gridHardware,botonesLayout); + add(mainLayout); + } + + @Override + public void beforeEnter(BeforeEnterEvent event) { + String idParam = event.getLocation().getQueryParameters().getParameters().get("id") != null + ? event.getLocation().getQueryParameters().getParameters().get("id").stream().findFirst().orElse(null) + : null; + + if (idParam != null) { + try { + int planId = Integer.parseInt(idParam); + + DatabaseService service = new DatabaseService(); + DetalleMantenimientoModel detalle = service.getDetalleMantenimientoPorPlanAnualId(planId); + + if (detalle != null) { + id.setText("Plan ID: " + idParam); + txtEquipo.setValue(String.valueOf(detalle.getNombreEquipo())); + txtTipo.setValue(String.valueOf(detalle.getTipo())); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); + String fechaProg = detalle.getFechaprog() != null ? detalle.getFechaprog().format(formatter) : ""; + String fechaReal = detalle.getFecha() != null ? detalle.getFecha().format(formatter) : ""; + + txtFechaRealizacion.setValue(fechaProg); + txtFecha.setValue(fechaReal); + txtUsuario.setValue(String.valueOf(detalle.getUsuario())); + txtDepartamento.setValue(String.valueOf(detalle.getDepartamento())); + int mantId = detalle.getId(); + List listaHardware = service.getHardwaredetallePorMantId(mantId); + gridHardware.setItems(listaHardware); + } else { + id.setText("No se encontro informacion para el Plan ID: " + planId); + } + + } catch (NumberFormatException e) { + id.setText("ID no valido"); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java index db20180..fb631c4 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java @@ -22,6 +22,7 @@ import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.component.upload.Upload; import com.vaadin.flow.component.upload.receivers.MemoryBuffer; 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 jakarta.annotation.security.PermitAll; @@ -143,6 +144,7 @@ public class PlanAnualView extends VerticalLayout { chkMostrarTodos.addValueChangeListener(event -> { planAnualFilter.setExcludeRealizado(!event.getValue()); }); + chkMostrarTodos.setValue(true); this.setPadding(false); @@ -175,66 +177,96 @@ public class PlanAnualView extends VerticalLayout { private Grid setupGrid() { - Grid planAnualGrid = new Grid<>(PlanAnual.class, false); + Grid planAnualGrid = new Grid<>(PlanAnual.class, false); - planAnualGrid.addColumn(PlanAnual :: getNumero).setHeader("No.").setSortable(true); - planAnualGrid.addColumn(PlanAnual :: getNomEquipo).setHeader("Equipo").setAutoWidth(true); - planAnualGrid.addColumn(PlanAnual :: getDepartamento).setHeader("Departamento").setAutoWidth(true); - planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); + planAnualGrid.addColumn((ValueProvider) PlanAnual::getNumero) + .setHeader("No.").setSortable(true); - // Usando iconos en las 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.addColumn((ValueProvider) PlanAnual::getNomEquipo) + .setHeader("Equipo").setAutoWidth(true); - planAnualGrid.addColumn(planAnual -> { - LocalDate fechaProgramada = planAnual.getFechaProgramada(); - return fechaProgramada != null ? fechaProgramada.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "No programada"; // Formato especifico - }).setHeader("Fecha Programada").setAutoWidth(true).setSortable(true); + planAnualGrid.addColumn((ValueProvider) PlanAnual::getDepartamento) + .setHeader("Departamento").setAutoWidth(true); - planAnualGrid.addColumn(planAnual -> { - LocalDate fechaMantenimiento = planAnual.getFechaMantenimiento(); - return fechaMantenimiento != null ? fechaMantenimiento.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : ""; // Formato especifico - }).setHeader("Fecha Realizacion").setAutoWidth(true).setSortable(true); + planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); - planAnualGrid.addColumn(PlanAnual :: getEstado).setHeader("Estado").setAutoWidth(true); + // 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"); - Grid.Column smtColumn = planAnualGrid.addColumn(PlanAnual::getSmt).setHeader("S.M.T").setKey("smtColumnKey"); + // Fechas formateadas + planAnualGrid.addColumn(planAnual -> { + LocalDate fecha = planAnual.getFechaProgramada(); + return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "No programada"; + }).setHeader("Fecha Programada").setAutoWidth(true).setSortable(true); - planAnualGrid.setItems(databaseService.getPlanAnual()); + planAnualGrid.addColumn(planAnual -> { + LocalDate fecha = planAnual.getFechaMantenimiento(); + return fecha != null ? fecha.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : ""; + }).setHeader("Fecha Realización").setAutoWidth(true).setSortable(true); - planAnualGrid.addComponentColumn(planAnual -> { - Button btnRealizar = new Button(new Icon(VaadinIcon.EDIT)); - btnRealizar.getStyle().set("color", "#A02142"); - btnRealizar.addClickListener(event -> { + planAnualGrid.addColumn((ValueProvider) PlanAnual::getEstado) + .setHeader("Estado").setAutoWidth(true); + + planAnualGrid.addColumn((ValueProvider) PlanAnual::getSmt) + .setHeader("S.M.T").setKey("smtColumnKey"); + + // Botón condicional + planAnualGrid.addComponentColumn(planAnual -> { + String estado = planAnual.getEstado(); + Button btn; + + if ("PENDIENTE".equalsIgnoreCase(estado)) { + btn = new Button(new Icon(VaadinIcon.EDIT)); + btn.setTooltipText("Realizar mantenimiento"); + btn.getStyle().set("color", "#A02142"); + + btn.addClickListener(event -> { int idPlananual = planAnual.getNumero(); LocalDate fechaSistema = LocalDate.now(); - String fechaStr = fechaSistema.toString(); String nomEquipo = planAnual.getNomEquipo(); String departamento = planAnual.getDepartamento(); - btnRealizar.getUI().ifPresent(ui -> ui.navigate( - "mantenimiento?id=" + idPlananual + "&fecha=" + fechaStr + - "&tipo=1" + "&nomEquipo=" + nomEquipo + - "&departamento=" + departamento)); + + btn.getUI().ifPresent(ui -> ui.navigate( + "mantenimiento?id=" + idPlananual + + "&fecha=" + fechaSistema + + "&tipo=1" + + "&nomEquipo=" + nomEquipo + + "&departamento=" + departamento + )); }); - // Deshabilitar el boton si el estado no es pendiente - if (!"PENDIENTE".equalsIgnoreCase(planAnual.getEstado())) { - btnRealizar.setVisible(false); - } + } else if ("REALIZADO".equalsIgnoreCase(estado)) { + btn = new Button(new Icon(VaadinIcon.EYE)); + btn.setTooltipText("Ver detalles"); + btn.getStyle().set("color", "#A02142"); - return btnRealizar; - }); + btn.addClickListener(event -> { + int idPlananual = planAnual.getNumero(); + btn.getUI().ifPresent(ui -> ui.navigate( + "detalles?id=" + idPlananual + )); + }); + } else { + btn = new Button("N/A"); + btn.setEnabled(false); + } + + return btn; + }); + + // Cargar datos + planAnualGrid.setItems(databaseService.getPlanAnual()); + return planAnualGrid; +} - planAnualGrid.setItems(databaseService.getPlanAnual()); - return planAnualGrid; - } /* (∩ ͡° ͜ʖ ͡°)⊃━☆゚. * SUSTITUIR VALORES BOOLEANOS POR UN ICONO (∩ ͡° ͜ʖ ͡°)⊃━☆゚. * */