Feat Widgets
Se añade la tabla CandidatosOverrides Se añade el Overrides de Candidatos al panel de administrador Se Añade el nombre de los candidatos a los Widgets de categorias por municipio
This commit is contained in:
@@ -22,7 +22,7 @@ public class ResultadosController : ControllerBase
|
||||
_configuration = configuration;
|
||||
}
|
||||
|
||||
[HttpGet("partido/{municipioId}")] // Renombramos el parámetro para mayor claridad
|
||||
[HttpGet("partido/{municipioId}")]
|
||||
public async Task<IActionResult> GetResultadosPorPartido(string municipioId, [FromQuery] int categoriaId)
|
||||
{
|
||||
var ambito = await _dbContext.AmbitosGeograficos.AsNoTracking()
|
||||
@@ -51,6 +51,11 @@ public class ResultadosController : ControllerBase
|
||||
.Where(rv => rv.AmbitoGeograficoId == ambito.Id && rv.CategoriaId == categoriaId)
|
||||
.ToListAsync();
|
||||
|
||||
var candidatosRelevantes = await _dbContext.CandidatosOverrides.AsNoTracking()
|
||||
.Where(c => c.CategoriaId == categoriaId && agrupacionIds.Contains(c.AgrupacionPoliticaId) &&
|
||||
(c.AmbitoGeograficoId == null || c.AmbitoGeograficoId == ambito.Id))
|
||||
.ToListAsync();
|
||||
|
||||
long totalVotosPositivos = resultadosVotos.Sum(r => r.CantidadVotos);
|
||||
|
||||
var respuestaDto = new MunicipioResultadosDto
|
||||
@@ -64,6 +69,9 @@ public class ResultadosController : ControllerBase
|
||||
var logoUrl = logosRelevantes.FirstOrDefault(l => l.AgrupacionPoliticaId == rv.AgrupacionPoliticaId && l.AmbitoGeograficoId == ambito.Id)?.LogoUrl
|
||||
?? logosRelevantes.FirstOrDefault(l => l.AgrupacionPoliticaId == rv.AgrupacionPoliticaId && l.AmbitoGeograficoId == null)?.LogoUrl;
|
||||
|
||||
var nombreCandidato = candidatosRelevantes.FirstOrDefault(c => c.AgrupacionPoliticaId == rv.AgrupacionPoliticaId && c.AmbitoGeograficoId == ambito.Id)?.NombreCandidato
|
||||
?? candidatosRelevantes.FirstOrDefault(c => c.AgrupacionPoliticaId == rv.AgrupacionPoliticaId && c.AmbitoGeograficoId == null)?.NombreCandidato;
|
||||
|
||||
return new AgrupacionResultadoDto
|
||||
{
|
||||
Id = rv.AgrupacionPolitica.Id,
|
||||
@@ -72,6 +80,7 @@ public class ResultadosController : ControllerBase
|
||||
Color = rv.AgrupacionPolitica.Color,
|
||||
LogoUrl = logoUrl,
|
||||
Votos = rv.CantidadVotos,
|
||||
NombreCandidato = nombreCandidato,
|
||||
Porcentaje = totalVotosPositivos > 0 ? (rv.CantidadVotos * 100.0m / totalVotosPositivos) : 0
|
||||
};
|
||||
}).OrderByDescending(r => r.Votos).ToList(),
|
||||
@@ -557,27 +566,18 @@ public class ResultadosController : ControllerBase
|
||||
|
||||
if (!municipiosDeLaSeccion.Any())
|
||||
{
|
||||
return Ok(new List<object>());
|
||||
return Ok(new { UltimaActualizacion = DateTime.UtcNow, Resultados = new List<object>() });
|
||||
}
|
||||
|
||||
// --- INICIO DE LA CORRECCIÓN ---
|
||||
// --- INICIO DE LA CORRECCIÓN DE LOGOS ---
|
||||
|
||||
// 1. Obtenemos TODOS los logos para la categoría, sin convertirlos a diccionario todavía.
|
||||
var todosLosLogos = await _dbContext.LogosAgrupacionesCategorias
|
||||
// 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)
|
||||
.ToListAsync();
|
||||
.Where(l => l.CategoriaId == categoriaId && l.AmbitoGeograficoId == null)
|
||||
.ToDictionaryAsync(l => l.AgrupacionPoliticaId);
|
||||
|
||||
// 2. Procesamos los logos en memoria para manejar duplicados, priorizando los que tienen ámbito.
|
||||
// El resultado es un diccionario limpio sin claves duplicadas.
|
||||
var logos = todosLosLogos
|
||||
.GroupBy(l => l.AgrupacionPoliticaId) // Agrupamos por la clave que causa el problema
|
||||
.ToDictionary(
|
||||
g => g.Key, // La clave del diccionario es AgrupacionPoliticaId
|
||||
g => g.OrderByDescending(l => l.AmbitoGeograficoId).First() // Para cada grupo, tomamos el logo más específico (el que tiene un AmbitoId) o el general si es el único.
|
||||
);
|
||||
|
||||
// --- FIN DE LA CORRECCIÓN ---
|
||||
// --- FIN DE LA CORRECCIÓN DE LOGOS ---
|
||||
|
||||
var resultadosMunicipales = await _dbContext.ResultadosVotos
|
||||
.AsNoTracking()
|
||||
@@ -601,7 +601,8 @@ public class ResultadosController : ControllerBase
|
||||
r.Agrupacion.Nombre,
|
||||
r.Agrupacion.NombreCorto,
|
||||
r.Agrupacion.Color,
|
||||
LogoUrl = logos.GetValueOrDefault(r.Agrupacion.Id)?.LogoUrl,
|
||||
// 2. Usamos el diccionario de logos generales para buscar la URL.
|
||||
LogoUrl = logosGenerales.GetValueOrDefault(r.Agrupacion.Id)?.LogoUrl,
|
||||
Votos = r.Votos,
|
||||
Porcentaje = totalVotosSeccion > 0 ? ((decimal)r.Votos * 100 / totalVotosSeccion) : 0
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user