/// <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)); }
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); }
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; }
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"); }
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); }
/// <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()); } } } }
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 }
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 }
/// <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); }
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; }