Feat Selector Modo Tabla

This commit is contained in:
2025-09-08 14:11:05 -03:00
parent d5168e1d17
commit 9e0cf30294
10 changed files with 182 additions and 129 deletions

View File

@@ -965,43 +965,37 @@ public class ResultadosController : ControllerBase
// 3. Procesar los datos por cada municipio
var resultadosPorMunicipio = municipios.Select(municipio =>
{
// Filtramos los resultados solo para el municipio actual
var resultadosDelMunicipio = resultadosCrudos.Where(r => r.AmbitoGeograficoId == municipio.Id);
{
var resultadosDelMunicipio = resultadosCrudos.Where(r => r.AmbitoGeograficoId == municipio.Id);
// Agrupamos por categoría (Senadores, Concejales, etc.)
var resultadosPorCategoria = resultadosDelMunicipio
.GroupBy(r => r.CategoriaId)
.Select(g =>
{
var totalVotosCategoria = (decimal)g.Sum(r => r.CantidadVotos);
// Obtenemos los 2 partidos con más votos para esta categoría EN ESTE MUNICIPIO
var ranking = g
.OrderByDescending(r => r.CantidadVotos)
.Take(2)
.Select(r => new
{
NombreCorto = r.AgrupacionPolitica.NombreCorto ?? r.AgrupacionPolitica.Nombre,
Porcentaje = totalVotosCategoria > 0 ? (r.CantidadVotos / totalVotosCategoria) * 100 : 0
})
.ToList();
return new
{
CategoriaId = g.Key,
Ranking = ranking
};
})
.ToDictionary(r => r.CategoriaId); // Lo convertimos a diccionario para fácil acceso
return new
var resultadosPorCategoria = resultadosDelMunicipio
.GroupBy(r => r.CategoriaId)
.Select(g =>
{
MunicipioId = municipio.Id,
MunicipioNombre = municipio.Nombre,
ResultadosPorCategoria = resultadosPorCategoria
};
}).ToList();
var totalVotosCategoria = (decimal)g.Sum(r => r.CantidadVotos);
var ranking = g
.OrderByDescending(r => r.CantidadVotos)
.Take(2)
.Select(r => new
{
NombreCorto = r.AgrupacionPolitica.NombreCorto ?? r.AgrupacionPolitica.Nombre,
Porcentaje = totalVotosCategoria > 0 ? (r.CantidadVotos / totalVotosCategoria) * 100 : 0,
Votos = r.CantidadVotos // <-- AÑADIR ESTE CAMPO
})
.ToList();
return new { CategoriaId = g.Key, Ranking = ranking };
})
.ToDictionary(r => r.CategoriaId); // Lo convertimos a diccionario para fácil acceso
return new
{
MunicipioId = municipio.Id,
MunicipioNombre = municipio.Nombre,
ResultadosPorCategoria = resultadosPorCategoria
};
}).ToList();
// Devolvemos las categorías que tuvieron resultados en esta sección para construir la cabecera
var categoriasMap = await _dbContext.CategoriasElectorales.AsNoTracking().ToDictionaryAsync(c => c.Id);