Feat Visual en Producción
This commit is contained in:
		| @@ -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(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user