Browse Source

Se agrego un nuevo campo de busqueda en la columna del SMT para poder buscar por el nombre de este y tambien se agrego la funcionalidad para que en el campo del nombre del equipo lo obtenga directamente desde el plan anual y no se tenga que escribir manualmente

master
mramirezg 9 months ago
parent
commit
ee3d58d722
2 changed files with 95 additions and 10 deletions
  1. +19
    -6
      src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
  2. +76
    -4
      src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java

+ 19
- 6
src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java View File

@ -60,7 +60,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
private final ComboBox<TiposMantenimiento> tipoMantt;
private final ComboBox<DepartamentosModel> area;
private final ComboBox<Usuario> usuario;
private final TextField nombreEquipo;
private final TextField txtNombreEquipo;
private final UserService userService;
private final EmailService emailService;
private RadioButtonGroup<String> formaGroup;
@ -178,11 +178,12 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
this.nombreEquipo = new TextField("Nombre del Equipo");
nombreEquipo.setRequired(true);
this.txtNombreEquipo = new TextField("Nombre del Equipo");
txtNombreEquipo.setRequired(true);
txtNombreEquipo.setReadOnly(true);
departamentoLayout.add(area, usuario, nombreEquipo);
departamentoLayout.add(area, usuario, txtNombreEquipo);
departamentoLayout.setWidthFull();
createHardwareSection(databaseService);
@ -457,7 +458,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
// Obtener el empleado y el equipo
Usuario usuarioSeleccionado = usuario.getValue();
String empleadoId = usuarioSeleccionado != null ? usuarioSeleccionado.getEmpleadoId().toString() : null;
String equipoId = nombreEquipo.getValue();
String equipoId = txtNombreEquipo.getValue();
// AQUI SE MANEJA LA OPCION SELECCIONADA EN LA FORMA DE MANTENIMIENTO (REMOTA o MANUAL)
String formaSeleccionada = formaGroup.getValue();
@ -611,7 +612,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
tipoMantt.clear();
area.clear();
usuario.clear();
nombreEquipo.clear();
txtNombreEquipo.clear();
formaGroup.clear();
actualizaciones.clear();
masActualizacionesGroup.clear();
@ -663,6 +664,10 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
? beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("id").stream().findFirst().orElse(null)
: null;
String equipoParam = beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("nomEquipo") != null
? beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("nomEquipo").stream().findFirst().orElse(null)
: null;
if (fechaParam != null) {
try {
LocalDate fechaActual = LocalDate.parse(fechaParam);
@ -704,5 +709,13 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
} else {
txtPlananualID.setValue("Sin ID"); // O un valor por defecto si no hay ID
}
// Establecemos el valor del campo de texto Nombre de Equipo con el parametro que viene en la url
if (equipoParam != null) {
txtNombreEquipo.setValue(equipoParam);
} else {
txtNombreEquipo.setValue("Sin nombre");
}
}
}

+ 76
- 4
src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java View File

@ -1,9 +1,12 @@
package mx.gob.jumapacelaya.ui;
import com.vaadin.flow.component.Component;
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.HeaderRow;
import com.vaadin.flow.component.grid.dataview.GridListDataView;
import com.vaadin.flow.component.html.H4;
import com.vaadin.flow.component.html.H5;
import com.vaadin.flow.component.html.Span;
@ -16,6 +19,7 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
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.router.PageTitle;
import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
@ -33,6 +37,9 @@ import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import static java.util.regex.Pattern.matches;
@PermitAll
@PageTitle("Plan Anual de Mantenimiento")
@ -51,6 +58,18 @@ public class PlanAnualView extends VerticalLayout {
setupHeader();
Grid<PlanAnual> planAnualGrid = setupGrid();
// Obtenemos la lista de items y establecemos un GridListDataView para gestionar los datos
List<PlanAnual> planAnualItems = databaseService.getPlanAnual();
GridListDataView<PlanAnual> dataView = planAnualGrid.setItems(planAnualItems);
// Se crea el filtro para el grid.
PlanAnualFilter planAnualFilter = new PlanAnualFilter(dataView);
HeaderRow headerRow = planAnualGrid.appendHeaderRow();
headerRow.getCell(planAnualGrid.getColumnByKey("smtColumnKey"))
.setComponent(createFilterHeader("S.M.T", planAnualFilter::setSmt));
// Componente UPLOAD para subir archivos
MemoryBuffer buffer = new MemoryBuffer();
@ -158,17 +177,19 @@ public class PlanAnualView extends VerticalLayout {
planAnualGrid.addColumn(planAnual -> {
LocalDate fechaProgramada = planAnual.getFechaProgramada();
return fechaProgramada != null ? fechaProgramada.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "No programada"; // Formato deseado
return fechaProgramada != null ? fechaProgramada.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : "No programada"; // Formato especifico
}).setHeader("Fecha Programada").setAutoWidth(true);
planAnualGrid.addColumn(planAnual -> {
LocalDate fechaMantenimiento = planAnual.getFechaMantenimiento();
return fechaMantenimiento != null ? fechaMantenimiento.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : ""; // Formato deseado
return fechaMantenimiento != null ? fechaMantenimiento.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")) : ""; // Formato especifico
}).setHeader("Fecha Realizacion").setAutoWidth(true);
planAnualGrid.addColumn(PlanAnual :: getEstado).setHeader("Estado").setAutoWidth(true);
planAnualGrid.addColumn(PlanAnual :: getSmt).setHeader("S.M.T").setAutoWidth(true);
Grid.Column<PlanAnual> smtColumn = planAnualGrid.addColumn(PlanAnual::getSmt).setHeader("S.M.T").setKey("smtColumnKey");
planAnualGrid.setItems(databaseService.getPlanAnual());
planAnualGrid.addComponentColumn(planAnual -> {
Button btnRealizar = new Button("Realizar");
@ -176,8 +197,15 @@ public class PlanAnualView extends VerticalLayout {
int idPlananual = planAnual.getNumero();
LocalDate fechaSistema = LocalDate.now();
String fechaStr = fechaSistema.toString();
btnRealizar.getUI().ifPresent(ui -> ui.navigate("mantenimiento?id=" + idPlananual + "&fecha=" + fechaStr + "&tipo=1"));
String nomEquipo = planAnual.getNomEquipo();
btnRealizar.getUI().ifPresent(ui -> ui.navigate("mantenimiento?id=" + idPlananual + "&fecha=" + fechaStr + "&tipo=1" + "&nomEquipo=" + nomEquipo));
});
// Deshabilitar el boton si el estado no es pendiente
if (!"PENDIENTE".equalsIgnoreCase(planAnual.getEstado())) {
btnRealizar.setVisible(false);
}
return btnRealizar;
}).setHeader("Realizado").setAutoWidth(true);
@ -248,6 +276,7 @@ public class PlanAnualView extends VerticalLayout {
// Valida que haya un archivo cargado en el UPLOAD y si si, llama al metodo para insertar el archivo en la base de datos
private void insertarDatos() {
if (fileContent == null) {
Notification.show("Error: No hay archivo cargado.").addThemeVariants(NotificationVariant.LUMO_ERROR);
@ -263,4 +292,47 @@ public class PlanAnualView extends VerticalLayout {
.addThemeVariants(NotificationVariant.LUMO_ERROR);
}
}
private static Component createFilterHeader(String labelText, Consumer<String> filterChangeConsumer) {
TextField textField = new TextField();
textField.setPlaceholder("Buscar...");
textField.setValueChangeMode(ValueChangeMode.EAGER);
textField.setClearButtonVisible(true);
textField.setWidthFull();
textField.addValueChangeListener(event -> filterChangeConsumer.accept(event.getValue()));
VerticalLayout layout = new VerticalLayout(textField);
layout.setSpacing(false);
layout.setPadding(false);
return layout;
}
private static class PlanAnualFilter {
private final GridListDataView<PlanAnual> dataView;
private String smt;
public PlanAnualFilter(GridListDataView<PlanAnual> dataView) {
this.dataView = dataView;
this.dataView.addFilter(this::test);
}
public void setSmt(String smt) {
this.smt = smt;
this.dataView.refreshAll();
}
public boolean test(PlanAnual planAnual) {
boolean matchesSmt = matches(planAnual.getSmt(), smt);
return matchesSmt;
}
private boolean matches(String value, String searchTerm) {
return searchTerm == null || searchTerm.isEmpty()
|| value.toLowerCase().contains(searchTerm.toLowerCase());
}
}
}

Loading…
Cancel
Save