@ -1,5 +1,6 @@
package mx.gob.jumapacelaya.ui ;
package mx.gob.jumapacelaya.ui ;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator ;
import com.vaadin.flow.component.Component ;
import com.vaadin.flow.component.Component ;
import com.vaadin.flow.component.UI ;
import com.vaadin.flow.component.UI ;
import com.vaadin.flow.component.button.Button ;
import com.vaadin.flow.component.button.Button ;
@ -34,6 +35,7 @@ import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.component.upload.Upload ;
import com.vaadin.flow.component.upload.Upload ;
import com.vaadin.flow.component.upload.receivers.MemoryBuffer ;
import com.vaadin.flow.component.upload.receivers.MemoryBuffer ;
import com.vaadin.flow.data.provider.ListDataProvider ;
import com.vaadin.flow.data.provider.ListDataProvider ;
import com.vaadin.flow.data.renderer.ComponentRenderer ;
import com.vaadin.flow.data.value.ValueChangeMode ;
import com.vaadin.flow.data.value.ValueChangeMode ;
import com.vaadin.flow.function.ValueProvider ;
import com.vaadin.flow.function.ValueProvider ;
import com.vaadin.flow.router.PageTitle ;
import com.vaadin.flow.router.PageTitle ;
@ -42,6 +44,7 @@ import com.vaadin.flow.server.StreamRegistration;
import com.vaadin.flow.server.StreamResource ;
import com.vaadin.flow.server.StreamResource ;
import jakarta.annotation.security.PermitAll ;
import jakarta.annotation.security.PermitAll ;
import mx.gob.jumapacelaya.models.PlanAnual ;
import mx.gob.jumapacelaya.models.PlanAnual ;
import mx.gob.jumapacelaya.models.encuestas.MantenimientosSinEncuesta ;
import mx.gob.jumapacelaya.services.DatabaseService ;
import mx.gob.jumapacelaya.services.DatabaseService ;
import mx.gob.jumapacelaya.services.ReportService ;
import mx.gob.jumapacelaya.services.ReportService ;
import net.sf.jasperreports.engine.JasperFillManager ;
import net.sf.jasperreports.engine.JasperFillManager ;
@ -130,6 +133,9 @@ public class PlanAnualView extends VerticalLayout {
headerRow . getCell ( planAnualGrid . getColumnByKey ( "mesplaneado" ) )
headerRow . getCell ( planAnualGrid . getColumnByKey ( "mesplaneado" ) )
. setComponent ( createFilterHeader ( "Mes Planeado" , planAnualFilter : : setMesPlaneado ) ) ;
. setComponent ( createFilterHeader ( "Mes Planeado" , planAnualFilter : : setMesPlaneado ) ) ;
headerRow . getCell ( planAnualGrid . getColumnByKey ( "encuesta" ) )
. setComponent ( createFilterHeader ( "Encuesta" , planAnualFilter : : setEncuesta ) ) ;
/ / MENU CONTEXTUAL DEL GRID
/ / MENU CONTEXTUAL DEL GRID
@ -369,14 +375,8 @@ public class PlanAnualView extends VerticalLayout {
btnAddEquipo . setTooltipText ( "Agregar nuevo equipo" ) ;
btnAddEquipo . setTooltipText ( "Agregar nuevo equipo" ) ;
btnEnviarEncuestas = new Button ( VaadinIcon . ENVELOPE . create ( ) ) ;
btnEnviarEncuestas = new Button ( VaadinIcon . ENVELOPE . create ( ) ) ;
ConfirmDialog enviarEncConfirm = new ConfirmDialog ( ) ;
enviarEncConfirm . setHeader ( "Enviar encuestas" ) ;
enviarEncConfirm . setText ( "¿Deseas enviar las encuestas de satisfacción?, Esto enviara la encuesta solo a los mantenimientos realizados" ) ;
enviarEncConfirm . setCancelable ( true ) ;
enviarEncConfirm . addCancelListener ( e - > enviarEncConfirm . close ( ) ) ;
enviarEncConfirm . setConfirmText ( "Enviar" ) ;
enviarEncConfirm . addConfirmListener ( e - > { } ) ;
btnEnviarEncuestas . addClickListener ( e - > enviarEncConfirm . open ( ) ) ;
btnEnviarEncuestas . addClickListener ( e - > showParametrosDialog ( ) ) ;
btnEnviarEncuestas . setTooltipText ( "Enviar encuestas masivamente" ) ;
yearFilter = new ComboBox < > ( ) ;
yearFilter = new ComboBox < > ( ) ;
int currentYear = Year . now ( ) . getValue ( ) ;
int currentYear = Year . now ( ) . getValue ( ) ;
@ -389,7 +389,7 @@ public class PlanAnualView extends VerticalLayout {
List < PlanAnual > todosLosPlanes = databaseService . getPlanAnual ( ) ;
List < PlanAnual > todosLosPlanes = databaseService . getPlanAnual ( ) ;
btnImprimirLayout = new HorizontalLayout ( btnColumns , btnImprimirRpt , btnAddEquipo /*, btnEnviarEncuestas*/ , yearFilter ) ;
btnImprimirLayout = new HorizontalLayout ( btnColumns , btnImprimirRpt , btnAddEquipo , btnEnviarEncuestas , yearFilter ) ;
btnImprimirLayout . setAlignItems ( Alignment . BASELINE ) ;
btnImprimirLayout . setAlignItems ( Alignment . BASELINE ) ;
HorizontalLayout columnSelectorLayout = new HorizontalLayout ( ) ;
HorizontalLayout columnSelectorLayout = new HorizontalLayout ( ) ;
columnSelectorLayout . setAlignItems ( Alignment . END ) ;
columnSelectorLayout . setAlignItems ( Alignment . END ) ;
@ -541,6 +541,11 @@ public class PlanAnualView extends VerticalLayout {
private String equipo ;
private String equipo ;
private String departamento ;
private String departamento ;
private String mesPlaneado ;
private String mesPlaneado ;
private LocalDate fechaProgramada ;
private LocalDate fechaRealizacion ;
private String encuesta ;
private String estado ;
private String situacion ;
private Integer year ;
private Integer year ;
private boolean excludeRealizado = true ;
private boolean excludeRealizado = true ;
@ -569,6 +574,11 @@ public class PlanAnualView extends VerticalLayout {
this . dataView . refreshAll ( ) ;
this . dataView . refreshAll ( ) ;
}
}
public void setEncuesta ( String encuesta ) {
this . encuesta = encuesta ;
this . dataView . refreshAll ( ) ;
}
public void setYear ( Integer year ) {
public void setYear ( Integer year ) {
this . year = year ;
this . year = year ;
dataView . refreshAll ( ) ;
dataView . refreshAll ( ) ;
@ -586,6 +596,7 @@ public class PlanAnualView extends VerticalLayout {
boolean matchesEquipo = matches ( planAnual . getNomEquipo ( ) , equipo ) ;
boolean matchesEquipo = matches ( planAnual . getNomEquipo ( ) , equipo ) ;
boolean matchesDepartamento = matches ( planAnual . getDepartamento ( ) , departamento ) ;
boolean matchesDepartamento = matches ( planAnual . getDepartamento ( ) , departamento ) ;
boolean matchesMesPlaneado = matches ( planAnual . getMesplaneado ( ) , mesPlaneado ) ;
boolean matchesMesPlaneado = matches ( planAnual . getMesplaneado ( ) , mesPlaneado ) ;
boolean matchesEncuesta = matches ( planAnual . getEncuesta ( ) , encuesta ) ;
boolean matchesYear = true ;
boolean matchesYear = true ;
if ( year ! = null ) {
if ( year ! = null ) {
@ -608,7 +619,8 @@ public class PlanAnualView extends VerticalLayout {
& & matchesDepartamento
& & matchesDepartamento
& & matchesMesPlaneado
& & matchesMesPlaneado
& & matchesYear
& & matchesYear
& & matchesEstado ;
& & matchesEstado
& & matchesEncuesta ;
}
}
private boolean matches ( String value , String serachTerm ) {
private boolean matches ( String value , String serachTerm ) {
@ -1005,4 +1017,114 @@ public class PlanAnualView extends VerticalLayout {
dialog . getFooter ( ) . add ( dialogFooter ) ;
dialog . getFooter ( ) . add ( dialogFooter ) ;
dialog . open ( ) ;
dialog . open ( ) ;
}
}
private void showParametrosDialog ( ) {
Dialog dialog = new Dialog ( ) ;
dialog . setHeaderTitle ( "Ingresar periodo" ) ;
TextField txtMes = new TextField ( "Mes:" ) ;
txtMes . setPlaceholder ( "ENERO, FEBRERO, MARZO..." ) ;
txtMes . setClearButtonVisible ( true ) ;
TextField txtAnio = new TextField ( "Año" ) ;
txtAnio . setPlaceholder ( "Ej. 2025" ) ;
Button btnBuscar = new Button ( "Buscar" , VaadinIcon . SEARCH . create ( ) , e - > {
String mes = txtMes . getValue ( ) ;
String anioTexto = txtAnio . getValue ( ) ;
if ( mes . isEmpty ( ) | | anioTexto . isEmpty ( ) ) {
Notification . show ( "Mes y año son requeridos." , 3000 , Notification . Position . MIDDLE ) ;
return ;
}
int anio ;
try {
anio = Integer . parseInt ( anioTexto ) ;
} catch ( NumberFormatException ex ) {
Notification . show ( "El año debe ser numérico." , 3000 , Notification . Position . MIDDLE ) ;
return ;
}
dialog . close ( ) ;
showEncuestasDialog ( mes , anio ) ;
} ) ;
btnBuscar . addThemeVariants ( ButtonVariant . LUMO_PRIMARY ) ;
Button btnCancelar = new Button ( "Cancelar" , VaadinIcon . CLOSE_CIRCLE . create ( ) , e - > dialog . close ( ) ) ;
HorizontalLayout actions = new HorizontalLayout ( btnBuscar , btnCancelar ) ;
VerticalLayout layout = new VerticalLayout ( txtMes , txtAnio , actions ) ;
layout . setPadding ( false ) ;
layout . setSpacing ( true ) ;
dialog . add ( layout ) ;
dialog . open ( ) ;
}
private void showEncuestasDialog ( String mes , int anio ) {
Dialog dialog = new Dialog ( ) ;
dialog . setWidth ( "80%" ) ;
dialog . setHeight ( "90%" ) ;
dialog . setHeaderTitle ( "Encuestas pendientes por enviar..." ) ;
Grid < MantenimientosSinEncuesta > grid = new Grid < > ( MantenimientosSinEncuesta . class , false ) ;
grid . addColumn ( MantenimientosSinEncuesta : : getMantenimientoId )
. setHeader ( "ID" )
. setAutoWidth ( true ) ;
grid . addColumn ( item - > item . getFecha ( ) . format ( DateTimeFormatter . ofPattern ( "dd/MM/yyyy" ) ) )
. setHeader ( "Fecha" ) ;
grid . addColumn ( MantenimientosSinEncuesta : : getPeriodo )
. setHeader ( "Periodo" ) ;
grid . addColumn ( createStatusRender ( ) )
. setHeader ( "Encuesta" ) ;
grid . addColumn ( MantenimientosSinEncuesta : : getDepartamento )
. setHeader ( "Departamento" )
. setAutoWidth ( true ) ;
grid . addColumn ( MantenimientosSinEncuesta : : getNomUsuario )
. setHeader ( "Usuario" )
. setAutoWidth ( true ) ;
grid . addColumn ( MantenimientosSinEncuesta : : getEmail )
. setHeader ( "Correo" )
. setAutoWidth ( true ) ;
List < MantenimientosSinEncuesta > lista = databaseService . getEncuestPendientes ( mes , anio ) ;
grid . setItems ( lista ) ;
dialog . add ( grid ) ;
dialog . getFooter ( ) . add ( new Button ( "Cerrar" , e - > dialog . close ( ) ) ) ;
dialog . open ( ) ;
}
private ComponentRenderer < Span , MantenimientosSinEncuesta > createStatusRender ( ) {
return new ComponentRenderer < > ( encuesta - > {
Span span = new Span ( encuesta . getEncuesta ( ) ) ;
switch ( encuesta . getEncuesta ( ) . toUpperCase ( ) ) {
case "N" :
String theme1 = String . format ( "badge %s" , "error" ) ;
span . getElement ( ) . setAttribute ( "theme" , theme1 ) ;
break ;
case "S" :
String theme2 = String . format ( "badge %s" , "success" ) ;
span . getElement ( ) . setAttribute ( "theme" , theme2 ) ;
break ;
default :
String theme3 = String . format ( "badge %s" , "" ) ;
span . getElement ( ) . setAttribute ( "theme" , theme3 ) ;
}
return span ;
} ) ;
}
}
}