From 58af4c2d311baf140083fd4ac2cfc17ae5fcfb21 Mon Sep 17 00:00:00 2001 From: mramirezg Date: Thu, 14 Nov 2024 16:20:38 -0600 Subject: [PATCH] Ya se envian los correos electronicos cuando se selecciona a un usuario en el ComboBox --- pom.xml | 9 +++++ .../mx/gob/jumapacelaya/models/Usuario.java | 12 +++++- .../services/DatabaseService.java | 13 +++---- .../jumapacelaya/services/EmailService.java | 30 +++++++++++++++ .../jumapacelaya/ui/MantenimientoView.java | 38 ++++++++++++++++++- src/main/resources/application.properties | 21 +++++++++- 6 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 src/main/java/mx/gob/jumapacelaya/services/EmailService.java diff --git a/pom.xml b/pom.xml index 3ce8ff4..42afd72 100644 --- a/pom.xml +++ b/pom.xml @@ -82,21 +82,30 @@ + org.springframework.boot spring-boot-starter-jdbc + mysql mysql-connector-java 8.0.33 + com.oracle.database.jdbc ojdbc8 + + + org.springframework.boot + spring-boot-starter-mail + + org.springframework.boot spring-boot-starter-security diff --git a/src/main/java/mx/gob/jumapacelaya/models/Usuario.java b/src/main/java/mx/gob/jumapacelaya/models/Usuario.java index d9e4c91..c368290 100644 --- a/src/main/java/mx/gob/jumapacelaya/models/Usuario.java +++ b/src/main/java/mx/gob/jumapacelaya/models/Usuario.java @@ -3,10 +3,12 @@ package mx.gob.jumapacelaya.models; public class Usuario { private String empleadoId; private String nombre; + private String email; - public Usuario(String empleadoId, String nombre) { + public Usuario(String empleadoId, String nombre, String email) { this.empleadoId = empleadoId; this.nombre = nombre; + this.email = email; } public String getEmpleadoId() { @@ -25,6 +27,14 @@ public class Usuario { this.nombre = nombre; } + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + @Override public String toString() { diff --git a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java index d512264..4bf867a 100644 --- a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java +++ b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java @@ -81,19 +81,18 @@ public class DatabaseService { /* -------------- Metodo para obtener a los usuarios ---------------- */ public List getUsuarios() { List usuarios = new ArrayList<>(); - String query = "SELECT u.*, e.EMAIL \n" + - "FROM ADMON.USUARIOS u\n" + - "INNER JOIN ADMON.EMPLEADOS e ON\n" + - "u.EMPLEADOID = e.EMPLEADOID"; + String query = "SELECT u.* \n" + + "FROM Mantenimientos.USUARIOS u;"; - try (Connection connection = getOracleConnection(); + try (Connection connection = getMysqlConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(query)) { while (resultSet.next()) { Usuario usuario = new Usuario( resultSet.getString("empleadoid"), - resultSet.getString("nombre") + resultSet.getString("nombre"), + resultSet.getString("correo") ); usuarios.add(usuario); } @@ -327,7 +326,7 @@ public class DatabaseService { // INSERTAR EN LA TABLA: ACTUALIZACIONESSEG public boolean insertActualizacionSeg(String descripcion, String otras, int mantenimientoId) { - String query = "INSERT INTO ACTUALIZACIONESSEG (actualizacion, otrasactualizaciones, mantenimientoid) VALUES (?, ?, ?)"; + String query = "INSERT INTO ACTUALIZACIONESSEG (descripcion, otrasactualizaciones, mantenimientoid) VALUES (?, ?, ?)"; try (Connection connection = getMysqlConnection(); PreparedStatement preparedStatement = connection.prepareStatement(query)) { diff --git a/src/main/java/mx/gob/jumapacelaya/services/EmailService.java b/src/main/java/mx/gob/jumapacelaya/services/EmailService.java new file mode 100644 index 0000000..a2eb270 --- /dev/null +++ b/src/main/java/mx/gob/jumapacelaya/services/EmailService.java @@ -0,0 +1,30 @@ +package mx.gob.jumapacelaya.services; + +import com.vaadin.flow.component.notification.Notification; +import mx.gob.jumapacelaya.models.Usuario; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +@Service +public class EmailService { + + @Autowired + private JavaMailSender mailSender; + + public void enviarCorreo(String destinatario, String asunto, String cuerpo) { + SimpleMailMessage mensaje = new SimpleMailMessage(); + mensaje.setTo(destinatario); + mensaje.setSubject(asunto); + mensaje.setText(cuerpo); + mensaje.setFrom("noreply@jumapacelaya.gob.mx"); + + try { + mailSender.send(mensaje); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Error al enviar el correo: " + e.getMessage()); + } + } +} diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java index 5b62d0d..52968ae 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java @@ -1,5 +1,6 @@ package mx.gob.jumapacelaya.ui; +import com.mysql.cj.log.Log; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.UI; import com.vaadin.flow.component.button.ButtonVariant; @@ -33,8 +34,10 @@ import mx.gob.jumapacelaya.models.TiposHardware; import mx.gob.jumapacelaya.models.TiposMantenimiento; import mx.gob.jumapacelaya.models.Usuario; import mx.gob.jumapacelaya.services.DatabaseService; +import mx.gob.jumapacelaya.services.EmailService; import mx.gob.jumapacelaya.services.SecurityService; import mx.gob.jumapacelaya.services.UserService; +import org.springframework.beans.factory.annotation.Autowired; import java.time.LocalDate; import java.util.*; @@ -59,6 +62,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse private final ComboBox usuario; private final TextField nombreEquipo; private final UserService userService; + private final EmailService emailService; private RadioButtonGroup formaGroup; private CheckboxGroup actualizaciones; private final HorizontalLayout botonesLayout; @@ -72,7 +76,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse Span userSignSpan = new Span("Nombre Usuario"); - public MantenimientoView(UserService userService, SecurityService securityService) { + public MantenimientoView(UserService userService, SecurityService securityService, EmailService emailService) { this.databaseService = new DatabaseService(); this.controlsLayout = new VerticalLayout(); this.actualizacionesLayout = new VerticalLayout(); @@ -80,6 +84,8 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse this.firmasLayout = new HorizontalLayout(); this.botonesLayout = new HorizontalLayout(); this.securityService = securityService; + this.userService = userService; + this.emailService = emailService; HorizontalLayout fechaLayout = new HorizontalLayout(); //Componentes de texto @@ -171,6 +177,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse }); + this.nombreEquipo = new TextField("Nombre del Equipo"); nombreEquipo.setRequired(true); @@ -186,7 +193,6 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse add(fechaLayout, departamentoLayout, controlsLayout, actualizacionesLayout, etiquetaLayout, firmasLayout, botonesLayout); - this.userService = userService; } @@ -492,6 +498,8 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse String smtSignatureBase64 = Base64.getEncoder().encodeToString(smtSignatureBytes); String gciaSignatureBase64 = Base64.getEncoder().encodeToString(gciatiSignatureBytes); + + // Aqui se manda llamar al metodo de insertar mantenimiento en DatabaseService y se le pasan los argumentos necesarios int isInserted = databaseService.insertarMantenimiento( fechaSeleccionada, tipoMantId, departamentoId, empleadoId, formaMantt, equipoId, userSignatureBase64, smtSignatureBase64, gciaSignatureBase64, planAnualvalue); @@ -589,6 +597,15 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse Notification.show("!!Mantenimiento guardado exitosamente!!", 4000, Notification.Position.MIDDLE) .addThemeVariants(NotificationVariant.LUMO_SUCCESS); + // Envio del correo electronico + try { + enviarCorreo(); // Intento de envío de correo + } catch (Exception e) { + Notification.show("Error al enviar el correo", 4000, Notification.Position.MIDDLE) + .addThemeVariants(NotificationVariant.LUMO_ERROR); + e.printStackTrace(); // Registro de error para diagnóstico + } + fecha.clear(); txtPlananualID.clear(); tipoMantt.clear(); @@ -607,6 +624,7 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse } else { Notification.show("Error al guardar el mantenimeinto", 4000, Notification.Position.MIDDLE); } + }); buttonsLayout.setSizeFull(); @@ -615,6 +633,22 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse } + // METODO PARA ENVIAR CORREOS ELECTRONICOS + private void enviarCorreo() { + Usuario usuarioSeleccionado = usuario.getValue(); + if (usuarioSeleccionado != null && usuarioSeleccionado.getEmail() != null) { + String destinatario = usuarioSeleccionado.getEmail(); + String asunto = "Mantenimiento de Equipo de Computo"; + String cuerpo = "Buen día, les hacemos llegar por medio de este correo electrónico una notificación de que su mantenimiento (preventivo/correctivo) se realizo con éxito. Si desea tener una copia del formato, favor de mandar correo electrónico directamente a la Lic. David"; + + emailService.enviarCorreo(destinatario, asunto, cuerpo); + + } else { + Notification.show("Por favor selecciona un usuario", 4000, Notification.Position.MIDDLE); + } + } + + @Override public void beforeEnter(BeforeEnterEvent beforeEnterEvent) { String fechaParam = beforeEnterEvent.getLocation().getQueryParameters().getParameters().get("fecha") != null diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e0bc924..2a69ff8 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,7 +14,7 @@ spring.jpa.defer-datasource-initialization = true spring.ldap.urls=ldap://172.1.0.1:389 spring.ldap.base=DC=JUMAPACELAYA,DC=GOB,DC=MX spring.ldap.username=administrator -spring.ldap.password=Dr3na%134$4guA +spring.ldap.password=Dr3na$134%4guA ###################PRODUCTIVO#################### redmine.url=https://proyman.jumapacelaya.gob.mx/ @@ -26,16 +26,33 @@ redmine.api_key=ce4dc8b6b531c818017e6831a5732ccc15b8faf6 #redmine.api_key=bada7949fd4d879cbd98eb645ae4b88603bf77d0 + + #Conexion a la base de datos principal (escritura) MySQL -spring.datasource.url=jdbc:mysql://mhdb.jumapacelaya.gob.mx:33006/Mantenimientos +spring.datasource.url=jdbc:mysql://185.196.20.240:33006/Mantenimientos spring.datasource.username=root spring.datasource.password=mantenimientos spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + + #Conexion a la base de datos secundaria (lectura) Oracle spring.datasource.secondary.url=jdbc:oracle:thin:@//svradminfinan:1521/admfinpdb.JUMAPACELAYA.GOB.MX spring.datasource.secondary.username=Finanzas spring.datasource.secondary.password=finanzas spring.datasource.secondary.driver-class-name=oracle.jdbc.OracleDriver + + + +#Conexion al servidor de correo electronico +spring.mail.host=correo.jumapacelaya.gob.mx +spring.mail.port=587 +spring.mail.username=noreply@jumapacelaya.gob.mx +spring.mail.password=Div#13AJum$17 +spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=false +spring.mail.properties.mail.smtp.ssl.trust=correo.jumapacelaya.gob.mx + +