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