@ -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 desead o
return fechaProgramada ! = null ? fechaProgramada . format ( DateTimeFormatter . ofPattern ( "dd/MM/yyyy" ) ) : "No programada" ; / / Formato especific o
} ) . setHeader ( "Fecha Programada" ) . setAutoWidth ( true ) ;
planAnualGrid . addColumn ( planAnual - > {
LocalDate fechaMantenimiento = planAnual . getFechaMantenimiento ( ) ;
return fechaMantenimiento ! = null ? fechaMantenimiento . format ( DateTimeFormatter . ofPattern ( "dd/MM/yyyy" ) ) : "" ; / / Formato desead o
return fechaMantenimiento ! = null ? fechaMantenimiento . format ( DateTimeFormatter . ofPattern ( "dd/MM/yyyy" ) ) : "" ; / / Formato especific o
} ) . 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 ( ) ) ;
}
}
}