From dfb816dbd3989facb088447ff4136931d179ee28 Mon Sep 17 00:00:00 2001 From: mramirezg Date: Wed, 4 Dec 2024 15:35:20 -0600 Subject: [PATCH] Se agrego la vista para la solicitud de recibo digital asi como el formulario para firmar --- .../jumapacelaya/views/ReciboDgtalView.java | 69 ++++++--- .../verificacionfirma/ReciboDgtalFirma.java | 143 ++++++++++++++++++ 2 files changed, 188 insertions(+), 24 deletions(-) create mode 100644 src/main/java/mx/gob/jumapacelaya/views/verificacionfirma/ReciboDgtalFirma.java diff --git a/src/main/java/mx/gob/jumapacelaya/views/ReciboDgtalView.java b/src/main/java/mx/gob/jumapacelaya/views/ReciboDgtalView.java index 347e7ff..26682a7 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/ReciboDgtalView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/ReciboDgtalView.java @@ -12,6 +12,7 @@ import com.vaadin.flow.component.html.Span; import com.vaadin.flow.component.notification.Notification; import com.vaadin.flow.component.orderedlayout.HorizontalLayout; import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.component.textfield.EmailField; import com.vaadin.flow.component.textfield.NumberField; import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.router.BeforeEnterEvent; @@ -93,11 +94,16 @@ public class ReciboDgtalView extends VerticalLayout implements BeforeEnterObserv NumberField predioTxt = new NumberField("Predio:"); + predioTxt.setRequired(true); TextField solicitante = new TextField("Solicitante:"); solicitante.setWidth("30em"); + solicitante.setRequired(true); + + EmailField emailField = new EmailField("Email:"); + emailField.setRequired(true); + emailField.setWidth("30em"); - TextField txtParentesco = new TextField("Parentesco:"); HorizontalLayout identificacionLayout = new HorizontalLayout(); identificacionLayout.setWidthFull(); @@ -119,41 +125,56 @@ public class ReciboDgtalView extends VerticalLayout implements BeforeEnterObserv btnVerSolicitud.addClickListener(event -> { String nombreSolicitante = solicitante.getValue(); + String emailCliente = emailField.getValue(); - if (predioTxt.getValue() != null) { - int predioId = predioTxt.getValue().intValue(); - List predios = predioService.getInfoPredio(predioId); - - if (!predios.isEmpty()) { - Predio resultado = predios.get(0); + // Validar si el campo de número de predio tiene valor + if (predioTxt.getValue() == null) { + Notification.show("Por favor, ingresa un número de predio.", 3000, Notification.Position.MIDDLE); + return; + } - UI.getCurrent().getSession().setAttribute("predio", resultado); + // Validar si el campo de solicitante está vacío + if (nombreSolicitante == null || nombreSolicitante.isEmpty()) { + Notification.show("Por favor, ingresa el nombre del solicitante.", 3000, Notification.Position.MIDDLE); + return; + } - System.out.println(resultado.getPredioid()); - System.out.println(resultado.getNomcliente()); - System.out.println(resultado.getDireccorta()); - System.out.println(resultado.getTelefono()); - System.out.println(resultado.getUso()); - System.out.println(resultado.getActividad()); - System.out.println(resultado.getContrato()); + // Validar si el campo de correo electrónico está vacío + if (emailCliente == null || emailCliente.isEmpty()) { + Notification.show("Por favor, ingresa el email del solicitante.", 3000, Notification.Position.MIDDLE); + return; + } - } else { - Notification.show("No se encontro informacion del predio", 3000, Notification.Position.MIDDLE); - } - } else { - Notification.show("Ingresa un numero de predio", 3000, Notification.Position.MIDDLE); + // Validar si el correo electrónico tiene un formato válido (opcional) + if (!emailCliente.contains("@") || !emailCliente.contains(".")) { + Notification.show("Por favor, ingresa un email válido.", 3000, Notification.Position.MIDDLE); + return; } - if (nombreSolicitante != null) { - UI.getCurrent().navigate("verifirma?solicitante=" + nombreSolicitante); + // Obtener el valor de predioTxt y convertirlo a int + int predioId = predioTxt.getValue().intValue(); + + // Consultar el predio + List predios = predioService.getInfoPredio(predioId); + + if (predios.isEmpty()) { + Notification.show("No se encontró información del predio", 3000, Notification.Position.MIDDLE); + return; } + + + Predio resultado = predios.get(0); + UI.getCurrent().getSession().setAttribute("predio", resultado); + + // Navegar a la siguiente vista con los parámetros + UI.getCurrent().navigate("recibo?solicitante=" + nombreSolicitante + "&email=" + emailCliente); }); identificacionLayout.add(cmbTipoIdentificacion, numIdentificacion); formularioLayout.add(label, labelTexto, predioTxt, - solicitante, identificacionTexto, - identificacionLayout, txtParentesco); + solicitante, emailField, identificacionTexto, + identificacionLayout); formularioLayout.setSpacing(false); this.add(formularioLayout, btnVerSolicitud); } diff --git a/src/main/java/mx/gob/jumapacelaya/views/verificacionfirma/ReciboDgtalFirma.java b/src/main/java/mx/gob/jumapacelaya/views/verificacionfirma/ReciboDgtalFirma.java new file mode 100644 index 0000000..0f6a7e9 --- /dev/null +++ b/src/main/java/mx/gob/jumapacelaya/views/verificacionfirma/ReciboDgtalFirma.java @@ -0,0 +1,143 @@ +package mx.gob.jumapacelaya.views.verificacionfirma; + +import com.vaadin.flow.component.HtmlComponent; +import com.vaadin.flow.component.UI; +import com.vaadin.flow.component.html.*; +import com.vaadin.flow.component.notification.Notification; +import com.vaadin.flow.component.orderedlayout.HorizontalLayout; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.BeforeEnterEvent; +import com.vaadin.flow.router.BeforeEnterObserver; +import com.vaadin.flow.router.PageTitle; +import com.vaadin.flow.router.Route; +import de.f0rce.signaturepad.SignaturePad; +import mx.gob.jumapacelaya.Services.PredioService; +import mx.gob.jumapacelaya.models.Predio; +import mx.gob.jumapacelaya.views.MainLayout; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +@PageTitle("Recibo Digital Firma") +@Route(value = "recibo", layout = MainLayout.class) +public class ReciboDgtalFirma extends VerticalLayout implements BeforeEnterObserver { + + private final PredioService predioService; + private Predio predio; + Span nombreCliente = new Span(); + + public ReciboDgtalFirma(PredioService predioService) { + this.predioService = predioService; + this.predio = (Predio) UI.getCurrent().getSession().getAttribute("predio"); + + if (predio == null) { + Notification.show("No se ha proporcionado un predio válido.", 3000, Notification.Position.MIDDLE); + UI.getCurrent().navigate("recibodigital"); + } + + + cabezera(); + titulo(); + body(); + sign(); + } + + + private void cabezera() { + + HorizontalLayout encabezadoLayout = new HorizontalLayout(); + encabezadoLayout.setWidthFull(); + encabezadoLayout.setPadding(true); + + // Obtener la fecha actual del sistema + LocalDate fechaSistema = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE d 'de' MMMM 'del' yyyy"); + String fechaFormateada = fechaSistema.format(formatter); + + Span fecha = new Span(); + fecha.setText("Celaya, Guanajuato a " + fechaFormateada); + + H2 presolicitud = new H2(); + presolicitud.setText("Firma Solicitud"); + + encabezadoLayout.add(fecha); + encabezadoLayout.addAndExpand(new HorizontalLayout()); + encabezadoLayout.add(presolicitud); + this.add(encabezadoLayout); + } + + + private void titulo() { + + VerticalLayout tituloLayout = new VerticalLayout(); + + H2 lblTitulo = new H2(); + lblTitulo.setText("JUNTA MUNICIPAL DE AGUA POTABLE Y ALCANTARILLADO DE CELAYA, GTO"); + + + + tituloLayout.add(lblTitulo); + + this.add(tituloLayout); + } + + + private void body() { + VerticalLayout bodyLayout = new VerticalLayout(); + + H4 lblPresente = new H4("Estimado usuario:"); + H4 lblAtt = new H4("ATENTAMENTE"); + + Paragraph parrafo1 = new Paragraph(); + parrafo1.setText( + "Con la finalidad de contribuir al cuidado del medio ambiente, así como facilitarle que conozca de manera oportuna " + + "su estado de cuenta con este organismo, lo invitamos a sumarse a este propósito y acepte el envío de " + + "su recibo de manera digital a su cuenta de correo electrónico: " + ); + + HtmlComponent parrafo3 = new HtmlComponent("p"); + parrafo3.getElement().setProperty("innerHTML", + "Para el predio: " + predio.getPredioid() + " ubicado en " + predio.getDirecmostrar() + ", a nombre de " + predio.getNomcliente() + "." + ); + + bodyLayout.add(lblPresente, parrafo1, parrafo3, lblAtt); + this.add(bodyLayout); + } + + + private void sign() { + VerticalLayout signLayout = new VerticalLayout(); + SignaturePad userPad = new SignaturePad(); + userPad.setBackgroundColor("#FFFFFF"); + userPad.setHeight("200px"); + userPad.setPenColor("#000000"); + userPad.getElement().getStyle().set("border", "1px solid black"); + + + Span predioCliente = new Span("Predio: " + predio.getPredioid()); + Span contratoCliente = new Span("Contrato: " + predio.getContrato()); + + + signLayout.add(userPad, nombreCliente, predioCliente, contratoCliente); + signLayout.setSpacing(false); + signLayout.setAlignItems(Alignment.CENTER); + this.setSpacing(false); + this.add(signLayout); + } + + + @Override + public void beforeEnter(BeforeEnterEvent event) { + String solicitante = event.getLocation().getQueryParameters().getParameters().get("solicitante") != null + ? event.getLocation().getQueryParameters().getParameters().get("solicitante").stream().findFirst().orElse(null) + : null; + + + if (solicitante != null && !solicitante.isEmpty()) { + nombreCliente.setText("Nombre del Solicitante: " + solicitante); + + } else { + nombreCliente.setText("Sin solicitante"); + } + } +}