From 7b5a395ad694b6e595c8d67eeea636c6d911904a Mon Sep 17 00:00:00 2001 From: mramirezg Date: Tue, 17 Jun 2025 13:39:39 -0600 Subject: [PATCH] Ya se muestran las firmas como imagenes, falta poder hacer una nueva firma en modo edicion --- .../gob/jumapacelaya/ui/DetallesMantView.java | 88 ++++++++++++++++++- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java index 1c6e1d4..b523274 100644 --- a/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java +++ b/src/main/java/mx/gob/jumapacelaya/ui/DetallesMantView.java @@ -17,6 +17,7 @@ import com.vaadin.flow.component.grid.Grid; import com.vaadin.flow.component.grid.GridVariant; import com.vaadin.flow.component.gridpro.GridPro; import com.vaadin.flow.component.html.H3; +import com.vaadin.flow.component.html.Image; import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.icon.Icon; import com.vaadin.flow.component.icon.VaadinIcon; @@ -32,6 +33,7 @@ import com.vaadin.flow.router.BeforeEnterObserver; 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.ActualizacioneSeguridadModel; import mx.gob.jumapacelaya.models.DepartamentosModel; @@ -40,6 +42,8 @@ import mx.gob.jumapacelaya.models.HardwareDetalle; import mx.gob.jumapacelaya.models.TiposMantenimiento; import mx.gob.jumapacelaya.models.Usuario; import mx.gob.jumapacelaya.services.DatabaseService; +import mx.gob.jumapacelaya.services.SecurityService; +import oracle.net.aso.f; @PageTitle("Detalles del mantenimiento") @Route(value = "detalles", layout = MainLayout.class) @@ -70,10 +74,22 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser private int planAnualIdActual; private int mantenimientoIdActual; private Dialog confirmDialog; + private SignaturePad userSignPad; + private SignaturePad smtSignPad; + private SignaturePad gciaSignPad; + private final HorizontalLayout firmasLAyout = new HorizontalLayout(); + + // Agrega estos atributos: + private VerticalLayout userSignLayout; + private VerticalLayout smtSignLayout; + private VerticalLayout gciaSignLayout; + + private final SecurityService securityService; DatabaseService service = new DatabaseService(); - public DetallesMantView() { + public DetallesMantView(SecurityService securityService) { + this.securityService = securityService; setPadding(true); mainLayout = new VerticalLayout(); @@ -284,7 +300,8 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser confirmDialog.getFooter().add(dialogButtons); - mainLayout.add(headerLayout,layout2,fechasLayout,layout3,gridHardware,gridActualizaciones,botonesLayout); + addSignatureSection(); + mainLayout.add(headerLayout,layout2,fechasLayout,layout3,gridHardware,gridActualizaciones,firmasLAyout,botonesLayout); add(mainLayout); } @@ -345,6 +362,37 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser } + private void addSignatureSection() { + // Usa los atributos de clase, no variables locales + userSignLayout = new VerticalLayout(); + userSignLayout.setWidthFull(); + userSignLayout.setAlignItems(Alignment.CENTER); + userSignPad = new SignaturePad(); + userSignPad.setHeight("200px"); + userSignLayout.add(userSignPad, new Span("Usuario Interno")); + + smtSignLayout = new VerticalLayout(); + smtSignLayout.setWidthFull(); + smtSignLayout.setAlignItems(Alignment.CENTER); + smtSignPad = new SignaturePad(); + smtSignPad.setHeight("200px"); + smtSignLayout.add(smtSignPad, new Span("Responsable de Soporte")); + + gciaSignLayout = new VerticalLayout(); + gciaSignLayout.setWidthFull(); + gciaSignLayout.setAlignItems(Alignment.CENTER); + gciaSignPad = new SignaturePad(); + gciaSignPad.setHeight("200px"); + gciaSignLayout.add(gciaSignPad, new Span("Gcia. de T.I")); + + firmasLAyout.removeAll(); + firmasLAyout.setWidthFull(); + firmasLAyout.setSpacing(false); + firmasLAyout.setJustifyContentMode(JustifyContentMode.CENTER); + firmasLAyout.add(userSignLayout, smtSignLayout, gciaSignLayout); + } + + @Override public void beforeEnter(BeforeEnterEvent event) { String idParam = event.getLocation().getQueryParameters().getParameters().get("id") != null @@ -392,6 +440,42 @@ public class DetallesMantView extends VerticalLayout implements BeforeEnterObser List listaActualizaciones = service.getActualizacionesSeg(mantId); gridActualizaciones.setItems(listaActualizaciones); gridActualizaciones.setVisible(!listaActualizaciones.isEmpty()); + + + // --- Mostrar firmas como imagen si existen --- + // Firma usuario + if (detalle.getFirmaUser() != null && !detalle.getFirmaUser().isEmpty()) { + String firmaUser = detalle.getFirmaUser(); + if (!firmaUser.startsWith("data:image")) { + firmaUser = "data:image/png;base64," + firmaUser; + } + Image firmaUsuarioImg = new Image(firmaUser, "Firma del usuario"); + firmaUsuarioImg.setHeight("200px"); + firmaUsuarioImg.setWidthFull(); + userSignLayout.replace(userSignPad, firmaUsuarioImg); + } + // Firma soporte + if (detalle.getFirmaSmt() != null && !detalle.getFirmaSmt().isEmpty()) { + String firmaSmt = detalle.getFirmaSmt(); + if (!firmaSmt.startsWith("data:image")) { + firmaSmt = "data:image/png;base64," + firmaSmt; + } + Image firmaSmtImg = new Image(firmaSmt, "Firma del usuario de soporte"); + firmaSmtImg.setHeight("200px"); + firmaSmtImg.setWidthFull(); + smtSignLayout.replace(smtSignPad, firmaSmtImg); + } + // Firma gerente (si aplica) + if (detalle.getFirmaGcia() != null && !detalle.getFirmaGcia().isEmpty()) { + String firmaGcia = detalle.getFirmaGcia(); + if (!firmaGcia.startsWith("data:image")) { + firmaGcia = "data:image/png;base64," + firmaGcia; + } + Image firmaGciaImg = new Image(firmaGcia, "Firma del gerente"); + firmaGciaImg.setHeight("200px"); + firmaGciaImg.setWidthFull(); + gciaSignLayout.replace(gciaSignPad, firmaGciaImg); + } } else { id.setText("No se encontro informacion para el Plan ID: " + planId); }