public String CreaHashInstitucion(MapaPersonasResponsables elemento) { var builder = new StringBuilder(); builder.Append(elemento.Fecha.ToString()); builder.Append(elemento.Entidad); builder.Append(elemento.IdTipoPersonaResponsable); builder.Append(elemento.IdSecuenciaInstitucion); return(UtilAbax.CalcularHash(builder.ToString())); }
/// <summary> /// Proceso que transforma una cadena (serializada JSON) en un identificador único. /// </summary> /// <param name="json">Cadena con objeto JSON</param> /// <returns>Hash generado del objeto json.</returns> public string GeneraHash(string json) { return(UtilAbax.CalcularHash(json)); }
public void ConsultaPersonasResponsables() { var AbaxXBRLCellStoreMongo = new AbaxXBRLCellStoreMongo(); AbaxXBRLCellStoreMongo.ConnectionString = ConectionString; AbaxXBRLCellStoreMongo.DataBaseName = DatabaseName; AbaxXBRLCellStoreMongo.JSONOutDirectory = JsonErrorDirectory; AbaxXBRLCellStoreMongo.Init(); var listaElementos = AbaxXBRLCellStoreMongo.ConsultaElementos <MapaPersonasResponsables>("PersonasResponsablesReducido", "{}"); var diccionarioElementosInstitucion = new Dictionary <String, IList <MapaPersonasResponsables> >(); var diccionarioInstituciones = new Dictionary <String, MapaPersonasResponsables>(); var diccionarioPorPersona = new Dictionary <String, PersonaResponsable>(); foreach (var elemento in listaElementos) { elemento.HashInstitucion = CreaHashInstitucion(elemento); if (elemento.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitution")) { if (!diccionarioInstituciones.ContainsKey(elemento.HashInstitucion)) { diccionarioInstituciones.Add(elemento.HashInstitucion, elemento); } } else if (!String.IsNullOrEmpty(elemento.IdSecuenciaPersona)) { elemento.HashPersona = UtilAbax.CalcularHash(elemento.HashInstitucion + elemento.IdSecuenciaPersona); IList <MapaPersonasResponsables> listaPersonasMap; if (!diccionarioElementosInstitucion.TryGetValue(elemento.HashInstitucion, out listaPersonasMap)) { listaPersonasMap = new List <MapaPersonasResponsables>(); diccionarioElementosInstitucion.Add(elemento.HashInstitucion, listaPersonasMap); } listaPersonasMap.Add(elemento); } } foreach (var hashInstitucion in diccionarioElementosInstitucion.Keys) { MapaPersonasResponsables elementoInstitucion; IList <MapaPersonasResponsables> listaElementosIterar; if (!diccionarioInstituciones.TryGetValue(hashInstitucion, out elementoInstitucion) || !diccionarioElementosInstitucion.TryGetValue(hashInstitucion, out listaElementosIterar)) { continue; } foreach (var elemento in listaElementosIterar) { PersonaResponsable personaResponsable; if (!diccionarioPorPersona.TryGetValue(elemento.HashPersona, out personaResponsable)) { personaResponsable = new PersonaResponsable(); personaResponsable.Entidad = elementoInstitucion.Entidad; personaResponsable.Fecha = elementoInstitucion.Fecha; personaResponsable.TipoPersonaResponsable = elementoInstitucion.TipoPersonaResponsable; personaResponsable.Institucion = elementoInstitucion.Valor; personaResponsable.IdTipoPersonaResponsable = elementoInstitucion.IdTipoPersonaResponsable; diccionarioPorPersona.Add(elemento.HashPersona, personaResponsable); if (String.IsNullOrEmpty(personaResponsable.TipoPersonaResponsable)) { personaResponsable.TipoPersonaResponsable = DeterminaEtiquetaTipoPersonaResponsable(elementoInstitucion.IdTipoPersonaResponsable); } } if (elemento.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition")) { personaResponsable.Cargo = elemento.Valor; } else if (elemento.IdConcepto.Equals("ar_pros_ResponsiblePersonName")) { personaResponsable.Nombre = elemento.Valor; } } } //if (File.Exists(PathArchivoPersonasResponsables)) //{ // File.Delete(PathArchivoPersonasResponsables); //} //File.Create(PathArchivoPersonasResponsables); using (StreamWriter w = File.AppendText(PathArchivoPersonasResponsables)) { foreach (var hashPersona in diccionarioPorPersona.Keys) { var persona = diccionarioPorPersona[hashPersona]; var linea = CreaLineaPersonaResponsable(persona); w.Write(linea); //File.AppendAllText(PathArchivoPersonasResponsables, "text content" + Environment.NewLine); } w.Close(); } }
/// <summary> /// Realiza el armado del repositorio de información XBRL /// </summary> /// <param name="listEntEstructuraInstancia">Estructura de los hechos que se van a registrar en el repositorio de informacion</param> /// <returns></returns> public List <EntBlockStoreDocumentosyFiltros> armarBlockStoreHashConsulta(List <EntEstructuraInstancia> listEntEstructuraInstancia) { var listadoDocumentos = new List <EntBlockStoreDocumentosyFiltros>(); foreach (var itemEstructuraInstancia in listEntEstructuraInstancia) { var blockStoreDocumentosyFiltros = new EntBlockStoreDocumentosyFiltros { registroBlockStore = new BsonDocument(), filtrosBlockStore = new BsonDocument(), EsValorChunks = false }; var estructuraClone = (EntEstructuraInstancia)itemEstructuraInstancia.Clone(); estructuraClone.Valor = null; estructuraClone.ValorRedondeado = 0; itemEstructuraInstancia.codigoHashRegistro = UtilAbax.CalcularHash(estructuraClone.ToJson()); var elemento = ConstEstandar.AperturaLlave; elemento += string.Format(ConstBlockStoreHechos.CodigoHashRegistro, itemEstructuraInstancia.codigoHashRegistro); blockStoreDocumentosyFiltros.CodigoHashRegistro = itemEstructuraInstancia.codigoHashRegistro; //elemento += string.Format(ConstBlockStoreHechos.Trimestre, itemEstructuraInstancia.Trimestre); //elemento += string.Format(ConstBlockStoreHechos.Ejercicio, itemEstructuraInstancia.Ejercicio); elemento += string.Format(ConstBlockStoreHechos.Taxonomia, itemEstructuraInstancia.EspacioNombresPrincipal); elemento += string.Format(ConstBlockStoreHechos.Entidad, itemEstructuraInstancia.Entidad.miId, itemEstructuraInstancia.Entidad.miEspaciodeNombresEntidad); elemento += !string.IsNullOrEmpty(itemEstructuraInstancia.Rol) ? string.Format(ConstBlockStoreHechos.Roll, itemEstructuraInstancia.Rol) : string.Empty; elemento += string.Format(ConstBlockStoreHechos.Concepto, itemEstructuraInstancia.Concepto.Id, itemEstructuraInstancia.Concepto.Nombre, itemEstructuraInstancia.EspacioNombresPrincipal, itemEstructuraInstancia.Concepto.EspacioNombres); if (itemEstructuraInstancia.Concepto.etiqueta != null && itemEstructuraInstancia.Concepto.etiqueta.Count > 0) { string valorEtiqueta = ""; foreach (var etiqueta in itemEstructuraInstancia.Concepto.etiqueta) { if (etiqueta.roll.Equals("http://www.xbrl.org/2003/role/label")) { valorEtiqueta += string.Format(ConstBlockStoreHechos.EstructuraEtiqueta, etiqueta.lenguaje, etiqueta.valor.Replace(ConstEstandar.ComillaSimple, string.Empty), etiqueta.roll.Replace(ConstEstandar.ComillaSimple, string.Empty)); valorEtiqueta += ConstEstandar.SeparadorComa; } } var etiquetas = string.Format(ConstBlockStoreHechos.ConceptoEtiqueta, valorEtiqueta.Substring(0, valorEtiqueta.Length + ConstEstandar.MenosTres)); elemento += etiquetas; } elemento += !string.IsNullOrEmpty(itemEstructuraInstancia.TipoBalance) ? string.Format(ConstBlockStoreHechos.Balance, itemEstructuraInstancia.TipoBalance) : string.Empty; elemento += string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDato, itemEstructuraInstancia.IdTipoDato, itemEstructuraInstancia.EsTipoDatoNumerico.ToString().ToLower()); if (itemEstructuraInstancia.EsTipoDatoNumerico) { elemento += !string.IsNullOrEmpty(itemEstructuraInstancia.Valor) ? string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDatoNumericoValorRedondeado, itemEstructuraInstancia.Valor, itemEstructuraInstancia.ValorRedondeado) : string.Empty; elemento += !string.IsNullOrEmpty(itemEstructuraInstancia.Precision) ? string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDatoNumericoPrecision, itemEstructuraInstancia.Precision) : string.Empty; elemento += !string.IsNullOrEmpty(itemEstructuraInstancia.Decimales) ? string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDatoNumericoDecimales, itemEstructuraInstancia.Decimales) : string.Empty; elemento += string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDatoNumericoFraccion, itemEstructuraInstancia.EsTipoDatoFraccion.ToString().ToLower()); } else { if (!String.IsNullOrWhiteSpace(itemEstructuraInstancia.Valor) && itemEstructuraInstancia.Valor.Length > ConstBlockStoreHechos.MAX_STRING_VALUE_LENGTH) { blockStoreDocumentosyFiltros.EsValorChunks = true; blockStoreDocumentosyFiltros.ValorHecho = itemEstructuraInstancia.Valor; elemento += string.Format(ConstBlockStoreHechos.EsValorChunks, "true"); } else { elemento += !string.IsNullOrEmpty(itemEstructuraInstancia.Valor) ? string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDatoNumericoValor, WebUtility.HtmlEncode(itemEstructuraInstancia.Valor.Replace("\\", "/"))) : string.Empty; } } elemento += string.Format(ConstBlockStoreHechos.ValorDocumentoTipoDatoValorNil, itemEstructuraInstancia.EsValorNil.ToString().ToLower()); if (!itemEstructuraInstancia.Periodo.EsTipoInstante) { elemento += string.Format(ConstBlockStoreHechos.PeriodoDuracion, itemEstructuraInstancia.Periodo.Tipo, string.Empty + BsonDateTime.Create(itemEstructuraInstancia.Periodo.FechaInicio).ToJson(), string.Empty + BsonDateTime.Create(itemEstructuraInstancia.Periodo.FechaFin).ToJson()); } else { elemento += string.Format(ConstBlockStoreHechos.PeriodoInstante, itemEstructuraInstancia.Periodo.Tipo, string.Empty + BsonDateTime.Create(itemEstructuraInstancia.Periodo.FechaInstante).ToJson()); } var tipoMedidaNumerador = string.Empty; if (itemEstructuraInstancia.Medida != null) { elemento += string.Format(ConstBlockStoreHechos.Medida, itemEstructuraInstancia.Medida.EsDivisoria.ToString().ToLower()); var tipoMedida = ConstBlockStoreHechos.TipoMedida; foreach (var unidad in itemEstructuraInstancia.Medida.Medidas) { tipoMedida += string.Format(ConstBlockStoreHechos.TipoMedidaArray, unidad.Nombre, unidad.EspacioNombres); } tipoMedida = string.Format(ConstEstandar.AnidamientoDos, tipoMedida.Substring(ConstEstandar.NumeroCero, tipoMedida.Length + ConstEstandar.MenosUno), ConstEstandar.CierreCorchete); if (itemEstructuraInstancia.Medida.EsDivisoria) { tipoMedidaNumerador = ConstBlockStoreHechos.TipoMedidaNumerador; foreach (var unidad in itemEstructuraInstancia.Medida.MedidasNumerador) { tipoMedidaNumerador = tipoMedidaNumerador + string.Format(ConstBlockStoreHechos.TipoMedidaArray, unidad.Nombre, unidad.EspacioNombres); } tipoMedidaNumerador = string.Format(ConstEstandar.AnidamientoTres, tipoMedidaNumerador.Substring(ConstEstandar.NumeroCero, tipoMedidaNumerador.Length + ConstEstandar.MenosUno), ConstEstandar.CierreCorchete, ConstEstandar.CierreLlave); } else { tipoMedida += ConstEstandar.CierreLlave; } elemento += string.Format(ConstEstandar.AnidamientoDos, tipoMedida, tipoMedidaNumerador); } if (itemEstructuraInstancia.Dimension != null) { var tipoDimension = ConstBlockStoreHechos.Dimension; foreach (var dimension in itemEstructuraInstancia.Dimension) { tipoDimension += string.Format(ConstBlockStoreHechos.DimensionAtributos, dimension.Explicita.ToString().ToLower(), dimension.QNameDimension, dimension.IdDimension); if (dimension.QNameItemMiembro != null) { tipoDimension += string.Format(ConstBlockStoreHechos.DimensionAtributosNombreElementoMiembro, dimension.QNameItemMiembro, dimension.IdItemMiembro.Replace("\n", "").Replace("'", "").Replace("\"", "")); } if (dimension.ElementoMiembroTipificado != null) { tipoDimension += string.Format(ConstBlockStoreHechos.DimensionMiembroTipificado, string.IsNullOrEmpty(dimension.ElementoMiembroTipificado) ? WebUtility.HtmlEncode(dimension.ElementoMiembroTipificado) : string.Empty); } if (dimension.etiquetasDimension != null) { var estructuraEtiqueta = dimension.etiquetasDimension.Aggregate(string.Empty, (current, itemEtiqueta) => string.Format(ConstEstandar.AnidamientoTres, current, string.Format(ConstBlockStoreHechos.EstructuraEtiqueta, itemEtiqueta.lenguaje, itemEtiqueta.valor.Replace(ConstEstandar.ComillaSimple, string.Empty), itemEtiqueta.roll.Replace(ConstEstandar.ComillaSimple, string.Empty)), ConstEstandar.SeparadorComa)); var etiquetas = string.Format(ConstBlockStoreHechos.ConceptoEtiquetaDimension, estructuraEtiqueta.Substring(0, estructuraEtiqueta.Length + ConstEstandar.MenosTres)); tipoDimension += etiquetas; } if (dimension.etiquetasMiembro != null) { var estructuraEtiqueta = dimension.etiquetasMiembro.Aggregate(string.Empty, (current, itemEtiqueta) => string.Format(ConstEstandar.AnidamientoTres, current, string.Format(ConstBlockStoreHechos.EstructuraEtiqueta, itemEtiqueta.lenguaje, itemEtiqueta.valor.Replace(ConstEstandar.ComillaSimple, string.Empty), itemEtiqueta.roll.Replace(ConstEstandar.ComillaSimple, string.Empty)), ConstEstandar.SeparadorComa)); var etiquetas = string.Format(ConstBlockStoreHechos.ConceptoEtiquetaMiembroDimension, estructuraEtiqueta.Substring(0, estructuraEtiqueta.Length + ConstEstandar.MenosTres)); tipoDimension += etiquetas; } tipoDimension += ConstBlockStore.miCierreLlaveComa; } tipoDimension = string.Format(ConstEstandar.AnidamientoDos, tipoDimension.Substring(0, tipoDimension.Length + ConstEstandar.MenosUno), ConstEstandar.CierreCorchete); elemento += tipoDimension; } elemento += ConstEstandar.CierreLlave; blockStoreDocumentosyFiltros.registroBlockStore.Add(BsonDocument.Parse(elemento)); blockStoreDocumentosyFiltros.filtrosBlockStore.Add(BsonDocument.Parse("{'codigoHashRegistro':'" + itemEstructuraInstancia.codigoHashRegistro + "'}")); listadoDocumentos.Add(blockStoreDocumentosyFiltros); } return(listadoDocumentos); }