예제 #1
0
        /// <summary>
        /// Este metodo nos sirve para extraer los conceptos
        /// </summary>
        /// <param name="xmlSchemaObjectTable"></param>
        private void procesarElementosGlobales(XmlSchemaObjectTable xmlSchemaObjectTable)
        {
            if (_nombreDirectorioACrear.Equals(""))
            {
                _nombreDirectorioACrear = _prefijoTaxonomíaActual;
            }
            Hashtable tuplasPorRevisar = new Hashtable();

            //procesamos los elementos declarados globalmente
            foreach (XmlSchemaElement concepto in xmlSchemaObjectTable.Values)
            {
                string grupoSustitucion = concepto.SubstitutionGroup.Name.ToLower();
                if (grupoSustitucion.Equals("item"))
                {
                    IXBRLItemDef item = new XBLRLItemDefinicion(concepto);

                    item.Id            = concepto.Id;
                    item.SemanticaTipo = concepto.SchemaTypeName.Name;
                    item.EspacioNombre = concepto.QualifiedName.Namespace;
                    item.Prefijo       = (string)_prefijosEspaciosNombres[concepto.QualifiedName.Namespace];
                    if (_prefijosEspaciosNombres.Contains(item.EspacioNombre))
                    {
                        item.Nombre = (string)_prefijosEspaciosNombres[item.EspacioNombre] + ':' + concepto.Name;
                    }
                    else
                    {
                        item.Nombre = concepto.Name;
                    }

                    if (concepto.ElementSchemaType.GetType() == typeof(XmlSchemaComplexType))
                    {
                        XmlSchemaComplexType complexType = (XmlSchemaComplexType)concepto.ElementSchemaType;

                        item.Tipo = complexType.Datatype.ValueType;
                    }

                    item.BalanceAsociado = Balance.Credit;
                    if (getValueAtributo(concepto.UnhandledAttributes, "balance").Equals("debit"))
                    {
                        item.BalanceAsociado = Balance.Debit;
                    }

                    item.Periodo = Period.Duration;
                    if (getValueAtributo(concepto.UnhandledAttributes, "periodtype").Equals("instant"))
                    {
                        item.Periodo = Period.Instant;
                    }

                    if (_items.Contains(item.Nombre))
                    {
                        IXBRLItemDef guardado = (IXBRLItemDef)_items[item.Nombre];
                    }

                    _items.Add(item.Nombre, item);

                    GeneradorClases.GeneradorClase gc = GeneradorClases.GeneradorClase.getInstance(_ensambladoCliente);
                    gc.NombreDirectorio = _nombreDirectorioACrear;

                    if (_generarCodigo)
                    {
                        gc.generarCodigo(item);
                    }
                    else
                    {
                        _clases.Add(gc.generarClase(item).ToString());
                    }
                }
                else if (grupoSustitucion.Equals("tuple") && !tuplasPorRevisar.Contains(concepto.Name))
                {
                    tuplasPorRevisar.Add(concepto.Name, concepto);
                }
            }

            //miramos las tuplas que no fueron terminadas de rellenar
            foreach (XmlSchemaElement elementoTuple in tuplasPorRevisar.Values)
            {
                IXBRLTupleDef tupla = new XBRLTupleDefinicion(elementoTuple);

                tupla.Nombre  = elementoTuple.Name;
                tupla.Id      = elementoTuple.Id;
                tupla.Prefijo = (string)_prefijosEspaciosNombres[elementoTuple.QualifiedName.Namespace];


                if (elementoTuple.SchemaType.GetType() == typeof(XmlSchemaComplexType))
                {
                    XmlSchemaComplexType tipo = (XmlSchemaComplexType)elementoTuple.SchemaType;

                    if (tipo.ContentTypeParticle.GetType() == typeof(XmlSchemaSequence))
                    {
                        XmlSchemaSequence elementos = (XmlSchemaSequence)tipo.ContentTypeParticle;

                        //para cada elemento de la tupla
                        foreach (XmlSchemaElement elemento in elementos.Items)
                        {
                            IXBRLItemDef item = buscarItem(elemento.QualifiedName);

                            if (item != null)
                            {
                                tupla.Celdas.Add(item);
                            }
                        }
                    }

                    _tuplas.Add(tupla);
                    GeneradorClases.GeneradorClase gc = GeneradorClases.GeneradorClase.getInstance(_ensambladoCliente);
                    gc.NombreDirectorio = _nombreDirectorioACrear;

                    if (_generarCodigo)
                    {
                        gc.generarCodigo(tupla);
                    }
                    else
                    {
                        _clases.Add(gc.generarClase(tupla).ToString());
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Este metodo nos sirve para extraer los conceptos
        /// </summary>
        /// <param name="xmlSchemaObjectTable"></param>
        private void procesarElementosGlobales(XmlSchemaObjectTable xmlSchemaObjectTable)
        {
            if (_nombreDirectorioACrear.Equals(""))
                _nombreDirectorioACrear = _prefijoTaxonomíaActual;
            Hashtable tuplasPorRevisar = new Hashtable();

            //procesamos los elementos declarados globalmente
            foreach (XmlSchemaElement concepto in xmlSchemaObjectTable.Values)
            {
                string grupoSustitucion = concepto.SubstitutionGroup.Name.ToLower();
                if (grupoSustitucion.Equals("item"))
                {
                    IXBRLItemDef item = new XBLRLItemDefinicion(concepto);

                    item.Id = concepto.Id;
                    item.SemanticaTipo = concepto.SchemaTypeName.Name;
                    item.EspacioNombre = concepto.QualifiedName.Namespace;
                    item.Prefijo = (string)_prefijosEspaciosNombres[concepto.QualifiedName.Namespace];
                    if (_prefijosEspaciosNombres.Contains(item.EspacioNombre))
                        item.Nombre = (string)_prefijosEspaciosNombres[item.EspacioNombre] + ':' + concepto.Name;
                    else
                        item.Nombre = concepto.Name;

                    if (concepto.ElementSchemaType.GetType() == typeof(XmlSchemaComplexType))
                    {
                        XmlSchemaComplexType complexType = (XmlSchemaComplexType)concepto.ElementSchemaType;

                        item.Tipo = complexType.Datatype.ValueType;
                    }

                    item.BalanceAsociado = Balance.Credit;
                    if (getValueAtributo(concepto.UnhandledAttributes, "balance").Equals("debit"))
                        item.BalanceAsociado = Balance.Debit;

                    item.Periodo = Period.Duration;
                    if (getValueAtributo(concepto.UnhandledAttributes, "periodtype").Equals("instant"))
                        item.Periodo = Period.Instant;

                    if (_items.Contains(item.Nombre))
                    {
                        IXBRLItemDef guardado = (IXBRLItemDef)_items[item.Nombre];
                    }

                    _items.Add(item.Nombre, item);

                    GeneradorClases.GeneradorClase gc = GeneradorClases.GeneradorClase.getInstance(_ensambladoCliente);
                    gc.NombreDirectorio = _nombreDirectorioACrear;

                    if (_generarCodigo)
                        gc.generarCodigo(item);
                    else
                        _clases.Add(gc.generarClase(item).ToString());
                }
                else if (grupoSustitucion.Equals("tuple") && !tuplasPorRevisar.Contains(concepto.Name))
                {

                    tuplasPorRevisar.Add(concepto.Name, concepto);
                }
            }

            //miramos las tuplas que no fueron terminadas de rellenar
            foreach (XmlSchemaElement elementoTuple in tuplasPorRevisar.Values)
            {
                IXBRLTupleDef tupla = new XBRLTupleDefinicion(elementoTuple);

                tupla.Nombre = elementoTuple.Name;
                tupla.Id = elementoTuple.Id;
                tupla.Prefijo = (string)_prefijosEspaciosNombres[elementoTuple.QualifiedName.Namespace];

                if (elementoTuple.SchemaType.GetType() == typeof(XmlSchemaComplexType))
                {
                    XmlSchemaComplexType tipo = (XmlSchemaComplexType)elementoTuple.SchemaType;

                    if (tipo.ContentTypeParticle.GetType() == typeof(XmlSchemaSequence))
                    {
                        XmlSchemaSequence elementos = (XmlSchemaSequence)tipo.ContentTypeParticle;

                        //para cada elemento de la tupla
                        foreach (XmlSchemaElement elemento in elementos.Items)
                        {
                            IXBRLItemDef item = buscarItem(elemento.QualifiedName);

                            if (item != null)
                            {
                                tupla.Celdas.Add(item);
                            }
                        }
                    }

                    _tuplas.Add(tupla);
                    GeneradorClases.GeneradorClase gc = GeneradorClases.GeneradorClase.getInstance(_ensambladoCliente);
                    gc.NombreDirectorio = _nombreDirectorioACrear;

                    if (_generarCodigo)
                        gc.generarCodigo(tupla);
                    else
                        _clases.Add(gc.generarClase(tupla).ToString());
                }
            }
        }