Browse Source

Ya se agrego la funcion de enviar los correos desde el dialog de mantenimientos faltantes

main
mramirezg 1 month ago
parent
commit
0f65ece163
3 changed files with 73 additions and 47 deletions
  1. +4
    -33
      src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
  2. +7
    -11
      src/main/java/mx/gob/jumapacelaya/services/EmailService.java
  3. +62
    -3
      src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java

+ 4
- 33
src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java View File

@ -90,7 +90,6 @@ public class DatabaseService {
return nomenclatura; return nomenclatura;
} }
/* -------------- Metodo para obtener a los usuarios ---------------- */ /* -------------- Metodo para obtener a los usuarios ---------------- */
public List<Usuario> getUsuarios() { public List<Usuario> getUsuarios() {
List<Usuario> usuarios = new ArrayList<>(); List<Usuario> usuarios = new ArrayList<>();
@ -115,7 +114,6 @@ public class DatabaseService {
return usuarios; return usuarios;
} }
/* -------------- Metodo para obtener los departamentos ---------------- */ /* -------------- Metodo para obtener los departamentos ---------------- */
public List<DepartamentosModel> getDepartamentos() { public List<DepartamentosModel> getDepartamentos() {
List<DepartamentosModel> departamentos = new ArrayList<>(); List<DepartamentosModel> departamentos = new ArrayList<>();
@ -138,7 +136,6 @@ public class DatabaseService {
return departamentos; return departamentos;
} }
/* -------------- Metodo para obtener los tipos de hardware ---------------- */ /* -------------- Metodo para obtener los tipos de hardware ---------------- */
public List<TiposHardware> getTiposHardware() { public List<TiposHardware> getTiposHardware() {
List<TiposHardware> tiposHardware = new ArrayList<>(); List<TiposHardware> tiposHardware = new ArrayList<>();
@ -161,8 +158,6 @@ public class DatabaseService {
return tiposHardware; return tiposHardware;
} }
/* ----------------Obtener el Plan Anual de Mantenimiento ---------------- */ /* ----------------Obtener el Plan Anual de Mantenimiento ---------------- */
public List<PlanAnual> getPlanAnual() { public List<PlanAnual> getPlanAnual() {
List<PlanAnual> planAnualList = new ArrayList<>(); List<PlanAnual> planAnualList = new ArrayList<>();
@ -216,7 +211,6 @@ public class DatabaseService {
return planAnualList; return planAnualList;
} }
/* ----------------Obtener el Plan Anual de Mantenimiento por ID ---------------- */ /* ----------------Obtener el Plan Anual de Mantenimiento por ID ---------------- */
public PlanAnual getPlanAnualPorId(int id) { public PlanAnual getPlanAnualPorId(int id) {
String query = """ String query = """
@ -268,8 +262,6 @@ public class DatabaseService {
return null; return null;
} }
/* ----------------Obtener detalles del mantenimiento ---------------- */ /* ----------------Obtener detalles del mantenimiento ---------------- */
public DetalleMantenimientoModel getDetalleMantenimientoPorPlanAnualId(int planAnualId) { public DetalleMantenimientoModel getDetalleMantenimientoPorPlanAnualId(int planAnualId) {
String query = "SELECT\n" + String query = "SELECT\n" +
@ -297,7 +289,7 @@ public class DatabaseService {
try (Connection connection = getMysqlConnection(); try (Connection connection = getMysqlConnection();
PreparedStatement statement = connection.prepareStatement(query)) { PreparedStatement statement = connection.prepareStatement(query)) {
statement.setInt(1, planAnualId); statement.setInt(1, planAnualId);
try (ResultSet rs = statement.executeQuery()) { try (ResultSet rs = statement.executeQuery()) {
@ -326,8 +318,6 @@ public class DatabaseService {
return null; return null;
} }
/* ----------------Obtener mantenimientos sin encuesta respondida por periodo ---------------- */ /* ----------------Obtener mantenimientos sin encuesta respondida por periodo ---------------- */
public List<MantenimientosSinEncuesta> getEncuestPendientes(String mes, int anio) { public List<MantenimientosSinEncuesta> getEncuestPendientes(String mes, int anio) {
List<MantenimientosSinEncuesta> lista = new ArrayList<>(); List<MantenimientosSinEncuesta> lista = new ArrayList<>();
@ -388,7 +378,6 @@ public class DatabaseService {
return lista; return lista;
} }
/* ----------------Obtener detalles del hardaware por ID ---------------- */ /* ----------------Obtener detalles del hardaware por ID ---------------- */
public List<HardwareDetalle> getHardwaredetallePorMantId(int mantenimientoId) { public List<HardwareDetalle> getHardwaredetallePorMantId(int mantenimientoId) {
List<HardwareDetalle> detalles = new ArrayList<>(); List<HardwareDetalle> detalles = new ArrayList<>();
@ -396,10 +385,10 @@ public class DatabaseService {
"FROM HARDWAREDET h\r\n" + // "FROM HARDWAREDET h\r\n" + //
"INNER JOIN TIPOSHARDWARE t ON h.TIPOHARDWAREID = t.TIPOHARDWAREID \r\n" + // "INNER JOIN TIPOSHARDWARE t ON h.TIPOHARDWAREID = t.TIPOHARDWAREID \r\n" + //
"WHERE h.MANTENIMIENTOID = ?"; "WHERE h.MANTENIMIENTOID = ?";
try (Connection conn = getMysqlConnection(); try (Connection conn = getMysqlConnection();
PreparedStatement stmt = conn.prepareStatement(query)) { PreparedStatement stmt = conn.prepareStatement(query)) {
stmt.setInt(1, mantenimientoId); stmt.setInt(1, mantenimientoId);
ResultSet rs = stmt.executeQuery(); ResultSet rs = stmt.executeQuery();
@ -421,14 +410,13 @@ public class DatabaseService {
return detalles; return detalles;
} }
/* ---------------- Obtener las actualizaciones de seguridad ---------------- */ /* ---------------- Obtener las actualizaciones de seguridad ---------------- */
public List<ActualizacioneSeguridadModel> getActualizacionesSeg(int mantenimientoId) { public List<ActualizacioneSeguridadModel> getActualizacionesSeg(int mantenimientoId) {
List<ActualizacioneSeguridadModel> actualizaciones = new ArrayList<>(); List<ActualizacioneSeguridadModel> actualizaciones = new ArrayList<>();
String query = "SELECT *\r\n" + // String query = "SELECT *\r\n" + //
"FROM ACTUALIZACIONESSEG a\r\n" + // "FROM ACTUALIZACIONESSEG a\r\n" + //
"WHERE a.MANTENIMIENTOID = ?"; "WHERE a.MANTENIMIENTOID = ?";
try (Connection conn = getMysqlConnection(); try (Connection conn = getMysqlConnection();
PreparedStatement stmt = conn.prepareStatement(query)) { PreparedStatement stmt = conn.prepareStatement(query)) {
@ -451,7 +439,6 @@ public class DatabaseService {
return actualizaciones; return actualizaciones;
} }
/* ---------------- Obtener los mantenimientos correctivos ---------------- */ /* ---------------- Obtener los mantenimientos correctivos ---------------- */
public List<MantCorrectivosModel> getMantenimientosCorrectivos(int tipomantId) { public List<MantCorrectivosModel> getMantenimientosCorrectivos(int tipomantId) {
List<MantCorrectivosModel> mantCorrectivos = new ArrayList<>(); List<MantCorrectivosModel> mantCorrectivos = new ArrayList<>();
@ -498,8 +485,6 @@ public class DatabaseService {
return mantCorrectivos; return mantCorrectivos;
} }
/*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/ /*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/
/*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/ /*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/
/*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/ /*-=iii=<() *-=iii=<() *-=iii=<() *-=iii=<()*/
@ -628,7 +613,6 @@ public class DatabaseService {
return isInserted; return isInserted;
} }
public int getUltimoMantenimientoId() { public int getUltimoMantenimientoId() {
int ultimoId = -1; int ultimoId = -1;
try (Connection connection = getMysqlConnection()) { try (Connection connection = getMysqlConnection()) {
@ -645,7 +629,6 @@ public class DatabaseService {
return ultimoId; return ultimoId;
} }
// INSERTAR EN LA TABLA: ACTUALIZACIONESSEG // INSERTAR EN LA TABLA: ACTUALIZACIONESSEG
public boolean insertActualizacionSeg(String descripcion, String otras, int mantenimientoId) { public boolean insertActualizacionSeg(String descripcion, String otras, int mantenimientoId) {
String query = "INSERT INTO ACTUALIZACIONESSEG (descripcion, otrasactualizaciones, mantenimientoid) VALUES (?, ?, ?)"; String query = "INSERT INTO ACTUALIZACIONESSEG (descripcion, otrasactualizaciones, mantenimientoid) VALUES (?, ?, ?)";
@ -665,7 +648,6 @@ public class DatabaseService {
} }
} }
// INSERTAR ARCHIVO EXCEL EN LA TABLA: PLANANUAL // INSERTAR ARCHIVO EXCEL EN LA TABLA: PLANANUAL
public void insertarDesdeExcel(InputStream inputStream) { public void insertarDesdeExcel(InputStream inputStream) {
String query = "INSERT INTO PLANANUAL (NOMEQUIPO, AREA, MONITOR, TECLADO, MOUSE, " + String query = "INSERT INTO PLANANUAL (NOMEQUIPO, AREA, MONITOR, TECLADO, MOUSE, " +
@ -740,7 +722,6 @@ public class DatabaseService {
} }
} }
// INSERTAR NUEVO EQUIPO INDIVIDUAL EN PLANANUAL // INSERTAR NUEVO EQUIPO INDIVIDUAL EN PLANANUAL
public void insertarNuevoEquipo(String nomequipo, String area, boolean monitor, boolean teclado, public void insertarNuevoEquipo(String nomequipo, String area, boolean monitor, boolean teclado,
boolean mouse, boolean regulador, boolean cpu, boolean impresora, boolean mouse, boolean regulador, boolean cpu, boolean impresora,
@ -787,7 +768,6 @@ public class DatabaseService {
} }
// Método auxiliar para obtener un valor de tipo Date de una celda // Método auxiliar para obtener un valor de tipo Date de una celda
private Date getDateCellValue(Cell cell) { private Date getDateCellValue(Cell cell) {
if (cell != null) { if (cell != null) {
@ -843,7 +823,6 @@ public class DatabaseService {
return false; // Valor por defecto si la celda es nula return false; // Valor por defecto si la celda es nula
} }
/* ----------------Actualizar los detalles del del mantenimiento por ID ---------------- */ /* ----------------Actualizar los detalles del del mantenimiento por ID ---------------- */
public boolean actualizarPlanAnual(int planAnualId, String nombreEquipo) { public boolean actualizarPlanAnual(int planAnualId, String nombreEquipo) {
String sql = "UPDATE PLANANUAL SET NOMEQUIPO=? WHERE PLANANUALID=?"; String sql = "UPDATE PLANANUAL SET NOMEQUIPO=? WHERE PLANANUALID=?";
@ -885,7 +864,6 @@ public class DatabaseService {
} }
} }
/* ----------------Actualizar los detalles del hardaware por ID ---------------- */ /* ----------------Actualizar los detalles del hardaware por ID ---------------- */
public boolean actualizarHardwareDetalle(HardwareDetalle detalle) { public boolean actualizarHardwareDetalle(HardwareDetalle detalle) {
String sql = "UPDATE HARDWAREDET SET MODELO=?, NUMSERIE=?, PLACA=? WHERE HARDWAREDETID=?"; String sql = "UPDATE HARDWAREDET SET MODELO=?, NUMSERIE=?, PLACA=? WHERE HARDWAREDETID=?";
@ -902,7 +880,6 @@ public class DatabaseService {
} }
} }
/* ----------------Actualizar las actualizaciones de seguridad por ID ---------------- */ /* ----------------Actualizar las actualizaciones de seguridad por ID ---------------- */
public boolean actualizarActualizacionSeg(ActualizacioneSeguridadModel actualizacion) { public boolean actualizarActualizacionSeg(ActualizacioneSeguridadModel actualizacion) {
String sql = "UPDATE ACTUALIZACIONESSEG SET OTRASACTUALIZACIONES=? WHERE ACTUALIZACIONSEGID=?"; String sql = "UPDATE ACTUALIZACIONESSEG SET OTRASACTUALIZACIONES=? WHERE ACTUALIZACIONSEGID=?";
@ -917,7 +894,6 @@ public class DatabaseService {
} }
} }
/* ---------------- Insertar en bitacora ---------------- */ /* ---------------- Insertar en bitacora ---------------- */
public boolean insertarBitacora(int mantenimientoid, String usuarioid, LocalDate fechora, String motivo) { public boolean insertarBitacora(int mantenimientoid, String usuarioid, LocalDate fechora, String motivo) {
String query = "INSERT INTO BITACORACTUALIZACIONES (MANTENIMIENTOID, USUARIOID, FECHORA, MOTIVO) VALUES (?, ?, ?, ?)"; String query = "INSERT INTO BITACORACTUALIZACIONES (MANTENIMIENTOID, USUARIOID, FECHORA, MOTIVO) VALUES (?, ?, ?, ?)";
@ -934,7 +910,6 @@ public class DatabaseService {
} }
} }
/* ---------------- Insertar en bitacora de eliminacion de equipos ---------------- */ /* ---------------- Insertar en bitacora de eliminacion de equipos ---------------- */
public boolean insertarBitacoraEliminacion(int plananualid, String usuarioid, LocalDate fechora, String motivo) { public boolean insertarBitacoraEliminacion(int plananualid, String usuarioid, LocalDate fechora, String motivo) {
String query = "INSERT INTO BITACORAELIMINACIONES (PLANANUALID, USUARIOID, FECHAHORA, MOTIVO) VALUES (?, ?, ?, ?)"; String query = "INSERT INTO BITACORAELIMINACIONES (PLANANUALID, USUARIOID, FECHAHORA, MOTIVO) VALUES (?, ?, ?, ?)";
@ -951,7 +926,6 @@ public class DatabaseService {
} }
} }
/* ---------------- Eliminar equipo de PLAN ANUAL ---------------- */ /* ---------------- Eliminar equipo de PLAN ANUAL ---------------- */
public void eliminarEquipoPlanAnual(int planAnualId) { public void eliminarEquipoPlanAnual(int planAnualId) {
String sql = "DELETE FROM PLANANUAL WHERE PLANANUALID = ?"; String sql = "DELETE FROM PLANANUAL WHERE PLANANUALID = ?";
@ -972,7 +946,6 @@ public class DatabaseService {
} }
/*************************************** ENCUESTAS ******************************************************************************************************/ /*************************************** ENCUESTAS ******************************************************************************************************/
public List<Pregunta> getPreguntas() { public List<Pregunta> getPreguntas() {
List<Pregunta> preguntas = new ArrayList<>(); List<Pregunta> preguntas = new ArrayList<>();
@ -1003,7 +976,6 @@ public class DatabaseService {
return preguntas; return preguntas;
} }
public void insertRespuestas(int manteniminetoId, List<Respuesta> respuestas, int empleadoid, String comentarios, String token) { public void insertRespuestas(int manteniminetoId, List<Respuesta> respuestas, int empleadoid, String comentarios, String token) {
String insertQuery = """ String insertQuery = """
@ -1067,7 +1039,6 @@ public class DatabaseService {
} }
} }
public String crearTokenEncuesta(int mantenimientoid) { public String crearTokenEncuesta(int mantenimientoid) {
String token = UUID.randomUUID().toString(); String token = UUID.randomUUID().toString();
Timestamp expira = new Timestamp(System.currentTimeMillis() + (24 * 60 * 60 * 1000)); Timestamp expira = new Timestamp(System.currentTimeMillis() + (24 * 60 * 60 * 1000));


+ 7
- 11
src/main/java/mx/gob/jumapacelaya/services/EmailService.java View File

@ -1,21 +1,14 @@
package mx.gob.jumapacelaya.services; package mx.gob.jumapacelaya.services;
import com.vaadin.flow.component.notification.Notification;
import jakarta.activation.DataSource;
import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMessage;
import jakarta.mail.util.ByteArrayDataSource;
import mx.gob.jumapacelaya.models.Usuario;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMailMessage;
import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File;
import java.io.InputStream;
@Service @Service
public class EmailService { public class EmailService {
@ -23,10 +16,12 @@ public class EmailService {
@Autowired @Autowired
private JavaMailSender mailSender; private JavaMailSender mailSender;
private static final Logger log = LoggerFactory.getLogger(EmailService.class);
public void enviarCorreo(String destinatario, String asunto, String cuerpo, String imagePath) { public void enviarCorreo(String destinatario, String asunto, String cuerpo, String imagePath) {
try { try {
MimeMessage mensaje = mailSender.createMimeMessage(); MimeMessage mensaje = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mensaje, true);
MimeMessageHelper helper = new MimeMessageHelper(mensaje, true, "UTF-8");
helper.setTo(destinatario); helper.setTo(destinatario);
helper.setSubject(asunto); helper.setSubject(asunto);
helper.setFrom("noreply@jumapacelaya.gob.mx"); helper.setFrom("noreply@jumapacelaya.gob.mx");
@ -37,7 +32,8 @@ public class EmailService {
helper.addInline("image_id", imgResource); helper.addInline("image_id", imgResource);
mailSender.send(mensaje); mailSender.send(mensaje);
System.out.println("Correo enviado con imagen exitosamente");
log.info("Correo enviado a {}", destinatario);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();


+ 62
- 3
src/main/java/mx/gob/jumapacelaya/ui/PlanAnualView.java View File

@ -46,11 +46,13 @@ 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.models.encuestas.MantenimientosSinEncuesta;
import mx.gob.jumapacelaya.services.DatabaseService; import mx.gob.jumapacelaya.services.DatabaseService;
import mx.gob.jumapacelaya.services.EmailService;
import mx.gob.jumapacelaya.services.ReportService; import mx.gob.jumapacelaya.services.ReportService;
import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrint;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
@ -73,6 +75,9 @@ import java.util.stream.IntStream;
@CssImport("./themes/sistema-mantenimiento/styles.css") @CssImport("./themes/sistema-mantenimiento/styles.css")
public class PlanAnualView extends VerticalLayout { public class PlanAnualView extends VerticalLayout {
private final EmailService emailService;
@Value("${app.base-url}")
private String baseUrl;
private final Environment env; private final Environment env;
private final ReportService reportService; private final ReportService reportService;
@ -93,7 +98,7 @@ public class PlanAnualView extends VerticalLayout {
private Popover reportePopover; private Popover reportePopover;
ComboBox<Integer> yearFilter; ComboBox<Integer> yearFilter;
public PlanAnualView(DatabaseService databaseService, Environment env, ReportService reportService) {
public PlanAnualView(DatabaseService databaseService, Environment env, ReportService reportService, EmailService emailService) {
this.databaseService = databaseService; this.databaseService = databaseService;
this.env = env; this.env = env;
this.reportService = reportService; this.reportService = reportService;
@ -234,6 +239,7 @@ public class PlanAnualView extends VerticalLayout {
this.setSizeFull(); this.setSizeFull();
add(filtrosLayout, uploadLayout); add(filtrosLayout, uploadLayout);
add(gridLayout); add(gridLayout);
this.emailService = emailService;
} }
private void setupHeader() { private void setupHeader() {
@ -1067,7 +1073,7 @@ public class PlanAnualView extends VerticalLayout {
private void showEncuestasDialog(String mes, int anio) { private void showEncuestasDialog(String mes, int anio) {
Dialog dialog = new Dialog(); Dialog dialog = new Dialog();
dialog.setWidth("80%");
dialog.setWidth("90%");
dialog.setHeight("90%"); dialog.setHeight("90%");
dialog.setHeaderTitle("Encuestas pendientes por enviar..."); dialog.setHeaderTitle("Encuestas pendientes por enviar...");
@ -1097,15 +1103,68 @@ public class PlanAnualView extends VerticalLayout {
.setHeader("Correo") .setHeader("Correo")
.setAutoWidth(true); .setAutoWidth(true);
grid.addComponentColumn(item -> {
Button btnEnviar = new Button(
"Enviar",
LineAwesomeIcon.ENVELOPE_SOLID.create()
);
btnEnviar.addThemeVariants(ButtonVariant.LUMO_PRIMARY,
ButtonVariant.LUMO_SUCCESS);
btnEnviar.addClickListener(e -> {
enviarEncuestaDesdeGrid(item);
btnEnviar.setEnabled(false);
});
return btnEnviar;
}).setHeader("Accion");
List<MantenimientosSinEncuesta> lista = databaseService.getEncuestPendientes(mes, anio); List<MantenimientosSinEncuesta> lista = databaseService.getEncuestPendientes(mes, anio);
grid.setItems(lista); grid.setItems(lista);
dialog.add(grid); dialog.add(grid);
dialog.getFooter().add(new Button("Cerrar", e -> dialog.close()));
dialog.getFooter().add(new Button("Cerrar", LineAwesomeIcon.TIMES_SOLID.create(), e -> dialog.close()));
dialog.open(); dialog.open();
} }
private void enviarEncuestaDesdeGrid(MantenimientosSinEncuesta item) {
if (item.getEmail() == null || item.getEmail().isBlank()) {
Notification.show("El usuario no tiene correo", 3000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_ERROR);
return;
}
int mantenimientoId = item.getMantenimientoId();
String token = databaseService.crearTokenEncuesta(mantenimientoId);
String linkEncuesta = baseUrl + "/encuesta?token=" + token;
String cuerpo = """
<html>
<body>
<a href="%s">
<img src="cid:image_id"/>
</a>
</body>
</html>
""".formatted(linkEncuesta);
String asunto = "Encuesta de satisfacción - Mantenimiento #" + mantenimientoId;
String imagePath = "META-INF/resources/images/imgCorreo/imgEncuesta.png";
emailService.enviarCorreo(
item.getEmail(),
asunto,
cuerpo,
imagePath
);
Notification.show("Encuesta enviada correctamente", 3000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_SUCCESS);
}
private ComponentRenderer<Span, MantenimientosSinEncuesta> createStatusRender() { private ComponentRenderer<Span, MantenimientosSinEncuesta> createStatusRender() {
return new ComponentRenderer<>(encuesta -> { return new ComponentRenderer<>(encuesta -> {
Span span = new Span(encuesta.getEncuesta()); Span span = new Span(encuesta.getEncuesta());


Loading…
Cancel
Save