Feat Telegramas Busquedas

This commit is contained in:
2025-09-08 12:17:22 -03:00
parent c105106f3b
commit 70c8ce54de
9 changed files with 136 additions and 63 deletions

View File

@@ -209,3 +209,8 @@ export const getRankingMunicipiosPorSeccion = async (seccionId: string): Promise
const { data } = await apiClient.get(`/resultados/ranking-municipios-por-seccion/${seccionId}`); const { data } = await apiClient.get(`/resultados/ranking-municipios-por-seccion/${seccionId}`);
return data; return data;
}; };
export const getEstablecimientosPorMunicipio = async (municipioId: string): Promise<CatalogoItem[]> => {
const response = await apiClient.get(`/catalogos/establecimientos-por-municipio/${municipioId}`);
return response.data;
};

View File

@@ -1,12 +1,13 @@
// src/components/TelegramaWidget.tsx // src/components/TelegramaWidget.tsx
import { useState, useEffect } from 'react'; import { useState, useEffect, useMemo } from 'react';
import Select, { type FilterOptionOption } from 'react-select'; // <-- Importar react-select
import { import {
getSecciones, getSecciones,
getMunicipiosPorSeccion, getMunicipiosPorSeccion,
getCircuitosPorMunicipio, getEstablecimientosPorMunicipio, // <-- Nueva función
getEstablecimientosPorCircuito,
getMesasPorEstablecimiento, getMesasPorEstablecimiento,
getTelegramaPorId getTelegramaPorId,
assetBaseUrl
} from '../apiService'; } from '../apiService';
import type { TelegramaData, CatalogoItem } from '../types/types'; import type { TelegramaData, CatalogoItem } from '../types/types';
import './TelegramaWidget.css'; import './TelegramaWidget.css';
@@ -15,103 +16,152 @@ import { pdfjs, Document, Page } from 'react-pdf';
import 'react-pdf/dist/Page/AnnotationLayer.css'; import 'react-pdf/dist/Page/AnnotationLayer.css';
import 'react-pdf/dist/Page/TextLayer.css'; import 'react-pdf/dist/Page/TextLayer.css';
pdfjs.GlobalWorkerOptions.workerSrc = '/pdf.worker.min.mjs'; pdfjs.GlobalWorkerOptions.workerSrc = `${assetBaseUrl}/pdf.worker.min.mjs`;
// Estilos para los selectores
const customSelectStyles = {
control: (base: any) => ({ ...base, marginBottom: '1rem' }),
menu: (base: any) => ({ ...base, zIndex: 10 }),
};
// --- FUNCIÓN DE FILTRO "SMART SEARCH" ---
const smartSearchFilter = (
option: FilterOptionOption<{ label: string; value: string }>,
inputValue: string
) => {
// 1. Si no hay entrada de búsqueda, muestra todas las opciones.
if (!inputValue) {
return true;
}
// 2. Normalizamos tanto la etiqueta de la opción como la entrada del usuario:
// - a minúsculas
// - quitamos los acentos (si fuera necesario, aunque aquí no tanto)
const normalizedLabel = option.label.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
const normalizedInput = inputValue.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
// 3. Dividimos la entrada del usuario en palabras individuales.
const searchTerms = normalizedInput.split(' ').filter(term => term.length > 0);
// 4. La opción es válida si CADA TÉRMINO de búsqueda está incluido en la etiqueta.
return searchTerms.every(term => normalizedLabel.includes(term));
};
export const TelegramaWidget = () => { export const TelegramaWidget = () => {
// Estados para los filtros geográficos // Estados para los datos de los dropdowns
const [secciones, setSecciones] = useState<CatalogoItem[]>([]); const [secciones, setSecciones] = useState<CatalogoItem[]>([]);
const [municipios, setMunicipios] = useState<CatalogoItem[]>([]); const [municipios, setMunicipios] = useState<CatalogoItem[]>([]);
const [circuitos, setCircuitos] = useState<CatalogoItem[]>([]);
const [establecimientos, setEstablecimientos] = useState<CatalogoItem[]>([]); const [establecimientos, setEstablecimientos] = useState<CatalogoItem[]>([]);
const [mesas, setMesas] = useState<CatalogoItem[]>([]); const [mesas, setMesas] = useState<CatalogoItem[]>([]);
// Estados para los valores seleccionados // Estados para los valores seleccionados (adaptados para react-select)
const [selectedSeccion, setSelectedSeccion] = useState(''); const [selectedSeccion, setSelectedSeccion] = useState<{ value: string; label: string } | null>(null);
const [selectedMunicipio, setSelectedMunicipio] = useState(''); const [selectedMunicipio, setSelectedMunicipio] = useState<{ value: string; label: string } | null>(null);
const [selectedCircuito, setSelectedCircuito] = useState(''); const [selectedEstablecimiento, setSelectedEstablecimiento] = useState<{ value: string; label: string } | null>(null);
const [selectedEstablecimiento, setSelectedEstablecimiento] = useState(''); const [selectedMesa, setSelectedMesa] = useState<{ value: string; label: string } | null>(null);
const [selectedMesa, setSelectedMesa] = useState('');
// Estados para la visualización del telegrama // Estados para la visualización del telegrama (sin cambios)
const [telegrama, setTelegrama] = useState<TelegramaData | null>(null); const [telegrama, setTelegrama] = useState<TelegramaData | null>(null);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
// Cargar secciones iniciales // Cargar secciones iniciales y aplicar orden
useEffect(() => { useEffect(() => {
getSecciones().then(setSecciones); getSecciones().then(seccionesData => {
const orden = new Map([
['Capital', 0], ['Primera', 1], ['Segunda', 2], ['Tercera', 3],
['Cuarta', 4], ['Quinta', 5], ['Sexta', 6], ['Séptima', 7]
]);
const getOrden = (nombre: string) => {
const match = nombre.match(/Capital|Primera|Segunda|Tercera|Cuarta|Quinta|Sexta|Séptima/);
return match ? orden.get(match[0]) ?? 99 : 99;
};
seccionesData.sort((a, b) => getOrden(a.nombre) - getOrden(b.nombre));
setSecciones(seccionesData);
});
}, []); }, []);
// Cargar municipios cuando cambia la sección // Cargar municipios cuando cambia la sección
useEffect(() => { useEffect(() => {
if (selectedSeccion) { if (selectedSeccion) {
setMunicipios([]); setCircuitos([]); setEstablecimientos([]); setMesas([]); setMunicipios([]); setEstablecimientos([]); setMesas([]);
setSelectedMunicipio(''); setSelectedCircuito(''); setSelectedEstablecimiento(''); setSelectedMesa(''); setSelectedMunicipio(null); setSelectedEstablecimiento(null); setSelectedMesa(null);
getMunicipiosPorSeccion(selectedSeccion).then(setMunicipios); getMunicipiosPorSeccion(selectedSeccion.value).then(setMunicipios);
} }
}, [selectedSeccion]); }, [selectedSeccion]);
// Cargar establecimientos cuando cambia el municipio (SIN pasar por circuito)
useEffect(() => { useEffect(() => {
if (selectedMunicipio) { if (selectedMunicipio) {
setCircuitos([]); setEstablecimientos([]); setMesas([]); setEstablecimientos([]); setMesas([]);
setSelectedCircuito(''); setSelectedEstablecimiento(''); setSelectedMesa(''); setSelectedEstablecimiento(null); setSelectedMesa(null);
getCircuitosPorMunicipio(selectedMunicipio).then(setCircuitos); getEstablecimientosPorMunicipio(selectedMunicipio.value).then(setEstablecimientos);
} }
}, [selectedMunicipio]); }, [selectedMunicipio]);
useEffect(() => { // Cargar mesas cuando cambia el establecimiento
if (selectedCircuito) {
setEstablecimientos([]); setMesas([]);
setSelectedEstablecimiento(''); setSelectedMesa('');
getEstablecimientosPorCircuito(selectedCircuito).then(setEstablecimientos);
}
}, [selectedCircuito]);
useEffect(() => { useEffect(() => {
if (selectedEstablecimiento) { if (selectedEstablecimiento) {
setMesas([]); setMesas([]);
setSelectedMesa(''); setSelectedMesa(null);
getMesasPorEstablecimiento(selectedEstablecimiento).then(setMesas); getMesasPorEstablecimiento(selectedEstablecimiento.value).then(setMesas);
} }
}, [selectedEstablecimiento]); }, [selectedEstablecimiento]);
// Buscar el telegrama cuando se selecciona una mesa // Buscar el telegrama cuando se selecciona una mesa
useEffect(() => { useEffect(() => {
if (selectedMesa) { if (selectedMesa) {
setLoading(true); setLoading(true); setError(null); setTelegrama(null);
setError(null); getTelegramaPorId(selectedMesa.value)
setTelegrama(null);
getTelegramaPorId(selectedMesa)
.then(setTelegrama) .then(setTelegrama)
.catch(() => setError(`El telegrama para la mesa seleccionada, aún no se cargó en el sistema.`)) .catch(() => setError(`El telegrama para la mesa seleccionada, aún no se cargó en el sistema.`))
.finally(() => setLoading(false)); .finally(() => setLoading(false));
} }
}, [selectedMesa]); }, [selectedMesa]);
// Formateo de opciones para react-select
const seccionOptions = useMemo(() => secciones.map(s => ({ value: s.id, label: s.nombre })), [secciones]);
const municipioOptions = useMemo(() => municipios.map(m => ({ value: m.id, label: m.nombre })), [municipios]);
const establecimientoOptions = useMemo(() => establecimientos.map(e => ({ value: e.id, label: e.nombre })), [establecimientos]);
const mesaOptions = useMemo(() => mesas.map(m => ({ value: m.id, label: m.nombre })), [mesas]);
return ( return (
<div className="telegrama-container"> <div className="telegrama-container">
<h4>Consulta de Telegramas por Ubicación</h4> <h4>Consulta de Telegramas por Ubicación</h4>
<div className="filters-grid"> <div className="filters-grid">
<select value={selectedSeccion} onChange={e => setSelectedSeccion(e.target.value)}> <Select
<option value="">1. Sección</option> options={seccionOptions}
{secciones.map(s => <option key={s.id} value={s.id}>{s.nombre}</option>)} value={selectedSeccion}
</select> onChange={setSelectedSeccion}
<select value={selectedMunicipio} onChange={e => setSelectedMunicipio(e.target.value)} disabled={!municipios.length}> placeholder="1. Sección..."
<option value="">2. Municipio</option> styles={customSelectStyles}
{municipios.map(m => <option key={m.id} value={m.id}>{m.nombre}</option>)} />
</select> <Select
<select value={selectedCircuito} onChange={e => setSelectedCircuito(e.target.value)} disabled={!circuitos.length}> options={municipioOptions}
<option value="">3. Circuito</option> value={selectedMunicipio}
{circuitos.map(c => <option key={c.id} value={c.id}>{c.nombre}</option>)} onChange={setSelectedMunicipio}
</select> placeholder="2. Municipio..."
<select value={selectedEstablecimiento} onChange={e => setSelectedEstablecimiento(e.target.value)} disabled={!establecimientos.length}> isDisabled={!selectedSeccion}
<option value="">4. Establecimiento</option> styles={customSelectStyles}
{establecimientos.map(e => <option key={e.id} value={e.id}>{e.nombre}</option>)} />
</select> <Select
<select value={selectedMesa} onChange={e => setSelectedMesa(e.target.value)} disabled={!mesas.length}> options={establecimientoOptions}
<option value="">5. Mesa</option> value={selectedEstablecimiento}
{mesas.map(m => <option key={m.id} value={m.id}>{m.nombre}</option>)} onChange={setSelectedEstablecimiento}
</select> placeholder="3. Establecimiento..."
isDisabled={!selectedMunicipio}
styles={customSelectStyles}
filterOption={smartSearchFilter}
isSearchable // Habilitamos la búsqueda
/>
<Select
options={mesaOptions}
value={selectedMesa}
onChange={setSelectedMesa}
placeholder="4. Mesa..."
isDisabled={!selectedEstablecimiento}
styles={customSelectStyles}
/>
</div> </div>
<div className="telegrama-viewer"> <div className="telegrama-viewer">

View File

@@ -157,4 +157,22 @@ public class CatalogosController : ControllerBase
.Distinct().OrderBy(m => m.Nombre).ToListAsync(); .Distinct().OrderBy(m => m.Nombre).ToListAsync();
return Ok(mesas); return Ok(mesas);
} }
/// <summary>
/// Obtiene todos los establecimientos de un municipio, sin necesidad de especificar un circuito.
/// </summary>
[HttpGet("establecimientos-por-municipio/{municipioId}")]
public async Task<IActionResult> GetEstablecimientosPorMunicipio(string municipioId)
{
// Buscamos todos los ámbitos de Nivel 60 (Establecimiento) que pertenezcan
// al Municipio (Nivel 30) a través del campo 'SeccionId'.
var establecimientos = await _dbContext.AmbitosGeograficos.AsNoTracking()
.Where(a => a.NivelId == 60 && a.SeccionId == municipioId && !string.IsNullOrEmpty(a.EstablecimientoId))
.Select(a => new { Id = a.EstablecimientoId, a.Nombre })
.Distinct()
.OrderBy(e => e.Nombre)
.ToListAsync();
return Ok(establecimientos);
}
} }

View File

@@ -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+7f49362e55449c7400f7099fc78a9c975e8268f1")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c105106f3b420a1c1c19b125cdf5c31e59bfbe3b")]
[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")]

View File

@@ -1 +1 @@
{"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","taDH73UT7ynWh85nq2etLidK9sPQF85kWam\u002BdE5RD8w=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","wUbgaUpdwuF5YmyAUI1ZjPse4/SaT06idesVz21NM\u002Bk="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"b5T/+ta4fUd8qpIzUTm3KyEwAYYUsU5ASo+CSFM3ByE=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","ePXrkee3hv3wHUr8S7aYmRVvXUTxQf76zApKGv3/l3o=","Mo7tdPQiZw6/WSnll8t7xy4SU1EoFW4N6EN7JftvBYs=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","eix/dR870pRbtIGVeoF7YpZlG47M4PrBntvgxdO1oDM="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@@ -1 +1 @@
{"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","taDH73UT7ynWh85nq2etLidK9sPQF85kWam\u002BdE5RD8w=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","wUbgaUpdwuF5YmyAUI1ZjPse4/SaT06idesVz21NM\u002Bk="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"tJTBjV/i0Ihkc6XuOu69wxL8PBac9c9Kak6srMso4pU=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["TyIJk/eQMWjmB5LsDE\u002BZIJC9P9ciVxd7bnzRiTZsGt4=","t631p0kaOa0gMRIcaPzz1ZVPZ1kuq4pq4kYPWQgoPcM=","PA/Beu9jJpOBY5r5Y1CiSyqrARA2j7LHeWYUnEZpQO8=","E2ODTAlJxzsXY1iP1eB/02NIUK\u002BnQveGlWAOHY1cpgA=","6WTvWQ72AaZBYOVSmaxaci9tc1dW5p7IK9Kscjj2cb0=","vAy46VJ9Gp8QqG/Px4J1mj8jL6ws4/A01UKRmMYfYek=","cdgbHR/E4DJsddPc\u002BTpzoUMOVNaFJZm33Pw7AxU9Ees=","4r4JGR4hS5m4rsLfuCSZxzrknTBxKFkLQDXc\u002B2KbqTU=","yVoZ4UnBcSOapsJIi046hnn7ylD3jAcEBUxQ\u002Brkvj/4=","/GfbpJthEWmsuz0uFx1QLHM7gyM1wLLeQgAIl4SzUD4=","i5\u002B5LcfxQD8meRAkQbVf4wMvjxSE4\u002BjCd2/FdPtMpms=","AvSkxVPIg0GjnB1RJ4hDNyo9p9GONrzDs8uVuixH\u002BOE=","IgT9pOgRnK37qfILj2QcjFoBZ180HMt\u002BScgje2iYOo4=","ezUlOMzNZmyKDIe1wwXqvX\u002BvhwfB992xNVts7r2zcTc=","y2BV4WpkQuLfqQhfOQBtmuzh940c3s4LAopGKfztfTE=","lHTUEsMkDu8nqXtfTwl7FRfgocyyc7RI5O/edTHN1\u002B0=","A7nz7qgOtQ1CwZZLvNnr0b5QZB3fTi3y4i6y7rBIcxQ=","znnuRi2tsk7AACuYo4WSgj7NcLriG4PKVaF4L35SvDk=","GelE32odx/vTului267wqi6zL3abBnF9yvwC2Q66LoM=","TEsXImnzxFKTIq2f5fiDu7i6Ar/cbecW5MZ3z8Wb/a4=","5WogJu\u002BUPlF\u002BE5mq/ILtDXpVwqwmhHtsEB13nmT5JJk=","dcHQRkttjMjo2dvhL7hA9t4Pg\u002B7OnjZpkFmakT4QR9U=","Of8nTYw5l\u002BgiAJo7z6XYIntG2tUtCFcILzHbTiiXn\u002Bw=","PDy\u002BTiayvNAoXXBEgwC/kCojpgOOMI6RQOIoSXs3LJc=","ePXrkee3hv3wHUr8S7aYmRVvXUTxQf76zApKGv3/l3o=","Mo7tdPQiZw6/WSnll8t7xy4SU1EoFW4N6EN7JftvBYs=","P8JRhYPpULTLMAydvl3Ky\u002B92/tYDIjui0l66En4aXuQ=","eix/dR870pRbtIGVeoF7YpZlG47M4PrBntvgxdO1oDM="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@@ -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+7f49362e55449c7400f7099fc78a9c975e8268f1")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c105106f3b420a1c1c19b125cdf5c31e59bfbe3b")]
[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")]

View File

@@ -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+7f49362e55449c7400f7099fc78a9c975e8268f1")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c105106f3b420a1c1c19b125cdf5c31e59bfbe3b")]
[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")]

View File

@@ -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+7f49362e55449c7400f7099fc78a9c975e8268f1")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+c105106f3b420a1c1c19b125cdf5c31e59bfbe3b")]
[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")]