Commit fc0b710a4f32d874b02bc0c4378805e481e21edd

Authored by Antigravity AI
1 parent b2eac770

Hito: Modernización definitiva del Dashboard y registro de hito 2026.04.07.20.37.47

VERSION.txt
@@ -8,4 +8,5 @@ PROYECTO GIS-GEOSERVER - 2026.04.05.06.31.00 ID DOCKER: c68e229b6d94. Observacià @@ -8,4 +8,5 @@ PROYECTO GIS-GEOSERVER - 2026.04.05.06.31.00 ID DOCKER: c68e229b6d94. ObservaciÃ
8 PROYECTO GIS-GEOSERVER - 2026.04.06.01.13.00 ID DOCKER: d983a409769d. Observación: Integración exitosa de Landing Page AdminLTE 3 con aislamiento de iFrame para Visor GIS. 8 PROYECTO GIS-GEOSERVER - 2026.04.06.01.13.00 ID DOCKER: d983a409769d. Observación: Integración exitosa de Landing Page AdminLTE 3 con aislamiento de iFrame para Visor GIS.
9 PROYECTO GIS-GEOSERVER - 2026.04.06.12.44.00 ID DOCKER: d983a409769d. Observación: Backup completo preventivo de la versión con estructura de Git corregida y Landing Page AdminLTE. 9 PROYECTO GIS-GEOSERVER - 2026.04.06.12.44.00 ID DOCKER: d983a409769d. Observación: Backup completo preventivo de la versión con estructura de Git corregida y Landing Page AdminLTE.
10 PROYECTO GIS-GEOSERVER - 2026.04.06.13.31.00 ID DOCKER: d983a409769d. Observación: Prueba de funcionamiento del Manual v1.1 tras estandarización de prefijos y manual de recuperación. 10 PROYECTO GIS-GEOSERVER - 2026.04.06.13.31.00 ID DOCKER: d983a409769d. Observación: Prueba de funcionamiento del Manual v1.1 tras estandarización de prefijos y manual de recuperación.
11 -PROYECTO GIS-GEOSERVER - 2026.04.07.08.18.07 ID DOCKER: d983a409769d. Observación: Optimización visual de interfaz completada: unificación de anchos al 100%, limpieza de barra superior, traslado de controles al sidebar y registro legal SIGEM-MIC/DINAPI.  
12 \ No newline at end of file 11 \ No newline at end of file
  12 +PROYECTO GIS-GEOSERVER - 2026.04.07.08.18.07 ID DOCKER: d983a409769d. Observación: Optimización visual de interfaz completada: unificación de anchos al 100%, limpieza de barra superior, traslado de controles al sidebar y registro legal SIGEM-MIC/DINAPI.
  13 +PROYECTO GIS-GEOSERVER - 2026.04.07.20.37.47 ID DOCKER: d983a409769d. Observación: Modernización definitiva del Dashboard completada: Replicación de bloque de bienvenida legado, integración de mapa embebido en modo limpio y reestructuración de la fila inferior de gestión al 100% de ancho. Versión estable validada.
13 \ No newline at end of file 14 \ No newline at end of file
final_update_505.sql 0 → 100644
  1 +-- Renombrado de la vista de percentiles a vw_adeudado_505 (Punto clave para Monto Adeudado)
  2 +DROP VIEW IF EXISTS public.vw_percentiles_505;
  3 +
  4 +CREATE OR REPLACE VIEW public.vw_adeudado_505 AS
  5 +SELECT * FROM fdw_505.v_liq_entidad_percentiles WHERE entidad = '505';
get_view_def.sh 0 → 100644
  1 +docker exec proyecto-postgres-1 psql -U sigem_user -d sigem -c "SELECT * FROM fdw_505.v_liq_entidad_percentiles LIMIT 10;"
src/main/resources/static/landing.html
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 <i class="far fa-user mr-2"></i> <span id="nav-user-text">Cargando...</span> 46 <i class="far fa-user mr-2"></i> <span id="nav-user-text">Cargando...</span>
47 </a> 47 </a>
48 <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right"> 48 <div class="dropdown-menu dropdown-menu-lg dropdown-menu-right">
49 - <a href="#" class="dropdown-item" onclick="cerrarSesion()"> 49 + <a href="#" class="dropdown-item" onclick="cerrarSesion(); return false;">
50 <i class="fas fa-sign-out-alt mr-2 text-danger"></i> Cerrar Sesión 50 <i class="fas fa-sign-out-alt mr-2 text-danger"></i> Cerrar Sesión
51 </a> 51 </a>
52 </div> 52 </div>
@@ -96,7 +96,7 @@ @@ -96,7 +96,7 @@
96 </a> 96 </a>
97 <ul class="nav nav-treeview" style="margin-left: 10px;"> 97 <ul class="nav nav-treeview" style="margin-left: 10px;">
98 <li class="nav-item"> 98 <li class="nav-item">
99 - <a href="#" class="nav-link" data-toggle="modal" data-target="#modalMorosidad"> 99 + <a href="#" class="nav-link" onclick="loadMap()">
100 <i class="fas fa-layer-group nav-icon text-warning"></i> 100 <i class="fas fa-layer-group nav-icon text-warning"></i>
101 <p>Mapa Morosidad/Pago</p> 101 <p>Mapa Morosidad/Pago</p>
102 </a> 102 </a>
@@ -134,47 +134,16 @@ @@ -134,47 +134,16 @@
134 </div> 134 </div>
135 135
136 <!-- Main Footer --> 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. 137 + <footer class="main-footer" style="padding: 10px; font-size: 13px; background-color: #f4f6f9;">
  138 + <div class="float-right d-none d-sm-inline-block">
  139 + <b>YVYAPE/SIGEM - Registro MIC/DINAPI 593</b>
  140 + </div>
  141 + Copyright &copy; 2026 <b>YVAGA</b>. Todos los derechos reservados.
140 </footer> 142 </footer>
141 </div> 143 </div>
142 <!-- ./wrapper --> 144 <!-- ./wrapper -->
143 145
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> 146 +
178 147
179 <!-- jQuery --> 148 <!-- jQuery -->
180 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 149 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
@@ -205,15 +174,13 @@ @@ -205,15 +174,13 @@
205 } 174 }
206 175
207 function loadMap() { 176 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 177 + // Redirige el iframe central hacia nuestro visor de mapas
211 loadContent('/gis-geoserver/mapas'); 178 loadContent('/gis-geoserver/mapas');
212 } 179 }
213 180
214 function cerrarSesion() { 181 function cerrarSesion() {
215 localStorage.clear(); 182 localStorage.clear();
216 - window.location.href = "/gis-geoserver/login"; 183 + window.location.replace("/gis-geoserver/login");
217 } 184 }
218 </script> 185 </script>
219 </body> 186 </body>
src/main/resources/static/mapas.html
@@ -60,6 +60,12 @@ @@ -60,6 +60,12 @@
60 height: calc(100vh - 60px); 60 height: calc(100vh - 60px);
61 } 61 }
62 62
  63 + /* MODO EMBEBIDO (Limpieza de UI) */
  64 + body.embed-mode .header { display: none !important; }
  65 + body.embed-mode .sidebar { display: none !important; }
  66 + body.embed-mode .app-container { height: 100vh !important; }
  67 + body.embed-mode #map { width: 100% !important; }
  68 +
63 .sidebar { 69 .sidebar {
64 width: 170px; 70 width: 170px;
65 background: #0f172a; 71 background: #0f172a;
@@ -368,7 +374,11 @@ @@ -368,7 +374,11 @@
368 </div> 374 </div>
369 375
370 <script> 376 <script>
371 - 377 + // Verificar si estamos en modo embebido
  378 + const urlParams = new URLSearchParams(window.location.search);
  379 + if (urlParams.get('mode') === 'embed') {
  380 + document.body.classList.add('embed-mode');
  381 + }
372 382
373 const entidad = localStorage.getItem('entidad') || '505'; 383 const entidad = localStorage.getItem('entidad') || '505';
374 const token = localStorage.getItem('jwt'); 384 const token = localStorage.getItem('jwt');
@@ -564,7 +574,7 @@ @@ -564,7 +574,7 @@
564 574
565 map.setPaintProperty('lotes-layer', 'fill-color', [ 575 map.setPaintProperty('lotes-layer', 'fill-color', [
566 'step', 576 'step',
567 - ['get', 'ultimo_pago'], 577 + ['to-number', ['get', 'ultimo_pago'], 0],
568 '#a91d1d', // < 2021 578 '#a91d1d', // < 2021
569 2021, '#a91d1d', 579 2021, '#a91d1d',
570 2022, '#d05660', 580 2022, '#d05660',
@@ -583,18 +593,18 @@ @@ -583,18 +593,18 @@
583 593
584 legendContent.innerHTML = ` 594 legendContent.innerHTML = `
585 <strong style="color: #60a5fa;">MONTO ADEUDADO</strong><br><br> 595 <strong style="color: #60a5fa;">MONTO ADEUDADO</strong><br><br>
586 - <div class="legend-item"><div class="legend-color" style="background: #a91d1d;"></div> Rojo: > 2.134.819 Gs</div>  
587 - <div class="legend-item"><div class="legend-color" style="background: #f08060;"></div> Naranja: entre 2.134.819 y 1.231.876 Gs</div>  
588 - <div class="legend-item"><div class="legend-color" style="background: #ffd966;"></div> Amarillo: entre 1.231.876 y 718.984 Gs</div>  
589 - <div class="legend-item"><div class="legend-color" style="background: #b5c47a;"></div> Verde Claro: entre 718.984 y 355.628 Gs</div>  
590 - <div class="legend-item"><div class="legend-color" style="background: #6b9070;"></div> Verde Oscuro: <= 355.628 Gs</div> 596 + <div class="legend-item"><div class="legend-color" style="background: #a91d1d;"></div> > 2.134.819 Gs</div>
  597 + <div class="legend-item"><div class="legend-color" style="background: #f08060;"></div> entre 2.134.819 y 1.231.876 Gs</div>
  598 + <div class="legend-item"><div class="legend-color" style="background: #ffd966;"></div> entre 1.231.876 y 718.984 Gs</div>
  599 + <div class="legend-item"><div class="legend-color" style="background: #b5c47a;"></div> entre 718.984 y 355.628 Gs</div>
  600 + <div class="legend-item"><div class="legend-color" style="background: #6b9070;"></div> <= 355.628 Gs</div>
591 <div class="legend-item"><div class="legend-color" style="background: #64748b;"></div> NO REGISTRADOS</div> 601 <div class="legend-item"><div class="legend-color" style="background: #64748b;"></div> NO REGISTRADOS</div>
592 `; 602 `;
593 603
594 map.setPaintProperty('lotes-layer', 'fill-color', [ 604 map.setPaintProperty('lotes-layer', 'fill-color', [
595 'step', 605 'step',
596 - ['get', 'trb_total_deuda'],  
597 - '#6b9070', // Verde Oscuro: <= 355.628 606 + ['to-number', ['get', 'trb_total_deuda'], 0],
  607 + '#6b9070', // Verde Oscuro: <= 355.628 (fallback si es 0)
598 355629, '#b5c47a', // Verde Claro: 355.629 - 718.984 608 355629, '#b5c47a', // Verde Claro: 355.629 - 718.984
599 718985, '#ffd966', // Amarillo: 718.985 - 1.231.876 609 718985, '#ffd966', // Amarillo: 718.985 - 1.231.876
600 1231877, '#f08060', // Naranja: 1.231.877 - 2.134.819 610 1231877, '#f08060', // Naranja: 1.231.877 - 2.134.819
src/main/resources/static/widgets.html
@@ -12,6 +12,20 @@ @@ -12,6 +12,20 @@
12 <style> 12 <style>
13 body { background-color: #f4f6f9; padding: 20px; font-family: 'Source Sans Pro', sans-serif; } 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;} 14 .welcome-header { font-size: 24px; color: #333; margin-bottom: 20px; font-weight: 600;}
  15 + /* Estilos para el mapa embebido */
  16 + .map-container {
  17 + width: 100%;
  18 + height: 500px;
  19 + border-radius: 8px;
  20 + overflow: hidden;
  21 + background-color: #0f172a;
  22 + position: relative;
  23 + }
  24 + iframe#welcome-map {
  25 + width: 100%;
  26 + height: 100%;
  27 + border: none;
  28 + }
15 </style> 29 </style>
16 </head> 30 </head>
17 <body> 31 <body>
@@ -19,76 +33,178 @@ @@ -19,76 +33,178 @@
19 <i class="fas fa-home text-primary"></i> Tablero General (Estadísticas Simuladas) 33 <i class="fas fa-home text-primary"></i> Tablero General (Estadísticas Simuladas)
20 </div> 34 </div>
21 35
  36 + <!-- FILA 1: INFO BOXES ESTILO LEGADO (ESTADÍSTICAS) -->
22 <div class="row"> 37 <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> 38 + <!-- CONTRIBUYENTES -->
  39 + <div class="col-md-2 col-sm-6 col-12">
  40 + <div class="info-box shadow-sm">
  41 + <span class="info-box-icon bg-danger"><i class="fas fa-users"></i></span>
  42 + <div class="info-box-content">
  43 + <span class="info-box-text" id="contribtext">CONTRIBUYENTES</span>
  44 + <span class="info-box-number" id="contribnum">---</span>
29 </div> 45 </div>
30 - <div class="icon">  
31 - <i class="fas fa-map-marked-alt"></i> 46 + </div>
  47 + </div>
  48 + <!-- PROPIEDADES -->
  49 + <div class="col-md-2 col-sm-6 col-12">
  50 + <div class="info-box shadow-sm">
  51 + <span class="info-box-icon bg-danger"><i class="fas fa-map-marker-alt"></i></span>
  52 + <div class="info-box-content">
  53 + <span class="info-box-text" id="proptext">PROPIEDADES</span>
  54 + <span class="info-box-number" id="propnum">---</span>
32 </div> 55 </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> 56 </div>
35 </div> 57 </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> 58 + <!-- COMERCIOS -->
  59 + <div class="col-md-2 col-sm-6 col-12">
  60 + <div class="info-box shadow-sm">
  61 + <span class="info-box-icon bg-success"><i class="fas fa-money-bill-wave"></i></span>
  62 + <div class="info-box-content">
  63 + <span class="info-box-text" id="comtext">COMERCIOS</span>
  64 + <span class="info-box-number" id="comnum">---</span>
42 </div> 65 </div>
43 - <div class="icon">  
44 - <i class="fas fa-hand-holding-usd"></i> 66 + </div>
  67 + </div>
  68 + <!-- VEHICULOS -->
  69 + <div class="col-md-2 col-sm-6 col-12">
  70 + <div class="info-box shadow-sm">
  71 + <span class="info-box-icon bg-success"><i class="fas fa-car"></i></span>
  72 + <div class="info-box-content">
  73 + <span class="info-box-text" id="vehitext">VEHICULOS</span>
  74 + <span class="info-box-number" id="vehinum">---</span>
45 </div> 75 </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> 76 </div>
48 </div> 77 </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> 78 + <!-- LICENCIAS -->
  79 + <div class="col-md-2 col-sm-6 col-12">
  80 + <div class="info-box shadow-sm">
  81 + <span class="info-box-icon bg-success"><i class="fas fa-credit-card"></i></span>
  82 + <div class="info-box-content">
  83 + <span class="info-box-text" id="licentext">LICENCIAS</span>
  84 + <span class="info-box-number" id="licennum">---</span>
  85 + </div>
61 </div> 86 </div>
62 </div> 87 </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> 88 + </div>
  89 +
  90 + <!-- FILA 2: BIENVENIDA Y SOPORTE -->
  91 + <div class="row mt-4">
  92 + <div class="col-md-8">
  93 + <div class="card card-outline card-primary shadow-sm" style="border-top: 3px solid #0056b3;">
  94 + <div class="card-header">
  95 + <h3 class="card-title text-muted font-weight-bold" id="welcome-title"><i class="fas fa-map mr-1"></i> Bienvenido al Sistema Integrado de Gestión Municipal</h3>
  96 + <div class="card-tools">
  97 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  98 + </div>
  99 + </div>
  100 + <div class="card-body p-0">
  101 + <div class="map-container">
  102 + <!-- Mapa embebido de Control de Gestión (Modo Limpio) -->
  103 + <iframe id="welcome-map" src="/gis-geoserver/mapas?mode=embed"></iframe>
  104 + </div>
  105 + </div>
  106 + </div>
  107 + </div>
  108 +
  109 + <div class="col-md-4">
  110 + <!-- SOPORTE Y APOYO TECNICO -->
  111 + <div class="info-box bg-gradient-info shadow-sm mx-auto" style="max-width: 80%;">
  112 + <span class="info-box-icon"><i class="fas fa-headset"></i></span>
  113 + <div class="info-box-content text-center">
  114 + <span class="info-box-text font-weight-bold">SOPORTE Y APOYO TÉCNICO</span>
  115 + <span class="info-box-number">CONSULTORA YVAGA</span>
  116 + <div class="text-xs mt-2">
  117 + <i class="fas fa-globe mr-1"></i> www.yvaga.com.py<br>
  118 + <i class="fas fa-envelope mr-1"></i> soporte@yvaga.com.py<br>
  119 + <i class="fas fa-phone mr-1"></i> 0981-413151
  120 + </div>
69 </div> 121 </div>
70 - <div class="icon">  
71 - <i class="fas fa-chart-pie"></i> 122 + </div>
  123 +
  124 + <!-- INFRAESTRUCTURA Y TECNOLOGIA -->
  125 + <div class="info-box bg-success shadow-sm mx-auto" style="max-width: 80%;">
  126 + <span class="info-box-icon"><i class="fas fa-cloud-upload-alt"></i></span>
  127 + <div class="info-box-content text-center">
  128 + <span class="info-box-text font-weight-bold">INFRAESTRUCTURA Y TECNOLOGÍA</span>
  129 + <span class="info-box-number">YVAGA EAS</span>
  130 + <div class="text-xs mt-2">
  131 + <i class="fas fa-globe mr-1"></i> www.yvaga.com.py<br>
  132 + <i class="fas fa-envelope mr-1"></i> soporte@yvaga.com.py<br>
  133 + <i class="fas fa-phone mr-1"></i> 0981-413151
  134 + </div>
72 </div> 135 </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> 136 </div>
75 </div> 137 </div>
76 </div> 138 </div>
77 - 139 +
  140 + <!-- FILA 3 (INFERIOR): MÓDULOS DE GESTIÓN (ANCHO COMPLETO) -->
78 <div class="row mt-4"> 141 <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;"> 142 + <!-- GESTIÓN FINANCIERA -->
  143 + <div class="col-md-4">
  144 + <div class="card card-outline card-success shadow-sm h-100">
  145 + <div class="card-header">
  146 + <h3 class="card-title font-weight-bold">GESTIÓN FINANCIERA</h3>
  147 + <div class="card-tools">
  148 + <span class="badge badge-danger">Próximamente!</span>
  149 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  150 + </div>
  151 + </div>
  152 + <div class="card-body p-0 text-center d-flex align-items-center justify-content-center">
  153 + <img src="https://sigemtest.yvaga.com.py/dist/img/sigem/gestion_financiera.png" alt="GESTIÓN FINANCIERA" class="img-fluid p-3" style="max-height: 200px;">
  154 + </div>
  155 + <div class="card-footer text-center mt-auto">
  156 + <a href="javascript:void(0)" class="text-sm font-weight-bold text-uppercase">Acceder a Versión Escritorio</a>
  157 + </div>
  158 + </div>
  159 + </div>
  160 +
  161 + <!-- GESTIÓN TRIBUTARIA -->
  162 + <div class="col-md-4">
  163 + <div class="card card-outline card-success shadow-sm h-100">
81 <div class="card-header"> 164 <div class="card-header">
82 - <h3 class="card-title text-muted"><i class="fas fa-info-circle mr-1"></i> Estado del Sistema</h3> 165 + <h3 class="card-title font-weight-bold">GESTIÓN TRIBUTARIA</h3>
  166 + <div class="card-tools">
  167 + <span class="badge badge-danger">Próximamente!</span>
  168 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  169 + </div>
  170 + </div>
  171 + <div class="card-body p-0 text-center d-flex align-items-center justify-content-center">
  172 + <img src="https://sigemtest.yvaga.com.py/dist/img/sigem/gestion_tributaria.png" alt="GESTIÓN TRIBUTARIA" class="img-fluid p-3" style="max-height: 200px;">
  173 + </div>
  174 + <div class="card-footer text-center mt-auto">
  175 + <a href="javascript:void(0)" class="text-sm font-weight-bold text-uppercase">Acceder a Versión Escritorio</a>
  176 + </div>
  177 + </div>
  178 + </div>
  179 +
  180 + <!-- INFORMES GERENCIALES -->
  181 + <div class="col-md-4">
  182 + <div class="card card-outline card-success shadow-sm h-100">
  183 + <div class="card-header">
  184 + <h3 class="card-title font-weight-bold">INFORMES GERENCIALES</h3>
  185 + <div class="card-tools">
  186 + <button type="button" class="btn btn-tool" data-card-widget="collapse"><i class="fas fa-minus"></i></button>
  187 + </div>
  188 + </div>
  189 + <div class="card-body p-0 text-center d-flex align-items-center justify-content-center">
  190 + <img src="https://sigemtest.yvaga.com.py/dist/img/sigem/informes.png" alt="INFORMES" class="img-fluid p-3" style="max-height: 200px;">
83 </div> 191 </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> 192 + <div class="card-footer text-center mt-auto">
  193 + <a href="javascript:void(0)" class="text-sm font-weight-bold text-uppercase">Acceder</a>
86 </div> 194 </div>
87 </div> 195 </div>
88 </div> 196 </div>
89 </div> 197 </div>
  198 + <br>
90 199
91 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 200 <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> 201 <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
  202 +<script>
  203 + // Dinamizar el título con el nombre de la entidad si está disponible
  204 + const entidadText = localStorage.getItem('entidad_nombre') || '';
  205 + if (entidadText) {
  206 + document.getElementById('welcome-title').innerHTML = `<i class="fas fa-map mr-1"></i> Bienvenido al Sistema Integrado de Gestión Municipal de ${entidadText}`;
  207 + }
  208 +</script>
93 </body> 209 </body>
94 </html> 210 </html>
update_morosidad_505.sql 0 → 100644
  1 +-- Punto 1: Actualización de la Vista Maestra de Morosidad con Filtro de Entidad
  2 +CREATE OR REPLACE VIEW public.vw_lotes_morosidad_505 AS
  3 +SELECT
  4 + l.cartodb_id, l.fid, l.dpto, l.dist, l.padron, l.zona, l.mz, l.lote,
  5 + l.shape_area, l.shape_len, l.ccc, l.obs, l.cc_lote, l.cc_man, l.layer,
  6 + l.borrado, l.geom,
  7 + m.inm_ficha, m.inm_ctacatastral, m.trb_total_deuda, m.trb_total_pago, m.ultimo_pago
  8 +FROM public.e505_lotes_conccc l
  9 +LEFT JOIN fdw_505.v_liq_entidad_totalxobjeto m ON l.ccc::text = m.inm_ctacatastral::text AND m.entidad = '505';
  10 +
  11 +-- Punto 2: Creación de la Vista de Percentiles Filtrada por Entidad (Nuevo Estándar)
  12 +CREATE OR REPLACE VIEW public.vw_percentiles_505 AS
  13 +SELECT * FROM fdw_505.v_liq_entidad_percentiles WHERE entidad = '505';
GitLab Appliance - Powered by TurnKey Linux