Commit eb63ac0a40de2018a418c87d5acf37807b161256

Authored by Antigravity AI
1 parent 157aa295

Reorganización: archivos del proyecto en la raíz del repositorio. Eliminación de…

… estructura anidada incorrecta.
Showing 120 changed files with 30 additions and 1496 deletions

Too many changes.

To preserve performance only 100 of 120 files are displayed.

.agents/rules/gis-geoserver.md deleted
1 ----  
2 -trigger: always_on  
3 ----  
4 -  
5 -Regla 0. Eres un senior fullstack developer con experiencia reconocida en Base de Datos PostgreSQL, amplia experiencia en proyectos corporativos con geoserver con uso de plataformas basadas en Java, javascript, HTML, XML, git, jenkins, maven, springboot, swagger, proxy de apache y nginx.  
6 -  
7 -Regla 1. El ambiente de desarrollo y compilación se encuentra en el 192.168.1.123.  
8 -El JENKINS a usar está en este servidor. Los comandos del jenkins se ejecutan en el servidor 192.168.1.123.  
9 -El MAVEN a usar está en este servidor. Los comandos maven se ejecutan en el servidor 192.168.1.123.  
10 -El DOCKER a usar está en el servidor 192.168.1.123. Los comandos docker se ejecutan en el servidor192.168.1.123.  
11 -Todas las compilaciones se ejecutarán en el servidor 192.168.1.123.  
12 -  
13 -La base de datos georreferenciada SIGEM del Postgis está en este servidor y el superuser es el usuario registrado en el motor de base de datos como:  
14 -Usuario: sigem_user  
15 -Contraseña: sigem_pass  
16 -  
17 -Regla 2. Las bases de datos alfanuméricas de los municipios a usar vinculadas a la base de datos georreferenciada Postgis serán definidas dinámicamente usando la tabla ENTIDADES la Base de Datos SIGEMWEB en el servidor 192.168.1.254  
18 -  
19 -Regla 3. El proxypass principal de redireccionamiento reside en el servidor 192.168.1.10  
20 -  
21 -El proxypass maestro de redireccionamiento reside en el servidor 192.168.1.20  
22 -  
23 -Regla 4. Para el LOGIN, el código del municipio es seleccionado por el usuario de la aplicación al loguearse.  
24 -Para el LOGIN siempre se utiliza en año actual.  
25 -Para las pruebas de LOGIN se usa el usuario 'operador' y el pase 'ataj800306465'.  
26 -  
27 -Regla 5. Los parámetros para la visualización y despliegue de mapas en el geoserver deberá usarse el registro correspondiente al municipio que se obtiene en la tabla ENTIDADES. El código del municipio es seleccionado por el usuario de la aplicación al loguearse.  
28 -Por ejemplo:  
29 -select * from public.entidades WHERE activo= TRUE AND entidad= 505 ;  
30 -  
31 -Los parámetros disponibles son:  
32 - sigem_site character varying(100)  
33 - sigem_dbname character varying(100)  
34 - latlong character varying(70)  
35 - lng character varying(35)  
36 - lat character varying(35)  
37 - zoom character varying(2)  
38 - mapa_base character varying(100)  
39 - boundno character varying(70)  
40 - boundse character varying(70)  
41 - maxzoom character varying(2)  
42 - minzoom character varying(2)  
43 -  
44 -La base de datos del municipio con los datos de liquidaciones de deudas y pagos se encuentran la base de datos remota referida por las columnas sigem_site y sigem_dbname para definir el string de conexión incluida credenciales. Se usa la tabla ENTIDADES de la Base de Datos SIGEMWEB del servidor 192.168.1.254 y se use el registro correspondiente a la entidad seleccionada usando la columna entidad.  
45 -  
46 -La visualización de mapas será en 2D y no se usará 3D en este proyecto.  
47 -  
48 -El servicio de Postgres Versión 17 en el servidor 192.168.1.254 usa el puerto 5432, usuario: postgres y password: x25yvaga2017  
49 -  
50 -Regla 6. Para la construcción en la compilación, se usa JAVA21 del 192.168.1.123  
51 -  
52 -Regla 7. Credenciales para acceso al 192.168.1.123  
53 -cbareiro/x25yvaga2023  
54 -root/x25yvaga2023  
55 -  
56 -Regla 8. Credenciales para acceso al 192.168.1.10  
57 -cbareiro/x25yvaga2020  
58 -root/x25yvaga2021  
59 -  
60 -Regla 9. Credenciales para acceso al 192.168.1.20  
61 -cbareiro/x25yvaga2020  
62 -root/x25yvaga2020  
63 -  
64 -Regla 10. Credenciales para acceso al 192.168.1.129  
65 -cbareiro/x25yvaga2025  
66 -  
67 -Regla 11. Credenciales para JENKINS EN 192.168.1.123  
68 -Usuario: admin  
69 -Contraseña: x25yvaga2024  
70 -  
71 -Regla 12. Para el despliegue del módulo GIS, el Jenkinsfile ya tiene configurado el ID de credencial SSH como sigem-server-123, el cual utiliza el usuario root para las operaciones automáticas de scp y docker compose en ese servidor.  
72 -  
73 -Regla 13. Apache Tomcat  
74 -Los siguientes usuarios estan configurados en Tomcat para la administracion del servidor de  
75 -aplicaciones y el despliegue de servicios. Cada usuario tiene roles especificos asignados.  
76 -  
77 -Tomcat Manager  
78 -Usuario Password  
79 -usuario: manager pase: x25yvaga2023 Roles: manager-gui  
80 -  
81 -admin geoserver admin, manager-gui  
82 -GeoServer Web UI  
83 -usuario: admin pase: geoserver Roles: admin, manager-gui  
84 -http://192.168.1.123:8080/geoserver  
85 -  
86 -Regla 14. Administración del GEOSERVER.  
87 -Los siguientes endpoints son los puntos de acceso principales del sistema GeoServer desplegado:  
88 -Servicio URL  
89 -GeoServer Web UI http://192.168.1.123:8080/geoserver  
90 -Tomcat Manager http://192.168.1.123:8080/manager/html  
91 -WMS (Mapas) http://192.168.1.123:8080/geoserver/wms  
92 -WFS (Vectores) http://192.168.1.123:8080/geoserver/wfs  
93 -WCS (Coberturas) http://192.168.1.123:8080/geoserver/wcs  
94 -REST API http://192.168.1.123:8080/geoserver/rest  
95 -  
96 -Regla 15. La aplicación se desplegará en el servidor 192.168.1.123  
97 -La carpeta de trabajo es: /yvyape/proyectos/sigem-gis  
98 -  
99 -Regla 16. Conexión FDW y Sincronización de Vistas.  
100 -Esta conexión vía Foreign Data Wrapper deberá utilizarse para toda consulta que requiera obtener datos de la base de datos remota del municipio.  
101 -La aplicación GIS-GEOSERVER procederá a usar el código del municipio seleccionado en el LOGIN por parte del usuario. Si el valor de la columna ACTIVO = true entonces se verificará si existe el FDW de ese municipio. Si no existe que lo cree para el servidor de ese municipio en la base de datos georreferenciada del GIS-GEOSERVER.  
102 -Independientemente de si el FDW ya existía, el sistema debe **recrear o refrescar obligatoriamente** las vistas de unión locales (`vw_lotes_morosidad_X` y `vw_mejoras_morosidad_X`) en cada LOGIN o actualización manual para asegurar la sincronización de los datos numéricos de morosidad.  
103 -  
104 -Regla 17. Para el repositorio de código fuente se usa el servidor de git 192.168.1.100 Para acceso al repositorio git usar usuario: cbareiro@yvaga.com.py y password carlos57  
105 -Para la conexión al proyecto git se usa git@git.yvaga.com.py:geo/gis-geoserver.git con SSH.  
106 -Para la conexión al proyecto git se usa http://git.yvaga.com.py/geo/gis-geoserver.git con HTTP.  
107 -  
108 -Regla 18. Para usar SSH desde el equipo local Windows 11, debes usar la aplicación Bitvise con usuario cbareiro.  
109 -  
110 -Regla 19: Uso obligatorio de ./mvnw clean package -DskipTests para builds ágiles.  
111 -  
112 -Regla 20. Para el FrontEnd las llamadas usarán /gis-geoserver/ como prefijo base.  
113 -El acceso al FrontEnd será por https://sigemtest.yvaga.com.py/gis-geoserver/login.  
114 -  
115 -Regla 21. Para el BackEnd el camino es server.servlet.context-path=/gis-geoserver.  
116 -  
117 -Regla 22: Integridad de Comandos Remotos (Bitvise)  
118 -Está vinculada a la Regla 18.  
119 -Queda prohibido el uso de comandos printf, echo o concatenaciones multilínea complejas directamente dentro de sexec para crear archivos en el servidor.  
120 -Ante la necesidad de crear o modificar un archivo completo (como docker-compose.yml o Dockerfile), se debe crear el archivo localmente primero y utilizar sftpc para subirlo. Esto garantiza que el contenido llegue íntegro y sin errores de formato causados por el shell de Windows.  
121 -  
122 -Regla 23. Columnas de Unión (Joins).  
123 -Para toda vista de unión entre tablas locales del GIS (`eXXX_lotes_conccc`, `eXXX_mejoras`) y las tablas remotas del FDW, se debe utilizar obligatoriamente la columna **`ccc`** (Clave Catastral Común) como clave de relación. Queda prohibido el uso de la columna `lote_codigo` para este fin en la Entidad 505 y sucesivas que compartan el mismo esquema.  
124 -Esta es la definición de vista que funciona:  
125 -CREATE OR REPLACE VIEW public.vw_lotes_morosidad_505 AS  
126 -SELECT  
127 - l.*,  
128 - m.inm_ficha,  
129 - m.inm_ctacatastral,  
130 - m.trb_total_deuda,  
131 - m.trb_total_pago,  
132 - m.ultimo_pago  
133 -FROM public.e505_lotes_conccc l  
134 -LEFT JOIN fdw_505.v_liq_entidad_totalxobjeto m ON l.ccc = m.inm_ctacatastral  
135 -  
136 -Regla 24. Resiliencia del LOGIN.  
137 -Toda orquestación de servicios secundarios (GeoServer REST API, habilitación de MVT, etc.) invocada durante el proceso de LOGIN debe ser **no-bloqueante**. Esto implica el uso obligatorio de bloques `try-catch` para capturar cualquier fallo externo y la configuración de un tiempo de espera (**timeout**) máximo de **2 segundo** por conexión, para no comprometer la fluidez del acceso al sistema.  
138 -  
139 -Regla 25. Protocolo de Registro de Logros (Hitos).  
140 -Ante cada logro o funcionalidad nueva validada que requiera un registro oficial, se añadirá (append) una entrada al archivo `VERSION.txt` (local y remoto) en formato texto plano, siguiendo el formato: "Version SIG (Abril 2026) - AAAA.MM.DD.HH.MM.SS ID DOCKER: ". Aqui´se debería agregar el id único del docker usado, A esto se le debe agregar un texto de observación mío.  
141 -Este registro oficial deberá ser autorizado por el usuario. Se aplica solamente por indicaciones del usuario cuando confirme algún hito de éxito que le interese.  
142 \ No newline at end of file 0 \ No newline at end of file
.gitignore 0 → 100644
  1 +# Build artifacts
  2 +target/
  3 +*.jar
  4 +*.war
  5 +*.class
  6 +
  7 +# Maven wrapper cache
  8 +.mvn/repository/
  9 +
  10 +# IDE files
  11 +.idea/
  12 +*.iml
  13 +.vscode/
  14 +*.swp
  15 +
  16 +# Temp and logs
  17 +*.log
  18 +*.tmp
  19 +*.bak
  20 +
  21 +# Docker temp
  22 +docker-compose.yml.remote.tmp
  23 +
  24 +# Binary / export files
  25 +*.gpkg
  26 +project.zip
  27 +
  28 +# Not related to this project
  29 +sigem_kafka/
  30 +.agents/
GIS-GEOSERVER/.mvn/wrapper/maven-wrapper.properties renamed to .mvn/wrapper/maven-wrapper.properties
GIS-GEOSERVER/0 renamed to 0
1 Binary files a/GIS-GEOSERVER/0 and b/0 differ 1 Binary files a/GIS-GEOSERVER/0 and b/0 differ
GIS-GEOSERVER/Dockerfile renamed to Dockerfile
GIS-GEOSERVER/FdwService.java renamed to FdwService.java
GIS-GEOSERVER/docker-compose.yml.remote.tmp deleted
1 -version: '3.8'  
2 -services:  
3 - gis-geoserver-backend:  
4 - image: sigem/gis-geoserver-app:latest  
5 - container_name: sigem-gis-backend  
6 - restart: unless-stopped  
7 - ports:  
8 - - "8081:8081"  
9 - volumes:  
10 - - /home/cbareiro/sigem-gis/gis-geoserver.jar:/app.jar  
11 - environment:  
12 - - TZ=America/Asuncion  
13 - - GIS_DB_HOST=proyecto-postgres-1  
14 - networks:  
15 - - sigem-net  
16 - - proyecto_sigem_network  
17 -  
18 -networks:  
19 - sigem-net:  
20 - driver: bridge  
21 - proyecto_sigem_network:  
22 - external: true  
GIS-GEOSERVER/project.zip deleted
No preview for this file type
GIS-GEOSERVER/sigem_export.gpkg deleted
No preview for this file type
GIS-GEOSERVER/target/classes/application.properties deleted
1 -server.port=8081  
2 -server.servlet.context-path=/gis-geoserver  
3 -  
4 -# Configuración JPA (No gestionada por auto-configuración, pero usada manualmente)  
5 -spring.jpa.hibernate.ddl-auto=none  
6 -spring.jpa.show-sql=true  
7 -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect  
8 -spring.application.name=gis-geoserver  
9 -  
10 -# JPA Config  
11 -spring.datasource.master.url=jdbc:postgresql://192.168.1.254:5432/sigemweb  
12 -spring.datasource.master.username=postgres  
13 -spring.datasource.master.password=x25yvaga2017  
14 -spring.datasource.gis.url=jdbc:postgresql://proyecto-postgres-1:5432/sigem  
15 -spring.datasource.gis.username=sigem_user  
16 -spring.datasource.gis.password=sigem_pass  
17 -  
18 -# Configuración de GeoServer Interno  
19 -geoserver.url=http://192.168.1.123:8083/geoserver  
20 -geoserver.username=admin  
21 -geoserver.password=geoserver  
22 -geoserver.workspace=sigem  
23 -geoserver.datastore=sigem_datastore  
GIS-GEOSERVER/target/classes/com/sigem/gis/GisApplication.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/WebConfig.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/config/DataSourceConfig.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/controller/AdminController.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/controller/GisController.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/controller/ProxyController.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/controller/WebViewController.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/security/AuthController.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/security/AuthRequest.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/security/AuthResponse.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/security/JwtAuthenticationFilter.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/security/JwtUtil.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/security/SecurityConfig.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/service/FdwService.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/com/sigem/gis/service/GeoServerService.class deleted
No preview for this file type
GIS-GEOSERVER/target/classes/static/landing.html deleted
1 -<!DOCTYPE html>  
2 -<html lang="es">  
3 -<head>  
4 - <meta charset="utf-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1">  
6 - <title>SIGEMWEB - Dashboard</title>  
7 -  
8 - <!-- Google Font: Source Sans Pro -->  
9 - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">  
10 - <!-- Font Awesome -->  
11 - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">  
12 - <!-- Theme style -->  
13 - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css">  
14 - <style>  
15 - .content-wrapper { padding: 0; margin-left: 250px; height: calc(100vh - 57px); overflow: hidden; }  
16 - iframe#main-iframe { width: 100%; height: 100%; border: none; }  
17 - .brand-link { background-color: #0056b3 !important; color: white !important; font-weight: bold;}  
18 - .main-header { background-color: #006ddb !important; border-bottom: none; }  
19 - .navbar-light .navbar-nav .nav-link { color: white; font-weight: 600;}  
20 - /* Treeview in popup */  
21 - .modal-treeview ul { list-style-type: none; padding-left: 20px; }  
22 - .modal-treeview li { margin-bottom: 5px; cursor: default;}  
23 - .modal-treeview li span { font-size: 14px; font-weight: 500; }  
24 - .modal-treeview li span.clickable:hover { color: #0056b3; cursor: pointer; font-weight: bold; }  
25 - </style>  
26 -</head>  
27 -<body class="hold-transition sidebar-mini layout-fixed">  
28 -<div class="wrapper">  
29 -  
30 - <!-- Navbar -->  
31 - <nav class="main-header navbar navbar-expand navbar-light">  
32 - <!-- Left navbar links -->  
33 - <ul class="navbar-nav">  
34 - <li class="nav-item">  
35 - <a class="nav-link" data-widget="pushmenu" href="#" role="button"><i class="fas fa-bars"></i></a>  
36 - </li>  
37 - <li class="nav-item d-none d-sm-inline-block">  
38 - <span class="nav-link" style="color: white; font-size: 18px; margin-left:10px;">Municipalidad de <span id="nav-entidad-text" style="font-weight: 800;">...</span> <span style="font-size: 14px; font-weight: 300;">¡Emergente y Sostenible!</span></span>  
39 - </li>  
40 - </ul>  
41 -  
42 - <!-- Right navbar links -->  
43 - <ul class="navbar-nav ml-auto">  
44 - <li class="nav-item dropdown">  
45 - <a class="nav-link" data-toggle="dropdown" href="#" style="color: white;">  
46 - <i class="far fa-user mr-2"></i> <span id="nav-user-text">Cargando...</span>  
47 - </a>  
48 - <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">  
49 - <a href="#" class="dropdown-item" onclick="cerrarSesion()">  
50 - <i class="fas fa-sign-out-alt mr-2 text-danger"></i> Cerrar Sesión  
51 - </a>  
52 - </div>  
53 - </li>  
54 - </ul>  
55 - </nav>  
56 - <!-- /.navbar -->  
57 -  
58 - <!-- Main Sidebar Container -->  
59 - <aside class="main-sidebar sidebar-dark-primary elevation-4">  
60 - <!-- Brand Logo -->  
61 - <a href="#" class="brand-link text-center mb-2">  
62 - <span class="brand-text"><b>SIGEM</b>WEB</span>  
63 - </a>  
64 -  
65 - <!-- Sidebar Menu -->  
66 - <nav class="mt-2">  
67 - <ul class="nav nav-pills nav-sidebar flex-column text-sm" data-widget="treeview" role="menu" data-accordion="false">  
68 -  
69 - <li class="nav-item">  
70 - <a href="#" class="nav-link" onclick="loadContent('/gis-geoserver/widgets')">  
71 - <i class="nav-icon fas fa-tachometer-alt"></i>  
72 - <p>Dashboard <span class="right badge badge-primary">New</span></p>  
73 - </a>  
74 - </li>  
75 -  
76 - <!-- Legacy Tree -->  
77 - <li class="nav-item menu-open">  
78 - <a href="#" class="nav-link active" style="background-color: #343a40;">  
79 - <i class="nav-icon fas fa-chart-line"></i>  
80 - <p>  
81 - Control de Gestión  
82 - <i class="right fas fa-angle-left"></i>  
83 - </p>  
84 - </a>  
85 - <ul class="nav nav-treeview">  
86 - <li class="nav-item menu-open">  
87 - <a href="#" class="nav-link">  
88 - <i class="far fa-dot-circle nav-icon"></i>  
89 - <p>Mapas <i class="right fas fa-angle-left"></i></p>  
90 - </a>  
91 - <ul class="nav nav-treeview" style="margin-left: 10px;">  
92 - <li class="nav-item menu-open">  
93 - <a href="#" class="nav-link">  
94 - <i class="fas fa-map nav-icon text-info"></i>  
95 - <p>Tributarios <i class="right fas fa-angle-left"></i></p>  
96 - </a>  
97 - <ul class="nav nav-treeview" style="margin-left: 10px;">  
98 - <li class="nav-item">  
99 - <a href="#" class="nav-link" data-toggle="modal" data-target="#modalMorosidad">  
100 - <i class="fas fa-layer-group nav-icon text-warning"></i>  
101 - <p>Mapa Morosidad/Pago</p>  
102 - </a>  
103 - </li>  
104 - </ul>  
105 - </li>  
106 - </ul>  
107 - </li>  
108 - </ul>  
109 - </li>  
110 -  
111 - <!-- Dummy Options -->  
112 - <li class="nav-header">OTRAS OPCIONES</li>  
113 - <li class="nav-item">  
114 - <a href="#" class="nav-link" onclick="notImplemented()">  
115 - <i class="nav-icon fas fa-file-invoice-dollar text-muted"></i>  
116 - <p>Liquidaciones</p>  
117 - </a>  
118 - </li>  
119 - <li class="nav-item">  
120 - <a href="#" class="nav-link" onclick="notImplemented()">  
121 - <i class="nav-icon fas fa-users text-muted"></i>  
122 - <p>Contribuyentes</p>  
123 - </a>  
124 - </li>  
125 -  
126 - </ul>  
127 - </nav>  
128 - <!-- /.sidebar-menu -->  
129 - </aside>  
130 -  
131 - <!-- Content Wrapper. Contains page content -->  
132 - <div class="content-wrapper">  
133 - <iframe id="main-iframe" src="/gis-geoserver/widgets"></iframe>  
134 - </div>  
135 -  
136 - <!-- Main Footer -->  
137 - <footer class="main-footer" style="padding: 5px; font-size: 12px;">  
138 - <strong>Sistema de Información Geográfica Municipal.</strong>  
139 - Todos los derechos reservados.  
140 - </footer>  
141 -</div>  
142 -<!-- ./wrapper -->  
143 -  
144 -<!-- Modal Pop-up para Selección de Mapa (Exactamente como el legado) -->  
145 -<div class="modal fade" id="modalMorosidad" tabindex="-1" role="dialog" aria-hidden="true">  
146 - <div class="modal-dialog modal-sm" role="document" style="margin-top: 15vh;">  
147 - <div class="modal-content shadow-lg" style="border: 1px solid #17a2b8;">  
148 - <div class="modal-header bg-info" style="padding: 10px;">  
149 - <h6 class="modal-title" style="font-weight: bold;"><i class="fas fa-filter"></i> Selección Capas Geo</h6>  
150 - <button type="button" class="close text-white" data-dismiss="modal" aria-label="Close">  
151 - <span aria-hidden="true">&times;</span>  
152 - </button>  
153 - </div>  
154 - <div class="modal-body modal-treeview">  
155 - <ul>  
156 - <li><i class="fas fa-minus-square mr-1 text-secondary"></i> <span>MAPA DE MOROSIDAD</span>  
157 - <ul>  
158 - <li><i class="fas fa-plus-square mr-1 text-secondary"></i> <span>IMPUESTOS ADEUDADOS</span>  
159 - <ul>  
160 - <li><i class="fas fa-plus mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">Impuesto Inmobiliario</span></li>  
161 - <li><i class="fas fa-plus mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">Patente Comercial</span></li>  
162 - <li><i class="fas fa-plus-square mr-1 text-secondary"></i> <span>Todos</span>  
163 - <ul>  
164 - <li><i class="far fa-window-restore mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">POR TOTAL</span></li>  
165 - <li><i class="far fa-clock mr-1 text-muted"></i> <span class="text-primary font-weight-bold clickable" onclick="loadMap()">ULTIMO PAGO / TODOS</span></li>  
166 - </ul>  
167 - </li>  
168 - </ul>  
169 - </li>  
170 - <li><i class="fas fa-plus-square mr-1 text-muted"></i> <span class="clickable" onclick="notImplemented()">IMPUESTOS PAGADOS</span></li>  
171 - </ul>  
172 - </li>  
173 - </ul>  
174 - </div>  
175 - </div>  
176 - </div>  
177 -</div>  
178 -  
179 -<!-- jQuery -->  
180 -<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  
181 -<!-- Bootstrap 4 -->  
182 -<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>  
183 -<!-- AdminLTE App -->  
184 -<script src="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/js/adminlte.min.js"></script>  
185 -  
186 -<script>  
187 - // Recuperar datos de sesión  
188 - const token = localStorage.getItem('jwt');  
189 - const userName = localStorage.getItem('user_name');  
190 - const entidad = localStorage.getItem('entidad');  
191 -  
192 - if (!token) {  
193 - window.location.href = "/gis-geoserver/login";  
194 - }  
195 -  
196 - document.getElementById('nav-user-text').innerText = userName || 'Operador Local';  
197 - document.getElementById('nav-entidad-text').innerText = entidad || 'N/D';  
198 -  
199 - function notImplemented() {  
200 - alert("OPCIÓN NO IMPLEMENTADA");  
201 - }  
202 -  
203 - function loadContent(url) {  
204 - document.getElementById('main-iframe').src = url;  
205 - }  
206 -  
207 - function loadMap() {  
208 - // Cierra el modal de forma programática usando jQuery de Bootstrap  
209 - $('#modalMorosidad').modal('hide');  
210 - // Redirige el iframe central hacia nuestro impecable mapas.html  
211 - loadContent('/gis-geoserver/mapas');  
212 - }  
213 -  
214 - function cerrarSesion() {  
215 - localStorage.clear();  
216 - window.location.href = "/gis-geoserver/login";  
217 - }  
218 -</script>  
219 -</body>  
220 -</html>  
GIS-GEOSERVER/target/classes/static/login.html deleted
1 -<!DOCTYPE html>  
2 -<html lang="es">  
3 -<head>  
4 - <meta charset="utf-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1">  
6 - <title>Inicie Sesión - Ecosistema SIGEM</title>  
7 -  
8 - <!-- Google Font: Source Sans Pro (Estandar de AdminLTE) -->  
9 - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">  
10 - <!-- Font Awesome -->  
11 - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">  
12 - <!-- Theme style AdminLTE 3 -->  
13 - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css">  
14 - <style>  
15 - .login-page {  
16 - background: linear-gradient(135deg, #e0eafc 0%, #cfdef3 100%);  
17 - }  
18 - .card-primary.card-outline {  
19 - border-top: 3px solid #0056b3;  
20 - }  
21 - .btn-primary {  
22 - background-color: #0056b3;  
23 - border-color: #0056b3;  
24 - }  
25 - .btn-primary:hover {  
26 - background-color: #004494;  
27 - border-color: #004494;  
28 - }  
29 - .login-logo a {  
30 - color: #333 !important;  
31 - }  
32 - </style>  
33 -</head>  
34 -<body class="hold-transition login-page">  
35 -<div class="login-box">  
36 - <div class="login-logo">  
37 - <a href="#"><b>SIGEM</b>WEB</a>  
38 - </div>  
39 - <!-- /.login-logo -->  
40 - <div class="card card-outline card-primary shadow-lg">  
41 - <div class="card-body login-card-body rounded">  
42 - <p class="login-box-msg font-weight-bold" style="color: #555;">Visor Georreferenciado Multi-Tenant</p>  
43 -  
44 - <form id="loginForm">  
45 - <label for="municipioSearch" class="text-xs text-muted mb-1" style="font-size: 0.8rem; text-transform: uppercase;">1. Entidad (Municipalidad)</label>  
46 - <div class="input-group mb-2">  
47 - <input type="text" id="municipioSearch" class="form-control" placeholder="Buscar municipio (ej. 505)" autocomplete="off">  
48 - <div class="input-group-append">  
49 - <div class="input-group-text">  
50 - <span class="fas fa-search"></span>  
51 - </div>  
52 - </div>  
53 - </div>  
54 - <div class="form-group mb-3">  
55 - <select id="entidad" class="form-control" required size="3" style="height: 85px; cursor: pointer; font-size: 0.9rem;">  
56 - <option value="505">Entidad 505 (Piloto GIS)</option>  
57 - <option value="800">Entidad 800 (Pruebas)</option>  
58 - <option value="900">Entidad 900 (Desarrollo)</option>  
59 - </select>  
60 - </div>  
61 -  
62 - <label class="text-xs text-muted mb-1" style="font-size: 0.8rem; text-transform: uppercase;">2. Credenciales</label>  
63 - <div class="input-group mb-3">  
64 - <input type="text" id="username" class="form-control" placeholder="Usu_alias (ej. operador)" required autocomplete="username">  
65 - <div class="input-group-append">  
66 - <div class="input-group-text">  
67 - <span class="fas fa-user"></span>  
68 - </div>  
69 - </div>  
70 - </div>  
71 - <div class="input-group mb-3">  
72 - <input type="password" id="password" class="form-control" placeholder="Tu clave alfanumérica" required autocomplete="current-password">  
73 - <div class="input-group-append">  
74 - <div class="input-group-text">  
75 - <span class="fas fa-lock"></span>  
76 - </div>  
77 - </div>  
78 - </div>  
79 -  
80 - <div id="error-msg" class="alert alert-danger p-2 mb-3 text-center" style="display:none; font-size: 13px;"></div>  
81 -  
82 - <div class="row mt-4">  
83 - <div class="col-12">  
84 - <button type="submit" class="btn btn-primary btn-block font-weight-bold" id="btn-login" style="padding: 10px;">  
85 - <span id="btn-text">INICIAR SESIÓN</span>  
86 - <div class="spinner-border spinner-border-sm text-light" id="spinner" role="status" style="display:none; margin: auto;"></div>  
87 - </button>  
88 - </div>  
89 - </div>  
90 - </form>  
91 - </div>  
92 - <!-- /.login-card-body -->  
93 - </div>  
94 -</div>  
95 -<!-- /.login-box -->  
96 -  
97 -<!-- jQuery -->  
98 -<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  
99 -<!-- Bootstrap 4 -->  
100 -<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>  
101 -<!-- AdminLTE App -->  
102 -<script src="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/js/adminlte.min.js"></script>  
103 -  
104 -<script>  
105 - // Filtro interactivo de municipios  
106 - const searchInput = document.getElementById('municipioSearch');  
107 - const selectEntidad = document.getElementById('entidad');  
108 - const originalOptions = Array.from(selectEntidad.options);  
109 -  
110 - searchInput.addEventListener('input', (e) => {  
111 - const text = e.target.value.toLowerCase();  
112 - selectEntidad.innerHTML = '';  
113 - originalOptions.forEach(opt => {  
114 - if (opt.text.toLowerCase().includes(text) || opt.value.includes(text)) {  
115 - selectEntidad.appendChild(opt);  
116 - }  
117 - });  
118 - if (selectEntidad.options.length > 0) {  
119 - selectEntidad.options[0].selected = true;  
120 - }  
121 - });  
122 -  
123 - // Limpiar sesión previa si por error caen al login  
124 - localStorage.removeItem('jwt');  
125 - localStorage.removeItem('user_name');  
126 -  
127 - document.getElementById('loginForm').addEventListener('submit', function(e) {  
128 - e.preventDefault();  
129 -  
130 - const username = document.getElementById('username').value;  
131 - const password = document.getElementById('password').value;  
132 - const entidad = document.getElementById('entidad').value;  
133 - const errorMsg = document.getElementById('error-msg');  
134 - const btnText = document.getElementById('btn-text');  
135 - const spinner = document.getElementById('spinner');  
136 -  
137 - // Bloquear UI  
138 - errorMsg.style.display = 'none';  
139 - btnText.style.display = 'none';  
140 - spinner.style.display = 'block';  
141 - document.getElementById('btn-login').disabled = true;  
142 -  
143 - const payload = {  
144 - username: username,  
145 - password: password,  
146 - entidad: entidad  
147 - };  
148 -  
149 - fetch('/gis-geoserver/api/auth/login', {  
150 - method: 'POST',  
151 - headers: { 'Content-Type': 'application/json' },  
152 - body: JSON.stringify(payload)  
153 - })  
154 - .then(response => {  
155 - if (!response.ok) {  
156 - return response.json().then(errData => {  
157 - throw new Error(errData.message || "Credenciales incorrectas.");  
158 - });  
159 - }  
160 - return response.json();  
161 - })  
162 - .then(data => {  
163 - // LOGIN EXITOOSO!  
164 - localStorage.setItem('jwt', data.token);  
165 - localStorage.setItem('user_name', data.nombre); // Nombre completo del usuario  
166 - localStorage.setItem('entidad', entidad);  
167 -  
168 - // Persistir metadatos del Visor  
169 - localStorage.setItem('map_lat', data.lat);  
170 - localStorage.setItem('map_lng', data.lng);  
171 - localStorage.setItem('map_zoom', data.zoom);  
172 - localStorage.setItem('map_min_zoom', data.minZoom);  
173 - localStorage.setItem('map_max_zoom', data.maxZoom);  
174 - localStorage.setItem('mapa_base_id', data.mapaBase);  
175 - localStorage.setItem('map_bounds', data.bounds);  
176 -  
177 - // Redirigir a la URL del Mapas  
178 - window.location.href = "/gis-geoserver/landing";  
179 - })  
180 - .catch(error => {  
181 - // LOGIN ERROR  
182 - errorMsg.innerText = error.message;  
183 - errorMsg.style.display = 'block';  
184 -  
185 - // Restaurar UI  
186 - btnText.style.display = 'block';  
187 - spinner.style.display = 'none';  
188 - document.getElementById('btn-login').disabled = false;  
189 - });  
190 - });  
191 -</script>  
192 -</body>  
193 -</html>  
GIS-GEOSERVER/target/classes/static/mapas.html deleted
1 -<!DOCTYPE html>  
2 -<html lang="es">  
3 -  
4 -<head>  
5 - <meta charset="UTF-8">  
6 - <meta name="viewport" content="width=device-width, initial-scale=1.0">  
7 - <title>SISTEMA GIS - MapLibre 3D Elite</title>  
8 - <script>  
9 - if (!localStorage.getItem('jwt')) {  
10 - window.location.href = '/gis-geoserver/login';  
11 - }  
12 - </script>  
13 - <!-- MapLibre GL JS -->  
14 - <script src="https://unpkg.com/maplibre-gl@3.6.2/dist/maplibre-gl.js"></script>  
15 - <link href="https://unpkg.com/maplibre-gl@3.6.2/dist/maplibre-gl.css" rel="stylesheet" />  
16 - <style>  
17 - body,  
18 - html {  
19 - height: 100%;  
20 - margin: 0;  
21 - font-family: 'Inter', Arial, sans-serif;  
22 - background-color: #0f172a;  
23 - color: #fff;  
24 - overflow: hidden;  
25 - }  
26 -  
27 - .header {  
28 - height: 60px;  
29 - background: #1e293b;  
30 - display: flex;  
31 - align-items: center;  
32 - padding: 0 20px;  
33 - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5);  
34 - font-weight: bold;  
35 - justify-content: space-between;  
36 - position: relative;  
37 - z-index: 1001;  
38 - }  
39 -  
40 - .logout-btn {  
41 - background: rgba(255, 255, 255, 0.1);  
42 - border: 1px solid rgba(255, 255, 255, 0.3);  
43 - color: white;  
44 - padding: 8px 16px;  
45 - border-radius: 8px;  
46 - cursor: pointer;  
47 - transition: all 0.2s;  
48 - }  
49 -  
50 - .logout-btn:hover {  
51 - background: #ef4444;  
52 - border-color: #ef4444;  
53 - }  
54 -  
55 - .app-container {  
56 - display: flex;  
57 - height: calc(100vh - 60px);  
58 - }  
59 -  
60 - .sidebar {  
61 - width: 340px;  
62 - background: #0f172a;  
63 - border-right: 1px solid rgba(255, 255, 255, 0.1);  
64 - overflow-y: auto;  
65 - padding: 20px;  
66 - flex-shrink: 0;  
67 - }  
68 -  
69 - .menu-title {  
70 - font-size: 11px;  
71 - color: #64748b;  
72 - font-weight: 700;  
73 - text-transform: uppercase;  
74 - margin: 25px 0 10px;  
75 - letter-spacing: 1px;  
76 - }  
77 -  
78 - .menu-item {  
79 - padding: 12px 16px;  
80 - border-radius: 10px;  
81 - cursor: pointer;  
82 - display: flex;  
83 - align-items: center;  
84 - gap: 12px;  
85 - color: #94a3b8;  
86 - transition: all 0.2s;  
87 - margin-bottom: 4px;  
88 - border: 1px solid transparent;  
89 - text-decoration: none;  
90 - }  
91 -  
92 - .menu-item:hover {  
93 - background: rgba(255, 255, 255, 0.05);  
94 - color: #fff;  
95 - }  
96 -  
97 - .menu-item.active {  
98 - background: rgba(59, 130, 246, 0.1);  
99 - color: #3b82f6;  
100 - border-color: rgba(59, 130, 246, 0.3);  
101 - }  
102 -  
103 - .submenu {  
104 - padding-left: 10px;  
105 - margin-bottom: 15px;  
106 - }  
107 -  
108 - #map {  
109 - flex: 1;  
110 - position: relative;  
111 - }  
112 -  
113 - /* Stats Dashboard Overlay */  
114 - .stats-grid {  
115 - display: grid;  
116 - grid-template-columns: 1fr 1fr;  
117 - gap: 10px;  
118 - margin-bottom: 20px;  
119 - }  
120 -  
121 - .stat-card {  
122 - background: rgba(255, 255, 255, 0.03);  
123 - padding: 15px;  
124 - border-radius: 12px;  
125 - border: 1px solid rgba(255, 255, 255, 0.05);  
126 - }  
127 -  
128 - .stat-label {  
129 - font-size: 11px;  
130 - color: #64748b;  
131 - text-transform: uppercase;  
132 - font-weight: 600;  
133 - }  
134 -  
135 - .stat-value {  
136 - font-size: 18px;  
137 - font-weight: 700;  
138 - color: #fff;  
139 - margin-top: 5px;  
140 - }  
141 -  
142 - /* Map Title Overlay */  
143 - .map-title-overlay {  
144 - position: absolute;  
145 - top: 20px;  
146 - left: 50%;  
147 - transform: translateX(-50%);  
148 - background: rgba(15, 23, 42, 0.9);  
149 - padding: 8px 24px;  
150 - border-radius: 50px;  
151 - border: 1px solid rgba(255, 255, 255, 0.1);  
152 - color: #fff;  
153 - font-weight: 700;  
154 - font-size: 13px;  
155 - z-index: 1000;  
156 - backdrop-filter: blur(8px);  
157 - text-transform: uppercase;  
158 - letter-spacing: 1px;  
159 - }  
160 -  
161 - /* Toggle 3D Control */  
162 - .map-controls-floating {  
163 - position: absolute;  
164 - top: 20px;  
165 - right: 20px;  
166 - z-index: 1000;  
167 - display: flex;  
168 - flex-direction: column;  
169 - gap: 10px;  
170 - }  
171 -  
172 - .map-btn {  
173 - background: rgba(15, 23, 42, 0.9);  
174 - border: 1px solid rgba(255, 255, 255, 0.1);  
175 - color: white;  
176 - padding: 10px;  
177 - border-radius: 10px;  
178 - cursor: pointer;  
179 - backdrop-filter: blur(8px);  
180 - display: flex;  
181 - align-items: center;  
182 - gap: 8px;  
183 - font-weight: 600;  
184 - font-size: 12px;  
185 - transition: all 0.2s;  
186 - }  
187 -  
188 - .map-btn:hover {  
189 - background: #1e293b;  
190 - border-color: #3b82f6;  
191 - }  
192 -  
193 - .map-btn.active {  
194 - background: #3b82f6;  
195 - border-color: #3b82f6;  
196 - }  
197 -  
198 - /* Legend */  
199 - .legend {  
200 - position: absolute;  
201 - bottom: 30px;  
202 - right: 30px;  
203 - background: rgba(15, 23, 42, 0.9);  
204 - padding: 15px;  
205 - border-radius: 12px;  
206 - border: 1px solid rgba(255, 255, 255, 0.1);  
207 - backdrop-filter: blur(10px);  
208 - color: white;  
209 - font-size: 12px;  
210 - z-index: 1000;  
211 - box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);  
212 - display: none;  
213 - }  
214 -  
215 - .legend-item {  
216 - display: flex;  
217 - align-items: center;  
218 - gap: 8px;  
219 - margin-bottom: 5px;  
220 - }  
221 -  
222 - .legend-color {  
223 - width: 12px;  
224 - height: 12px;  
225 - border-radius: 3px;  
226 - }  
227 -  
228 - /* Custom Popup Style */  
229 - .maplibregl-popup-content {  
230 - background: #1e293b;  
231 - color: white;  
232 - border-radius: 12px;  
233 - padding: 0;  
234 - border: 1px solid rgba(255, 255, 255, 0.1);  
235 - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);  
236 - }  
237 -  
238 - .maplibregl-popup-tip {  
239 - border-top-color: #1e293b;  
240 - }  
241 -  
242 - .popup-header {  
243 - background: #3b82f6;  
244 - padding: 12px;  
245 - border-radius: 10px 10px 0 0;  
246 - font-weight: 700;  
247 - font-size: 13px;  
248 - text-transform: uppercase;  
249 - }  
250 -  
251 - .popup-body {  
252 - padding: 15px;  
253 - }  
254 -  
255 - .popup-stat {  
256 - margin-bottom: 10px;  
257 - }  
258 -  
259 - .popup-label {  
260 - font-size: 10px;  
261 - color: #64748b;  
262 - text-transform: uppercase;  
263 - }  
264 -  
265 - .popup-value {  
266 - font-size: 13px;  
267 - font-weight: 600;  
268 - }  
269 -  
270 - /* Leyenda de morosidad con Glassmorphism */  
271 - .map-legend {  
272 - position: absolute;  
273 - bottom: 30px;  
274 - right: 20px;  
275 - background: rgba(15, 23, 42, 0.85);  
276 - padding: 18px;  
277 - border-radius: 16px;  
278 - border: 1px solid rgba(255, 255, 255, 0.1);  
279 - color: #f1f5f9;  
280 - font-size: 11px;  
281 - z-index: 1000;  
282 - backdrop-filter: blur(12px);  
283 - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);  
284 - max-width: 240px;  
285 - }  
286 -  
287 - .legend-item {  
288 - display: flex;  
289 - align-items: center;  
290 - margin-bottom: 8px;  
291 - gap: 10px;  
292 - }  
293 -  
294 - .legend-color {  
295 - width: 30px;  
296 - height: 12px;  
297 - border-radius: 4px;  
298 - border: 1px solid rgba(255, 255, 255, 0.1);  
299 - }  
300 -  
301 - /* Capas Switcher */  
302 - .layer-switcher {  
303 - position: absolute;  
304 - top: 20px;  
305 - right: 50px;  
306 - background: rgba(13, 17, 23, 0.9);  
307 - padding: 10px;  
308 - border-radius: 8px;  
309 - border: 1px solid rgba(255, 255, 255, 0.1);  
310 - z-index: 10;  
311 - }  
312 - </style>  
313 -</head>  
314 -  
315 -<body>  
316 - <div class="header">  
317 - <div>SIGEM GIS <span id="user-greeting"  
318 - style="font-size: 13px; font-weight: normal; margin-left: 10px; opacity: 0.7;"></span></div>  
319 - <button class="logout-btn" onclick="logout()">Cerrar Sesión</button>  
320 - </div>  
321 - <div class="app-container">  
322 - <div class="sidebar">  
323 - <div id="stats-dashboard">  
324 - <div class="menu-title">Resumen Municipal</div>  
325 - <div class="stats-grid">  
326 - <div class="stat-card">  
327 - <div class="stat-label">Total Lotes</div>  
328 - <div id="stat-lotes" class="stat-value">...</div>  
329 - </div>  
330 - <div class="stat-card">  
331 - <div class="stat-label">Morosidad</div>  
332 - <div id="stat-morosos" class="stat-value" style="color: #f87171;">...</div>  
333 - </div>  
334 - </div>  
335 - </div>  
336 -  
337 - <div class="menu-title">Control de Gestión</div>  
338 - <div id="menu-reset" class="menu-item active" onclick="resetMap()">Capas Base</div>  
339 -  
340 - <div class="menu-title">Mapas Tributarios</div>  
341 - <div class="submenu">  
342 - <div id="menu-ultimo-pago" class="menu-item" onclick="setHeatmap('ultimo-pago')">Por Último Pago  
343 - </div>  
344 - <div id="menu-percentiles" class="menu-item" onclick="setHeatmap('percentiles')">Por Total  
345 - (Percentiles)</div>  
346 - <div id="menu-wms-test" class="menu-item" onclick="toggleWmsLayer()"  
347 - style="color: #fbbf24; border-top: 1px dashed #444; margin-top: 5px; font-weight: bold; display: none;">  
348 - Vista PNG (Full) <span id="wms-status" style="font-size: 9px; opacity: 0.6;">[OFF]</span>  
349 - </div>  
350 - </div>  
351 -  
352 - <div class="menu-title">Administración</div>  
353 - <div id="btn-update-data" class="menu-item" onclick="updateMunicipalData()" style="color: #60a5fa;">  
354 - <span id="update-icon"></span> <span id="update-text">Actualizar FDW</span>  
355 - </div>  
356 -  
357 - </div>  
358 -  
359 - <div id="map">  
360 - <!-- Leyenda Dinámica -->  
361 - <div class="map-legend" id="legend" style="display: none;">  
362 - <div id="legend-content"></div>  
363 - <div  
364 - style="font-size: 10px; margin-top: 10px; border-top: 1px solid #333; padding-top: 5px; color: #888;">  
365 - Fuente: Sistema SIGEM</div>  
366 - </div>  
367 -  
368 - <!-- Selector de Capas Base -->  
369 - <div class="layer-switcher" style="position: absolute; top: 15px; left: 15px; z-index: 1000;">  
370 - <select id="base-layer-select"  
371 - style="background: rgba(15, 23, 42, 0.9); color: white; border: 1px solid rgba(255,255,255,0.2); padding: 5px 10px; border-radius: 8px; font-size: 11px; cursor: pointer; backdrop-filter: blur(8px);">  
372 - <option value="dark">CartoDB Dark</option>  
373 - <option value="streets">OpenStreetMap</option>  
374 - <option value="satellite">Esri Satélite</option>  
375 - <option value="google">Google Satélite</option>  
376 - </select>  
377 - </div>  
378 - <div id="map-title" class="map-title-overlay">Vista Cartográfica General</div>  
379 - </div>  
380 - </div>  
381 -  
382 - <script>  
383 - const userName = localStorage.getItem('user_name');  
384 - if (userName) document.getElementById('user-greeting').innerText = `| Bienvenido, ${userName}`;  
385 -  
386 - const entidad = localStorage.getItem('entidad') || '505';  
387 - const token = localStorage.getItem('jwt');  
388 - const geoserverBase = 'gwc/service/wmts';  
389 -  
390 - function logout() {  
391 - localStorage.clear();  
392 - window.location.href = '/gis-geoserver/login';  
393 - }  
394 -  
395 - // --- Inicialización del Mapa ---  
396 - const lat = parseFloat(localStorage.getItem('map_lat')) || -25.449;  
397 - const lng = parseFloat(localStorage.getItem('map_lng')) || -56.443;  
398 - const zoom = parseInt(localStorage.getItem('map_zoom')) || 15;  
399 -  
400 - const map = new maplibregl.Map({  
401 - container: 'map',  
402 - style: {  
403 - version: 8,  
404 - sources: {  
405 - 'raster-tiles': {  
406 - type: 'raster',  
407 - tiles: ['https://a.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png'],  
408 - tileSize: 256,  
409 - attribution: '&copy; CartoDB'  
410 - }  
411 - },  
412 - layers: [{  
413 - id: 'basemap',  
414 - type: 'raster',  
415 - source: 'raster-tiles',  
416 - minzoom: 0,  
417 - maxzoom: 20  
418 - }]  
419 - },  
420 - center: [lng, lat],  
421 - zoom: zoom,  
422 - pitch: 0,  
423 - bearing: 0,  
424 - antialias: true  
425 - });  
426 -  
427 - map.addControl(new maplibregl.NavigationControl({ position: 'bottom-left' }));  
428 -  
429 - // --- Carga de Capas Vectoriales ---  
430 - map.on('load', () => {  
431 - initGisSources();  
432 - loadMunicipalStats();  
433 - });  
434 -  
435 - function initGisSources() {  
436 - console.log("Cargando fuentes vectoriales (MVT)...");  
437 -  
438 - // Fuente de Lotes (MVT) - TMS Nativo de GeoServer  
439 - if (!map.getSource('lotes-mvt')) {  
440 - map.addSource('lotes-mvt', {  
441 - type: 'vector',  
442 - tiles: [  
443 - `${window.location.origin}/gis-geoserver/gwc/service/tms/1.0.0/sigem:vw_lotes_morosidad_${entidad}@XYZ-900913@pbf/{z}/{x}/{y}.pbf`  
444 - ],  
445 - scheme: 'tms'  
446 - });  
447 - }  
448 -  
449 - // Capa de Lotes (2D) - Visibilidad Inicial Mejorada  
450 - if (!map.getLayer('lotes-layer')) {  
451 - map.addLayer({  
452 - id: 'lotes-layer',  
453 - type: 'fill',  
454 - source: 'lotes-mvt',  
455 - 'source-layer': `vw_lotes_morosidad_${entidad}`,  
456 - paint: {  
457 - 'fill-color': 'rgba(59, 130, 246, 0.1)', // Azul tenue inicial  
458 - 'fill-outline-color': 'rgba(255, 255, 255, 0.3)' // Borde blanco visible  
459 - }  
460 - });  
461 - }  
462 -  
463 - // Fuente de Mejoras (MVT) - TMS Nativo de GeoServer  
464 - if (!map.getSource('mejoras-mvt')) {  
465 - map.addSource('mejoras-mvt', {  
466 - type: 'vector',  
467 - tiles: [  
468 - `${window.location.origin}/gis-geoserver/gwc/service/tms/1.0.0/sigem:e${entidad}_mejoras@XYZ-900913@pbf/{z}/{x}/{y}.pbf`  
469 - ],  
470 - scheme: 'tms'  
471 - });  
472 - }  
473 -  
474 - // [PRUEBA CONTROLADA] Fuente Raster WMS (Renderizado en Servidor)  
475 - if (!map.getSource('lotes-wms')) {  
476 - map.addSource('lotes-wms', {  
477 - 'type': 'raster',  
478 - 'tiles': [  
479 - `${window.location.origin}/gis-geoserver/sigem/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=sigem:vw_lotes_morosidad_${entidad}&STYLES=morosidad_style_wms&FORMAT=image/png&TRANSPARENT=TRUE&WIDTH=256&HEIGHT=256&SRS=EPSG:3857&BBOX={bbox-epsg-3857}`  
480 - ],  
481 - 'tileSize': 256  
482 - });  
483 - }  
484 -  
485 - if (!map.getLayer('lotes-wms-layer')) {  
486 - map.addLayer({  
487 - 'id': 'lotes-wms-layer',  
488 - 'type': 'raster',  
489 - 'source': 'lotes-wms',  
490 - 'paint': { 'raster-opacity': 0.8 },  
491 - 'layout': { 'visibility': 'none' }  
492 - }); // Agregamos al final  
493 - }  
494 -  
495 - // Capa de Mejoras (Inicialmente oculta o 2D)  
496 - if (!map.getLayer('mejoras-layer')) {  
497 - map.addLayer({  
498 - id: 'mejoras-layer',  
499 - type: 'fill',  
500 - source: 'mejoras-mvt',  
501 - 'source-layer': `e${entidad}_mejoras`,  
502 - paint: {  
503 - 'fill-color': 'rgba(59, 130, 246, 0.2)',  
504 - 'fill-outline-color': 'rgba(59, 130, 246, 0.5)'  
505 - }  
506 - });  
507 - }  
508 - }  
509 -  
510 - // --- Lógica de Capas Base (Estricto Fondo Nativo) ---  
511 - const baseConfig = {  
512 - 'dark': { url: 'https://a.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', sourceMax: 20 },  
513 - 'streets': { url: 'https://a.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png', sourceMax: 20 },  
514 - 'satellite': { url: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', sourceMax: 17 },  
515 - 'google': { url: 'https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', sourceMax: 21 }  
516 - };  
517 -  
518 - document.getElementById('base-layer-select').addEventListener('change', (e) => {  
519 - const config = baseConfig[e.target.value];  
520 -  
521 - if (map.getLayer('basemap')) map.removeLayer('basemap');  
522 - if (map.getSource('raster-tiles')) map.removeSource('raster-tiles');  
523 -  
524 - map.addSource('raster-tiles', {  
525 - type: 'raster',  
526 - tiles: [config.url],  
527 - tileSize: 256,  
528 - maxzoom: config.sourceMax // Limite del satélite, a partir de acá MapLibre estirará la foto  
529 - });  
530 -  
531 - // Empujar el fondo debajo de todas las capas existentes (cero interferencia visual)  
532 - let zIndexFloor = null;  
533 - const currentLayers = map.getStyle().layers;  
534 - if (currentLayers.length > 0) {  
535 - zIndexFloor = currentLayers[0].id;  
536 - }  
537 -  
538 - map.addLayer({  
539 - id: 'basemap',  
540 - type: 'raster',  
541 - source: 'raster-tiles',  
542 - minzoom: 0, // Dibuja desde el espacio  
543 - maxzoom: 23 // Dibuja hasta nivel vecinal, reciclando loseta gracias a sourceMax  
544 - }, zIndexFloor);  
545 - });  
546 -  
547 - // Lógica de 3D eliminada por requerimiento de usuario  
548 -  
549 -  
550 - // --- Mapa de Calor (Heatmap) via Expresiones ---  
551 - function setHeatmap(type) {  
552 - document.querySelectorAll('.menu-item').forEach(el => el.classList.remove('active'));  
553 - const titleEl = document.getElementById('map-title');  
554 - const legendEl = document.getElementById('legend');  
555 - const legendContent = document.getElementById('legend-content');  
556 - legendEl.style.display = 'block';  
557 -  
558 - if (type === 'ultimo-pago') {  
559 - document.getElementById('menu-ultimo-pago').classList.add('active');  
560 - titleEl.textContent = 'Morosidad - Último Pago';  
561 - map.setLayoutProperty('lotes-layer', 'visibility', 'visible');  
562 -  
563 - // Mostrar botón de prueba WMS solo en este modo  
564 - document.getElementById('menu-wms-test').style.display = 'block';  
565 -  
566 - legendContent.innerHTML = `  
567 - <strong style="color: #60a5fa;">ÚLTIMO PAGO</strong><br><br>  
568 - <div class="legend-item"><div class="legend-color" style="background: #6b9070;"></div> 2026</div>  
569 - <div class="legend-item"><div class="legend-color" style="background: #b5c47a;"></div> 2025</div>  
570 - <div class="legend-item"><div class="legend-color" style="background: #ffd966;"></div> 2024</div>  
571 - <div class="legend-item"><div class="legend-color" style="background: #f08060;"></div> 2023</div>  
572 - <div class="legend-item"><div class="legend-color" style="background: #d05660;"></div> 2022</div>  
573 - <div class="legend-item"><div class="legend-color" style="background: #a91d1d;"></div> 2021</div>  
574 - <div class="legend-item"><div class="legend-color" style="background: #64748b;"></div> SIN DEUDA / PRESCRIPTAS</div>  
575 - `;  
576 -  
577 - map.setPaintProperty('lotes-layer', 'fill-color', [  
578 - 'step',  
579 - ['get', 'ultimo_pago'],  
580 - '#a91d1d', // < 2021  
581 - 2021, '#a91d1d',  
582 - 2022, '#d05660',  
583 - 2023, '#f08060',  
584 - 2024, '#ffd966',  
585 - 2025, '#b5c47a',  
586 - 2026, '#6b9070'  
587 - ]);  
588 - } else if (type === 'percentiles') {  
589 - document.getElementById('menu-percentiles').classList.add('active');  
590 - titleEl.textContent = 'Morosidad - Total Adeudado';  
591 - map.setLayoutProperty('lotes-layer', 'visibility', 'visible');  
592 -  
593 - // Ocultar botón de prueba WMS  
594 - document.getElementById('menu-wms-test').style.display = 'none';  
595 -  
596 - legendContent.innerHTML = `  
597 - <strong style="color: #60a5fa;">TOTAL ADEUDADO</strong><br><br>  
598 - <div class="legend-item"><div class="legend-color" style="background: #a91d1d;"></div> > 2.099.321 Gs</div>  
599 - <div class="legend-item"><div class="legend-color" style="background: #f08060;"></div> <= 2.099.321 Gs</div>  
600 - <div class="legend-item"><div class="legend-color" style="background: #ffd966;"></div> <= 1.226.945 Gs</div>  
601 - <div class="legend-item"><div class="legend-color" style="background: #b5c47a;"></div> <= 714.968 Gs</div>  
602 - <div class="legend-item"><div class="legend-color" style="background: #6b9070;"></div> <= 351.584 Gs</div>  
603 - <div class="legend-item"><div class="legend-color" style="background: #64748b;"></div> NO REGISTRADOS</div>  
604 - `;  
605 -  
606 - map.setPaintProperty('lotes-layer', 'fill-color', [  
607 - 'step',  
608 - ['get', 'trb_total_deuda'],  
609 - '#6b9070', // < 351k  
610 - 351585, '#b5c47a',  
611 - 714969, '#ffd966',  
612 - 1226946, '#f08060',  
613 - 2099322, '#a91d1d'  
614 - ]);  
615 - }  
616 - // Aseguramos que el borde sea visible en modo heatmap  
617 - map.setPaintProperty('lotes-layer', 'fill-outline-color', 'rgba(255, 255, 255, 0.4)');  
618 - }  
619 -  
620 - function resetMap() {  
621 - document.querySelectorAll('.menu-item').forEach(el => el.classList.remove('active'));  
622 - document.getElementById('menu-reset').classList.add('active');  
623 - document.getElementById('map-title').textContent = 'Vista Cartográfica General';  
624 - document.getElementById('legend').style.display = 'none';  
625 - map.setPaintProperty('lotes-layer', 'fill-color', 'rgba(255, 255, 255, 0.05)');  
626 -  
627 - // Ocultamos WMS si está activo al resetear  
628 - if(map.getLayer('lotes-wms-layer')) {  
629 - map.setLayoutProperty('lotes-wms-layer', 'visibility', 'none');  
630 - document.getElementById('wms-status').innerText = '[OFF]';  
631 - document.getElementById('menu-wms-test').classList.remove('active');  
632 - }  
633 - // Ocultar botón de prueba WMS al resetear  
634 - document.getElementById('menu-wms-test').style.display = 'none';  
635 - }  
636 -  
637 - // --- Control de Prueba Controlada WMS ---  
638 - function toggleWmsLayer() {  
639 - const entidad = localStorage.getItem('entidad') || '505';  
640 -  
641 - // Si la capa no existe, la creamos  
642 - if (!map.getSource('lotes-wms')) {  
643 - map.addSource('lotes-wms', {  
644 - 'type': 'raster',  
645 - 'tiles': [  
646 - `${window.location.origin}/gis-geoserver/sigem/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=sigem:vw_lotes_morosidad_${entidad}&STYLES=morosidad_style_wms&FORMAT=image/png&TRANSPARENT=TRUE&WIDTH=256&HEIGHT=256&SRS=EPSG:3857&BBOX={bbox-epsg-3857}`  
647 - ],  
648 - 'tileSize': 256  
649 - });  
650 -  
651 - map.addLayer({  
652 - 'id': 'lotes-wms-layer',  
653 - 'type': 'raster',  
654 - 'source': 'lotes-wms',  
655 - 'layout': { 'visibility': 'none' },  
656 - 'paint': { 'raster-opacity': 0.8 }  
657 - }, 'lotes-layer'); // Debajo de la capa de interacción MVT  
658 - }  
659 -  
660 - const isVisible = map.getLayoutProperty('lotes-wms-layer', 'visibility') === 'visible';  
661 - const nextVisibility = isVisible ? 'none' : 'visible';  
662 - const statusEl = document.getElementById('wms-status');  
663 - const menuEl = document.getElementById('menu-wms-test');  
664 -  
665 - map.setLayoutProperty('lotes-wms-layer', 'visibility', nextVisibility);  
666 -  
667 - if (nextVisibility === 'visible') {  
668 - statusEl.innerText = '[ON]';  
669 - menuEl.classList.add('active');  
670 - // Opcional: Ocultar MVT para mejor rendimiento visual en PNG Full  
671 - // map.setLayoutProperty('lotes-layer', 'visibility', 'none');  
672 - } else {  
673 - statusEl.innerText = '[OFF]';  
674 - menuEl.classList.remove('active');  
675 - map.setLayoutProperty('lotes-layer', 'visibility', 'visible');  
676 - }  
677 - }  
678 -  
679 - // --- Popups Instantáneos (MVT Data) ---  
680 - map.on('click', 'lotes-layer', (e) => {  
681 - const props = e.features[0].properties;  
682 - const content = `  
683 - <div class="popup-header">ESTADO DE CUENTA: ${props.ccc || 'N/A'}</div>  
684 - <div class="popup-body">  
685 - <div class="popup-grid" style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px;">  
686 - <div class="popup-stat">  
687 - <div class="popup-label">Nro Ficha</div>  
688 - <div class="popup-value">${props.inm_ficha || '0'}</div>  
689 - </div>  
690 - <div class="popup-stat">  
691 - <div class="popup-label">Cta. Catastral</div>  
692 - <div class="popup-value" style="font-size: 11px;">${props.inm_ctacatastral || 'N/A'}</div>  
693 - </div>  
694 - </div>  
695 - <hr style="opacity: 0.1; margin: 10px 0;">  
696 - <div class="popup-stat">  
697 - <div class="popup-label">Total Adeudado</div>  
698 - <div class="popup-value" style="color: #f87171; font-size: 16px;">Gs. ${props.trb_total_deuda ? parseFloat(props.trb_total_deuda).toLocaleString('es-PY') : '0'}</div>  
699 - </div>  
700 - <div class="popup-grid" style="display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px;">  
701 - <div class="popup-stat">  
702 - <div class="popup-label">Total Pagado</div>  
703 - <div class="popup-value" style="color: #10b981;">Gs. ${props.trb_total_pago ? parseFloat(props.trb_total_pago).toLocaleString('es-PY') : '0'}</div>  
704 - </div>  
705 - <div class="popup-stat">  
706 - <div class="popup-label">Último Pago</div>  
707 - <div class="popup-value">${props.ultimo_pago || 'Nunca'}</div>  
708 - </div>  
709 - </div>  
710 - <button class="logout-btn" style="width: 100%; margin-top: 15px; font-size: 11px; background: #60a5fa; color: #fff;">📄 Ver Detalles SIGEM</button>  
711 - </div>  
712 - `;  
713 -  
714 - new maplibregl.Popup()  
715 - .setLngLat(e.lngLat)  
716 - .setHTML(content)  
717 - .addTo(map);  
718 - });  
719 -  
720 - map.on('mouseenter', 'lotes-layer', () => map.getCanvas().style.cursor = 'pointer');  
721 - map.on('mouseleave', 'lotes-layer', () => map.getCanvas().style.cursor = '');  
722 -  
723 - async function updateMunicipalData() {  
724 - const btn = document.getElementById('btn-update-data');  
725 - const icon = document.getElementById('update-icon');  
726 - const text = document.getElementById('update-text');  
727 -  
728 - btn.style.pointerEvents = 'none';  
729 - btn.style.opacity = '0.5';  
730 - text.innerText = 'Procesando FDW...';  
731 - icon.classList.add('rotating'); // Podríamos añadir CSS para rotar  
732 -  
733 - try {  
734 - const res = await fetch(`/gis-geoserver/api/admin/fdw/update/${entidad}`, {  
735 - method: 'POST',  
736 - headers: { 'Authorization': `Bearer ${token}` }  
737 - });  
738 - const data = await res.json();  
739 -  
740 - if (data.success) {  
741 - alert("✅ Éxito: " + data.message);  
742 - location.reload(); // Recargamos para ver los cambios  
743 - } else {  
744 - alert("❌ Error: " + data.message);  
745 - }  
746 - } catch (err) {  
747 - console.error("Error en update:", err);  
748 - alert("❌ Error de conexión con el servidor de administración.");  
749 - } finally {  
750 - btn.style.pointerEvents = 'auto';  
751 - btn.style.opacity = '1';  
752 - text.innerText = 'Actualizar FDW';  
753 - }  
754 - }  
755 -  
756 - async function loadMunicipalStats() {  
757 - try {  
758 - const res = await fetch(`/gis-geoserver/api/gis/entidad/${entidad}/resumen`, {  
759 - headers: { 'Authorization': `Bearer ${token}` }  
760 - });  
761 - const data = await res.json();  
762 - document.getElementById('stat-lotes').innerText = data.total_lotes.toLocaleString();  
763 - document.getElementById('stat-morosos').innerText = data.lotes_con_deuda.toLocaleString();  
764 - } catch (err) { console.error("Error stats:", err); }  
765 - }  
766 - </script>  
767 -</body>  
768 -  
769 -</html>  
770 \ No newline at end of file 0 \ No newline at end of file
GIS-GEOSERVER/target/classes/static/widgets.html deleted
1 -<!DOCTYPE html>  
2 -<html lang="es">  
3 -<head>  
4 - <meta charset="utf-8">  
5 - <meta name="viewport" content="width=device-width, initial-scale=1">  
6 - <!-- Google Font: Source Sans Pro -->  
7 - <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">  
8 - <!-- Font Awesome -->  
9 - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">  
10 - <!-- Theme style AdminLTE 3 -->  
11 - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.2/dist/css/adminlte.min.css">  
12 - <style>  
13 - body { background-color: #f4f6f9; padding: 20px; font-family: 'Source Sans Pro', sans-serif; }  
14 - .welcome-header { font-size: 24px; color: #333; margin-bottom: 20px; font-weight: 600;}  
15 - </style>  
16 -</head>  
17 -<body>  
18 - <div class="welcome-header">  
19 - <i class="fas fa-home text-primary"></i> Tablero General (Estadísticas Simuladas)  
20 - </div>  
21 -  
22 - <div class="row">  
23 - <!-- Tarjeta 1 -->  
24 - <div class="col-lg-3 col-6">  
25 - <div class="small-box bg-info shadow-sm">  
26 - <div class="inner">  
27 - <h3>99,999</h3>  
28 - <p>Lotes Registrados</p>  
29 - </div>  
30 - <div class="icon">  
31 - <i class="fas fa-map-marked-alt"></i>  
32 - </div>  
33 - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>  
34 - </div>  
35 - </div>  
36 - <!-- Tarjeta 2 -->  
37 - <div class="col-lg-3 col-6">  
38 - <div class="small-box bg-success shadow-sm">  
39 - <div class="inner">  
40 - <h3>Gs. ---<sup style="font-size: 20px"></sup></h3>  
41 - <p>Recaudación del Día</p>  
42 - </div>  
43 - <div class="icon">  
44 - <i class="fas fa-hand-holding-usd"></i>  
45 - </div>  
46 - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>  
47 - </div>  
48 - </div>  
49 -  
50 - <!-- Tarjeta 3 -->  
51 - <div class="col-lg-3 col-6">  
52 - <div class="small-box bg-warning shadow-sm">  
53 - <div class="inner">  
54 - <h3>---</h3>  
55 - <p>Nuevas Actividades Comerciales</p>  
56 - </div>  
57 - <div class="icon">  
58 - <i class="fas fa-store"></i>  
59 - </div>  
60 - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>  
61 - </div>  
62 - </div>  
63 - <!-- Tarjeta 4 -->  
64 - <div class="col-lg-3 col-6">  
65 - <div class="small-box bg-danger shadow-sm">  
66 - <div class="inner">  
67 - <h3>45%</h3>  
68 - <p>Índice General de Morosidad</p>  
69 - </div>  
70 - <div class="icon">  
71 - <i class="fas fa-chart-pie"></i>  
72 - </div>  
73 - <a href="#" class="small-box-footer" onclick="alert('OPCIÓN NO IMPLEMENTADA')">Más info <i class="fas fa-arrow-circle-right"></i></a>  
74 - </div>  
75 - </div>  
76 - </div>  
77 -  
78 - <div class="row mt-4">  
79 - <div class="col-12">  
80 - <div class="card card-outline card-primary shadow-sm" style="border-top: 3px solid #0056b3;">  
81 - <div class="card-header">  
82 - <h3 class="card-title text-muted"><i class="fas fa-info-circle mr-1"></i> Estado del Sistema</h3>  
83 - </div>  
84 - <div class="card-body">  
85 - <p class="text-secondary text-sm">Use el menú lateral para navegar por los distintos módulos administrativos. La funcionalidad de Mapas Tributarios se encuentra activa bajo "Control de Gestión -> Mapas". Otras opciones en despliegue.</p>  
86 - </div>  
87 - </div>  
88 - </div>  
89 - </div>  
90 -  
91 -<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  
92 -<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>  
93 -</body>  
94 -</html>  
GIS-GEOSERVER/target/gis-geoserver-0.0.1-SNAPSHOT.jar deleted
No preview for this file type
GIS-GEOSERVER/target/gis-geoserver-0.0.1-SNAPSHOT.jar.original deleted
No preview for this file type
GIS-GEOSERVER/target/maven-archiver/pom.properties deleted
1 -artifactId=gis-geoserver  
2 -groupId=com.sigem  
3 -version=0.0.1-SNAPSHOT  
GIS-GEOSERVER/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted
1 -com\sigem\gis\WebConfig.class  
2 -com\sigem\gis\security\JwtUtil.class  
3 -com\sigem\gis\service\FdwService.class  
4 -com\sigem\gis\service\GeoServerService.class  
5 -com\sigem\gis\security\AuthResponse.class  
6 -com\sigem\gis\security\AuthRequest.class  
7 -com\sigem\gis\controller\WebViewController.class  
8 -com\sigem\gis\security\JwtAuthenticationFilter.class  
9 -com\sigem\gis\config\DataSourceConfig.class  
10 -com\sigem\gis\controller\GisController.class  
11 -com\sigem\gis\security\SecurityConfig.class  
12 -com\sigem\gis\controller\AdminController.class  
13 -com\sigem\gis\controller\ProxyController.class  
14 -com\sigem\gis\GisApplication.class  
15 -com\sigem\gis\security\AuthController.class  
GIS-GEOSERVER/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted
1 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\security\AuthController.java  
2 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\GisApplication.java  
3 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\security\SecurityConfig.java  
4 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\config\DataSourceConfig.java  
5 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\controller\WebViewController.java  
6 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\controller\AdminController.java  
7 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\security\JwtAuthenticationFilter.java  
8 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\controller\GisController.java  
9 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\service\GeoServerService.java  
10 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\service\FdwService.java  
11 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\security\AuthRequest.java  
12 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\WebConfig.java  
13 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\controller\ProxyController.java  
14 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\security\AuthResponse.java  
15 -C:\desarrollo\Antigravity\GIS-GEOSERVER\src\main\java\com\sigem\gis\security\JwtUtil.java  
GIS-GEOSERVER/GeoServerService.java renamed to GeoServerService.java
GIS-GEOSERVER/Jenkinsfile renamed to Jenkinsfile
GIS-GEOSERVER/ProxyController.java renamed to ProxyController.java
GIS-GEOSERVER/RestTemplateConfig.java renamed to RestTemplateConfig.java
GIS-GEOSERVER/SecurityConfig.java renamed to SecurityConfig.java
GIS-GEOSERVER/SecurityConfig_master.java renamed to SecurityConfig_master.java
GIS-GEOSERVER/VERSION.txt renamed to VERSION.txt
GIS-GEOSERVER/apache_ssl_update.conf renamed to apache_ssl_update.conf
GIS-GEOSERVER/application_master.properties renamed to application_master.properties
GIS-GEOSERVER/check_geom.sql renamed to check_geom.sql
GIS-GEOSERVER/check_rule5.sql renamed to check_rule5.sql
GIS-GEOSERVER/control_gestion.php renamed to control_gestion.php
GIS-GEOSERVER/dbconf.php renamed to dbconf.php
GIS-GEOSERVER/debug_db.sh renamed to debug_db.sh
GIS-GEOSERVER/detect_locks.sql renamed to detect_locks.sql
GIS-GEOSERVER/diag_db.sh renamed to diag_db.sh
GIS-GEOSERVER/diag_db_docker.sh renamed to diag_db_docker.sh
GIS-GEOSERVER/diag_fdw.sql renamed to diag_fdw.sql
GIS-GEOSERVER/diag_schema_505.sql renamed to diag_schema_505.sql
GIS-GEOSERVER/diag_v28.sh renamed to diag_v28.sh
No preview for this file type
GIS-GEOSERVER/docker-compose-v33.yml renamed to docker-compose-v33.yml
GIS-GEOSERVER/docker-compose.integrated.yml renamed to docker-compose.integrated.yml
GIS-GEOSERVER/docker-compose.v18.yml renamed to docker-compose.v18.yml
GIS-GEOSERVER/docker-compose.yml renamed to docker-compose.yml
GIS-GEOSERVER/docker-compose_v20.yml renamed to docker-compose_v20.yml
GIS-GEOSERVER/docker-compose_v22.yml renamed to docker-compose_v22.yml
GIS-GEOSERVER/docker-compose_v24.yml renamed to docker-compose_v24.yml
GIS-GEOSERVER/docker-compose_v25.yml renamed to docker-compose_v25.yml
GIS-GEOSERVER/docker-compose_v26.yml renamed to docker-compose_v26.yml
GIS-GEOSERVER/extensions.sql renamed to extensions.sql
GIS-GEOSERVER/extract_carto.sh renamed to extract_carto.sh
GIS-GEOSERVER/fix_fdw_direct.sql renamed to fix_fdw_direct.sql
GIS-GEOSERVER/gwc_lotes.xml renamed to gwc_lotes.xml
GIS-GEOSERVER/gwc_mejoras.xml renamed to gwc_mejoras.xml
GIS-GEOSERVER/inject_gis.sh renamed to inject_gis.sh
GIS-GEOSERVER/liq_por_tipo.php renamed to liq_por_tipo.php
GIS-GEOSERVER/login.html renamed to login.html
GIS-GEOSERVER/login_institucional_bksp.html renamed to login_institucional_bksp.html
GIS-GEOSERVER/loginform.php renamed to loginform.php
GIS-GEOSERVER/main_login.php renamed to main_login.php
GIS-GEOSERVER/mapa_main.js renamed to mapa_main.js
GIS-GEOSERVER/mapa_mapStyles.js renamed to mapa_mapStyles.js
GIS-GEOSERVER/mapa_parametros.js renamed to mapa_parametros.js
GIS-GEOSERVER/mapas.html renamed to mapas.html
GIS-GEOSERVER/mapas_legacy.html renamed to mapas_legacy.html
GIS-GEOSERVER/mapas_repatriado.html renamed to mapas_repatriado.html
GIS-GEOSERVER/mapas_restoration.html renamed to mapas_restoration.html
GIS-GEOSERVER/morosidad_style_wms.sld renamed to morosidad_style_wms.sld
GIS-GEOSERVER/mvnw renamed to mvnw
GIS-GEOSERVER/mvnw.cmd renamed to mvnw.cmd
GIS-GEOSERVER/pom.xml renamed to pom.xml
GIS-GEOSERVER/restore_db_v18.sh renamed to restore_db_v18.sh
GIS-GEOSERVER/run_backup.sh renamed to run_backup.sh
GIS-GEOSERVER/run_v18_upgrade.sh renamed to run_v18_upgrade.sh
GIS-GEOSERVER/search_menu.sh renamed to search_menu.sh
GIS-GEOSERVER/show_fdw.sql renamed to show_fdw.sql
sigem_kafka deleted
1 -Subproject commit e9ad97dbf12357d36f10d254ae420fa4fcf05b98  
GIS-GEOSERVER/sigemtest.yvaga.com.py-le-ssl.conf renamed to sigemtest.yvaga.com.py-le-ssl.conf
GIS-GEOSERVER/sigemtest_original.vhost renamed to sigemtest_original.vhost
GIS-GEOSERVER/sigemtest_restored.vhost renamed to sigemtest_restored.vhost
GIS-GEOSERVER/sigemtest_v20_isolated.vhost renamed to sigemtest_v20_isolated.vhost
GIS-GEOSERVER/src/main/java/com/sigem/gis/GisApplication.java renamed to src/main/java/com/sigem/gis/GisApplication.java
GIS-GEOSERVER/src/main/java/com/sigem/gis/WebConfig.java renamed to src/main/java/com/sigem/gis/WebConfig.java
GIS-GEOSERVER/src/main/java/com/sigem/gis/config/DataSourceConfig.java renamed to src/main/java/com/sigem/gis/config/DataSourceConfig.java
GIS-GEOSERVER/src/main/java/com/sigem/gis/controller/AdminController.java renamed to src/main/java/com/sigem/gis/controller/AdminController.java
GIS-GEOSERVER/src/main/java/com/sigem/gis/controller/GisController.java renamed to src/main/java/com/sigem/gis/controller/GisController.java
GitLab Appliance - Powered by TurnKey Linux