Пример #1
0
        /// <summary>
        /// Genera el código asociado al atributo privado de un atributo de una tupla XBRL
        /// </summary>
        /// <param name="item">Definición de item</param>
        /// <returns>código c#</returns>
        private string generarAtributoTuple(IXBRLItemDef item)
        {
            string nombreAtributo = item.Nombre.Replace(':', '_').Replace('-', '_');
            string nombreTipo     = item.Tipo.Name;

            return(String.Format("private {0} {1};\n\r\t", nombreTipo, nombreAtributo));
        }
Пример #2
0
        public StringBuilder generarCodigo(IXBRLItemDef item)
        {
            StringBuilder nombreClase, codigo = new StringBuilder();

            generarCodigoClase(item, out nombreClase, codigo, true);

            escribirFicheroCodigo(codigo, nombreClase);
            escribirFicheroCodigo(generarAtributeClass(), new StringBuilder("Elemento"));

            return(nombreClase);
        }
Пример #3
0
        public StringBuilder generarClase(IXBRLItemDef item)
        {
            StringBuilder nombreClase = new StringBuilder(), codigo = new StringBuilder();
            generarCodigoClase(item,out nombreClase, codigo, false);

            Type t = null;
            if (_ensamblado != null)
                t = _ensamblado.GetType("dotXbrl." + nombreClase.ToString());
            if (t == null)
                compilarClase(codigo.ToString(), nombreClase.ToString());

            return nombreClase;
        }
Пример #4
0
        private void generarGetterSetterTuple(IXBRLItemDef item, StringBuilder src)
        {
            string[] div             = item.Nombre.Split(':');
            string   nombreAtributo  = item.Nombre.Replace(':', '_').Replace('-', '_');
            string   nombreTipo      = item.Tipo.Name;
            string   nombrePropiedad = div[div.Length - 1];

            char izq = '{', der = '}';

            src.Append(String.Format("public {0} {1}{2}\n\r\t", nombreTipo, nombrePropiedad, izq));
            src.Append(String.Format("get{1} return {0}; {2}", nombreAtributo, izq, der));
            src.Append(String.Format("set{1} {0} = value;{2}{2}", nombreAtributo, izq, der)).Append("\n\r\t");
        }
Пример #5
0
        public StringBuilder generarClase(IXBRLItemDef item)
        {
            StringBuilder nombreClase = new StringBuilder(), codigo = new StringBuilder();

            generarCodigoClase(item, out nombreClase, codigo, false);

            Type t = null;

            if (_ensamblado != null)
            {
                t = _ensamblado.GetType("dotXbrl." + nombreClase.ToString());
            }
            if (t == null)
            {
                compilarClase(codigo.ToString(), nombreClase.ToString());
            }

            return(nombreClase);
        }
Пример #6
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());
                    }
                }
            }
        }
Пример #7
0
        private void generarCodigoClase(IXBRLItemDef item, out StringBuilder nombreClase, StringBuilder codigo, bool generarMetodosEstaticos)
        {
            _item       = item;
            nombreClase = obtenerNombreClaseITem();

            StringBuilder atributos = new StringBuilder(), geterSeter = new StringBuilder();
            StringBuilder metodosEstaticos = new StringBuilder();

            generadorMetodosEstaticos(nombreClase.ToString(), metodosEstaticos);
            string        comentarioIniio = "", comentarioFin = "";
            StringBuilder atribNombreClase = new StringBuilder("\"");

            if (!item.Prefijo.Equals(""))
            {
                atribNombreClase.Append(nombreClase);
                atribNombreClase.Append("\",\"");
                atribNombreClase.Append(item.Prefijo);
                atribNombreClase.Append("\",\"");
                atribNombreClase.Append(item.ElementoItem.QualifiedName.Name);
                atribNombreClase.Append("\",\"");
                atribNombreClase.Append(item.ElementoItem.QualifiedName.Namespace);
                atribNombreClase.Append("\"");
            }
            StringBuilder atributeClass = new StringBuilder();

            if (!generarMetodosEstaticos)
            {
                comentarioFin   = "*/";
                comentarioIniio = "/*";
                atributeClass   = generarAtributeClass();
            }

            obtenerAtributosItem(atributos, geterSeter);
            #region Codigo a generar
            codigo.Append(@"using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Xml;
using dotXbrl.xbrlApi.XBRL;

namespace dotXbrl{
    [Element(").Append(atribNombreClase).Append(@")]
    public class ").Append(nombreClase).Append(@":IConcepto
    {
private dotXbrl.xbrlApi.XBRL.IContexto _contexto = null;
#region Atributos
        ").Append(atributos).Append(@"
#endregion
#region Propiedades
        ").Append(geterSeter).Append(@"
#endregion
        public ").Append(nombreClase).Append(@"(){}
    #region IConcepto Members
    dotXbrl.xbrlApi.XBRL.IContexto dotXbrl.xbrlApi.XBRL.IConcepto.getContexto() { return _contexto; }
    void dotXbrl.xbrlApi.XBRL.IConcepto.setContexto(dotXbrl.xbrlApi.XBRL.IContexto contexto) { _contexto = contexto; }
    #endregion
    ").Append(comentarioIniio).Append(@"
        ").Append(metodosEstaticos).Append(@"
    ").Append(comentarioFin).Append(@"
    }
}

");
            #endregion
        }
Пример #8
0
        private void generarGetterSetterTuple(IXBRLItemDef item, StringBuilder src)
        {
            string[] div = item.Nombre.Split(':');
            string nombreAtributo = item.Nombre.Replace(':', '_').Replace('-', '_');
            string nombreTipo = item.Tipo.Name;
            string nombrePropiedad = div[div.Length - 1];

            char izq = '{', der = '}';

            src.Append(String.Format("public {0} {1}{2}\n\r\t", nombreTipo, nombrePropiedad, izq));
            src.Append(String.Format("get{1} return {0}; {2}", nombreAtributo, izq, der));
            src.Append(String.Format("set{1} {0} = value;{2}{2}", nombreAtributo, izq, der)).Append("\n\r\t");
        }
Пример #9
0
        private void generarCodigoClase(IXBRLItemDef item,out StringBuilder nombreClase, StringBuilder codigo, bool generarMetodosEstaticos)
        {
            _item = item;
            nombreClase = obtenerNombreClaseITem();

            StringBuilder atributos = new StringBuilder(), geterSeter = new StringBuilder();
            StringBuilder metodosEstaticos = new StringBuilder();
            generadorMetodosEstaticos(nombreClase.ToString(), metodosEstaticos);
            string comentarioIniio = "", comentarioFin = "";
            StringBuilder atribNombreClase = new StringBuilder("\"");

            if (!item.Prefijo.Equals(""))
            {
                atribNombreClase.Append(nombreClase);
                atribNombreClase.Append("\",\"");
                atribNombreClase.Append(item.Prefijo);
                atribNombreClase.Append("\",\"");
                atribNombreClase.Append(item.ElementoItem.QualifiedName.Name);
                atribNombreClase.Append("\",\"");
                atribNombreClase.Append(item.ElementoItem.QualifiedName.Namespace);
                atribNombreClase.Append("\"");
            }
            StringBuilder atributeClass = new StringBuilder();
            if (!generarMetodosEstaticos)
            {
                comentarioFin = "*/";
                comentarioIniio = "/*";
                atributeClass = generarAtributeClass();
            }

            obtenerAtributosItem(atributos, geterSeter);
            #region Codigo a generar
            codigo.Append(@"using System;
            using System.Collections.Generic;
            using System.Text;
            using System.Reflection;
            using System.Xml;
            using dotXbrl.xbrlApi.XBRL;

            namespace dotXbrl{
            [Element(").Append(atribNombreClase).Append(@")]
            public class ").Append(nombreClase).Append(@":IConcepto
            {
            private dotXbrl.xbrlApi.XBRL.IContexto _contexto = null;
            #region Atributos
            ").Append(atributos).Append(@"
            #endregion
            #region Propiedades
            ").Append(geterSeter).Append(@"
            #endregion
            public ").Append(nombreClase).Append(@"(){}
            #region IConcepto Members
            dotXbrl.xbrlApi.XBRL.IContexto dotXbrl.xbrlApi.XBRL.IConcepto.getContexto() { return _contexto; }
            void dotXbrl.xbrlApi.XBRL.IConcepto.setContexto(dotXbrl.xbrlApi.XBRL.IContexto contexto) { _contexto = contexto; }
            #endregion
            ").Append(comentarioIniio).Append(@"
            ").Append(metodosEstaticos).Append(@"
            ").Append(comentarioFin).Append(@"
            }
            }

            ");
            #endregion
        }
Пример #10
0
        /// <summary>
        /// Genera el código asociado al atributo privado de un atributo de una tupla XBRL
        /// </summary>
        /// <param name="item">Definición de item</param>
        /// <returns>código c#</returns>
        private string generarAtributoTuple(IXBRLItemDef item)
        {
            string nombreAtributo = item.Nombre.Replace(':', '_').Replace('-', '_');
            string nombreTipo = item.Tipo.Name;

            return String.Format("private {0} {1};\n\r\t", nombreTipo, nombreAtributo);
        }
Пример #11
0
        public StringBuilder generarCodigo(IXBRLItemDef item)
        {
            StringBuilder nombreClase , codigo = new StringBuilder();
            generarCodigoClase(item,out nombreClase, codigo, true);

            escribirFicheroCodigo(codigo, nombreClase);
            escribirFicheroCodigo(generarAtributeClass(), new StringBuilder( "Elemento"));

            return nombreClase;
        }