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