diff --git a/pom.xml b/pom.xml
index e130f53..d454d96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,10 +55,12 @@
vaadin
+
com.vaadin
vaadin-spring-boot-starter
+
org.parttio
line-awesome
@@ -80,22 +82,35 @@
org.springframework.boot
spring-boot-starter-validation
+
org.springframework.boot
spring-boot-devtools
true
+
org.springframework.boot
spring-boot-starter-test
test
+
com.vaadin
vaadin-testbench-junit5
test
+
+ org.springframework.boot
+ spring-boot-starter-data-ldap
+
+
+
+ org.springframework.security
+ spring-security-ldap
+
+
com.oracle.database.jdbc
diff --git a/src/main/bundles/prod.bundle b/src/main/bundles/prod.bundle
index 2b84bb7..c70dd04 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/GuardarSolicitudService.java b/src/main/java/mx/gob/jumapacelaya/Services/GuardarSolicitudService.java
index ed8533a..f476af2 100644
--- a/src/main/java/mx/gob/jumapacelaya/Services/GuardarSolicitudService.java
+++ b/src/main/java/mx/gob/jumapacelaya/Services/GuardarSolicitudService.java
@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
+import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.html.Paragraph;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
@@ -31,6 +32,7 @@ public class GuardarSolicitudService {
this.jdbcTemplate = jdbcTemplate;
}
+ @SuppressWarnings("static-access")
public boolean guardarSolicitud(
Integer pPredioID,
String pTiposolicitud,
@@ -89,6 +91,11 @@ public class GuardarSolicitudService {
callableStatement.execute();
notifiSuccess("Solicitud guardada correctamente..");
+
+ UI.getCurrent().getSession().setAttribute("usuarioSesion", null);
+ UI.getCurrent().getPage().reload();
+ UI.getCurrent().getSession().getCurrent().close();
+ //UI.getCurrent().navigate("/");
return true;
} catch (SQLException e) {
diff --git a/src/main/java/mx/gob/jumapacelaya/Services/UserService.java b/src/main/java/mx/gob/jumapacelaya/Services/UserService.java
index a936cee..5d8479b 100644
--- a/src/main/java/mx/gob/jumapacelaya/Services/UserService.java
+++ b/src/main/java/mx/gob/jumapacelaya/Services/UserService.java
@@ -20,11 +20,9 @@ public class UserService {
public List getUsusarios() {
List usuarios = new ArrayList<>();
- String query = "SELECT usuarioid, empleadoid, nombrecompleto " +
- "FROM usuarios " +
- "INNER JOIN empleados USING (usuarioid) " +
- "WHERE uniorgid=12 AND fechabaja IS NULL AND fechabaj IS NULL AND regexp_like(puestoid, 'EJVEN') " +
- "ORDER BY nombrecompleto";
+ String query = "select usuarioid, empleadoid, nombrecompleto " +
+ "from soldigitusuarios " +
+ "order by nombrecompleto";
return jdbcTemplate.query(query, usuarioRowMapper());
}
diff --git a/src/main/java/mx/gob/jumapacelaya/Services/ValidaLDAPUsuario.java b/src/main/java/mx/gob/jumapacelaya/Services/ValidaLDAPUsuario.java
new file mode 100644
index 0000000..9c71d19
--- /dev/null
+++ b/src/main/java/mx/gob/jumapacelaya/Services/ValidaLDAPUsuario.java
@@ -0,0 +1,89 @@
+package mx.gob.jumapacelaya.Services;
+
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+@Service
+public class ValidaLDAPUsuario {
+
+ private static final Logger logger = LoggerFactory.getLogger(ValidaLDAPUsuario.class);
+
+ @Value("${spring.ldap.url}")
+ private String ldapUrl;
+
+ @Value("${spring.ldap.base}")
+ private String ldapBase;
+
+ public boolean autenticar(String username, String password) {
+ LdapContext ctx = null;
+ if (ldapUrl == null|| ldapUrl.trim().isEmpty()){ldapUrl="ldap://svradmin.jumapacelaya.gob.mx:389";}
+ if (ldapBase == null || ldapBase.trim().isEmpty()){ldapBase="dc=jumapacelaya,dc=gob,dc=mx";}
+
+ try {
+ logger.info("Iniciando rutina autenticar con la URL ["+ldapUrl+"]..");
+ Hashtable env = new Hashtable<>();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
+ env.put(Context.SECURITY_AUTHENTICATION, "simple");
+ env.put(Context.SECURITY_PRINCIPAL, username + "@jumapacelaya.gob.mx");
+ env.put(Context.SECURITY_CREDENTIALS, password);
+ env.put(Context.PROVIDER_URL, ldapUrl);
+
+ logger.info("Autenticando al usuario ["+env.get(Context.SECURITY_PRINCIPAL)+"]");
+
+ ctx = new InitialLdapContext(env, null);
+ logger.info("Inicializando Contexto para realizar la busqueda..");
+
+ // Búsqueda de atributos del usuario
+ String searchFilter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
+ String searchBase = ldapBase;
+
+ logger.info("Preparando la busqueda..");
+ SearchControls searchControls = new SearchControls();
+ searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+ searchControls.setReturningAttributes(new String[]{"sAMAccountName", "memberOf", "mail", "givenName", "sn"});
+
+ NamingEnumeration results = ctx.search(searchBase, searchFilter, searchControls);
+
+ logger.info("Busqueda terminada..");
+
+ if (results.hasMore()) {
+ SearchResult result = results.next();
+ Attributes attrs = result.getAttributes();
+ // Procesar atributos y crear objeto de respuesta
+ logger.info("Usuario encontrado, regresando informacion..");
+ return true;
+ }
+
+ logger.info("No se encontro el usuario..");
+ return false;
+ } catch (NamingException e) {
+ // La autenticación falló o hubo un error
+ logger.error("Error de autenticacion..");
+ return false;
+ } finally {
+ if (ctx != null) {
+ try {
+ ctx.close();
+ logger.info("Cierre de Contexto Terminado..");
+ } catch (NamingException e) {
+ // Manejar error de cierre
+ logger.error("Error de autenticacion..");
+ //return false;
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/mx/gob/jumapacelaya/views/CuestionarioView.java b/src/main/java/mx/gob/jumapacelaya/views/CuestionarioView.java
index e204535..99451ff 100644
--- a/src/main/java/mx/gob/jumapacelaya/views/CuestionarioView.java
+++ b/src/main/java/mx/gob/jumapacelaya/views/CuestionarioView.java
@@ -9,12 +9,18 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.radiobutton.RadioButtonGroup;
import com.vaadin.flow.component.radiobutton.RadioGroupVariant;
import com.vaadin.flow.component.textfield.NumberField;
+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 com.vaadin.flow.server.VaadinSession;
+
import de.f0rce.signaturepad.SignaturePad;
import mx.gob.jumapacelaya.Services.GuardarSolicitudService;
import mx.gob.jumapacelaya.Services.PredioService;
import mx.gob.jumapacelaya.models.Predio;
+import mx.gob.jumapacelaya.models.Usuario;
+import oracle.net.aso.f;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
@@ -26,7 +32,20 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@PageTitle("Estudio Socioeconomico")
@Route(value = "cuestionario", layout = MainLayout.class)
-public class CuestionarioView extends VerticalLayout {
+public class CuestionarioView extends VerticalLayout implements BeforeEnterObserver {
+
+ Usuario usuario;
+ @Override
+ public void beforeEnter(BeforeEnterEvent event) {
+ usuario = (Usuario) VaadinSession.getCurrent().getAttribute("usuarioSesion");
+ if (usuario == null) {
+ event.forwardTo("/");
+ }
+ else
+ {
+ lblFirmaEje.setText("Firma [" + usuario.getNombre() + "]");
+ }
+ }
private final PredioService predioService;
private final GuardarSolicitudService guardarSolicitudService;
@@ -41,7 +60,9 @@ public class CuestionarioView extends VerticalLayout {
private RadioButtonGroup opcionesZona= new RadioButtonGroup<>();
private RadioButtonGroup opcionesEscolar= new RadioButtonGroup<>();
private RadioButtonGroup opcionesEdad= new RadioButtonGroup<>();
+ VerticalLayout botonLayout = new VerticalLayout();
private Button btnGuardar = new Button();
+ H5 lblFirmaEje = new H5();
public CuestionarioView(PredioService predioService, GuardarSolicitudService guardarSolicitudService) {
this.setSizeFull();
@@ -54,7 +75,6 @@ public class CuestionarioView extends VerticalLayout {
vFirmaCuest.setHeight("200px");
vFirmaCuest.setPenColor("#000000");
vFirmaCuest.getElement().getStyle().set("border", "1px solid black");
- vFirmaCuest.setVisible(false);
vFirmaCuest.setReadOnly(false);
vFirmaCuest.getStyle().remove("pointer-events");
@@ -223,45 +243,45 @@ public class CuestionarioView extends VerticalLayout {
/* Columnas rangos */
// Columna Rangos Ingreso
- Span rango1 = new Span("$6,223.20 en adelante");
- Span rango2 = new Span("$ 2,500.01 a $ 6,223.19");
- Span rango3 = new Span("$ 2,000.01 a $ 2,500.00");
- Span rango4 = new Span("igual o menor a $ 2,000.00");
+ Span rango1 = new Span("1. $6,223.20 en adelante");
+ Span rango2 = new Span("2. $ 2,500.01 a $ 6,223.19");
+ Span rango3 = new Span("3. $ 2,000.01 a $ 2,500.00");
+ Span rango4 = new Span("4. igual o menor a $ 2,000.00");
// Columna Rangos Enfermedades
- Span rangoenf1 = new Span("No padece enfermedad o discapacidad");
- Span rangoenf2 = new Span("Quien padece, no aporta económicamente");
- Span rangoenf3 = new Span("Quien padece, si aporta económicamente");
+ Span rangoenf1 = new Span("1. No padece enfermedad o discapacidad");
+ Span rangoenf2 = new Span("2. Quien padece, no aporta económicamente");
+ Span rangoenf3 = new Span("3. Quien padece, si aporta económicamente");
// Columna Rangos Dependientes
- Span rangoDepen1 = new Span("No tiene dependientes");
- Span rangoDepen2 = new Span("1 a 3");
- Span rangoDepen3 = new Span("4 a 6");
- Span rangoDepen4 = new Span("7 a 9");
+ Span rangoDepen1 = new Span("1. No tiene dependientes");
+ Span rangoDepen2 = new Span("2. 1 a 3");
+ Span rangoDepen3 = new Span("3. 4 a 6");
+ Span rangoDepen4 = new Span("4. 7 a 9");
// Columnas Rangos Acceso/Salud
- Span rangoSalud1 = new Span("Particular");
- Span rangoSalud2 = new Span("IMSS o ISSTE");
- Span rangoSalud3 = new Span("ISAPEG");
- Span rangoSalud4 = new Span("Ninguno");
+ Span rangoSalud1 = new Span("1. Particular");
+ Span rangoSalud2 = new Span("2. IMSS o ISSTE");
+ Span rangoSalud3 = new Span("3. ISAPEG");
+ Span rangoSalud4 = new Span("4. Ninguno");
// Columnas Rangos Zona habitacional
- Span rangoZona1 = new Span("Excelente");
- Span rangoZona2 = new Span("Buena");
- Span rangoZona3 = new Span("Regular");
- Span rangoZona4 = new Span("Mala");
+ Span rangoZona1 = new Span("1. Excelente");
+ Span rangoZona2 = new Span("2. Buena");
+ Span rangoZona3 = new Span("3. Regular");
+ Span rangoZona4 = new Span("4. Mala");
// Columna Rangos Escolaridad
- Span rangoEscolar1 = new Span("Profesional");
- Span rangoEscolar2 = new Span("Preparatoria");
- Span rangoEscolar3 = new Span("Secundaria");
- Span rangoEscolar4 = new Span("Primaria o menos");
+ Span rangoEscolar1 = new Span("1. Profesional");
+ Span rangoEscolar2 = new Span("2. Preparatoria");
+ Span rangoEscolar3 = new Span("3. Secundaria");
+ Span rangoEscolar4 = new Span("4. Primaria o menos");
// Columna Rangos Edad
- Span rangoEdad1 = new Span("18 a 30");
- Span rangoEdas2 = new Span("31 a 40");
- Span rangoEdad3 = new Span("41 a 60");
- Span rangoEdad4 = new Span("A partir de 61");
+ Span rangoEdad1 = new Span("1. 18 a 30");
+ Span rangoEdas2 = new Span("2. 31 a 40");
+ Span rangoEdad3 = new Span("3. 41 a 60");
+ Span rangoEdad4 = new Span("4. A partir de 61");
/* Columnas puntos */
// Columna puntos Ingresos
@@ -383,19 +403,16 @@ public class CuestionarioView extends VerticalLayout {
String parentesco = (String) UI.getCurrent().getSession().getAttribute("txtParentesco");
String tipoIdentificacion = (String) UI.getCurrent().getSession().getAttribute("cmbTipoIdentificacion");
String numIdentificacion = (String) UI.getCurrent().getSession().getAttribute("numIdentificacion");
- String usuarioId = (String) UI.getCurrent().getSession().getAttribute("usuarioId");
String firma = (String) UI.getCurrent().getSession().getAttribute("firma");
String email = (String) UI.getCurrent().getSession().getAttribute("email");
String estado = (String) UI.getCurrent().getSession().getAttribute("estado");
String detdesc = (String) UI.getCurrent().getSession().getAttribute("detdesc");
- //String firmaUsuario = (String) UI.getCurrent().getSession().getAttribute("firmaUsuario");
String detCalif = (String) UI.getCurrent().getSession().getAttribute("detCalif");
-
logger.info("Predio: "+this.predio+" con tipo de solicitud: ["+tipoSolicitud+"] y nombre de Solicitante: "+ nombreSolicitante);
// Boton para guardar la solicitud
- btnGuardar = new Button("Guardar", event -> {
+ btnGuardar = new Button("Guardar Solicitud", event -> {
boolean vGuardado=false;
String vDetDesc="";
String vDetCalif="";
@@ -419,24 +436,28 @@ public class CuestionarioView extends VerticalLayout {
parentesco, // String parentesco
tipoIdentificacion, // String tipoIdentificacion
numIdentificacion, // String numIdentificacion
- usuarioId, // String usuarioId
+ usuario.getUsuarioId(), // String usuarioId
firma, // String firma
email, // String email
- "", // boolean vigencia (ejemplo: true)
+ "", // Date vigencia
vEstado, // String estado
vDetDesc, // String detdesc
ejecutivoSignBase64, // String firmaUsuario
vDetCalif
);
+
+ if (vGuardado)
+ {
+ UI.getCurrent().navigate("/");
+ }
});
btnGuardar.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
- btnGuardar.setVisible(false);
- VerticalLayout botonLayout = new VerticalLayout();
botonLayout.setAlignItems(Alignment.CENTER);
botonLayout.setWidthFull();
botonLayout.setHeightFull();
- botonLayout.add(vFirmaCuest, btnGuardar);
+ botonLayout.add(vFirmaCuest, btnGuardar, lblFirmaEje);
+ botonLayout.setVisible(false);
// HorizontalLayout totalesLayout = new HorizontalLayout(puntos, descuento, txtAgua, txtDrena, txtTrata);
@@ -474,7 +495,8 @@ public class CuestionarioView extends VerticalLayout {
Runnable actualizarVisibilidad = () -> {
boolean todosSelccionados = allRadioButtonsSelected();
- btnGuardar.setVisible(todosSelccionados);
- vFirmaCuest.setVisible(todosSelccionados);
+ if(todosSelccionados){
+ botonLayout.setVisible(true);
+ }
};
}
diff --git a/src/main/java/mx/gob/jumapacelaya/views/HomeView.java b/src/main/java/mx/gob/jumapacelaya/views/HomeView.java
index d5da9a9..e2ff497 100644
--- a/src/main/java/mx/gob/jumapacelaya/views/HomeView.java
+++ b/src/main/java/mx/gob/jumapacelaya/views/HomeView.java
@@ -1,19 +1,24 @@
package mx.gob.jumapacelaya.views;
+import com.vaadin.flow.component.Key;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.combobox.ComboBox;
+import com.vaadin.flow.component.dialog.Dialog;
+import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.html.H1;
import com.vaadin.flow.component.html.H3;
import com.vaadin.flow.component.html.Paragraph;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification;
+import com.vaadin.flow.component.notification.Notification.Position;
import com.vaadin.flow.component.notification.NotificationVariant;
import com.vaadin.flow.component.orderedlayout.FlexComponent;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import com.vaadin.flow.component.textfield.PasswordField;
import com.vaadin.flow.router.*;
import java.time.LocalDate;
@@ -21,7 +26,12 @@ import java.time.format.TextStyle;
import java.util.Locale;
import mx.gob.jumapacelaya.Services.UserService;
+import mx.gob.jumapacelaya.Services.ValidaLDAPUsuario;
import mx.gob.jumapacelaya.models.Usuario;
+import oracle.net.aso.l;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.vaadin.lineawesome.LineAwesomeIconUrl;
@@ -30,8 +40,12 @@ import org.vaadin.lineawesome.LineAwesomeIconUrl;
@Menu(order = 0, icon = LineAwesomeIconUrl.FILE)
public class HomeView extends VerticalLayout {
+ private static final Logger logger = LoggerFactory.getLogger(HomeView.class);
private final UserService userService;
private Usuario usuarioSeleccionado = null;
+ ValidaLDAPUsuario validador = new ValidaLDAPUsuario();
+ HorizontalLayout cardLayout = new HorizontalLayout();
+ ComboBox cmbUsuario = new ComboBox<>("Selecciona tu usuario");
@Autowired
public HomeView(UserService userService) {
@@ -85,13 +99,21 @@ public class HomeView extends VerticalLayout {
VerticalLayout menuLayout = new VerticalLayout();
menuLayout.setSizeFull();
-
- ComboBox cmbUsuario = new ComboBox<>("Selecciona tu usuario");
+ //Combo Usuarios
cmbUsuario.setWidth("20em");
cmbUsuario.setItems(userService.getUsusarios()); // Llenar el combo con los usuarios
cmbUsuario.setItemLabelGenerator(Usuario::getNombre);
- cmbUsuario.addValueChangeListener(event -> usuarioSeleccionado = event.getValue());
+ //cmbUsuario.addValueChangeListener(event -> usuarioSeleccionado = event.getValue());
+
+ cmbUsuario.addValueChangeListener(event -> {
+ Usuario selectedUser = event.getValue();
+ if (selectedUser != null) {
+ usuarioSeleccionado = selectedUser;
+ showPasswordDialog(selectedUser);
+ logger.info("Usuario seleccionado: "+selectedUser.getUsuarioId());
+ }
+ });
String[][] opciones = {
@@ -101,12 +123,12 @@ public class HomeView extends VerticalLayout {
{"PGO y Tomas independientes", "pgotomasindep"}
};
-
- HorizontalLayout cardLayout = new HorizontalLayout();
+ //Layout de Opciones:
cardLayout.setWidthFull();
cardLayout.setSpacing(true);
cardLayout.getStyle().set("flex-wrap", "wrap");
cardLayout.getStyle().set("justify-content", "center");
+ cardLayout.setVisible(false);
@@ -138,7 +160,8 @@ public class HomeView extends VerticalLayout {
card.addClickListener(event -> {
if (usuarioSeleccionado != null) {
String username = usuarioSeleccionado.getUsuarioId();
- UI.getCurrent().navigate(route + "?usuarioid=" + username);
+ UI.getCurrent().getSession().setAttribute("usuarioSesion", usuarioSeleccionado);
+ UI.getCurrent().navigate(route);
} else {
notificacion("Por favor, selecciona un usuario primero.");
@@ -184,4 +207,83 @@ public class HomeView extends VerticalLayout {
notification.add(wrapper);
notification.open();
}
+
+ private void showPasswordDialog(Usuario usuario) {
+ Dialog dialog = new Dialog();
+ dialog.setHeaderTitle("Ingresa tu contraseña " + usuario.getUsuarioId());
+ dialog.setModal(true);
+ dialog.setDraggable(false);
+ dialog.setCloseOnEsc(false);
+ dialog.setCloseOnOutsideClick(false);
+
+ VerticalLayout dialogLayout = new VerticalLayout();
+ dialogLayout.setSpacing(true);
+ dialogLayout.setPadding(true);
+
+ PasswordField passwordField = new PasswordField("Contraseña");
+ passwordField.setWidth("100%");
+
+ Button confirmButton = new Button("Confirmar");
+ confirmButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
+
+ Div errorMessage = new Div();
+ errorMessage.getStyle().setColor("var(--lumo-error-text-color)");
+ errorMessage.setVisible(false);
+
+ dialogLayout.add(passwordField, errorMessage, confirmButton);
+ dialog.add(dialogLayout);
+
+ confirmButton.addClickListener(e -> {
+ String password = passwordField.getValue();
+
+ if (password == null || password.trim().isEmpty()) {
+ errorMessage.setText("La contraseña es requerida");
+ errorMessage.setVisible(true);
+ return;
+ }
+
+ // Llamada al servicio de validación
+ try {
+ logger.info("Validando Usuario: "+usuario.getUsuarioId());
+ boolean isValid = validador.autenticar(usuario.getUsuarioId(), password);
+ if (isValid) {
+ // Procesar login exitoso
+ dialog.close();
+ Notification.show("Acceso correcto", 3000, Position.TOP_CENTER)
+ .addThemeVariants(NotificationVariant.LUMO_SUCCESS);
+ // Lógica post-login
+ cardLayout.setVisible(true);
+ } else {
+ errorMessage.setText("Contraseña incorrecta");
+ errorMessage.setVisible(true);
+ passwordField.clear();
+ }
+ } catch (Exception ex) {
+ errorMessage.setText("Error al validar la contraseña: ["+ex.getMessage()+"]");
+ errorMessage.setVisible(true);
+ }
+ });
+
+ Button cancelButton = new Button("Cancelar", e -> {
+ dialog.close();
+ cmbUsuario.clear();
+ });
+ cancelButton.addThemeVariants(ButtonVariant.LUMO_ERROR);
+
+ HorizontalLayout buttonLayout = new HorizontalLayout(confirmButton, cancelButton);
+ buttonLayout.setJustifyContentMode(JustifyContentMode.END);
+ dialogLayout.add(buttonLayout);
+
+ passwordField.addKeyPressListener(Key.ENTER, e -> {
+ confirmButton.click();
+ });
+
+ dialog.addDialogCloseActionListener(e -> {
+ cmbUsuario.clear();
+ dialog.close();
+ });
+
+ // Abre el dialog para la contraseña:
+ dialog.open();
+ }
}
diff --git a/src/main/java/mx/gob/jumapacelaya/views/SolicitudDescView.java b/src/main/java/mx/gob/jumapacelaya/views/SolicitudDescView.java
index 82d437f..a04847d 100644
--- a/src/main/java/mx/gob/jumapacelaya/views/SolicitudDescView.java
+++ b/src/main/java/mx/gob/jumapacelaya/views/SolicitudDescView.java
@@ -16,9 +16,12 @@ 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 com.vaadin.flow.server.VaadinSession;
+
import mx.gob.jumapacelaya.Services.GuardarSolicitudService;
import mx.gob.jumapacelaya.Services.PredioService;
import mx.gob.jumapacelaya.models.Predio;
+import mx.gob.jumapacelaya.models.Usuario;
import mx.gob.jumapacelaya.views.tiposSolicitud.InfraccionesView;
import org.aspectj.weaver.ast.Not;
import org.hibernate.annotations.DialectOverride;
@@ -34,8 +37,20 @@ import java.util.List;
@Route(value = "solidesc", layout = MainLayout.class)
public class SolicitudDescView extends VerticalLayout implements BeforeEnterObserver {
+ Usuario usuario;
+ @Override
+ public void beforeEnter(BeforeEnterEvent event) {
+ usuario = (Usuario) VaadinSession.getCurrent().getAttribute("usuarioSesion");
+ if (usuario == null) {
+ event.forwardTo("/");
+ }
+ else
+ {
+ label.setText("Solicitud de Descuento en adeudo [" + usuario.getUsuarioId() + "]");
+ }
+ }
+
private H3 label;
- private String usuarioId;
private final PredioService predioService;
private final GuardarSolicitudService guardarSolicitudService;
@@ -50,8 +65,6 @@ public class SolicitudDescView extends VerticalLayout implements BeforeEnterObse
formulario();
}
-
-
private void cabezera() {
HorizontalLayout encabezadoLayout = new HorizontalLayout();
@@ -102,6 +115,19 @@ public class SolicitudDescView extends VerticalLayout implements BeforeEnterObse
Span labelTexto = new Span();
labelTexto.setText("Prepara la solicitud:");
+ Button btnCierraSesion = new Button("Cerrar Sesion");
+ btnCierraSesion.addThemeVariants(ButtonVariant.LUMO_ERROR);
+ btnCierraSesion.addThemeVariants(ButtonVariant.LUMO_SMALL);
+
+ btnCierraSesion.addClickListener(event -> {
+ UI.getCurrent().getSession().setAttribute("usuarioSesion", null);
+ UI.getCurrent().getPage().reload();
+ UI.getCurrent().getSession().getCurrent().close();
+ UI.getCurrent().navigate("/");
+ });
+
+ HorizontalLayout hltSesion=new HorizontalLayout();
+ hltSesion.add(label, btnCierraSesion);
RadioButtonGroup tipoSolicitudGroup = new RadioButtonGroup<>("Elige el tipo de Solicitud:");
tipoSolicitudGroup.setItems("Recargos", "Infracciones", "Ajuste de Facturas", "Descuento Especial Pago Anual");
@@ -201,7 +227,6 @@ public class SolicitudDescView extends VerticalLayout implements BeforeEnterObse
UI.getCurrent().getSession().setAttribute("txtParentesco", txtParentesco.getValue());
UI.getCurrent().getSession().setAttribute("cmbTipoIdentificacion", tipoIden);
UI.getCurrent().getSession().setAttribute("numIdentificacion", numIdentificacion.getValue());
- UI.getCurrent().getSession().setAttribute("usuarioId", usuarioId);
if (!url.isEmpty()) {
UI.getCurrent().navigate(url);
@@ -215,7 +240,7 @@ public class SolicitudDescView extends VerticalLayout implements BeforeEnterObse
});
identificacionLayout.add(cmbTipoIdentificacion, numIdentificacion);
- formularioLayout.add(label, labelTexto,
+ formularioLayout.add(hltSesion, labelTexto,
tipoSolicitudGroup, predioTxt,
solicitante, identificacionTexto,
identificacionLayout, txtParentesco);
@@ -223,6 +248,7 @@ public class SolicitudDescView extends VerticalLayout implements BeforeEnterObse
this.add(formularioLayout, btnVerSolicitud);
}
+ /*
@Override
public void beforeEnter(BeforeEnterEvent event) {
usuarioId = event.getLocation().getQueryParameters().getParameters().get("usuarioid") != null
@@ -237,4 +263,5 @@ public class SolicitudDescView extends VerticalLayout implements BeforeEnterObse
UI.getCurrent().navigate("/");
}
}
+ */
}
diff --git a/src/main/java/mx/gob/jumapacelaya/views/VerificacionView.java b/src/main/java/mx/gob/jumapacelaya/views/VerificacionView.java
index 44ccd58..1ee6677 100644
--- a/src/main/java/mx/gob/jumapacelaya/views/VerificacionView.java
+++ b/src/main/java/mx/gob/jumapacelaya/views/VerificacionView.java
@@ -83,6 +83,16 @@ public class VerificacionView extends VerticalLayout implements BeforeEnterObser
formularioLayout.setSpacing(true);
formularioLayout.setPadding(true);
+ Button btnCerrarSesion = new Button("Cerrar Sesion");
+
+ btnCerrarSesion.addClickListener(event -> {
+ UI.getCurrent().getSession().setAttribute("usuarioSesion", null);
+ UI.getCurrent().getPage().reload();
+ UI.getCurrent().getSession().getCurrent().close();
+ UI.getCurrent().navigate("/");
+
+ });
+
label = new H3("Solicitud de Descuento en adeudo [USUARIO]");
Span labelTexto = new Span("Prepara la solicitud:");
@@ -141,7 +151,7 @@ public class VerificacionView extends VerticalLayout implements BeforeEnterObser
});
- formularioLayout.add(label, labelTexto,
+ formularioLayout.add(label, btnCerrarSesion, labelTexto,
predioTxT,
solicitante,
identificacionLayout);
diff --git a/src/main/java/mx/gob/jumapacelaya/views/redirInicio.java b/src/main/java/mx/gob/jumapacelaya/views/redirInicio.java
new file mode 100644
index 0000000..7f9eefc
--- /dev/null
+++ b/src/main/java/mx/gob/jumapacelaya/views/redirInicio.java
@@ -0,0 +1,21 @@
+package mx.gob.jumapacelaya.views;
+
+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 com.vaadin.flow.server.VaadinSession;
+
+import mx.gob.jumapacelaya.models.Usuario;
+
+@PageTitle("Solicitud de Descuento")
+@Route(value = "solicatenusu/inicio", layout = MainLayout.class)
+public class redirInicio extends VerticalLayout implements BeforeEnterObserver{
+ @Override
+ public void beforeEnter(BeforeEnterEvent event) {
+
+ event.forwardTo("/");
+
+ }
+}
diff --git a/src/main/java/mx/gob/jumapacelaya/views/tiposSolicitud/DescEspView.java b/src/main/java/mx/gob/jumapacelaya/views/tiposSolicitud/DescEspView.java
index f1410c9..8cbb3ef 100644
--- a/src/main/java/mx/gob/jumapacelaya/views/tiposSolicitud/DescEspView.java
+++ b/src/main/java/mx/gob/jumapacelaya/views/tiposSolicitud/DescEspView.java
@@ -33,6 +33,7 @@ public class DescEspView extends VerticalLayout implements BeforeEnterObserver {
private Predio predio;
Span nombreCliente = new Span();
private SignaturePad userPadDesc;
+ H2 presolicitud = new H2();
public DescEspView(PredioService predioService, GuardarSolicitudService guardarSolicitudService) {
@@ -48,6 +49,18 @@ public class DescEspView extends VerticalLayout implements BeforeEnterObserver {
String numIdentificacion = (String) UI.getCurrent().getSession().getAttribute("numIdentificacion");
String usuarioId = (String) UI.getCurrent().getSession().getAttribute("usuarioId");
+ if(predio.getTarifaid()!=101 && predio.getTarifaid()!=108 && predio.getTarifaid()!=131)
+ {
+ notifiError("No debemos aplicar descuento con esta tarifa ["+predio.getTarifaid()+"-"+predio.getTarifa()+"]");
+ presolicitud.setText("No debemos aplicar descuento con esta tarifa ["+predio.getTarifaid()+"-"+predio.getTarifa()+"]");
+ presolicitud.getStyle().set("color", "red");
+ }
+ else
+ {
+ presolicitud.setText("PreSolicitud");
+ presolicitud.getStyle().set("color", "black");
+ }
+
// Verificar que los datos estén disponibles
if (predio == null || tipoSolicitud == null || nombreSolicitante == null) {
Notification.show("Faltan datos importantes. Por favor ingresa la solicitud nuevamente.", 3000, Notification.Position.MIDDLE);
@@ -93,9 +106,6 @@ public class DescEspView extends VerticalLayout implements BeforeEnterObserver {
Span fecha = new Span();
fecha.setText("Celaya, Guanajuato a " + fechaFormateada);
- H2 presolicitud = new H2();
- presolicitud.setText("PreSolicitud");
-
encabezadoLayout.add(fecha);
encabezadoLayout.addAndExpand(new HorizontalLayout());
encabezadoLayout.add(presolicitud);
@@ -133,7 +143,7 @@ public class DescEspView extends VerticalLayout implements BeforeEnterObserver {
parrafo1.setText(
"Sirva este medio para solicitar de la manera más atenta se me valore mi condición socioeconómica, " +
"ya que por el momento no cuento con la solvencia económica suficiente para pagar la tarifa del " +
- "presente año que corresponde al domicilio que habito ubicado en: " + predio.getDirecmostrar()
+ "año 2025 que corresponde al domicilio que habito ubicado en: " + predio.getDirecmostrar()
);
parrafo1.getStyle().set("text-align", "justify");
@@ -158,7 +168,6 @@ public class DescEspView extends VerticalLayout implements BeforeEnterObserver {
this.add(bodyLayout);
}
-
private void sign() {
VerticalLayout signLayout = new VerticalLayout();
userPadDesc = new SignaturePad();
@@ -227,4 +236,36 @@ public class DescEspView extends VerticalLayout implements BeforeEnterObserver {
nombreCliente.setText("Sin solicitante");
}
}
+
+ private void notifiError(String message) {
+ Notification notification = new Notification();
+ notification.setPosition(Notification.Position.TOP_CENTER);
+ notification.addThemeVariants(NotificationVariant.LUMO_ERROR);
+ notification.setDuration(7000);
+
+ Icon warningIcon = new Icon(VaadinIcon.CLOSE_CIRCLE_O);
+ warningIcon.setSize("48px");
+ warningIcon.getStyle().set("margin-bottom", "10px");
+
+
+ Paragraph messajeTexto = new Paragraph(message);
+ messajeTexto.getStyle().set("margin", "0").set("text-align", "center");
+
+
+ HorizontalLayout buttonsLayout = new HorizontalLayout(warningIcon, messajeTexto);
+ buttonsLayout.setAlignItems(Alignment.CENTER);
+ buttonsLayout.setSpacing(false);
+ buttonsLayout.setPadding(false);
+ buttonsLayout.setWidthFull();
+
+ HorizontalLayout wrapper = new HorizontalLayout(buttonsLayout);
+ wrapper.setPadding(true);
+ wrapper.setSpacing(false);
+ wrapper.getStyle().set("position", "relative");
+ wrapper.getStyle().set("padding", "10px");
+ wrapper.setWidth("100%");
+
+ notification.add(wrapper);
+ notification.open();
+ }
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d7f0b6e..00e7311 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -35,4 +35,10 @@ spring.datasource.hikari.data-source-properties.oracle.net.CONNECT_TIMEOUT=10000
spring.datasource.hikari.data-source-properties.oracle.jdbc.ReadTimeout=30000
# Validación de conexiones
-spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
\ No newline at end of file
+spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL
+
+#LDAP Config
+spring.ldap.url=ldap://svradmin.jumapacelaya.gob.mx:389
+spring.ldap.base=dc=jumapacelaya,dc=gob,dc=mx
+spring.ldap.username=uid=administrator,ou=system
+spring.ldap.password=Dr3na$134%4guA
\ No newline at end of file