diff --git a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java index 4bf867a..8d3b3a2 100644 --- a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java +++ b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java @@ -1,6 +1,5 @@ package mx.gob.jumapacelaya.services; -import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder; import mx.gob.jumapacelaya.models.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -16,7 +15,7 @@ public class DatabaseService { private Connection getMysqlConnection() throws SQLException { - String url = "jdbc:mysql://mhdb.jumapacelaya.gob.mx:33006/Mantenimientos"; + String url = "jdbc:mysql://185.196.20.240:33006/Mantenimientos"; String user = "root"; String pass = "mantenimientos"; @@ -185,6 +184,7 @@ public class DatabaseService { ); planAnualList.add(planAnual); } + System.out.println("Registros obtenidos: " + planAnualList.size()); } catch (SQLException e) { e.printStackTrace(); } @@ -285,7 +285,7 @@ public class DatabaseService { /* ˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀˁ˚ᴥ˚ˀ */ // INSERTAR EN LA TABLA: HARDWAREDET - public boolean insertarHardware(String tipoHardwareId, int numSerie, String modelo, int placa, int mantenimientoId) { + public boolean insertarHardware(String tipoHardwareId, String numSerie, String modelo, String placa, int mantenimientoId) { String query = "INSERT INTO HARDWAREDET (tipoHardwareId, numSerie, modelo, placa, mantenimientoId) VALUES (?, ?, ?, ?, ?)"; boolean isInserted = false; @@ -293,9 +293,9 @@ public class DatabaseService { PreparedStatement preparedStatement = connection.prepareStatement(query)) { preparedStatement.setString(1, tipoHardwareId); - preparedStatement.setInt(2, numSerie); + preparedStatement.setString(2, numSerie); preparedStatement.setString(3, modelo); - preparedStatement.setInt(4, placa); + preparedStatement.setString(4, placa); preparedStatement.setInt(5, mantenimientoId); int rowsAffected = preparedStatement.executeUpdate(); diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java index 631d846..4ac3e8d 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java @@ -232,11 +232,17 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse tipoHardware.setItems(databaseService.getTiposHardware()); tipoHardware.setSizeFull(); - NumberField noSerie = new NumberField(); + TextField noSerie = new TextField(); noSerie.setEnabled(false); noSerie.setRequired(true); noSerie.setPlaceholder("No. Serie"); noSerie.setSizeFull(); + // Validacion para que este campo solo acepte numeros + noSerie.getElement().executeJs( + "this.addEventListener('input', function(e) { " + + " e.target.value = e.target.value.replace(/[^0-9]/g, '');" + // Solo permite dígitos + "});" + ); TextField modelo = new TextField(); modelo.setEnabled(false); @@ -244,11 +250,17 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse modelo.setPlaceholder("Modelo"); modelo.setSizeFull(); - NumberField placa = new NumberField(); + TextField placa = new TextField(); placa.setEnabled(false); placa.setRequired(true); placa.setPlaceholder("Placa"); placa.setSizeFull(); + // Validacion para que este campo solo acepte numeros + placa.getElement().executeJs( + "this.addEventListener('input', function(e) { " + + " e.target.value = e.target.value.replace(/[^0-9]/g, '');" + // Solo permite dígitos + "});" + ); tipoHardware.addValueChangeListener(event -> { TiposHardware tipoSeleccionado = event.getValue(); @@ -450,12 +462,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse // Metodo para verificar si la firma corresponde a una cadena de firma vacia private boolean esFirmaVacia(String firmaBase64) { - if (firmaBase64 == null || firmaBase64.isEmpty()) { - return true; - } - - String firmaVacia = "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"; - + String firmaVacia = "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"; return firmaBase64.equals(firmaVacia); } @@ -513,9 +520,11 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse // Validacion de firmas si es igual o no a la cadena de firma vacia - userSignatureBase64 = esFirmaVacia(userSignatureBase64) ? null : userSignatureBase64; - smtSignatureBase64 = esFirmaVacia(smtSignatureBase64) ? null : smtSignatureBase64; - gciaSignatureBase64 = esFirmaVacia(gciaSignatureBase64) ? null : gciaSignatureBase64; + if (esFirmaVacia(userSignatureBase64) || esFirmaVacia(smtSignatureBase64) || esFirmaVacia(gciaSignatureBase64)) { + Notification.show("Por favor, completa todas las firmas antes de guardar.", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_WARNING); + return; // Detiene la ejecución + } @@ -530,9 +539,9 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse for (HorizontalLayout layout : hardwareLayouts) { ComboBox tipoHardware = (ComboBox) layout.getComponentAt(0); // Ahora es ComboBox - NumberField noSerie = (NumberField) layout.getComponentAt(1); + TextField noSerie = (TextField) layout.getComponentAt(1); TextField modelo = (TextField) layout.getComponentAt(2); - NumberField placa = (NumberField) layout.getComponentAt(3); + TextField placa = (TextField) layout.getComponentAt(3); TiposHardware tipoSeleccionado = tipoHardware.getValue(); @@ -544,13 +553,13 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse boolean esOpcional = tipoSeleccionado != null && tiposOpcionales.contains(tipoSeleccionado.getNombreHardware()); // Validar campos solo si el tipo de hardware no es opcional - int numSerieInt = noSerie.getValue() != null ? noSerie.getValue().intValue() : 0; - int placaInt = placa.getValue() != null ? placa.getValue().intValue() : 0; + String numSerieInt = noSerie.getValue(); + String placaInt = placa.getValue(); // Validaciones antes de insertar detalles del hardware if (!esOpcional) { - if (tipoHardware.getValue() == null || modelo.getValue() == null || numSerieInt <= 0 || placaInt <= 0) { + if (tipoHardware.getValue() == null || modelo.getValue() == null || numSerieInt == null || numSerieInt.isEmpty() || placaInt == null || placaInt.isEmpty()) { Notification.show("Por favor, completa todos los campos de hardware", 4000, Notification.Position.MIDDLE) .addThemeVariants(NotificationVariant.LUMO_WARNING); return; @@ -660,9 +669,11 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse String destinatario = usuarioSeleccionado.getEmail(); String asunto = "MANTENIMIENTO DE EQUIPO DE COMPUTO REALIZADO"; - String cuerpo = "" - + "" - + ""; + String cuerpo = "" + + "" + + ""+ + "" + + ""; String imagePath = "src/main/resources/META-INF/resources/images/imgCorreo/correoMantt.png"; diff --git a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java index ce593fe..43fc357 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java @@ -5,6 +5,7 @@ import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.ButtonVariant; 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.grid.HeaderRow; import com.vaadin.flow.component.grid.dataview.GridListDataView; import com.vaadin.flow.component.html.H4; @@ -161,8 +162,9 @@ public class PlanAnualView extends VerticalLayout { Grid planAnualGrid = new Grid<>(PlanAnual.class, false); planAnualGrid.addColumn(PlanAnual :: getNumero).setHeader("No."); - planAnualGrid.addColumn(PlanAnual :: getNomEquipo).setHeader("Equipo").setAutoWidth(true); - planAnualGrid.addColumn(PlanAnual :: getDepartamento).setHeader("Departamento").setAutoWidth(true); + planAnualGrid.addColumn(PlanAnual :: getNomEquipo).setHeader("Equipo").setWidth("8em"); + planAnualGrid.addColumn(PlanAnual :: getDepartamento).setHeader("Departamento").setWidth("10em"); + planAnualGrid.addThemeVariants(GridVariant.LUMO_WRAP_CELL_CONTENT); // Usando iconos en las columnas booleanas planAnualGrid.addComponentColumn(planAnual -> getIcon(planAnual.isMonitor())).setHeader("Monitor").setAutoWidth(true);