Browse Source

Inicio y cierre de sesion

Numerar los rangos de las encuestas
Limitar a ciertas tarifas: 101, 108 y 131
Cambio de tabla de usuarios para admitir personal de otras areas ajenas a Atencion al Usuario
y cosillas
main
parent
commit
5c6cef7162
12 changed files with 401 additions and 63 deletions
  1. +15
    -0
      pom.xml
  2. BIN
      src/main/bundles/prod.bundle
  3. +7
    -0
      src/main/java/mx/gob/jumapacelaya/Services/GuardarSolicitudService.java
  4. +3
    -5
      src/main/java/mx/gob/jumapacelaya/Services/UserService.java
  5. +89
    -0
      src/main/java/mx/gob/jumapacelaya/Services/ValidaLDAPUsuario.java
  6. +62
    -40
      src/main/java/mx/gob/jumapacelaya/views/CuestionarioView.java
  7. +108
    -6
      src/main/java/mx/gob/jumapacelaya/views/HomeView.java
  8. +32
    -5
      src/main/java/mx/gob/jumapacelaya/views/SolicitudDescView.java
  9. +11
    -1
      src/main/java/mx/gob/jumapacelaya/views/VerificacionView.java
  10. +21
    -0
      src/main/java/mx/gob/jumapacelaya/views/redirInicio.java
  11. +46
    -5
      src/main/java/mx/gob/jumapacelaya/views/tiposSolicitud/DescEspView.java
  12. +7
    -1
      src/main/resources/application.properties

+ 15
- 0
pom.xml View File

@ -55,10 +55,12 @@
<!-- Replace artifactId with vaadin-core to use only free components -->
<artifactId>vaadin</artifactId>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.parttio</groupId>
<artifactId>line-awesome</artifactId>
@ -80,22 +82,35 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-testbench-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<!-- Conector a bases de datos Oracle -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>


BIN
src/main/bundles/prod.bundle View File


+ 7
- 0
src/main/java/mx/gob/jumapacelaya/Services/GuardarSolicitudService.java View File

@ -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) {


+ 3
- 5
src/main/java/mx/gob/jumapacelaya/Services/UserService.java View File

@ -20,11 +20,9 @@ public class UserService {
public List<Usuario> getUsusarios() {
List<Usuario> 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());
}


+ 89
- 0
src/main/java/mx/gob/jumapacelaya/Services/ValidaLDAPUsuario.java View File

@ -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<String, String> 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<SearchResult> 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;
}
}
}
}
}

+ 62
- 40
src/main/java/mx/gob/jumapacelaya/views/CuestionarioView.java View File

@ -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<Integer> opcionesZona= new RadioButtonGroup<>();
private RadioButtonGroup<Integer> opcionesEscolar= new RadioButtonGroup<>();
private RadioButtonGroup<Integer> 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);
}
};
}

+ 108
- 6
src/main/java/mx/gob/jumapacelaya/views/HomeView.java View File

@ -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<Usuario> 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<Usuario> 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();
}
}

+ 32
- 5
src/main/java/mx/gob/jumapacelaya/views/SolicitudDescView.java View File

@ -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<String> 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("/");
}
}
*/
}

+ 11
- 1
src/main/java/mx/gob/jumapacelaya/views/VerificacionView.java View File

@ -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);


+ 21
- 0
src/main/java/mx/gob/jumapacelaya/views/redirInicio.java View File

@ -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("/");
}
}

+ 46
- 5
src/main/java/mx/gob/jumapacelaya/views/tiposSolicitud/DescEspView.java View File

@ -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();
}
}

+ 7
- 1
src/main/resources/application.properties View File

@ -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
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

Loading…
Cancel
Save