Feats y Fixs Varios
This commit is contained in:
@@ -311,19 +311,47 @@ public class ResultadosController : ControllerBase
|
||||
}
|
||||
}
|
||||
|
||||
// En ResultadosController.cs
|
||||
private async Task<IActionResult> GetComposicionDesdeBancadasOficiales(Dictionary<string, string> config)
|
||||
{
|
||||
var bancadas = await _dbContext.Bancadas.AsNoTracking()
|
||||
.Include(b => b.AgrupacionPolitica)
|
||||
.Include(b => b.Ocupante)
|
||||
.ToListAsync();
|
||||
config.TryGetValue("MostrarOcupantes", out var mostrarOcupantesValue);
|
||||
bool mostrarOcupantes = mostrarOcupantesValue == "true";
|
||||
|
||||
IQueryable<Bancada> bancadasQuery = _dbContext.Bancadas.AsNoTracking()
|
||||
.Include(b => b.AgrupacionPolitica);
|
||||
if (mostrarOcupantes)
|
||||
{
|
||||
bancadasQuery = bancadasQuery.Include(b => b.Ocupante);
|
||||
}
|
||||
var bancadas = await bancadasQuery.ToListAsync();
|
||||
|
||||
var bancasPorAgrupacion = bancadas
|
||||
.Where(b => b.AgrupacionPolitica != null)
|
||||
.GroupBy(b => b.AgrupacionPolitica)
|
||||
.Select(g => new { Agrupacion = g.Key!, Camara = g.First().Camara, BancasTotales = g.Count() })
|
||||
// Agrupamos por el ID del partido, que es un valor único y estable
|
||||
.GroupBy(b => b.AgrupacionPolitica!.Id)
|
||||
.Select(g =>
|
||||
{
|
||||
// Tomamos la información de la agrupación del primer elemento (todas son iguales)
|
||||
var primeraBancaDelGrupo = g.First();
|
||||
var agrupacion = primeraBancaDelGrupo.AgrupacionPolitica!;
|
||||
|
||||
// Filtramos los ocupantes solo para este grupo
|
||||
var ocupantesDelPartido = mostrarOcupantes
|
||||
? g.Select(b => b.Ocupante).Where(o => o != null).ToList()
|
||||
: new List<OcupanteBanca?>();
|
||||
|
||||
return new
|
||||
{
|
||||
Agrupacion = agrupacion,
|
||||
Camara = primeraBancaDelGrupo.Camara,
|
||||
BancasTotales = g.Count(),
|
||||
Ocupantes = ocupantesDelPartido
|
||||
};
|
||||
})
|
||||
.ToList();
|
||||
|
||||
// --- FIN DE LA CORRECCIÓN CLAVE ---
|
||||
|
||||
var presidenteDiputados = bancasPorAgrupacion
|
||||
.Where(b => b.Camara == Core.Enums.TipoCamara.Diputados)
|
||||
.OrderByDescending(b => b.BancasTotales)
|
||||
@@ -332,43 +360,34 @@ public class ResultadosController : ControllerBase
|
||||
config.TryGetValue("PresidenciaSenadores", out var idPartidoPresidenteSenadores);
|
||||
var presidenteSenadores = await _dbContext.AgrupacionesPoliticas.FindAsync(idPartidoPresidenteSenadores);
|
||||
|
||||
object MapearPartidosOficial(Core.Enums.TipoCamara camara)
|
||||
object MapearPartidos(Core.Enums.TipoCamara camara)
|
||||
{
|
||||
// 1. Filtramos las bancadas que nos interesan (por cámara y que tengan partido).
|
||||
var partidosDeCamara = bancasPorAgrupacion.Where(b => b.Camara == camara);
|
||||
|
||||
// 2. --- ¡EL CAMBIO CLAVE ESTÁ AQUÍ! ---
|
||||
// Agrupamos por el ID de la Agrupación, no por el objeto.
|
||||
// Esto garantiza que todas las bancadas del mismo partido terminen en el MISMO grupo.
|
||||
if (camara == Core.Enums.TipoCamara.Diputados)
|
||||
partidosDeCamara = partidosDeCamara.OrderBy(p => p.Agrupacion.OrdenDiputados ?? 999);
|
||||
else
|
||||
partidosDeCamara = partidosDeCamara.OrderBy(p => p.Agrupacion.OrdenSenadores ?? 999);
|
||||
|
||||
// 3. Ordenamos, como antes, pero ahora sobre una lista de grupos correcta.
|
||||
var partidosOrdenados = (camara == Core.Enums.TipoCamara.Diputados)
|
||||
? partidosDeCamara.OrderBy(p => p.Agrupacion.OrdenDiputados ?? 999)
|
||||
: partidosDeCamara.OrderBy(p => p.Agrupacion.OrdenSenadores ?? 999);
|
||||
|
||||
// 4. Mapeamos al resultado final.
|
||||
return partidosDeCamara.Select(p => new
|
||||
{
|
||||
p.Agrupacion.Id,
|
||||
p.Agrupacion.Nombre,
|
||||
p.Agrupacion.NombreCorto,
|
||||
p.Agrupacion.Color,
|
||||
p.BancasTotales,
|
||||
// Adjuntamos la lista de ocupantes para este partido
|
||||
Ocupantes = bancadas
|
||||
.Where(b => b.AgrupacionPoliticaId == p.Agrupacion.Id && b.Camara == p.Camara && b.Ocupante != null)
|
||||
.Select(b => b.Ocupante)
|
||||
.ToList()
|
||||
}).ToList();
|
||||
return partidosDeCamara
|
||||
.OrderByDescending(p => p.BancasTotales)
|
||||
.Select(p => new
|
||||
{
|
||||
p.Agrupacion.Id,
|
||||
p.Agrupacion.Nombre,
|
||||
p.Agrupacion.NombreCorto,
|
||||
p.Agrupacion.Color,
|
||||
p.BancasTotales,
|
||||
p.Ocupantes // Pasamos la lista de ocupantes ya filtrada
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
// El resto del método permanece igual...
|
||||
var diputados = new
|
||||
{
|
||||
CamaraNombre = "Cámara de Diputados",
|
||||
TotalBancas = 92,
|
||||
BancasEnJuego = 0,
|
||||
Partidos = MapearPartidosOficial(Core.Enums.TipoCamara.Diputados),
|
||||
Partidos = MapearPartidos(Core.Enums.TipoCamara.Diputados),
|
||||
PresidenteBancada = presidenteDiputados != null ? new { presidenteDiputados.Color } : null
|
||||
};
|
||||
|
||||
@@ -377,7 +396,7 @@ public class ResultadosController : ControllerBase
|
||||
CamaraNombre = "Cámara de Senadores",
|
||||
TotalBancas = 46,
|
||||
BancasEnJuego = 0,
|
||||
Partidos = MapearPartidosOficial(Core.Enums.TipoCamara.Senadores),
|
||||
Partidos = MapearPartidos(Core.Enums.TipoCamara.Senadores),
|
||||
PresidenteBancada = presidenteSenadores != null ? new { presidenteSenadores.Color } : null
|
||||
};
|
||||
|
||||
@@ -471,7 +490,14 @@ public class ResultadosController : ControllerBase
|
||||
var bancadasConOcupantes = await _dbContext.Bancadas
|
||||
.AsNoTracking()
|
||||
.Include(b => b.Ocupante)
|
||||
.Select(b => new { b.Id, b.Camara, b.AgrupacionPoliticaId, Ocupante = b.Ocupante })
|
||||
.Select(b => new
|
||||
{
|
||||
b.Id,
|
||||
b.Camara,
|
||||
b.NumeroBanca,
|
||||
b.AgrupacionPoliticaId,
|
||||
Ocupante = b.Ocupante
|
||||
})
|
||||
.OrderBy(b => b.Id)
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user