diff --git a/src/main/bundles/prod.bundle b/src/main/bundles/prod.bundle
index 8cd2200..027d69c 100644
Binary files a/src/main/bundles/prod.bundle and b/src/main/bundles/prod.bundle differ
diff --git a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
index b84dfb2..fd91748 100644
--- a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
+++ b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
@@ -1048,7 +1048,7 @@ public class DatabaseService {
ZonedDateTime ahora = ZonedDateTime.now(zonaMX);
ZonedDateTime fechaExp = ahora;
- int diasPorSumar = 3;
+ int diasPorSumar = 5;
while (diasPorSumar > 0) {
fechaExp = fechaExp.plusDays(1);
if (!(fechaExp.getDayOfWeek() == DayOfWeek.SATURDAY ||
@@ -1079,6 +1079,31 @@ public class DatabaseService {
}
}
+ public String getTokenPorMtto(int mantenimientoid) {
+ String query = """
+ select e.TOKEN
+ from ENCUESTATOKENS e
+ where e.MANTENIMIENTOID = ?
+ """;
+
+ try(Connection conn = getMysqlConnection();
+ PreparedStatement ps = conn.prepareStatement(query)) {
+
+ ps.setInt(1, mantenimientoid);
+
+ try (ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ return rs.getString("TOKEN");
+ }
+ }
+ } catch (SQLException e) {
+ logger.error("Error al obtener el token de encuesta: ", e);
+ throw new RuntimeException("Error en DB", e);
+ }
+
+ return null;
+ }
+
public Integer validarTokenYObtenerId(String token) {
String query = "SELECT MANTENIMIENTOID FROM ENCUESTATOKENS " +
"WHERE TOKEN = ? AND FECHAEXPIRACION > NOW() AND USADO = FALSE";
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
index 131e4fd..304d6e6 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java
@@ -535,31 +535,43 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
}
- // METODO PARA ENVIAR LOS CORREOS ELECTRONICOS
private void enviarCorreo() {
Usuario usuarioDestino = cbUsuario.getValue();
- if (usuarioDestino != null && usuarioDestino.getEmail() != null) {
- try {
- String token = service.crearTokenEncuesta(mantenimientoIdActual);
-
- String destinatario = usuarioDestino.getEmail();
- String asunto = "Encuesta de satisfacción - Mantenimiento #" + mantenimientoIdActual;
- String linkEncuesta = baseUrl + "/encuesta?token=" + token;
- String cuerpo = "
";
- String imagePath = "META-INF/resources/images/imgCorreo/imgEncuesta.png";
+ if (usuarioDestino == null || usuarioDestino.getEmail() == null) {
+ Notification.show("Por favor, selecciona un usuario destino", 3000, Notification.Position.MIDDLE);
+ return;
+ }
- emailService.enviarCorreo(destinatario, asunto, cuerpo, imagePath);
+ String tokenExistente = service.getTokenPorMtto(mantenimientoIdActual);
- Notification.show("Encuesta enviada correctamente", 3000, Notification.Position.BOTTOM_END)
- .addThemeVariants(NotificationVariant.LUMO_SUCCESS);
+ if (tokenExistente != null) {
+ showNotiReenvio(usuarioDestino, tokenExistente);
+ } else {
+ try {
+ String nuevoToken = service.crearTokenEncuesta(mantenimientoIdActual);
} catch (Exception e) {
- Notification.show("Error: No se pudo enviar. Es probable que ya exista una encuesta generada.",
- 5000, Notification.Position.MIDDLE)
+ Notification.show("Error al generar la encuesta: " + e.getMessage(), 5000, Notification.Position.MIDDLE)
.addThemeVariants(NotificationVariant.LUMO_ERROR);
}
- } else {
- Notification.show("Por favor, seleccione un usuario destino", 3000, Notification.Position.MIDDLE);
+ }
+ }
+
+ private void ejecutarEnvio(Usuario usuario, String token) {
+ try {
+ String destinatario = usuario.getEmail();
+ String asunto = "Encuesta de satisfacción - Mantenimiento #" + mantenimientoIdActual;
+ String linkEncuesta = baseUrl + "/encuesta?token=" + token;
+ String cuerpo = "
";
+ String imagePath = "META-INF/resources/images/imgCorreo/imgEncuesta.png";
+
+ emailService.enviarCorreo(destinatario, asunto, cuerpo, imagePath);
+
+ Notification.show("Encuesta enviada correctamente", 3000, Notification.Position.BOTTOM_END)
+ .addThemeVariants(NotificationVariant.LUMO_SUCCESS);
+ } catch (Exception e) {
+ Notification.show("Error al enviar el correo: " + e.getMessage(), 5000, Notification.Position.MIDDLE)
+ .addThemeVariants(NotificationVariant.LUMO_ERROR);
}
}
@@ -684,4 +696,30 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser
}
}
}
+
+
+
+ private void showNotiReenvio(Usuario usuario, String tokenExistente) {
+ Notification ntf = new Notification();
+ ntf.setDuration(0);
+ ntf.setPosition(Notification.Position.MIDDLE);
+ ntf.addThemeVariants(NotificationVariant.LUMO_WARNING);
+
+ Span text = new Span("Atención: Ya se ha enviado una encuesta para este mantenimiento. ¿Deseas reenviar el link actual?");
+
+ Button reenvioBtn = new Button("Reenviar", new Icon("lumo", "reload"), event -> {
+ ejecutarEnvio(usuario, tokenExistente);
+ ntf.close();
+ });
+ reenvioBtn.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+
+ Button cancelBtn = new Button(new Icon("lumo", "cross"), event -> ntf.close());
+ cancelBtn.addThemeVariants(ButtonVariant.LUMO_TERTIARY_INLINE);
+
+ HorizontalLayout layout = new HorizontalLayout(text, reenvioBtn, cancelBtn);
+ layout.setAlignItems(Alignment.CENTER);
+
+ ntf.add(layout);
+ ntf.open();
+ }
}
\ No newline at end of file