Fix Llamadas de Ambitos Para Resultados
This commit is contained in:
@@ -246,11 +246,24 @@ export const getEstablecimientosPorMunicipio = async (municipioId: string): Prom
|
|||||||
return response.data;
|
return response.data;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getPanelElectoral = async (eleccionId: number, ambitoId: string | null, categoriaId: number): Promise<PanelElectoralDto> => {
|
export const getPanelElectoral = async (
|
||||||
// Construimos la URL base
|
eleccionId: number,
|
||||||
let url = ambitoId
|
ambitoId: string | null,
|
||||||
? `/elecciones/${eleccionId}/panel/${ambitoId}`
|
categoriaId: number,
|
||||||
: `/elecciones/${eleccionId}/panel`;
|
nivel: 'pais' | 'provincia' | 'municipio'
|
||||||
|
): Promise<PanelElectoralDto> => {
|
||||||
|
|
||||||
|
let url: string;
|
||||||
|
|
||||||
|
// Construimos la URL con el prefijo correcto.
|
||||||
|
if (nivel === 'pais' || !ambitoId) {
|
||||||
|
url = `/elecciones/${eleccionId}/panel`;
|
||||||
|
} else if (nivel === 'provincia') {
|
||||||
|
url = `/elecciones/${eleccionId}/panel/distrito:${ambitoId}`;
|
||||||
|
} else { // nivel === 'municipio'
|
||||||
|
url = `/elecciones/${eleccionId}/panel/municipio:${ambitoId}`;
|
||||||
|
}
|
||||||
|
|
||||||
url += `?categoriaId=${categoriaId}`;
|
url += `?categoriaId=${categoriaId}`;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -259,8 +272,6 @@ export const getPanelElectoral = async (eleccionId: number, ambitoId: string | n
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
if (axios.isAxiosError(error) && error.response?.status === 404) {
|
||||||
console.warn(`API devolvió 404 para ${url}. Devolviendo un estado vacío.`);
|
console.warn(`API devolvió 404 para ${url}. Devolviendo un estado vacío.`);
|
||||||
|
|
||||||
// Devolvemos el objeto vacío PERO con la nueva bandera activada
|
|
||||||
return {
|
return {
|
||||||
ambitoNombre: 'Sin Datos',
|
ambitoNombre: 'Sin Datos',
|
||||||
mapaData: [],
|
mapaData: [],
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { MapaNacional } from './components/MapaNacional';
|
|||||||
import { PanelResultados } from './components/PanelResultados';
|
import { PanelResultados } from './components/PanelResultados';
|
||||||
import { Breadcrumbs } from './components/Breadcrumbs';
|
import { Breadcrumbs } from './components/Breadcrumbs';
|
||||||
import { MunicipioSearch } from './components/MunicipioSearch';
|
import { MunicipioSearch } from './components/MunicipioSearch';
|
||||||
// 1. La importación de CSS ahora se hace como un módulo
|
|
||||||
import styles from './PanelNacional.module.css';
|
import styles from './PanelNacional.module.css';
|
||||||
import Select from 'react-select';
|
import Select from 'react-select';
|
||||||
import type { PanelElectoralDto, ResultadoTicker } from '../../../types/types';
|
import type { PanelElectoralDto, ResultadoTicker } from '../../../types/types';
|
||||||
@@ -18,19 +17,9 @@ import { ImageWithFallback } from '../../../components/common/ImageWithFallback'
|
|||||||
import { assetBaseUrl } from '../../../apiService';
|
import { assetBaseUrl } from '../../../apiService';
|
||||||
import { useQueryClient } from '@tanstack/react-query';
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
|
|
||||||
// --- COMPONENTE INTERNO PARA LA TARJETA DE RESULTADOS EN MÓVIL ---
|
// --- SUB-COMPONENTE PARA UNA FILA DE RESULTADO ---
|
||||||
interface MobileResultsCardProps {
|
|
||||||
eleccionId: number;
|
|
||||||
ambitoId: string | null;
|
|
||||||
categoriaId: number;
|
|
||||||
ambitoNombre: string;
|
|
||||||
ambitoNivel: 'pais' | 'provincia' | 'municipio';
|
|
||||||
}
|
|
||||||
|
|
||||||
const formatPercent = (num: number) => `${(num || 0).toFixed(2).replace('.', ',')}%`;
|
const formatPercent = (num: number) => `${(num || 0).toFixed(2).replace('.', ',')}%`;
|
||||||
|
|
||||||
// --- SUB-COMPONENTE PARA UNA FILA DE RESULTADO ---
|
|
||||||
// 2. Todas las props 'className' ahora usan el objeto 'styles'
|
|
||||||
const ResultRow = ({ partido }: { partido: ResultadoTicker }) => (
|
const ResultRow = ({ partido }: { partido: ResultadoTicker }) => (
|
||||||
<div className={styles.mobileResultRow} style={{ borderLeftColor: partido.color || '#ccc' }}>
|
<div className={styles.mobileResultRow} style={{ borderLeftColor: partido.color || '#ccc' }}>
|
||||||
<div className={styles.mobileResultLogo} style={{ backgroundColor: partido.color || '#e9ecef' }}>
|
<div className={styles.mobileResultLogo} style={{ backgroundColor: partido.color || '#e9ecef' }}>
|
||||||
@@ -71,8 +60,8 @@ const MobileResultsCard = ({
|
|||||||
const [isExpanded, setIsExpanded] = useState(false);
|
const [isExpanded, setIsExpanded] = useState(false);
|
||||||
|
|
||||||
const { data } = useSuspenseQuery<PanelElectoralDto>({
|
const { data } = useSuspenseQuery<PanelElectoralDto>({
|
||||||
queryKey: ['panelElectoral', eleccionId, ambitoId, categoriaId],
|
queryKey: ['panelElectoral', eleccionId, ambitoId, categoriaId, ambitoNivel],
|
||||||
queryFn: () => getPanelElectoral(eleccionId, ambitoId, categoriaId),
|
queryFn: () => getPanelElectoral(eleccionId, ambitoId, categoriaId, ambitoNivel),
|
||||||
refetchInterval: 30000,
|
refetchInterval: 30000,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -86,7 +75,6 @@ const MobileResultsCard = ({
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Clases condicionales también se construyen con el objeto 'styles'
|
|
||||||
const cardClasses = [
|
const cardClasses = [
|
||||||
styles.mobileResultsCardContainer,
|
styles.mobileResultsCardContainer,
|
||||||
isExpanded ? styles.expanded : '',
|
isExpanded ? styles.expanded : '',
|
||||||
@@ -95,7 +83,6 @@ const MobileResultsCard = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={cardClasses}>
|
<div className={cardClasses}>
|
||||||
{/* Sección Colapsable con Resultados */}
|
|
||||||
<div className={styles.collapsibleSection}>
|
<div className={styles.collapsibleSection}>
|
||||||
<div className={styles.mobileResultsHeader} onClick={() => setIsExpanded(!isExpanded)}>
|
<div className={styles.mobileResultsHeader} onClick={() => setIsExpanded(!isExpanded)}>
|
||||||
<div className={styles.headerInfo}>
|
<div className={styles.headerInfo}>
|
||||||
@@ -114,8 +101,6 @@ const MobileResultsCard = ({
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Footer Fijo con Botones de Navegación */}
|
|
||||||
<div className={styles.mobileCardViewToggle}>
|
<div className={styles.mobileCardViewToggle}>
|
||||||
<button
|
<button
|
||||||
className={`${styles.toggleBtn} ${mobileView === 'mapa' ? styles.active : ''}`}
|
className={`${styles.toggleBtn} ${mobileView === 'mapa' ? styles.active : ''}`}
|
||||||
@@ -156,11 +141,11 @@ const CATEGORIAS_NACIONALES = [
|
|||||||
|
|
||||||
const PanelContenido = ({ eleccionId, ambitoActual, categoriaId }: { eleccionId: number, ambitoActual: AmbitoState, categoriaId: number }) => {
|
const PanelContenido = ({ eleccionId, ambitoActual, categoriaId }: { eleccionId: number, ambitoActual: AmbitoState, categoriaId: number }) => {
|
||||||
const { data } = useSuspenseQuery<PanelElectoralDto>({
|
const { data } = useSuspenseQuery<PanelElectoralDto>({
|
||||||
queryKey: ['panelElectoral', eleccionId, ambitoActual.id, categoriaId],
|
queryKey: ['panelElectoral', eleccionId, ambitoActual.id, categoriaId, ambitoActual.nivel],
|
||||||
queryFn: () => getPanelElectoral(eleccionId, ambitoActual.id, categoriaId),
|
queryFn: () => getPanelElectoral(eleccionId, ambitoActual.id, categoriaId, ambitoActual.nivel),
|
||||||
refetchInterval: 30000,
|
refetchInterval: 30000,
|
||||||
});
|
});
|
||||||
// Si la API devolvió la bandera 'sinDatos', mostramos un mensaje.
|
|
||||||
if (data.sinDatos) {
|
if (data.sinDatos) {
|
||||||
return (
|
return (
|
||||||
<div style={{ padding: '2rem', textAlign: 'center', color: '#666' }}>
|
<div style={{ padding: '2rem', textAlign: 'center', color: '#666' }}>
|
||||||
@@ -170,7 +155,7 @@ const PanelContenido = ({ eleccionId, ambitoActual, categoriaId }: { eleccionId:
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Si no, renderizamos los resultados.
|
|
||||||
return <PanelResultados resultados={data.resultadosPanel} estadoRecuento={data.estadoRecuento} />;
|
return <PanelResultados resultados={data.resultadosPanel} estadoRecuento={data.estadoRecuento} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -185,7 +170,7 @@ export const PanelNacionalWidget = ({ eleccionId }: PanelNacionalWidgetProps) =>
|
|||||||
const handleAmbitoSelect = (nuevoAmbitoId: string, nuevoNivel: 'provincia' | 'municipio', nuevoNombre: string) => {
|
const handleAmbitoSelect = (nuevoAmbitoId: string, nuevoNivel: 'provincia' | 'municipio', nuevoNombre: string) => {
|
||||||
if (nuevoNivel === 'municipio') {
|
if (nuevoNivel === 'municipio') {
|
||||||
toast.promise(
|
toast.promise(
|
||||||
queryClient.invalidateQueries({ queryKey: ['panelElectoral', eleccionId, nuevoAmbitoId, categoriaId] }),
|
queryClient.invalidateQueries({ queryKey: ['panelElectoral', eleccionId, nuevoAmbitoId, categoriaId, nuevoNivel] }),
|
||||||
{
|
{
|
||||||
loading: `Cargando datos de ${nuevoNombre}...`,
|
loading: `Cargando datos de ${nuevoNombre}...`,
|
||||||
error: <b>No se pudieron cargar los datos.</b>,
|
error: <b>No se pudieron cargar los datos.</b>,
|
||||||
|
|||||||
@@ -1004,32 +1004,55 @@ 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)
|
||||||
if (string.IsNullOrEmpty(ambitoId))
|
if (string.IsNullOrEmpty(ambitoId))
|
||||||
{
|
{
|
||||||
return await GetPanelNacional(eleccionId, categoriaId);
|
return await GetPanelNacional(eleccionId, categoriaId);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool esProvincia = await _dbContext.AmbitosGeograficos
|
// Dividimos el ambitoId por el prefijo ":"
|
||||||
.AsNoTracking()
|
var parts = ambitoId.Split(new[] { ':' }, 2);
|
||||||
.AnyAsync(a => a.NivelId == 10 && a.DistritoId == ambitoId);
|
|
||||||
|
|
||||||
if (esProvincia)
|
// Si no tiene el formato esperado, devolvemos un error.
|
||||||
|
if (parts.Length != 2)
|
||||||
{
|
{
|
||||||
return await GetPanelProvincial(eleccionId, ambitoId, categoriaId);
|
return BadRequest($"El formato del ID de ámbito '{ambitoId}' no es válido. Debe ser 'distrito:ID' o 'municipio:ID'.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (int.TryParse(ambitoId, out int idNumerico))
|
var tipoAmbito = parts[0].ToLower();
|
||||||
{
|
var id = parts[1];
|
||||||
bool esMunicipio = await _dbContext.AmbitosGeograficos
|
|
||||||
.AsNoTracking()
|
|
||||||
.AnyAsync(a => a.Id == idNumerico && a.NivelId == 30);
|
|
||||||
|
|
||||||
if (esMunicipio)
|
switch (tipoAmbito)
|
||||||
{
|
{
|
||||||
return await GetPanelMunicipal(eleccionId, idNumerico, categoriaId);
|
case "distrito":
|
||||||
}
|
// Es una provincia. Llamamos al método provincial con el ID.
|
||||||
|
var esProvinciaValida = await _dbContext.AmbitosGeograficos.AnyAsync(a => a.NivelId == 10 && a.DistritoId == id);
|
||||||
|
if (!esProvinciaValida)
|
||||||
|
{
|
||||||
|
return NotFound($"No se encontró una provincia con distritoId '{id}'.");
|
||||||
|
}
|
||||||
|
return await GetPanelProvincial(eleccionId, id, categoriaId);
|
||||||
|
|
||||||
|
case "municipio":
|
||||||
|
// Es un municipio. Intentamos convertir el ID a número.
|
||||||
|
if (int.TryParse(id, out int idNumerico))
|
||||||
|
{
|
||||||
|
var esMunicipioValido = await _dbContext.AmbitosGeograficos.AnyAsync(a => a.Id == idNumerico && a.NivelId == 30);
|
||||||
|
if (!esMunicipioValido)
|
||||||
|
{
|
||||||
|
return NotFound($"No se encontró un municipio con Id '{idNumerico}'.");
|
||||||
|
}
|
||||||
|
return await GetPanelMunicipal(eleccionId, idNumerico, categoriaId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return BadRequest($"El ID de municipio '{id}' no es un número válido.");
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
// Si el prefijo no es ni "distrito" ni "municipio", es un error.
|
||||||
|
return BadRequest($"Tipo de ámbito desconocido: '{tipoAmbito}'. Use 'distrito' o 'municipio'.");
|
||||||
}
|
}
|
||||||
return NotFound($"No se pudo encontrar un ámbito electoral válido para el ID '{ambitoId}'.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IActionResult> GetPanelMunicipal(int eleccionId, int ambitoId, int categoriaId)
|
private async Task<IActionResult> GetPanelMunicipal(int eleccionId, int ambitoId, int categoriaId)
|
||||||
|
|||||||
@@ -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+ced1ae6b3f1bb6bc7609843279fc6d448f023581")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bea752f7d098eea8010e0cf958c1f02ea26fd901")]
|
||||||
[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=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","ePXrkee3hv3wHUr8S7aYmRVvXUTxQf76zApKGv3/l3o=","DXx5dQywLo3UsY2zQaUG\u002BbW4ObiYbybxPBWxeJD2bhk=","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=","lQ/iaNfGnc0FJKQrkxKHO7SliCjPeh/9jmDIfSDVoaM=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","vdD3oinLVedyfMLJse78C6gHW10I\u002BzpFGV0NLc0LX8g="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
{"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","ePXrkee3hv3wHUr8S7aYmRVvXUTxQf76zApKGv3/l3o=","DXx5dQywLo3UsY2zQaUG\u002BbW4ObiYbybxPBWxeJD2bhk=","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=","UzM0awTWtV7p9CmULzfSuI90Jc12Wcb8DX5Z1DNf6lw=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","iIYAmZ0ypLQ5JUMS3h12NIOubOKTq6YPApMt7L3Dxc4="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
||||||
@@ -1 +1 @@
|
|||||||
{"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","ePXrkee3hv3wHUr8S7aYmRVvXUTxQf76zApKGv3/l3o=","DXx5dQywLo3UsY2zQaUG\u002BbW4ObiYbybxPBWxeJD2bhk=","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=","lQ/iaNfGnc0FJKQrkxKHO7SliCjPeh/9jmDIfSDVoaM=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","vdD3oinLVedyfMLJse78C6gHW10I\u002BzpFGV0NLc0LX8g="],"CachedAssets":{},"CachedCopyCandidates":{}}
|
{"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["YB39loxHH43S4MF8aTOiogcIbBAIq5Qj3dlJkIfYVxI=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","ePXrkee3hv3wHUr8S7aYmRVvXUTxQf76zApKGv3/l3o=","DXx5dQywLo3UsY2zQaUG\u002BbW4ObiYbybxPBWxeJD2bhk=","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=","UzM0awTWtV7p9CmULzfSuI90Jc12Wcb8DX5Z1DNf6lw=","BY4GeeFiQbYpWuSzb2XIY4JatmLNOZ6dhKs4ZT92nsM=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","iIYAmZ0ypLQ5JUMS3h12NIOubOKTq6YPApMt7L3Dxc4="],"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+ced1ae6b3f1bb6bc7609843279fc6d448f023581")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bea752f7d098eea8010e0cf958c1f02ea26fd901")]
|
||||||
[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")]
|
||||||
|
|||||||
@@ -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+ced1ae6b3f1bb6bc7609843279fc6d448f023581")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bea752f7d098eea8010e0cf958c1f02ea26fd901")]
|
||||||
[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+ced1ae6b3f1bb6bc7609843279fc6d448f023581")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+bea752f7d098eea8010e0cf958c1f02ea26fd901")]
|
||||||
[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