Esempio n. 1
0
        /// <summary>
        /// Procesa el item del documento del hecho
        /// </summary>
        /// <param name="document">Documento a procesar</param>
        public override void ProcessItem(EntBlockStoreDocumentosyFiltros document)
        {
            var resultado = con.actualizaroInsertar("BlockStoreHecho", document);

            if (resultado.TieneError)
            {
                document.estatusRegistroHecho.resultadoOperacion.Resultado = false;
                document.estatusRegistroHecho.resultadoOperacion.Mensaje   = resultado.MensajeError;
                lock (document.estatusRegistroHecho.resultadoOperacion)
                    Monitor.Pulse(document.estatusRegistroHecho.resultadoOperacion);
            }
            else
            {
                lock (document.estatusRegistroHecho)
                {
                    document.estatusRegistroHecho.AgregarHechoRegistro();
                    if (document.estatusRegistroHecho.ObtenerNumeroRegistrosAplicados() == document.estatusRegistroHecho.numeroRegistrosPorAplicar)
                    {
                        document.estatusRegistroHecho.resultadoOperacion.Resultado = true;
                        lock (document.estatusRegistroHecho.resultadoOperacion)
                            Monitor.Pulse(document.estatusRegistroHecho.resultadoOperacion);
                    }
                }
            }
        }
        /// <summary>
        /// Realiza la distribucion del hecho en algun consumidor
        /// </summary>
        /// <param name="blockStoreDocumento">Documento con la informacion del hecho</param>
        public void distribuirHecho(EntBlockStoreDocumentosyFiltros blockStoreDocumento)
        {
            var documentoHecho = blockStoreDocumento.registroBlockStore;
            var idConcepto     = documentoHecho["concepto"].AsBsonDocument["Id"].AsString;

            if (consumidoresPorConcepto.ContainsKey(idConcepto))
            {
                var consumer = consumidoresPorConcepto[idConcepto];
                consumer.AddItemToCollection(blockStoreDocumento);
            }
            else
            {
                if (numeroConsumidoresCreados >= numeroMaximoConsumidores)
                {
                    var consumer = ObtenerConsumidorUtilizar();
                    consumidoresPorConcepto[idConcepto] = consumer;
                    consumidoresPorConcepto[idConcepto].idConceptos.Add(idConcepto);
                }
                else
                {
                    numeroConsumidoresCreados++;
                    consumidoresPorConcepto[idConcepto] = new ConsumerTaskHechoImpl(con);
                    consumidoresPorConcepto[idConcepto].idConceptos.Add(idConcepto);
                    consumidoresPorCreacion[numeroConsumidoresCreados] = consumidoresPorConcepto[idConcepto];
                }

                var consumerConcepto = consumidoresPorConcepto[idConcepto];
                consumerConcepto.AddItemToCollection(blockStoreDocumento);
            }
        }
 /// <summary>
 ///
 /// </summary>
 public EntLogActualizarInsertar()
 {
     miReplaceOneResultsMongo     = new List <ReplaceOneResult>();
     miColleccionObjetosRepetidos = new EntBlockStoreDocumentosyFiltros()
     {
         registroBlockStore = new BsonDocument(), filtrosBlockStore = new BsonDocument()
     };
 }
Esempio n. 4
0
        /// <summary>
        /// Actualiza o inserta el json sobre la colección.
        /// </summary>
        /// <param name="iMongoCollection">Objeto que define en que collection de MogoDB sera insertada la información.</param>
        /// <param name="oBlockStoreDocumentosyFiltros">Objeto que contiene el documento en </param>
        /// <returns>Resultado de la inserción</returns>
        public async Task <EntLogActualizarInsertar> actualizaroInsertar(IMongoCollection <BsonDocument> iMongoCollection, EntBlockStoreDocumentosyFiltros oBlockStoreDocumentosyFiltros)
        {
            var log = new EntLogActualizarInsertar {
                miReplaceOneResultsMongo = new List <ReplaceOneResult>(), miColleccionObjetosRepetidos = new EntBlockStoreDocumentosyFiltros {
                    filtrosBlockStore = new BsonDocument(), registroBlockStore = new BsonDocument()
                }, TieneError = false
            };

            try
            {
                var remplazar = await iMongoCollection.ReplaceOneAsync(oBlockStoreDocumentosyFiltros.filtrosBlockStore, options : new UpdateOptions {
                    IsUpsert = true
                }, replacement : oBlockStoreDocumentosyFiltros.registroBlockStore);

                if (oBlockStoreDocumentosyFiltros.EsValorChunks)
                {
                    var stream = new System.IO.MemoryStream();
                    var writer = new System.IO.StreamWriter(stream);
                    writer.Write(oBlockStoreDocumentosyFiltros.ValorHecho);
                    writer.Flush();
                    stream.Position = 0;
                    var options = new MongoGridFSCreateOptions
                    {
                        ChunkSize   = AbaxXBRLBlockStore.Common.Constants.ConstBlockStoreHechos.MAX_STRING_VALUE_LENGTH,
                        ContentType = "text/plain",
                        Metadata    = new BsonDocument
                        {
                            { "codigoHashRegistro", oBlockStoreDocumentosyFiltros.CodigoHashRegistro }
                        }
                    };

                    miConectionServer.ObtenerInterfaceGridFS().Upload(stream, oBlockStoreDocumentosyFiltros.CodigoHashRegistro, options);
                }
            }
            catch (Exception ex)
            {
                log.TieneError   = true;
                log.MensajeError = ex.Message;

                LogUtil.Error(ex);
            }
            return(log);
        }
Esempio n. 5
0
        public EntLogActualizarInsertar actualizaroInsertar(string collection, EntBlockStoreDocumentosyFiltros oBlockStoreDocumentosyFiltros)
        {
            var resultado = actualizaroInsertar(miConectionServer.obtenerInterfaceCollection(collection), oBlockStoreDocumentosyFiltros);

            return(resultado.Result);
        }
Esempio n. 6
0
 public async void actualizaroInsertar(IMongoCollection <BsonDocument> iMongoCollection, EntBlockStoreDocumentosyFiltros oBlockStoreDocumentosyFiltros)
 {
     for (var cont = 0; cont <= oBlockStoreDocumentosyFiltros.miListaElementosBlockStore.Count; cont++)
     {
         var filtro = oBlockStoreDocumentosyFiltros.miListaFiltrosBlockStore[cont];
         var valor  = oBlockStoreDocumentosyFiltros.miListaElementosBlockStore[cont];
         var result = await iMongoCollection.ReplaceOneAsync(filtro, options : new UpdateOptions {
             IsUpsert = true
         }, replacement : valor);
     }
 }
Esempio n. 7
0
 public void actualizaroInsertar(EntBlockStoreDocumentosyFiltros oBlockStoreDocumentosyFiltros)
 {
     actualizaroInsertar(miConectionServer.miIMongoCollection, oBlockStoreDocumentosyFiltros);
 }
Esempio n. 8
0
 /// <summary>
 /// Asigna un valor a la coleccion
 /// </summary>
 /// <param name="item">Item que se agrega para registro</param>
 public void AddItemToCollection(EntBlockStoreDocumentosyFiltros item)
 {
     items.Add(item);
 }
Esempio n. 9
0
 /// <summary>
 /// Procesa el item del documento
 /// </summary>
 /// <param name="document">Informacion del documento</param>
 public abstract void ProcessItem(EntBlockStoreDocumentosyFiltros document);
Esempio n. 10
0
        /// <summary>
        /// En base a los filtros de consulta si no encuentra el registro realiza un insert de lo contrario actualiza el valor.
        /// </summary>
        /// <param name="collection">Coleccion que intenta buscar</param>
        /// <param name="oBlockStoreDocumentosyFiltros">Filtros de consulta y/o documento a insertar</param>
        public void actualizaroInsertarBlockStore(string collection, EntBlockStoreDocumentosyFiltros oBlockStoreDocumentosyFiltros)
        {
            var miCollectionMongo = (IMongoCollection <BsonDocument>)miConexion.miConectionServer.ObtenerCollection(collection);

            miConexion.actualizaroInsertar(miCollectionMongo, oBlockStoreDocumentosyFiltros);
        }
Esempio n. 11
0
 public EntLogActualizarInsertar insertarBlockStore(string collection, EntBlockStoreDocumentosyFiltros oBlockStoreDocumentosyFiltros)
 {
     miCollection = miConexion.miConectionServer.obtenerCollection(collection);
     return(miConexion.actualizaroInsertar(collection, oBlockStoreDocumentosyFiltros));
 }
Esempio n. 12
0
        /// <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);
        }