Feat Agrupación de Partidos por Alianzas
- Se permite la agrupación por alianzas en las vistas Nación.
This commit is contained in:
@@ -73,7 +73,7 @@ export const DevAppLegislativas = () => {
|
|||||||
<div style={sectionStyle}>
|
<div style={sectionStyle}>
|
||||||
<h2>Widget: Carrusel de Resultados Nación (Home)</h2>
|
<h2>Widget: Carrusel de Resultados Nación (Home)</h2>
|
||||||
<p style={descriptionStyle}>
|
<p style={descriptionStyle}>
|
||||||
Uso: <code style={codeStyle}><HomeCarouselNacionalWidget eleccionId={2} categoriaId={3} titulo="Diputados - Argentina" mapLinkUrl={''} /></code>
|
Uso: <code style={codeStyle}><HomeCarouselNacionalWidget eleccionId={2} categoriaId={3} titulo="Diputados - Total País" mapLinkUrl={''} /></code>
|
||||||
</p>
|
</p>
|
||||||
<HomeCarouselNacionalWidget
|
<HomeCarouselNacionalWidget
|
||||||
eleccionId={2}
|
eleccionId={2}
|
||||||
@@ -86,7 +86,7 @@ export const DevAppLegislativas = () => {
|
|||||||
<div style={sectionStyle}>
|
<div style={sectionStyle}>
|
||||||
<h2>Widget: Carrusel de Resultados Nación (Home)</h2>
|
<h2>Widget: Carrusel de Resultados Nación (Home)</h2>
|
||||||
<p style={descriptionStyle}>
|
<p style={descriptionStyle}>
|
||||||
Uso: <code style={codeStyle}><HomeCarouselNacionalWidget eleccionId={2} categoriaId={2} titulo="Senadores - Argentina" /></code>
|
Uso: <code style={codeStyle}><HomeCarouselNacionalWidget eleccionId={2} categoriaId={2} titulo="Senadores - Total País" /></code>
|
||||||
</p>
|
</p>
|
||||||
<HomeCarouselNacionalWidget
|
<HomeCarouselNacionalWidget
|
||||||
eleccionId={2}
|
eleccionId={2}
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ public class ResultadosController : ControllerBase
|
|||||||
return NotFound(new { message = $"No se encontró la sección electoral con ID {seccionId}" });
|
return NotFound(new { message = $"No se encontró la sección electoral con ID {seccionId}" });
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- CAMBIO 3: Filtrar también por el cargo (cámara) ---
|
// --- Filtrar también por el cargo (cámara) ---
|
||||||
var proyecciones = await _dbContext.ProyeccionesBancas
|
var proyecciones = await _dbContext.ProyeccionesBancas
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Include(p => p.AgrupacionPolitica)
|
.Include(p => p.AgrupacionPolitica)
|
||||||
@@ -675,7 +675,7 @@ public class ResultadosController : ControllerBase
|
|||||||
{
|
{
|
||||||
// Para cada sección, encontramos al partido con más votos.
|
// Para cada sección, encontramos al partido con más votos.
|
||||||
var ganador = g
|
var ganador = g
|
||||||
// CAMBIO CLAVE: Agrupamos por el ID de la agrupación, no por el objeto.
|
// Agrupamos por el ID de la agrupación.
|
||||||
.GroupBy(r => r.AgrupacionPolitica.Id)
|
.GroupBy(r => r.AgrupacionPolitica.Id)
|
||||||
.Select(pg => new
|
.Select(pg => new
|
||||||
{
|
{
|
||||||
@@ -871,7 +871,7 @@ public class ResultadosController : ControllerBase
|
|||||||
var totalVotosSeccionCategoria = (decimal)resultadosCategoriaSeccion.Sum(r => r.CantidadVotos);
|
var totalVotosSeccionCategoria = (decimal)resultadosCategoriaSeccion.Sum(r => r.CantidadVotos);
|
||||||
|
|
||||||
return resultadosCategoriaSeccion
|
return resultadosCategoriaSeccion
|
||||||
// --- CAMBIO CLAVE: Agrupamos por el ID (string), no por el objeto ---
|
// --- Agrupamos por el ID (string) ---
|
||||||
.GroupBy(r => r.AgrupacionPolitica.Id)
|
.GroupBy(r => r.AgrupacionPolitica.Id)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
@@ -1004,7 +1004,7 @@ public class ResultadosController : ControllerBase
|
|||||||
[HttpGet("panel/{ambitoId?}")]
|
[HttpGet("panel/{ambitoId?}")]
|
||||||
public async Task<IActionResult> GetPanelElectoral(int eleccionId, string? ambitoId, [FromQuery] int categoriaId)
|
public async Task<IActionResult> GetPanelElectoral(int eleccionId, string? ambitoId, [FromQuery] int categoriaId)
|
||||||
{
|
{
|
||||||
// Vista Nacional (sin cambios)
|
// Vista Nacional
|
||||||
if (string.IsNullOrEmpty(ambitoId))
|
if (string.IsNullOrEmpty(ambitoId))
|
||||||
{
|
{
|
||||||
return await GetPanelNacional(eleccionId, categoriaId);
|
return await GetPanelNacional(eleccionId, categoriaId);
|
||||||
@@ -1188,22 +1188,80 @@ public class ResultadosController : ControllerBase
|
|||||||
|
|
||||||
private async Task<IActionResult> GetPanelNacional(int eleccionId, int categoriaId)
|
private async Task<IActionResult> GetPanelNacional(int eleccionId, int categoriaId)
|
||||||
{
|
{
|
||||||
|
// 1. Obtenemos todos los datos necesarios al inicio
|
||||||
var todosLosOverrides = await _dbContext.CandidatosOverrides.AsNoTracking().Where(c => c.EleccionId == eleccionId || c.EleccionId == 0).ToListAsync();
|
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();
|
var todosLosLogos = await _dbContext.LogosAgrupacionesCategorias.AsNoTracking().Where(l => l.EleccionId == eleccionId || l.EleccionId == 0).ToListAsync();
|
||||||
|
var mapeoNacional = await _dbContext.MapeoAgrupaciones.ToDictionaryAsync(m => m.IdAgrupacionProvincial);
|
||||||
|
|
||||||
var resultadosAgregados = await _dbContext.ResultadosVotos.AsNoTracking()
|
var votosProvinciales = await _dbContext.ResultadosVotos.AsNoTracking()
|
||||||
|
.Include(r => r.AgrupacionPolitica)
|
||||||
.Where(r => r.EleccionId == eleccionId && r.CategoriaId == categoriaId)
|
.Where(r => r.EleccionId == eleccionId && r.CategoriaId == categoriaId)
|
||||||
.GroupBy(r => r.AgrupacionPolitica)
|
|
||||||
.Select(g => new { Agrupacion = g.Key, TotalVotos = g.Sum(r => r.CantidadVotos) })
|
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
// 2. Agrupamos los votos usando la tabla de mapeo
|
||||||
|
var resultadosAgregados = votosProvinciales
|
||||||
|
.Select(voto =>
|
||||||
|
{
|
||||||
|
if (mapeoNacional.TryGetValue(voto.AgrupacionPoliticaId, out var mapping))
|
||||||
|
{
|
||||||
|
return new
|
||||||
|
{
|
||||||
|
Id = mapping.AgrupacionNacional,
|
||||||
|
Nombre = mapping.AgrupacionNacional,
|
||||||
|
NombreCorto = mapping.NombreCortoNacional,
|
||||||
|
Color = mapping.ColorNacional,
|
||||||
|
LogoUrl = mapping.LogoUrlNacional,
|
||||||
|
OriginalId = voto.AgrupacionPoliticaId,
|
||||||
|
CantidadVotos = voto.CantidadVotos
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return new
|
||||||
|
{
|
||||||
|
Id = voto.AgrupacionPolitica.Id,
|
||||||
|
Nombre = voto.AgrupacionPolitica.Nombre,
|
||||||
|
NombreCorto = voto.AgrupacionPolitica.NombreCorto,
|
||||||
|
Color = voto.AgrupacionPolitica.Color,
|
||||||
|
LogoUrl = (string?)null,
|
||||||
|
OriginalId = voto.AgrupacionPolitica.Id,
|
||||||
|
CantidadVotos = voto.CantidadVotos
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.GroupBy(x => x.Id)
|
||||||
|
.Select(g =>
|
||||||
|
{
|
||||||
|
var first = g.First();
|
||||||
|
return new
|
||||||
|
{
|
||||||
|
Agrupacion = new
|
||||||
|
{
|
||||||
|
Id = first.Id,
|
||||||
|
Nombre = first.Nombre,
|
||||||
|
NombreCorto = first.NombreCorto,
|
||||||
|
Color = first.Color,
|
||||||
|
LogoUrl = first.LogoUrl,
|
||||||
|
ProvincialIdFallback = first.OriginalId
|
||||||
|
},
|
||||||
|
TotalVotos = g.Sum(item => item.CantidadVotos)
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.ToList();
|
||||||
|
|
||||||
var totalVotosNacional = (decimal)resultadosAgregados.Sum(r => r.TotalVotos);
|
var totalVotosNacional = (decimal)resultadosAgregados.Sum(r => r.TotalVotos);
|
||||||
|
|
||||||
|
// 3. Construimos los resultados del panel con la lógica de fallback para el logo
|
||||||
var resultadosPanel = resultadosAgregados
|
var resultadosPanel = resultadosAgregados
|
||||||
.Select(g =>
|
.Select(g =>
|
||||||
{
|
{
|
||||||
var candidatoMatch = FindBestCandidatoMatch(todosLosOverrides, g.Agrupacion.Id, categoriaId, null, eleccionId);
|
var candidatoMatch = FindBestCandidatoMatch(todosLosOverrides, g.Agrupacion.Id, categoriaId, null, eleccionId);
|
||||||
var logoMatch = FindBestLogoMatch(todosLosLogos, g.Agrupacion.Id, categoriaId, null, eleccionId);
|
var logoFinal = g.Agrupacion.LogoUrl ?? FindBestLogoMatch(
|
||||||
|
todosLosLogos,
|
||||||
|
g.Agrupacion.ProvincialIdFallback,
|
||||||
|
categoriaId,
|
||||||
|
null,
|
||||||
|
eleccionId)?.LogoUrl;
|
||||||
|
|
||||||
return new AgrupacionResultadoDto
|
return new AgrupacionResultadoDto
|
||||||
{
|
{
|
||||||
@@ -1214,17 +1272,17 @@ public class ResultadosController : ControllerBase
|
|||||||
Votos = g.TotalVotos,
|
Votos = g.TotalVotos,
|
||||||
Porcentaje = totalVotosNacional > 0 ? (g.TotalVotos / totalVotosNacional) * 100 : 0,
|
Porcentaje = totalVotosNacional > 0 ? (g.TotalVotos / totalVotosNacional) * 100 : 0,
|
||||||
NombreCandidato = candidatoMatch?.NombreCandidato,
|
NombreCandidato = candidatoMatch?.NombreCandidato,
|
||||||
LogoUrl = logoMatch?.LogoUrl
|
LogoUrl = logoFinal
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
.OrderByDescending(r => r.Votos)
|
.OrderByDescending(r => r.Votos)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
// Calculamos los totales nacionales sumando los datos de todas las provincias (NivelId = 10).
|
// El resto del método para calcular los totales de escrutinio permanece igual.
|
||||||
var totalesProvincialesAgregados = await _dbContext.EstadosRecuentosGenerales
|
var totalesProvincialesAgregados = await _dbContext.EstadosRecuentosGenerales
|
||||||
.AsNoTracking()
|
.AsNoTracking()
|
||||||
.Where(e => e.EleccionId == eleccionId && e.CategoriaId == categoriaId && e.AmbitoGeografico.NivelId == 10)
|
.Where(e => e.EleccionId == eleccionId && e.CategoriaId == categoriaId && e.AmbitoGeografico.NivelId == 10)
|
||||||
.GroupBy(e => 1) // Agrupamos todo en una sola fila.
|
.GroupBy(e => 1)
|
||||||
.Select(g => new
|
.Select(g => new
|
||||||
{
|
{
|
||||||
TotalVotantes = g.Sum(e => e.CantidadVotantes),
|
TotalVotantes = g.Sum(e => e.CantidadVotantes),
|
||||||
@@ -1256,7 +1314,6 @@ public class ResultadosController : ControllerBase
|
|||||||
ResultadosPanel = resultadosPanel,
|
ResultadosPanel = resultadosPanel,
|
||||||
EstadoRecuento = new EstadoRecuentoDto
|
EstadoRecuento = new EstadoRecuentoDto
|
||||||
{
|
{
|
||||||
// Usamos los valores calculados.
|
|
||||||
ParticipacionPorcentaje = participacionNacional,
|
ParticipacionPorcentaje = participacionNacional,
|
||||||
MesasTotalizadasPorcentaje = escrutadoNacional
|
MesasTotalizadasPorcentaje = escrutadoNacional
|
||||||
}
|
}
|
||||||
@@ -1665,15 +1722,81 @@ List<CandidatoOverride> overrides, string agrupacionId, int categoriaId, int? am
|
|||||||
[FromQuery] int eleccionId,
|
[FromQuery] int eleccionId,
|
||||||
[FromQuery] int categoriaId)
|
[FromQuery] int categoriaId)
|
||||||
{
|
{
|
||||||
var votosAgregados = await _dbContext.ResultadosVotos.AsNoTracking()
|
// 1. OBTENER TODOS LOS DATOS NECESARIOS AL INICIO
|
||||||
|
var votosProvinciales = await _dbContext.ResultadosVotos.AsNoTracking()
|
||||||
|
.Include(r => r.AgrupacionPolitica)
|
||||||
.Where(r => r.EleccionId == eleccionId && r.CategoriaId == categoriaId)
|
.Where(r => r.EleccionId == eleccionId && r.CategoriaId == categoriaId)
|
||||||
.GroupBy(r => r.AgrupacionPolitica)
|
|
||||||
.Select(g => new { Agrupacion = g.Key, Votos = g.Sum(r => r.CantidadVotos) })
|
|
||||||
.OrderByDescending(x => x.Votos)
|
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
|
var mapeoNacional = await _dbContext.MapeoAgrupaciones
|
||||||
|
.ToDictionaryAsync(m => m.IdAgrupacionProvincial);
|
||||||
|
|
||||||
|
// --- INICIO DE LA MODIFICACIÓN ---
|
||||||
|
// Añadimos la obtención de todos los logos de overrides
|
||||||
|
var todosLosLogos = await _dbContext.LogosAgrupacionesCategorias.AsNoTracking()
|
||||||
|
.Where(l => l.EleccionId == eleccionId || l.EleccionId == 0)
|
||||||
|
.ToListAsync();
|
||||||
|
// --- FIN DE LA MODIFICACIÓN ---
|
||||||
|
|
||||||
|
var votosAgregados = votosProvinciales
|
||||||
|
.GroupBy(voto =>
|
||||||
|
{
|
||||||
|
if (mapeoNacional.TryGetValue(voto.AgrupacionPoliticaId, out var mapping))
|
||||||
|
{
|
||||||
|
// Es un partido mapeado, usamos datos nacionales
|
||||||
|
return new
|
||||||
|
{
|
||||||
|
Id = mapping.AgrupacionNacional,
|
||||||
|
Nombre = mapping.AgrupacionNacional,
|
||||||
|
NombreCorto = mapping.NombreCortoNacional,
|
||||||
|
Color = mapping.ColorNacional,
|
||||||
|
LogoUrl = mapping.LogoUrlNacional,
|
||||||
|
// Guardamos el ID original para poder buscar overrides si es necesario
|
||||||
|
OriginalId = voto.AgrupacionPoliticaId
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Es un partido no mapeado, usamos sus propios datos
|
||||||
|
return new
|
||||||
|
{
|
||||||
|
Id = voto.AgrupacionPolitica.Id,
|
||||||
|
Nombre = voto.AgrupacionPolitica.Nombre,
|
||||||
|
NombreCorto = voto.AgrupacionPolitica.NombreCorto,
|
||||||
|
Color = voto.AgrupacionPolitica.Color,
|
||||||
|
LogoUrl = (string?)null, // Lo buscaremos después
|
||||||
|
OriginalId = voto.AgrupacionPolitica.Id
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// Agrupamos por el Id del Key del grupo anónimo (Id nacional)
|
||||||
|
.GroupBy(g => g.Key.Id)
|
||||||
|
.Select(finalGroup =>
|
||||||
|
{
|
||||||
|
// Cada elemento de finalGroup es un IGrouping<anonKey, ResultadoVoto>
|
||||||
|
// Tomamos el primer grupo y su Key para obtener los metadatos de la agrupación
|
||||||
|
var firstKey = finalGroup.First().Key;
|
||||||
|
return new
|
||||||
|
{
|
||||||
|
Agrupacion = new
|
||||||
|
{
|
||||||
|
Id = firstKey.Id,
|
||||||
|
Nombre = firstKey.Nombre,
|
||||||
|
NombreCorto = firstKey.NombreCorto,
|
||||||
|
Color = firstKey.Color,
|
||||||
|
LogoUrl = firstKey.LogoUrl,
|
||||||
|
// Importante: Tomamos un ID provincial representativo para el fallback
|
||||||
|
ProvincialIdFallback = firstKey.OriginalId
|
||||||
|
},
|
||||||
|
// Sumamos todas las cantidades dentro de los grupos internos
|
||||||
|
Votos = finalGroup.Sum(innerGroup => innerGroup.Sum(v => v.CantidadVotos))
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.OrderByDescending(x => x.Votos)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
// El resto de la lógica para calcular totales y porcentajes permanece igual.
|
||||||
var todosLosOverrides = await _dbContext.CandidatosOverrides.AsNoTracking().Where(c => c.EleccionId == eleccionId || c.EleccionId == 0).ToListAsync();
|
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();
|
|
||||||
var categoriaInfo = await _dbContext.CategoriasElectorales.AsNoTracking().FirstOrDefaultAsync(c => c.Id == categoriaId);
|
var categoriaInfo = await _dbContext.CategoriasElectorales.AsNoTracking().FirstOrDefaultAsync(c => c.Id == categoriaId);
|
||||||
|
|
||||||
var totalesProvincialesAgregados = await _dbContext.EstadosRecuentosGenerales
|
var totalesProvincialesAgregados = await _dbContext.EstadosRecuentosGenerales
|
||||||
@@ -1729,7 +1852,16 @@ List<CandidatoOverride> overrides, string agrupacionId, int categoriaId, int? am
|
|||||||
Resultados = votosAgregados.Select(r =>
|
Resultados = votosAgregados.Select(r =>
|
||||||
{
|
{
|
||||||
var candidatoMatch = FindBestCandidatoMatch(todosLosOverrides, r.Agrupacion.Id, categoriaId, null, eleccionId);
|
var candidatoMatch = FindBestCandidatoMatch(todosLosOverrides, r.Agrupacion.Id, categoriaId, null, eleccionId);
|
||||||
var logoMatch = FindBestLogoMatch(todosLosLogos, r.Agrupacion.Id, categoriaId, null, eleccionId);
|
|
||||||
|
// --- INICIO DE LA MODIFICACIÓN ---
|
||||||
|
// Lógica de fallback para el logo
|
||||||
|
var logoFinal = r.Agrupacion.LogoUrl ?? FindBestLogoMatch(
|
||||||
|
todosLosLogos,
|
||||||
|
r.Agrupacion.ProvincialIdFallback, // Usamos el ID provincial para la búsqueda de fallback
|
||||||
|
categoriaId,
|
||||||
|
null,
|
||||||
|
eleccionId)?.LogoUrl;
|
||||||
|
// --- FIN DE LA MODIFICACIÓN ---
|
||||||
|
|
||||||
return new ResultadoCandidatoDto
|
return new ResultadoCandidatoDto
|
||||||
{
|
{
|
||||||
@@ -1740,7 +1872,7 @@ List<CandidatoOverride> overrides, string agrupacionId, int categoriaId, int? am
|
|||||||
Color = r.Agrupacion.Color,
|
Color = r.Agrupacion.Color,
|
||||||
Votos = r.Votos,
|
Votos = r.Votos,
|
||||||
Porcentaje = totalVotosPositivos > 0 ? (r.Votos / totalVotosPositivos) * 100 : 0,
|
Porcentaje = totalVotosPositivos > 0 ? (r.Votos / totalVotosPositivos) * 100 : 0,
|
||||||
FotoUrl = logoMatch?.LogoUrl
|
FotoUrl = logoFinal // Usamos el logo obtenido con la lógica de fallback
|
||||||
};
|
};
|
||||||
}).ToList()
|
}).ToList()
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Api")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Api")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1335b54d759c402b859b6d8338cd0c944cc70171")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8d7f5c1db6f69f3e6bee29c32b877e64080c45ed")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Api")]
|
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Api")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Api")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Api")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","muVh5sjH3sgdvuz4TbuTwTggX1uDnsWXgoosMKST/r4=","nrP5gSIA5vzgp8v12CAOr943QYLxU4Til6oiCcWSNI8=","yMd45U9BK07I3b3fBQ627PWTYyZ2ZjrmFc5VD\u002BQVx1Q=","xKskvcoJU0RVRN1a5dRqKRM7IP5vmmbraUaPFYjhnCc=","p7BjQw7aSZjfOCqmKm7/kPO9qegEQZBfirMjlOx/I1I=","MI0hVVLYavEhzHq/Z1UbajfrxanA1aET19aOH8G2ImI=","2dY8CqW9fAY8yN0foa\u002BZp2gc0RfPoPmB/tKSj1QoTw0=","79rfGLH4UjfTPvc//\u002BZjnBqdz585pUtYZ0/hwE2iEic=","PUqgvMdfTQkF5lpBVtHv2teQLV5WaEH0xMKTmINe2YQ=","\u002BFI0b4ppdxel/pby/y/xKImHrtdxo2g83OhskdREyIg=","jEESu6\u002BhbDvNMjLt/6OufuK\u002B9cHmzx\u002BTCIn4fWa9nSc=","UaCPJEvR4nVxxGCB5CUnRlJiw4drDW3Q3Nss\u002Bya2cv4=","ZqF13CT3rok/Gzl\u002BMsw3q9X1nf65bwEVD670efE3k\u002Bk=","gH3W7phPzBCY1DAVn4YnP4SA8Uaq73TpctS0yFSvzNM=","u5F4J4\u002BLHUIOCz5ze5NSF42mDeAaAfi\u002BKN3Ay3rKLY8=","GeUUID0ymF5rrBWdX7YHzWA5GiGkNWCNUog4sp4xL3c=","3BxX4I0JXoDqmE8m0BrRZhixBRlHEueS3jAlmUXE/I8=","IlET7uqumshgFxIEvfKRskON\u002BeAKZ7OfD/kCeAwn0PM=","NN2rS\u002B89ZAITWlNODPcF/lHIh3ZNmAHvUX4EjqSkX4s=","OE89N/FsYhRU1Dy5Ne83ehzSwlNc/RcxHrJpHxPHfqY=","QI7IL4TkYEqfUiIEXQiVCaZx4vrM9/wZlvOrhnUd4jQ=","UIntj4QoiyGr7bnJN8KK5PGrhQd89m\u002BLfh4T8VKPxAk=","J\u002Bfv/j3QyIW9bxolc46wDka8641F622/QgIllt0Re80=","Y/o0rakw9VYzEfz9M659qW77P9kvz\u002B2gTe1Lv3zgUDE=","8QWUReqP8upfOnmA5lMNgBxAfYJ1z3zv/WYBUXBEiog=","1L7p1HQI/Uoosqm7RyBuYjKbRFTycFgJEtHPSdlXWhU=","ZxPpBx5gkHuilHLcg/vcjvaXswvTqiUM0YaAEwbNSLI=","zSbNtRd32h6wCMWjU5ecl5a3ECd\u002BVBstFC3etkdk4s0=","urIQ/RlknPjR8\u002BeAcCsDIPiRjQGFfUdIC\u002BoT3wYB2dU=","ytyPPQGU70eGo9tCrHq5\u002BwXF3yVuqv9Z\u002Br1Zdf0XUCI=","scnW1D7e2F059zWPpwmOsIw6KIyloYSDqXXW70WAZpQ=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","7Yl3qA5xr\u002BXUmuY\u002Bshj87a0l8dEYVlvjk253M66DWfo="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
{"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","yMd45U9BK07I3b3fBQ627PWTYyZ2ZjrmFc5VD\u002BQVx1Q=","xKskvcoJU0RVRN1a5dRqKRM7IP5vmmbraUaPFYjhnCc=","p7BjQw7aSZjfOCqmKm7/kPO9qegEQZBfirMjlOx/I1I=","MI0hVVLYavEhzHq/Z1UbajfrxanA1aET19aOH8G2ImI=","2dY8CqW9fAY8yN0foa\u002BZp2gc0RfPoPmB/tKSj1QoTw0=","79rfGLH4UjfTPvc//\u002BZjnBqdz585pUtYZ0/hwE2iEic=","PUqgvMdfTQkF5lpBVtHv2teQLV5WaEH0xMKTmINe2YQ=","\u002BFI0b4ppdxel/pby/y/xKImHrtdxo2g83OhskdREyIg=","jEESu6\u002BhbDvNMjLt/6OufuK\u002B9cHmzx\u002BTCIn4fWa9nSc=","UaCPJEvR4nVxxGCB5CUnRlJiw4drDW3Q3Nss\u002Bya2cv4=","ZqF13CT3rok/Gzl\u002BMsw3q9X1nf65bwEVD670efE3k\u002Bk=","gH3W7phPzBCY1DAVn4YnP4SA8Uaq73TpctS0yFSvzNM=","u5F4J4\u002BLHUIOCz5ze5NSF42mDeAaAfi\u002BKN3Ay3rKLY8=","GeUUID0ymF5rrBWdX7YHzWA5GiGkNWCNUog4sp4xL3c=","3BxX4I0JXoDqmE8m0BrRZhixBRlHEueS3jAlmUXE/I8=","IlET7uqumshgFxIEvfKRskON\u002BeAKZ7OfD/kCeAwn0PM=","NN2rS\u002B89ZAITWlNODPcF/lHIh3ZNmAHvUX4EjqSkX4s=","OE89N/FsYhRU1Dy5Ne83ehzSwlNc/RcxHrJpHxPHfqY=","QI7IL4TkYEqfUiIEXQiVCaZx4vrM9/wZlvOrhnUd4jQ=","UIntj4QoiyGr7bnJN8KK5PGrhQd89m\u002BLfh4T8VKPxAk=","J\u002Bfv/j3QyIW9bxolc46wDka8641F622/QgIllt0Re80=","Y/o0rakw9VYzEfz9M659qW77P9kvz\u002B2gTe1Lv3zgUDE=","8QWUReqP8upfOnmA5lMNgBxAfYJ1z3zv/WYBUXBEiog=","1L7p1HQI/Uoosqm7RyBuYjKbRFTycFgJEtHPSdlXWhU=","ZxPpBx5gkHuilHLcg/vcjvaXswvTqiUM0YaAEwbNSLI=","zSbNtRd32h6wCMWjU5ecl5a3ECd\u002BVBstFC3etkdk4s0=","urIQ/RlknPjR8\u002BeAcCsDIPiRjQGFfUdIC\u002BoT3wYB2dU=","ytyPPQGU70eGo9tCrHq5\u002BwXF3yVuqv9Z\u002Br1Zdf0XUCI=","jOi/jUJ7o3KWHJ\u002BTUu1vZl6Z/94v2iG7KCnN4hr9IxM=","EX3cE3dtzg9OULBi66wvzoTBda5oAAEkcAgb2vzAcRE=","i\u002BlquWEXQionduujlv277Sj/bnYmn0JtYjUAR5GjYbI=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","iCYEGzjxtMCF9Bx2KuOz28eenE\u002Bzi818/JImx0MXYn0="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||||
@@ -1 +1 @@
|
|||||||
{"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","muVh5sjH3sgdvuz4TbuTwTggX1uDnsWXgoosMKST/r4=","nrP5gSIA5vzgp8v12CAOr943QYLxU4Til6oiCcWSNI8=","yMd45U9BK07I3b3fBQ627PWTYyZ2ZjrmFc5VD\u002BQVx1Q=","xKskvcoJU0RVRN1a5dRqKRM7IP5vmmbraUaPFYjhnCc=","p7BjQw7aSZjfOCqmKm7/kPO9qegEQZBfirMjlOx/I1I=","MI0hVVLYavEhzHq/Z1UbajfrxanA1aET19aOH8G2ImI=","2dY8CqW9fAY8yN0foa\u002BZp2gc0RfPoPmB/tKSj1QoTw0=","79rfGLH4UjfTPvc//\u002BZjnBqdz585pUtYZ0/hwE2iEic=","PUqgvMdfTQkF5lpBVtHv2teQLV5WaEH0xMKTmINe2YQ=","\u002BFI0b4ppdxel/pby/y/xKImHrtdxo2g83OhskdREyIg=","jEESu6\u002BhbDvNMjLt/6OufuK\u002B9cHmzx\u002BTCIn4fWa9nSc=","UaCPJEvR4nVxxGCB5CUnRlJiw4drDW3Q3Nss\u002Bya2cv4=","ZqF13CT3rok/Gzl\u002BMsw3q9X1nf65bwEVD670efE3k\u002Bk=","gH3W7phPzBCY1DAVn4YnP4SA8Uaq73TpctS0yFSvzNM=","u5F4J4\u002BLHUIOCz5ze5NSF42mDeAaAfi\u002BKN3Ay3rKLY8=","GeUUID0ymF5rrBWdX7YHzWA5GiGkNWCNUog4sp4xL3c=","3BxX4I0JXoDqmE8m0BrRZhixBRlHEueS3jAlmUXE/I8=","IlET7uqumshgFxIEvfKRskON\u002BeAKZ7OfD/kCeAwn0PM=","NN2rS\u002B89ZAITWlNODPcF/lHIh3ZNmAHvUX4EjqSkX4s=","OE89N/FsYhRU1Dy5Ne83ehzSwlNc/RcxHrJpHxPHfqY=","QI7IL4TkYEqfUiIEXQiVCaZx4vrM9/wZlvOrhnUd4jQ=","UIntj4QoiyGr7bnJN8KK5PGrhQd89m\u002BLfh4T8VKPxAk=","J\u002Bfv/j3QyIW9bxolc46wDka8641F622/QgIllt0Re80=","Y/o0rakw9VYzEfz9M659qW77P9kvz\u002B2gTe1Lv3zgUDE=","8QWUReqP8upfOnmA5lMNgBxAfYJ1z3zv/WYBUXBEiog=","1L7p1HQI/Uoosqm7RyBuYjKbRFTycFgJEtHPSdlXWhU=","ZxPpBx5gkHuilHLcg/vcjvaXswvTqiUM0YaAEwbNSLI=","zSbNtRd32h6wCMWjU5ecl5a3ECd\u002BVBstFC3etkdk4s0=","urIQ/RlknPjR8\u002BeAcCsDIPiRjQGFfUdIC\u002BoT3wYB2dU=","ytyPPQGU70eGo9tCrHq5\u002BwXF3yVuqv9Z\u002Br1Zdf0XUCI=","scnW1D7e2F059zWPpwmOsIw6KIyloYSDqXXW70WAZpQ=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","7Yl3qA5xr\u002BXUmuY\u002Bshj87a0l8dEYVlvjk253M66DWfo="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
{"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","yMd45U9BK07I3b3fBQ627PWTYyZ2ZjrmFc5VD\u002BQVx1Q=","xKskvcoJU0RVRN1a5dRqKRM7IP5vmmbraUaPFYjhnCc=","p7BjQw7aSZjfOCqmKm7/kPO9qegEQZBfirMjlOx/I1I=","MI0hVVLYavEhzHq/Z1UbajfrxanA1aET19aOH8G2ImI=","2dY8CqW9fAY8yN0foa\u002BZp2gc0RfPoPmB/tKSj1QoTw0=","79rfGLH4UjfTPvc//\u002BZjnBqdz585pUtYZ0/hwE2iEic=","PUqgvMdfTQkF5lpBVtHv2teQLV5WaEH0xMKTmINe2YQ=","\u002BFI0b4ppdxel/pby/y/xKImHrtdxo2g83OhskdREyIg=","jEESu6\u002BhbDvNMjLt/6OufuK\u002B9cHmzx\u002BTCIn4fWa9nSc=","UaCPJEvR4nVxxGCB5CUnRlJiw4drDW3Q3Nss\u002Bya2cv4=","ZqF13CT3rok/Gzl\u002BMsw3q9X1nf65bwEVD670efE3k\u002Bk=","gH3W7phPzBCY1DAVn4YnP4SA8Uaq73TpctS0yFSvzNM=","u5F4J4\u002BLHUIOCz5ze5NSF42mDeAaAfi\u002BKN3Ay3rKLY8=","GeUUID0ymF5rrBWdX7YHzWA5GiGkNWCNUog4sp4xL3c=","3BxX4I0JXoDqmE8m0BrRZhixBRlHEueS3jAlmUXE/I8=","IlET7uqumshgFxIEvfKRskON\u002BeAKZ7OfD/kCeAwn0PM=","NN2rS\u002B89ZAITWlNODPcF/lHIh3ZNmAHvUX4EjqSkX4s=","OE89N/FsYhRU1Dy5Ne83ehzSwlNc/RcxHrJpHxPHfqY=","QI7IL4TkYEqfUiIEXQiVCaZx4vrM9/wZlvOrhnUd4jQ=","UIntj4QoiyGr7bnJN8KK5PGrhQd89m\u002BLfh4T8VKPxAk=","J\u002Bfv/j3QyIW9bxolc46wDka8641F622/QgIllt0Re80=","Y/o0rakw9VYzEfz9M659qW77P9kvz\u002B2gTe1Lv3zgUDE=","8QWUReqP8upfOnmA5lMNgBxAfYJ1z3zv/WYBUXBEiog=","1L7p1HQI/Uoosqm7RyBuYjKbRFTycFgJEtHPSdlXWhU=","ZxPpBx5gkHuilHLcg/vcjvaXswvTqiUM0YaAEwbNSLI=","zSbNtRd32h6wCMWjU5ecl5a3ECd\u002BVBstFC3etkdk4s0=","urIQ/RlknPjR8\u002BeAcCsDIPiRjQGFfUdIC\u002BoT3wYB2dU=","ytyPPQGU70eGo9tCrHq5\u002BwXF3yVuqv9Z\u002Br1Zdf0XUCI=","jOi/jUJ7o3KWHJ\u002BTUu1vZl6Z/94v2iG7KCnN4hr9IxM=","EX3cE3dtzg9OULBi66wvzoTBda5oAAEkcAgb2vzAcRE=","i\u002BlquWEXQionduujlv277Sj/bnYmn0JtYjUAR5GjYbI=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","iCYEGzjxtMCF9Bx2KuOz28eenE\u002Bzi818/JImx0MXYn0="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||||
@@ -13,7 +13,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Core")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Core")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1335b54d759c402b859b6d8338cd0c944cc70171")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8d7f5c1db6f69f3e6bee29c32b877e64080c45ed")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Core")]
|
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Core")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Core")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Core")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class EleccionesDbContext(DbContextOptions<EleccionesDbContext> options)
|
|||||||
public DbSet<Eleccion> Elecciones { get; set; }
|
public DbSet<Eleccion> Elecciones { get; set; }
|
||||||
public DbSet<BancaPrevia> BancasPrevias { get; set; }
|
public DbSet<BancaPrevia> BancasPrevias { get; set; }
|
||||||
public DbSet<Conurbano> Conurbano { get; set; }
|
public DbSet<Conurbano> Conurbano { get; set; }
|
||||||
|
public IQueryable<AgrupacionNacionalMapping> MapeoAgrupaciones => Set<AgrupacionNacionalMapping>();
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
@@ -31,6 +32,12 @@ public class EleccionesDbContext(DbContextOptions<EleccionesDbContext> options)
|
|||||||
|
|
||||||
modelBuilder.UseCollation("Modern_Spanish_CI_AS");
|
modelBuilder.UseCollation("Modern_Spanish_CI_AS");
|
||||||
|
|
||||||
|
modelBuilder.Entity<AgrupacionNacionalMapping>(entity =>
|
||||||
|
{
|
||||||
|
entity.HasNoKey();
|
||||||
|
entity.ToView("MapeoAgrupacionesNacionales"); // O .ToTable("MapeoAgrupacionesNacionales")
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity<Eleccion>(entity =>
|
modelBuilder.Entity<Eleccion>(entity =>
|
||||||
{
|
{
|
||||||
// Le decimos a EF que proporcionaremos el valor de la clave primaria.
|
// Le decimos a EF que proporcionaremos el valor de la clave primaria.
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// src/Elecciones.Database/Entities/AgrupacionNacionalMapping.cs
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace Elecciones.Database.Entities;
|
||||||
|
|
||||||
|
public class AgrupacionNacionalMapping
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public string IdAgrupacionProvincial { get; set; } = null!;
|
||||||
|
public string AgrupacionNacional { get; set; } = null!;
|
||||||
|
public string? NombreCortoNacional { get; set; }
|
||||||
|
public string? ColorNacional { get; set; }
|
||||||
|
public string? LogoUrlNacional { get; set; }
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Database")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Database")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1335b54d759c402b859b6d8338cd0c944cc70171")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8d7f5c1db6f69f3e6bee29c32b877e64080c45ed")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Database")]
|
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Database")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Database")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Database")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Infrastructure")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("Elecciones.Infrastructure")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1335b54d759c402b859b6d8338cd0c944cc70171")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8d7f5c1db6f69f3e6bee29c32b877e64080c45ed")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Infrastructure")]
|
[assembly: System.Reflection.AssemblyProductAttribute("Elecciones.Infrastructure")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Infrastructure")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("Elecciones.Infrastructure")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
Reference in New Issue
Block a user