diff --git a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
index ed01772..e3eee9d 100644
--- a/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
+++ b/src/main/java/mx/gob/jumapacelaya/services/DatabaseService.java
@@ -209,6 +209,54 @@ public class DatabaseService {
}
+ /* ----------------Obtener el Plan Anual de Mantenimiento por ID ---------------- */
+ public PlanAnual getPlanAnualPorId(int id) {
+ String query = "SELECT p.plananualid, p.nomEquipo, p.area,\n" +
+ " p.monitor, p.teclado, p.mouse, p.regulador,\n" +
+ " p.cpu, p.impresora, p.miniPrint, p.laptop, p.escaner,\n" +
+ " p.fechaprog, m.fecha AS fechaMantenimiento,\n" +
+ " me.NOMBRE AS MESPLANEADO, p.tecnicosmt, p.estado,\n" +
+ " COALESCE(v.SITUACION, 'NO REALIZADO') AS SITUACION\n" +
+ " FROM PLANANUAL p\n" +
+ " LEFT JOIN MANTENIMIENTOS m ON p.plananualid = m.plananualid\n" +
+ " LEFT JOIN MESES me ON p.MESID = me.MESID\n" +
+ " LEFT JOIN VW_SITUACION_MANTENIMIENTO v ON v.PLANANUALID = p.PLANANUALID\n" +
+ " where p.plananualid = ?";
+ try (Connection connection = getMysqlConnection();
+ PreparedStatement statement = connection.prepareStatement(query)) {
+
+ statement.setInt(1, id);
+ try (ResultSet resultSet = statement.executeQuery()) {
+ if (resultSet.next()) {
+ return new PlanAnual(
+ resultSet.getInt("plananualid"),
+ resultSet.getString("nomEquipo"),
+ resultSet.getString("area"),
+ resultSet.getBoolean("monitor"),
+ resultSet.getBoolean("teclado"),
+ resultSet.getBoolean("mouse"),
+ resultSet.getBoolean("regulador"),
+ resultSet.getBoolean("cpu"),
+ resultSet.getBoolean("impresora"),
+ resultSet.getBoolean("miniPrint"),
+ resultSet.getBoolean("laptop"),
+ resultSet.getBoolean("escaner"),
+ resultSet.getDate("fechaprog").toLocalDate(), // Cambiado a LocalDate
+ resultSet.getDate("fechaMantenimiento") != null ? resultSet.getDate("fechaMantenimiento").toLocalDate() : null, // Cambiado a LocalDate
+ resultSet.getString("mesplaneado"),
+ resultSet.getString("tecnicosmt"),
+ resultSet.getString("estado"),
+ resultSet.getString("SITUACION")
+ );
+ }
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
/* ----------------Obtener detalles del mantenimiento ---------------- */
public DetalleMantenimientoModel getDetalleMantenimientoPorPlanAnualId(int planAnualId) {
@@ -339,10 +387,10 @@ public class DatabaseService {
// INSERTAR EN TABLA: MANTENIMINETOS
public int insertarMantenimiento(LocalDate fecha, String tipoMantId, String departamentoId, String empleadoId,
String formaMant, String equipoId, String userSignatureBase64,
- String smtSignatureBase64, String planAnualId) {
+ String smtSignatureBase64, String planAnualId, String justificacion) {
String query = "INSERT INTO MANTENIMIENTOS (fecha, tipoMantId, departamentoId, empleadoId, formaMant, nombreequipo," +
- " firmaUsuario, firmaSmt, planAnualId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ " firmaUsuario, firmaSmt, planAnualId, justificacion) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
String updateStatusQuery = "UPDATE PLANANUAL SET estado = 'REALIZADO' WHERE planAnualId = ?";
@@ -382,6 +430,7 @@ public class DatabaseService {
}
preparedStatement.setLong(9, Long.parseLong(planAnualId));
+ preparedStatement.setString(10, justificacion);
preparedStatement.executeUpdate();
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MainLayout.java b/src/main/java/mx/gob/jumapacelaya/ui/MainLayout.java
index 6627c72..3150b8a 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/MainLayout.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/MainLayout.java
@@ -44,7 +44,7 @@ public class MainLayout extends AppLayout {
String u = securityService.getAuthenticatedUser();
- Span usrNameLabel = new Span("Hola " + u);
+ Span usrNameLabel = new Span(u);
usrNameLabel.getStyle().set("color", "#691b31");
usrNameLabel.getStyle().set("font-weight", "bold");
usrNameLabel.getStyle().set("font-size", "20px");
@@ -88,7 +88,7 @@ public class MainLayout extends AppLayout {
nav.addItem(new SideNavItem("Plan Anual", PlanAnualView.class, VaadinIcon.CALENDAR.create()));
nav.addItem(new SideNavItem("Listado de Actividades", ActDiariaView.class, VaadinIcon.EDIT.create()));
- nav.addItem(new SideNavItem("Mantenimiento", MantenimientoView.class, VaadinIcon.WRENCH.create()));
+ //nav.addItem(new SideNavItem("Mantenimiento", MantenimientoView.class, VaadinIcon.WRENCH.create()));
nav.getStyle().set("background-color", "white");
nav.getStyle().set("border-radius", "5px");
nav.getStyle().set("opacity", "0.9");
diff --git a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
index fe8b98e..2154e7d 100644
--- a/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
+++ b/src/main/java/mx/gob/jumapacelaya/ui/MantenimientoView.java
@@ -7,6 +7,7 @@ import com.vaadin.flow.component.checkbox.CheckboxGroup;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.html.H2;
import com.vaadin.flow.component.html.Image;
@@ -29,10 +30,7 @@ import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import de.f0rce.signaturepad.SignaturePad;
import jakarta.annotation.security.PermitAll;
-import mx.gob.jumapacelaya.models.DepartamentosModel;
-import mx.gob.jumapacelaya.models.TiposHardware;
-import mx.gob.jumapacelaya.models.TiposMantenimiento;
-import mx.gob.jumapacelaya.models.Usuario;
+import mx.gob.jumapacelaya.models.*;
import mx.gob.jumapacelaya.services.DatabaseService;
import mx.gob.jumapacelaya.services.EmailService;
import mx.gob.jumapacelaya.services.SecurityService;
@@ -74,6 +72,10 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
private SignaturePad userSignPad;
private SignaturePad smtSignPad;
//private SignaturePad gciatiSignPad;
+ private PlanAnual planAnualActual;
+ private LocalDate fechaProgramada;
+ private LocalDate fechaSeleccionada;
+ private TextArea jsutificacion;
Span userSignSpan = new Span("Nombre Usuario");
@@ -496,209 +498,244 @@ public class MantenimientoView extends VerticalLayout implements BeforeEnterObse
btnGuardar.addClickListener(event -> {
- LocalDate fechaSeleccionada = fecha.getValue();
- TiposMantenimiento tiposMantenimiento = tipoMantt.getValue();
- String tipoMantId = tiposMantenimiento != null ? tiposMantenimiento.getTipomantId() : null;
- String planAnualValue = txtPlananualID.getValue();
+ if (planAnualActual == null) {
+ Notification.show("No se pudo cargar el Plan Anual. Verifica el ID.", 4000, Notification.Position.MIDDLE)
+ .addThemeVariants(NotificationVariant.LUMO_ERROR);
+ }
- DepartamentosModel departamentoSeleccionado = area.getValue();
- String departamentoId = departamentoSeleccionado != null ? departamentoSeleccionado.getDepartamentoId().toString() : null;
+ if (planAnualActual != null) {
+ fechaProgramada = planAnualActual.getFechaProgramada();
+ fechaSeleccionada = fecha.getValue();
+ boolean mismoMes = fechaSeleccionada != null &&
+ fechaSeleccionada.getMonthValue() == fechaProgramada.getMonthValue() &&
+ fechaSeleccionada.getYear() == fechaProgramada.getYear();
+
+ if (!mismoMes) {
+ Dialog confirmDialog = new Dialog();
+ Span aviso = new Span("El mantenimiento esta fuera de tiempo, justifique el motivo");
+ jsutificacion = new TextArea();
+ jsutificacion.setSizeFull();
+ Button btnSi = new Button("Guardar",LineAwesomeIcon.SAVE_SOLID.create(), e -> {
+ confirmDialog.close();
+ guardarMantenimiento();
+ });
+ btnSi.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+ VerticalLayout layout = new VerticalLayout(aviso, jsutificacion, btnSi);
+ layout.setSizeFull();
+ layout.setAlignItems(Alignment.CENTER);
+ confirmDialog.add(layout);
+ confirmDialog.open();
+ } else {
+ guardarMantenimiento();
+ }
+ }
+ });
- Usuario usuarioSeleccionado = usuario.getValue();
- String empleadoId = usuarioSeleccionado != null ? usuarioSeleccionado.getEmpleadoId().toString() : null;
- String equipoId = txtNombreEquipo.getValue();
+ buttonsLayout.setSizeFull();
+ buttonsLayout.add(btnGuardar);
+ buttonsLayout.setAlignItems(Alignment.CENTER);
+ botonesLayout.add(buttonsLayout);
+ botonesLayout.setSizeFull();
+ //botonesLayout.setAlignItems(Alignment.CENTER);
+ }
- String formaSeleccionada = formaGroup.getValue();
- String formaMantt = null;
- if ("Remota".equals(formaSeleccionada)) {
- formaMantt = "R";
- } else if ("Manual".equals(formaSeleccionada)) {
- formaMantt = "M";
- }
- // Validación de campos obligatorios
- if (fechaSeleccionada == null || tipoMantId == null || departamentoId == null || empleadoId == null ||
- equipoId == null || equipoId.trim().isEmpty() || formaMantt == null || planAnualValue == null || planAnualValue.trim().isEmpty()) {
- Notification.show("Por favor, completa todos los campos requeridos", 4000, Notification.Position.MIDDLE);
- return;
- }
+ // 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 REALIZADO";
+
+ String cuerpo = "" +
+ "
" +
+ "
"+
+ "" +
+ "";
+
+ String imagePath = "META-INF/resources/images/imgCorreo/correoMantt.png";
- byte[] userSignatureBytes = userSignPad.getImageBase64();
- byte[] smtSignatureBytes = smtSignPad.getImageBase64();
- //byte[] gciaSignatureBytes = gciatiSignPad.getImageBase64();
+ emailService.enviarCorreo(destinatario, asunto, cuerpo, imagePath);
- String userSignatureBase64 = Base64.getEncoder().encodeToString(userSignatureBytes);
- String smtSignatureBase64 = Base64.getEncoder().encodeToString(smtSignatureBytes);
- //String gciaSignatureBase64 = Base64.getEncoder().encodeToString(gciaSignatureBytes);
+ } else {
+ Notification.show("Por favor selecciona un usuario", 4000, Notification.Position.MIDDLE);
+ }
+ }
- if (esFirmaVacia(userSignatureBase64)) userSignatureBase64 = null;
- if (esFirmaVacia(smtSignatureBase64)) smtSignatureBase64 = null;
- //if (esFirmaVacia(gciaSignatureBase64)) gciaSignatureBase64 = null;
+ private void guardarMantenimiento() {
+ TiposMantenimiento tiposMantenimiento = tipoMantt.getValue();
+ String tipoMantId = tiposMantenimiento != null ? tiposMantenimiento.getTipomantId() : null;
+ String planAnualValue = txtPlananualID.getValue();
+ String justificacionValue = jsutificacion != null ? jsutificacion.getValue() : null;
- // Validación de campos de hardware
- List