Feat Visual en Producción

This commit is contained in:
2025-10-01 10:27:30 -03:00
parent a985cbfd7c
commit ed5b78e6c8
2 changed files with 17 additions and 23 deletions

View File

@@ -2,7 +2,7 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
/*
import { BancasWidget } from './features/legislativas/provinciales/BancasWidget'
import { CongresoWidget } from './features/legislativas/provinciales/CongresoWidget'
import MapaBsAs from './features/legislativas/provinciales/MapaBsAs'
@@ -21,16 +21,22 @@ import { SenadoresPorSeccionWidget } from './features/legislativas/provinciales/
import { ConcejalesPorSeccionWidget } from './features/legislativas/provinciales/ConcejalesPorSeccionWidget'
import { ResultadosTablaDetalladaWidget } from './features/legislativas/provinciales/ResultadosTablaDetalladaWidget';
import { ResultadosRankingMunicipioWidget } from './features/legislativas/provinciales/ResultadosRankingMunicipioWidget';
*/
//import { DevApp } from './components/common/DevApp';
import { HomeCarouselWidget } from './features/legislativas/nacionales/HomeCarouselWidget';
import { PanelNacionalWidget } from './features/legislativas/nacionales/PanelNacionalWidget';
import { ResultadosNacionalesCardsWidget } from './features/legislativas/nacionales/ResultadosNacionalesCardsWidget';
import './index.css';
import { DevAppLegislativas } from './features/legislativas/DevAppLegislativas';
const queryClient = new QueryClient();
// Mapeamos el nombre del widget (del atributo data) al componente de React
const WIDGET_MAP: Record<string, React.ElementType> = {
'resumen-senadores': SenadoresWidget,
// Widgets Legislativas Provinciales BsAs 2025
/*'resumen-senadores': SenadoresWidget,
'resumen-diputados': DiputadosWidget,
'resumen-concejales': ConcejalesWidget,
'congreso-provincial': CongresoWidget,
@@ -47,7 +53,12 @@ const WIDGET_MAP: Record<string, React.ElementType> = {
'senadores-por-seccion': SenadoresPorSeccionWidget,
'concejales-por-seccion': ConcejalesPorSeccionWidget,
'resultados-tabla-detallada-por-seccion' : ResultadosTablaDetalladaWidget,
'resultados-tabla-detallada-por-municipio' : ResultadosRankingMunicipioWidget,
'resultados-tabla-detallada-por-municipio' : ResultadosRankingMunicipioWidget,*/
// Widgets Legislativas Nacionales 2025
'home-carousel': HomeCarouselWidget,
'panel-nacional': PanelNacionalWidget,
'resultados-nacionales-cards': ResultadosNacionalesCardsWidget,
};
// Vite establece `import.meta.env.DEV` a `true` cuando ejecutamos 'npm run dev'

View File

@@ -146,7 +146,7 @@ public class ResultadosController : ControllerBase
.Where(l => l.EleccionId == eleccionId || l.EleccionId == 0) // Trae los de la elección actual y los de fallback
.ToListAsync();
// --- LÓGICA DE AGRUPACIÓN Y CÁLCULO CORREGIDA ---
// --- LÓGICA DE AGRUPACIÓN Y CÁLCULO ---
var resultadosAgrupados = resultadosPorMunicipio
.GroupBy(r => r.CategoriaId)
.Select(g => new
@@ -465,7 +465,6 @@ public class ResultadosController : ControllerBase
private async Task<IActionResult> GetComposicionDesdeProyecciones(Dictionary<string, string> config, int eleccionId)
{
// --- INICIO DE LA CORRECCIÓN ---
// 1. Obtenemos el ID del ámbito provincial para usarlo en el filtro.
var provincia = await _dbContext.AmbitosGeograficos.AsNoTracking()
.FirstOrDefaultAsync(a => a.NivelId == 10);
@@ -480,7 +479,6 @@ public class ResultadosController : ControllerBase
Senadores = new { Partidos = new List<object>() }
});
}
// --- FIN DE LA CORRECCIÓN ---
var bancasPorAgrupacion = await _dbContext.ProyeccionesBancas
.AsNoTracking()
@@ -490,7 +488,6 @@ public class ResultadosController : ControllerBase
{
AgrupacionId = g.Key.AgrupacionPoliticaId,
CategoriaId = g.Key.CategoriaId,
// Ahora la suma es correcta porque solo considera los registros a nivel provincial
BancasTotales = g.Sum(p => p.NroBancas)
})
.ToListAsync();
@@ -618,16 +615,12 @@ public class ResultadosController : ControllerBase
return Ok(new { UltimaActualizacion = DateTime.UtcNow, Resultados = new List<object>() });
}
// --- INICIO DE LA CORRECCIÓN DE LOGOS ---
// 1. Buscamos logos que sean para esta categoría Y que sean generales (ámbito null).
var logosGenerales = await _dbContext.LogosAgrupacionesCategorias
.AsNoTracking()
.Where(l => l.CategoriaId == categoriaId && l.AmbitoGeograficoId == null)
.ToDictionaryAsync(l => l.AgrupacionPoliticaId);
// --- FIN DE LA CORRECCIÓN DE LOGOS ---
var resultadosMunicipales = await _dbContext.ResultadosVotos
.AsNoTracking()
.Include(r => r.AgrupacionPolitica)
@@ -687,7 +680,6 @@ public class ResultadosController : ControllerBase
.GroupBy(r => r.AmbitoGeografico.SeccionProvincialId)
.Select(g =>
{
// --- INICIO DE LA CORRECCIÓN ---
// Para cada sección, encontramos al partido con más votos.
var ganador = g
// CAMBIO CLAVE: Agrupamos por el ID de la agrupación, no por el objeto.
@@ -700,7 +692,6 @@ public class ResultadosController : ControllerBase
})
.OrderByDescending(x => x.TotalVotos)
.FirstOrDefault();
// --- FIN DE LA CORRECCIÓN ---
// Buscamos el nombre de la sección
var seccionInfo = _dbContext.AmbitosGeograficos
@@ -1243,8 +1234,6 @@ public class ResultadosController : ControllerBase
{
if (string.IsNullOrEmpty(distritoId))
{
// --- VISTA NACIONAL (LÓGICA CORRECTA Y ROBUSTA) ---
// PASO 1: Agrupar y sumar los votos por provincia y partido directamente en la BD.
// Esto crea una lista con los totales, que es mucho más pequeña que los datos crudos.
var votosAgregadosPorProvincia = await _dbContext.ResultadosVotos
@@ -1285,7 +1274,7 @@ public class ResultadosController : ControllerBase
}
else
{
// --- VISTA PROVINCIAL (SIN CAMBIOS, YA ERA EFICIENTE) ---
// --- VISTA PROVINCIAL ---
var votosAgregadosPorMunicipio = await _dbContext.ResultadosVotos
.AsNoTracking()
.Where(r => r.EleccionId == eleccionId
@@ -1462,12 +1451,8 @@ List<CandidatoOverride> overrides, string agrupacionId, int categoriaId, int? am
?? logos.FirstOrDefault(l => l.EleccionId == 0 && l.AgrupacionPoliticaId == agrupacionId && l.CategoriaId == categoriaId && l.AmbitoGeograficoId == ambitoId)
// Prioridad 4: Coincidencia de Fallback por Categoría (Elección y Ámbito genéricos)
?? logos.FirstOrDefault(l => l.EleccionId == 0 && l.AgrupacionPoliticaId == agrupacionId && l.CategoriaId == categoriaId && l.AmbitoGeograficoId == null)
// --- INICIO DE LA CORRECCIÓN ---
// Prioridad 5: LOGO GLOBAL. Coincidencia solo por Partido (Elección y Categoría genéricas)
// Se busca EleccionId = 0 y CategoriaId = 0 (en lugar de null) para que coincida con la lógica de los otros widgets.
?? logos.FirstOrDefault(l => l.EleccionId == 0 && l.AgrupacionPoliticaId == agrupacionId && l.CategoriaId == 0 && l.AmbitoGeograficoId == null);
// --- FIN DE LA CORRECCIÓN ---
}
[HttpGet("resumen-por-provincia")]
@@ -1483,8 +1468,6 @@ List<CandidatoOverride> overrides, string agrupacionId, int categoriaId, int? am
const int catSenadoresNac = 1;
var provinciasQueRenuevanSenadores = new HashSet<string> { "01", "06", "08", "15", "16", "17", "22", "23" };
// --- CORRECCIÓN FINAL: Simplificar la carga de datos de soporte ---
var todasLasProyecciones = await _dbContext.ProyeccionesBancas.AsNoTracking().Where(p => p.EleccionId == eleccionId && (p.CategoriaId == catDiputadosNac || p.CategoriaId == catSenadoresNac)).ToDictionaryAsync(p => p.AmbitoGeograficoId + "_" + p.AgrupacionPoliticaId + "_" + p.CategoriaId);
var todosLosOverrides = await _dbContext.CandidatosOverrides.AsNoTracking().Where(c => c.EleccionId == eleccionId || c.EleccionId == 0).ToListAsync();
var todosLosLogos = await _dbContext.LogosAgrupacionesCategorias.AsNoTracking().Where(l => l.EleccionId == eleccionId || l.EleccionId == 0).ToListAsync();