/// <summary> /// Imprime recursivamente los hijos de un padre en el arco de calculo /// </summary> /// <param name="nivel"></param> /// <param name="idPadre"></param> /// <param name="listaArcos"></param> private void imprimirHijosCalculo(int nivel, string idPadre, System.Collections.Generic.IList <Arco> listaArcos, LinkbaseCalculo linkbase) { foreach (ArcoCalculo arco in listaArcos) { //Imprime hijos con el nivel foreach (ElementoLocalizable conceptoLoc in arco.ElementoDesde) { Concept concepto = (Concept)conceptoLoc.Destino; if (concepto.Elemento.Id.Equals(idPadre)) { for (int i = 0; i < nivel; i++) { Debug.Write("\t"); } foreach (ElementoLocalizable conceptohaciaLoc in arco.ElementoHacia) { Concept conceptohacia = (Concept)conceptohaciaLoc.Destino; Debug.WriteLine(((arco.Peso < 0) ? "" : "+") + arco.Peso + conceptohacia.Elemento.Id); imprimirHijosCalculo(nivel + 1, conceptohacia.Elemento.Id, listaArcos, linkbase); } } } } }
public void TestCargaTaxonomia() { TaxonomiaXBRL taxonomiaXBRL = new TaxonomiaXBRL(); IManejadorErroresXBRL manejadorErrores = new ManejadorErroresCargaTaxonomia(); taxonomiaXBRL.ManejadorErrores = manejadorErrores; //Boolean correcto = taxonomiaXBRL.ProcesarDefinicionDeEsquemaRef("C:\\workspaces\\memoria_xbrl\\Ejercicio Práctico\\taxonomia1-2012-07-01-core.xsd"); //Boolean correcto = taxonomiaXBRL.ProcesarDefinicionDeEsquemaRef("C:\\dotNet\\AbaxXBRL_1\\AbaxXBRL\\XBRL-CONF-CR5-2012-01-24\\Common\\100-schema\\155-TypeExtension-Valid.xsd"); taxonomiaXBRL.ProcesarDefinicionDeEsquema(@"C:\taxonomy\mx-ifrs-2014-12-05\full_ifrs_mc_mx_ics_entry_point_2014-12-05.xsd"); taxonomiaXBRL.CrearArbolDeRelaciones(); XbrlViewerService serv = new XbrlViewerService(); var taxDt = serv.CrearTaxonomiaAPartirDeDefinicionXbrl(taxonomiaXBRL); var docServ = new DocumentoInstanciaService(); docServ.PerteneceConceptoAHipercuboEnRol("ifrs-full_ProfitLoss", taxDt, "http://bmv.com.mx/role/ifrs/ias_1_2014-03-05_role-610000"); foreach (RoleType tipoRol in taxonomiaXBRL.RolesTaxonomia.Values) { ArbolLinkbase arbolPresentation = taxonomiaXBRL.ConjuntoArbolesLinkbase[tipoRol.RolURI.ToString()][LinkbasePresentacion.RolePresentacionLinkbaseRef]; NodoLinkbase nodo = arbolPresentation.NodoRaiz; ImprimirNodo(0, nodo); Debug.WriteLine("________________________________________"); if (tipoRol.Linkbases.ContainsKey(LinkbaseReferencia.RoleReferenceLinkbaseRef)) { LinkbaseReferencia linkbase = (LinkbaseReferencia)tipoRol.Linkbases[LinkbaseReferencia.RoleReferenceLinkbaseRef]; foreach (Arco arco in linkbase.Arcos) { foreach (ElementoLocalizable elementoDesde in arco.ElementoDesde) { Concept conceptoDesde = (Concept)((Localizador)elementoDesde).Destino; foreach (ElementoLocalizable elementoHacia in arco.ElementoHacia) { Referencia referencia = (Referencia)elementoHacia.Destino; Debug.WriteLine(conceptoDesde.Elemento.Id + " Referencias: "); foreach (ReferenciaParte refPart in referencia.PartesReferencia) { Debug.WriteLine("\tReferencia:" + refPart.NombreLocal + " : " + refPart.Valor); } } } } } Debug.WriteLine("________________________________________"); if (tipoRol.Linkbases.ContainsKey(LinkbaseCalculo.RoleCalculoLinkbaseRef)) { LinkbaseCalculo linkbase = (LinkbaseCalculo)tipoRol.Linkbases[LinkbaseCalculo.RoleCalculoLinkbaseRef]; //Escribir los elementos que no tienen padre Debug.WriteLine(tipoRol.Id); IDictionary <string, string> impresos = new Dictionary <string, string>(); foreach (ArcoCalculo arco in linkbase.Arcos) { foreach (ElementoLocalizable elementoDesde in arco.ElementoDesde) { Concept conceptoDesde = (Concept)elementoDesde.Destino; if (!tienePadre(conceptoDesde, linkbase.Arcos)) { if (!impresos.ContainsKey(conceptoDesde.Elemento.Id)) { Debug.WriteLine(conceptoDesde.Elemento.Id); imprimirHijosCalculo(1, conceptoDesde.Elemento.Id, linkbase.Arcos, (LinkbaseCalculo)tipoRol.Linkbases[LinkbaseCalculo.RoleCalculoLinkbaseRef]); impresos[conceptoDesde.Elemento.Id] = conceptoDesde.Elemento.Id; } } } } } } Assert.IsTrue(true); }