/// <summary> /// Busca uno o mas hechos que correspondan con los filtros enviados como parámetro. /// Si un filtro es nulo entonces no se considera para filtrar al hecho /// </summary> /// <param name="idConcepto">Identificador del concepto buscad</param> /// <param name="entidad">Entidad a considerar del concepto</param> /// <param name="unidad">Unidad buscada del hecho</param> /// <param name="fechaInicio">Fecha posible de inicio</param> /// <param name="fechaFin">Fecha posible de fin</param> /// <param name="valoresDimensiones">Valores dimensionales a considerar</param> /// <param name="considerarDimensiones">Indica si se deben de considerar o no las dimensiones para buscar un hecho</param> /// <returns>Lista de hechos que corresponden con la búsqueda</returns> public IList <HechoDto> BuscarHechos(string idConcepto, EntidadDto entidad, UnidadDto unidad, DateTime fechaInicio, DateTime fechaFin, IList <DimensionInfoDto> valoresDimensiones, bool considerarDimensiones = true) { IList <HechoDto> hechosResultado = new List <HechoDto>(); foreach (var listaHechos in HechosPorIdConcepto.Where(x => x.Key.Equals(idConcepto))) { foreach (var idHecho in listaHechos.Value) { var hecho = HechosPorId[idHecho]; var contexto = ContextosPorId.ContainsKey(hecho.IdContexto) ? ContextosPorId[hecho.IdContexto] : null; var unidadHecho = !String.IsNullOrEmpty(hecho.IdUnidad) && UnidadesPorId.ContainsKey(hecho.IdUnidad) ? UnidadesPorId[hecho.IdUnidad] : null; if (contexto != null) { if (entidad != null) { //Revisar entidad if (!String.IsNullOrEmpty(entidad.EsquemaId) && !entidad.EsquemaId.Equals(contexto.Entidad.EsquemaId)) { continue; } if (!String.IsNullOrEmpty(entidad.Id) && !entidad.Id.Equals(contexto.Entidad.Id)) { continue; } } //Verificar unidad if (unidad != null && unidadHecho != null && !unidadHecho.EsEquivalente(unidad)) { continue; } //Verificar fechas if (contexto.Periodo.Tipo == Period.Instante) { if (!contexto.Periodo.FechaInstante.Equals(fechaFin)) { continue; } } else if (contexto.Periodo.Tipo == Period.Duracion) { if (!contexto.Periodo.FechaFin.Equals(fechaFin) || !contexto.Periodo.FechaInicio.Equals(fechaInicio)) { continue; } } //Verificar dimensiones if (considerarDimensiones && !contexto.SonDimensionesEquivalentes(valoresDimensiones)) { continue; } hechosResultado.Add(hecho); } } } return(hechosResultado); }
/// <summary> /// Verifica si este objeto es igual o equivalente a otra entidad /// </summary> /// <param name="entidad">entidad la entidad contra la cual se comparará esta entidad.</param> /// <returns>true si las dos entidad son estructuralmente iguales. false en cualquier otro caso</returns> public bool EstructuralmenteIgual(EntidadDto entidad) { bool resultado = true; if (entidad == null) { resultado = false; } else { if (this.EsquemaId.Equals(entidad.EsquemaId) && this.Id.Equals(entidad.Id) && this.ContieneInformacionDimensional == entidad.ContieneInformacionDimensional) { if (this.ContieneInformacionDimensional) { if ((this.ValoresDimension != null && entidad.ValoresDimension == null) || (entidad.ValoresDimension != null && this.ValoresDimension == null)) { return(false); } else { if (this.ValoresDimension != null && entidad.ValoresDimension != null) { if (this.ValoresDimension.Count != entidad.ValoresDimension.Count) { resultado = false; } else { foreach (var valorDimension in this.ValoresDimension) { bool equivalenteEncontrado = false; foreach (var valorDimensionComparar in entidad.ValoresDimension) { if (valorDimensionComparar.EsEquivalente(valorDimension)) { equivalenteEncontrado = true; break; } } if (!equivalenteEncontrado) { resultado = false; break; } } } } } } } else { resultado = false; } } return(resultado); }