diff --git a/src/main/java/mx/gob/jumapacelaya/models/TiposHardware.java b/src/main/java/mx/gob/jumapacelaya/models/TiposHardware.java new file mode 100644 index 0000000..3ea9ad3 --- /dev/null +++ b/src/main/java/mx/gob/jumapacelaya/models/TiposHardware.java @@ -0,0 +1,34 @@ +package mx.gob.jumapacelaya.models; + +public class TiposHardware { + private String tipoHardwareId; + private String nombreHardware; + + public TiposHardware(String tipoHardwareId, String nombreHardware) { + this.tipoHardwareId = tipoHardwareId; + this.nombreHardware = nombreHardware; + } + + + public String getTipoHardwareId() { + return tipoHardwareId; + } + + public void setTipoHardwareId(String tipoHardwareId) { + this.tipoHardwareId = tipoHardwareId; + } + + public String getNombreHardware() { + return nombreHardware; + } + + public void setNombreHardware(String nombreHardware) { + this.nombreHardware = nombreHardware; + } + + + @Override + public String toString() { + return nombreHardware; + } +} diff --git a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java index ab75d93..8606b7e 100644 --- a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java +++ b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java @@ -1,10 +1,7 @@ package mx.gob.jumapacelaya.services; import com.fasterxml.jackson.databind.jsontype.impl.StdTypeResolverBuilder; -import mx.gob.jumapacelaya.models.DepartamentosModel; -import mx.gob.jumapacelaya.models.PlanAnual; -import mx.gob.jumapacelaya.models.TiposMantenimiento; -import mx.gob.jumapacelaya.models.Usuario; +import mx.gob.jumapacelaya.models.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -119,16 +116,20 @@ public class DatabaseService { /* -------------- Metodo para obtener los tipos de hardware ---------------- */ - public List getTiposHardware() { - List tiposHardware = new ArrayList<>(); - String query = "select TIPOHARDWAREID from TIPOSHARDWARE"; + public List getTiposHardware() { + List tiposHardware = new ArrayList<>(); + String query = "select TIPOHARDWAREID, NOMBRETIPO from TIPOSHARDWARE"; try (Connection connection = getConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { - tiposHardware.add(resultSet.getString("TIPOHARDWAREID")); + TiposHardware tiposHardwareModel = new TiposHardware( + resultSet.getString("tipohardwareid"), + resultSet.getString("nombretipo") + ); + tiposHardware.add(tiposHardwareModel); } } catch (SQLException e) { e.printStackTrace(); diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java index 7cb31a9..db4d3ce 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java @@ -13,6 +13,7 @@ import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.VaadinIcon; import com.vaadin.flow.component.notification.Notification; +import com.vaadin.flow.component.notification.NotificationVariant; import com.vaadin.flow.component.orderedlayout.FlexComponent; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; @@ -28,12 +29,14 @@ import com.vaadin.flow.router.Route; import de.f0rce.signaturepad.SignaturePad; import jakarta.annotation.security.PermitAll; import mx.gob.jumapacelaya.models.DepartamentosModel; +import mx.gob.jumapacelaya.models.TiposHardware; import mx.gob.jumapacelaya.models.TiposMantenimiento; import mx.gob.jumapacelaya.models.Usuario; import mx.gob.jumapacelaya.services.DatabaseService; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @@ -111,7 +114,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse } else if ("2".equals(tipoSeleccionado.getTipomantId())) { // 2 es para CORRECTIVO this.fecha.clear(); etiquetaLayout.setVisible(true); - correctivoLayout(); // Asegúrate de que este método se llame + correctivoLayout(); } else { // Para otros tipos de mantenimiento this.fecha.clear(); @@ -199,10 +202,10 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse //Metodo para agregar un nuevo ComboBox de tipo de hardware y campos de texto private List hardwareLayouts = new ArrayList<>(); private void addNuevoTipo() { - ComboBox tipoHardware = new ComboBox<>(); - List tiposHardware = databaseService.getTiposHardware(); - tipoHardware.setItems(tiposHardware); + ComboBox tipoHardware = new ComboBox<>(); tipoHardware.setPlaceholder("Tipo de hardware"); + tipoHardware.setItemLabelGenerator(TiposHardware::getNombreHardware); + tipoHardware.setItems(databaseService.getTiposHardware()); tipoHardware.setSizeFull(); NumberField noSerie = new NumberField(); @@ -224,11 +227,15 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse placa.setSizeFull(); tipoHardware.addValueChangeListener(event -> { - String tipoSeleccionado = event.getValue(); + TiposHardware tipoSeleccionado = event.getValue(); if (tipoSeleccionado != null) { - int tipoId = Integer.parseInt(tipoSeleccionado); - if (tipoId == 6 || tipoId == 7) { + String nombreTipo = tipoSeleccionado.getNombreHardware(); + if ("TECLADO".equals(nombreTipo)) { + noSerie.setEnabled(false); + modelo.setEnabled(false); + placa.setEnabled(false); + } else if ("MOUSE".equals(nombreTipo)) { noSerie.setEnabled(false); modelo.setEnabled(false); placa.setEnabled(false); @@ -454,44 +461,72 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse int mantenimientoId = databaseService.getUltimoMantenimientoId(); for (HorizontalLayout layout : hardwareLayouts) { - ComboBox tipoHardware = (ComboBox) layout.getComponentAt(0); + ComboBox tipoHardware = (ComboBox) layout.getComponentAt(0); // Ahora es ComboBox NumberField noSerie = (NumberField) layout.getComponentAt(1); TextField modelo = (TextField) layout.getComponentAt(2); NumberField placa = (NumberField) layout.getComponentAt(3); + + TiposHardware tipoSeleccionado = tipoHardware.getValue(); + + // Definir tipos de hardware opcionales (sin necesidad de modelo, número de serie y placa) + List tiposOpcionales = Arrays.asList("TECLADO", "MOUSE"); + + // Verificar si el tipo de hardware es opcional + 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; + // Validaciones antes de insertar detalles del hardware - if (tipoHardware.getValue() == null || modelo.getValue() == null || numSerieInt <= 0 || placaInt <= 0) { - Notification.show("Por favor, completa todos los campos de hardware", 4000, Notification.Position.MIDDLE); - return; + if (!esOpcional) { + if (tipoHardware.getValue() == null || modelo.getValue() == null || numSerieInt <= 0 || placaInt <= 0) { + Notification.show("Por favor, completa todos los campos de hardware", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_WARNING); + return; + } + } else { + if (tipoSeleccionado == null) { + Notification.show("Por favor, selecciona un tipo de hardware", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_WARNING); + return; + } } + // Obtener el ID de tipo de hardware seleccionado + String tipoHardwareId = tipoSeleccionado.getTipoHardwareId(); + boolean isHardwareInserted = databaseService.insertarHardware( - tipoHardware.getValue(), + tipoHardwareId, // Ahora usamos el ID del tipo de hardware numSerieInt, modelo.getValue(), placaInt, mantenimientoId ); + + // Limpiar los campos después de la inserción tipoHardware.clear(); modelo.clear(); placa.clear(); noSerie.clear(); if (!isHardwareInserted) { - Notification.show("Error al insertar detalles del hardware", 4000, Notification.Position.MIDDLE); + Notification.show("Error al insertar detalles del hardware", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_ERROR); return; } } + // AQUI MANEJO LA INSERCION DE LOS DATOS DE LOS CHECKBOXES DE ACTUALIZACIONES DE SEGURIDAD!!! for (String actualizacionSelecionada : actualizaciones.getSelectedItems()) { boolean isActualizacionInserted = databaseService.insertActualizacionSeg(actualizacionSelecionada, null, mantenimientoId); if (!isActualizacionInserted) { - Notification.show("Error al insertar actualizacion de seguridad", 4000, Notification.Position.MIDDLE); + Notification.show("Error al insertar actualizacion de seguridad", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_ERROR); return; } } @@ -503,14 +538,17 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse boolean isOtrasActualizaciones = databaseService.insertActualizacionSeg(actualizacion, otrasActu, mantenimientoId); if (!isOtrasActualizaciones) { - Notification.show("Error al insertar otras actualizaciones de seguridad", 4000, Notification.Position.MIDDLE); + Notification.show("Error al insertar otras actualizaciones", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_ERROR); return; } } } // NOTIFICACION DE GUARDADO EXITOSO Y LIMPIEZA DE LOS CAMPOS!!! - Notification.show("!!Mantenimiento guardado exitosamente!!", 4000, Notification.Position.MIDDLE); + Notification.show("!!Mantenimiento guardado exitosamente!!", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_SUCCESS); + fecha.clear(); tipoMantt.clear(); area.clear(); @@ -552,12 +590,29 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse } // Cambiamos el valor por el ID - /*if ("1".equals(tipoParam)) { // 1 es para PREVENTIVO - tipoMantt.setValue("1"); // Establecemos el ID en el ComboBox - tipoMantt.setReadOnly(true); - } else if ("2".equals(tipoParam)) { // 2 es para CORRECTIVO - tipoMantt.setValue("2"); - tipoMantt.setReadOnly(true); - }*/ + if ("1".equals(tipoParam)) { // 1 es para PREVENTIVO + TiposMantenimiento preventivo = tipoMantt.getDataProvider() + .fetch(new com.vaadin.flow.data.provider.Query<>()) + .filter(tipo -> "1".equals(tipo.getTipomantId())) + .findFirst() + .orElse(null); + + if (preventivo != null) { + tipoMantt.setValue(preventivo); + tipoMantt.setReadOnly(true); + } + + } else if ("2".equals(tipoParam)) { // 2 es para CORRECTIVO + TiposMantenimiento correctivo = tipoMantt.getDataProvider() + .fetch(new com.vaadin.flow.data.provider.Query<>()) + .filter(tipo -> "2".equals(tipo.getTipomantId())) + .findFirst() + .orElse(null); + + if (correctivo != null) { + tipoMantt.setValue(correctivo); + tipoMantt.setReadOnly(true); + } + } } }