/// <summary>
        /// Pinta la sección de calificaciones en la tabla correspondiente.
        /// </summary>
        /// <param name="docBuilder">Puntero de </param>
        /// <param name="instancia"></param>
        /// <param name="estructuraReporte"></param>
        private void PintaCalificacionesEnTabla(
            DocumentBuilder docBuilder,
            DocumentoInstanciaXbrlDto instancia,
            ReporteXBRLDTO estructuraReporte,
            HipercuboReporteDTO hipercuboSerie,
            ExportadorRolDocumentoBase exportadorOrigen)
        {
            var hipercubo = estructuraReporte.Hipercubos["ar_pros_SecuritiesRatingTable"];

            hipercubo = FiltrarHipercuboCalificaciones(hipercubo, hipercuboSerie);

            if (hipercubo == null)
            {
                return;
            }
            var lenguaje            = estructuraReporte.Lenguaje;
            var textoTituloSecciion = exportadorOrigen.ObtenEtiquetaConcepto("ar_pros_SecuritiesRatingAbstract", instancia, lenguaje);

            PintaFilaSubTitulo(textoTituloSecciion, docBuilder, hipercubo.Titulos.Count, exportadorOrigen);
            var diccionarioTarjetas = hipercubo.Utileria.ReordenaConjutosPorExplicitaConceptoImplicita(hipercubo.Hechos);

            foreach (var clavePlantilla in diccionarioTarjetas.Keys)
            {
                var diccionarioConceptos = diccionarioTarjetas[clavePlantilla];
                var primerHecho          = diccionarioConceptos.Values.First().First();
                var idDimensionExplicita = hipercubo.Utileria.ObtenDimensionesTipo(primerHecho, instancia, true).First().IdDimension;
                var miembroExplicita     = hipercubo.Utileria.ObtenMiembroDimension(primerHecho, idDimensionExplicita, instancia);
                var textoTituloMiembro   = "  " + exportadorOrigen.ObtenEtiquetaConcepto(miembroExplicita.IdItemMiembro, instancia, lenguaje);
                PintaFilaSubTitulo(textoTituloMiembro, docBuilder, hipercubo.Titulos.Count, exportadorOrigen);

                docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                docBuilder.Font.Color = Color.Black;
                docBuilder.Bold       = false;
                docBuilder.RowFormat.HeadingFormat = false;

                foreach (var idConcepto in diccionarioConceptos.Keys)
                {
                    docBuilder.InsertCell();
                    var nombreConcepto = "    " + DesgloseDeCreditosHelper.obtenerEtiquetaDeConcepto(instancia.Taxonomia, idConcepto, "es", ReporteXBRLUtil.ETIQUETA_DEFAULT);
                    docBuilder.Write(nombreConcepto);
                    var listaHechos = diccionarioConceptos[idConcepto];
                    for (var indexHecho = 0; indexHecho < listaHechos.Count; indexHecho++)
                    {
                        var hecho = listaHechos[indexHecho];
                        docBuilder.InsertCell();
                        if (hecho != null && !String.IsNullOrWhiteSpace(hecho.Valor))
                        {
                            exportadorOrigen.EscribirValorHecho(docBuilder, estructuraReporte, hecho, instancia.Taxonomia.ConceptosPorId[hecho.IdConcepto]);
                        }
                    }
                    docBuilder.EndRow();
                }
            }
        }
        /// <summary>
        /// Crea la tabla de series.
        /// </summary>
        /// <param name="conceptoOrigen">Concepto que contiene la definición del hipercubo de la tabla de series a evaluar.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="instancia">Instancia XBRL con la información a presentar.</param>
        /// <param name="rolAExportar">Rol donde esta contenida la tabla.</param>
        /// <param name="estructuraReporte">DTO con información general del reporte.</param>
        /// <param name="exportadorOrigen">Exportador original del rol.</param>
        public void CreaSeccion(
            ConceptoReporteDTO conceptoOrigen,
            DocumentBuilder docBuilder,
            DocumentoInstanciaXbrlDto instancia,
            IndiceReporteDTO rolAExportar,
            ReporteXBRLDTO estructuraReporte,
            IExportadorRolDocumentoInstancia exportadorOrigen)
        {
            docBuilder.Writeln();
            var exportadorBase = (ExportadorRolDocumentoBase)exportadorOrigen;

            try
            {
                if (!ContieneInformacion(instancia))
                {
                    return;
                }
                var diccionarioHechos = ObtenDiccionarioHechos(instancia);
                var listaContextos    = ObtenIdentificadoresContexto(diccionarioHechos, instancia);
                if (listaContextos.Count == 0 || diccionarioHechos.Values.First().Values.FirstOrDefault() == null)
                {
                    return;
                }
                UnidadDto unidad        = null;
                var       hechoNumerico = diccionarioHechos.Values.First().Values.Where(X => X.EsNumerico).FirstOrDefault();
                if (hechoNumerico != null)
                {
                    instancia.UnidadesPorId.TryGetValue(hechoNumerico.IdUnidad, out unidad);
                }
                var numeroColumnas = listaContextos.Count() + 1;
                var tablaActual    = docBuilder.StartTable();
                docBuilder.ParagraphFormat.SpaceAfter  = 0;
                docBuilder.ParagraphFormat.SpaceBefore = 2;

                var etiquetaTitulo =
                    DesgloseDeCreditosHelper
                    .obtenerEtiquetaDeConcepto(instancia.Taxonomia, conceptoOrigen.IdConcepto, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);

                PintaFilaSubTitulo(etiquetaTitulo, docBuilder, numeroColumnas, exportadorBase);

                PintaEncabezadoTabla(listaContextos, docBuilder, (ExportadorRolDocumentoBase)exportadorOrigen, unidad);
                PintaFilasHechos(instancia, listaContextos, diccionarioHechos, docBuilder, exportadorBase, estructuraReporte);

                establecerBordesGrisesTabla(tablaActual);
                docBuilder.EndTable();
                docBuilder.Writeln();
                docBuilder.Writeln();
            }
            catch (Exception ex)
            {
                LogUtil.Error(ex);
            }
        }
        /// <summary>
        /// Pinta todas las filas de la tabla de hechos.
        /// </summary>
        /// <param name="instancia">Documento de instancia donde se obtiene la información.</param>
        /// <param name="listacontextos">Lista con los contextos a presentar.</param>
        /// <param name="diccionarioHechos">Diccionario con los hechos a presentar.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="exportadorBase">Exportador original del reporte.</param>
        /// <param name="estructuraReporte">Dto con datos auxiliares para la presentación del documento.</param>
        public void PintaFilasHechos(
            DocumentoInstanciaXbrlDto instancia,
            IList <ContextoDto> listacontextos,
            IDictionary <string, IDictionary <string, HechoDto> > diccionarioHechos,
            DocumentBuilder docBuilder,
            ExportadorRolDocumentoBase exportadorBase,
            ReporteXBRLDTO estructuraReporte)
        {
            var numeroColumnas = listacontextos.Count + 1;

            foreach (var idConcepto in ConceptosTabla)
            {
                ConceptoDto concepto;
                if (instancia.Taxonomia.ConceptosPorId.TryGetValue(idConcepto, out concepto))
                {
                    var etiquetaConcepto =
                        DesgloseDeCreditosHelper
                        .obtenerEtiquetaDeConcepto(instancia.Taxonomia, concepto.Id, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);
                    if (concepto.EsAbstracto ?? false)
                    {
                        PintaFilaSubTitulo(etiquetaConcepto, docBuilder, numeroColumnas, exportadorBase);
                    }
                    else
                    {
                        if (!concepto.EsTipoDatoNumerico)
                        {
                            continue;
                        }
                        docBuilder.InsertCell();
                        docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                        docBuilder.Bold = true;
                        docBuilder.Write(etiquetaConcepto);
                        IDictionary <string, HechoDto> diccionarioHechosPorContexto = null;
                        diccionarioHechos.TryGetValue(concepto.Id, out diccionarioHechosPorContexto);
                        foreach (var contexto in listacontextos)
                        {
                            docBuilder.InsertCell();
                            docBuilder.Bold = false;
                            HechoDto hecho;
                            if (diccionarioHechosPorContexto != null && diccionarioHechosPorContexto.TryGetValue(contexto.Id, out hecho))
                            {
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                                exportadorBase.EscribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                            }
                        }
                        docBuilder.EndRow();
                    }
                }
            }
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
        }
        private IList <DesgloseDeCreditosReporteDto> llenarDesgloseDeCreditos(DocumentoInstanciaXbrlDto instancia)
        {
            IList <DesgloseDeCreditosReporteDto> desgloseCreditos = null;

            try
            {
                int outContadorNotasAlPie = 0;
                desgloseCreditos   = DesgloseDeCreditosHelper.generarContenidoDeReporte(instancia, reporteXBRLDTO, ContadorNotasAlPie, out outContadorNotasAlPie);
                ContadorNotasAlPie = outContadorNotasAlPie;
            }
            catch (Exception ex)
            {
                LogUtil.Error(ex);
            }

            return(desgloseCreditos);
        }
Example #5
0
        /// <summary>
        /// Crea la tabla de series.
        /// </summary>
        /// <param name="conceptoOrigen">Concepto que contiene la definición del hipercubo de la tabla de series a evaluar.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="instancia">Instancia XBRL con la información a presentar.</param>
        /// <param name="rolAExportar">Rol donde esta contenida la tabla.</param>
        /// <param name="estructuraReporte">DTO con información general del reporte.</param>
        /// <param name="exportadorOrigen">Exportador original del rol.</param>
        public void CreaSeccion(ConceptoReporteDTO conceptoOrigen,
                                DocumentBuilder docBuilder,
                                DocumentoInstanciaXbrlDto instancia,
                                IndiceReporteDTO rolAExportar,
                                ReporteXBRLDTO estructuraReporte,
                                IExportadorRolDocumentoInstancia exportadorOrigen)
        {
            try
            {
                docBuilder.Writeln();
                docBuilder.Writeln();
                var exportadorBase             = (ExportadorRolDocumentoBase)exportadorOrigen;
                var idConceptoHipercubo        = ObtenIdConceptoHipercubo(conceptoOrigen, instancia, rolAExportar.Uri);
                var listaEstructurasHipercubos = new List <EstructuraFormatoDto>();
                var rolPresentacion            = instancia.Taxonomia.RolesPresentacion.Where(x => x.Uri.Equals(rolAExportar.Uri)).FirstOrDefault();
                var conceptosTaxonomia         = instancia.Taxonomia.ConceptosPorId;
                if (rolPresentacion != null)
                {
                    var estructurasAnalizar = new List <EstructuraFormatoDto>(rolPresentacion.Estructuras);
                    for (var indiceEstructrua = 0; indiceEstructrua < estructurasAnalizar.Count; indiceEstructrua++)
                    {
                        var estructura = estructurasAnalizar[indiceEstructrua];
                        if (estructura.SubEstructuras != null && estructura.SubEstructuras.Count > 0)
                        {
                            if (estructura.IdConcepto.Equals(conceptoOrigen.IdConcepto))
                            {
                                ConceptoDto concepto;
                                var         conceptoHipercubo = estructura.SubEstructuras.
                                                                Where(x => (conceptosTaxonomia.TryGetValue(x.IdConcepto, out concepto) && concepto.EsHipercubo)).FirstOrDefault();
                                var conceptoPartidas = estructura.SubEstructuras.
                                                       Where(x => conceptosTaxonomia.TryGetValue(x.IdConcepto, out concepto) && !concepto.EsHipercubo).FirstOrDefault();

                                if (!ContieneInformacion(conceptoPartidas, instancia))
                                {
                                    return;
                                }

                                var tablaActual = docBuilder.StartTable();
                                var colorTitulo = exportadorBase.ObtenColorTitulo();
                                docBuilder.ParagraphFormat.SpaceAfter  = 0;
                                docBuilder.ParagraphFormat.SpaceBefore = 2;

                                var etiquetaTitulo =
                                    DesgloseDeCreditosHelper
                                    .obtenerEtiquetaDeConcepto(instancia.Taxonomia, conceptoOrigen.IdConcepto, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);

                                PintaFilaSubTitulo(etiquetaTitulo, docBuilder, 2, exportadorBase);


                                if (conceptoHipercubo != null)
                                {
                                    foreach (var conceptoDimension in conceptoHipercubo.SubEstructuras)
                                    {
                                        foreach (var conceptoMiembro in conceptoDimension.SubEstructuras)
                                        {
                                            var etiquetaMiembro =
                                                DesgloseDeCreditosHelper
                                                .obtenerEtiquetaDeConcepto(
                                                    instancia.Taxonomia,
                                                    conceptoMiembro.IdConcepto,
                                                    estructuraReporte.Lenguaje,
                                                    ReporteXBRLUtil.ETIQUETA_DEFAULT);
                                            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                                            PintaFilaSubTitulo(etiquetaMiembro, docBuilder, 2, exportadorBase);
                                            foreach (var partida in conceptoPartidas.SubEstructuras)
                                            {
                                                var etiquetaPartida =
                                                    DesgloseDeCreditosHelper
                                                    .obtenerEtiquetaDeConcepto(
                                                        instancia.Taxonomia,
                                                        partida.IdConcepto,
                                                        estructuraReporte.Lenguaje,
                                                        ReporteXBRLUtil.ETIQUETA_DEFAULT);
                                                docBuilder.Bold = true;
                                                docBuilder.InsertCell();
                                                docBuilder.Write(etiquetaPartida);
                                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                                                docBuilder.Bold = false;
                                                docBuilder.InsertCell();
                                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                                                IList <String> idsHechosPartida;
                                                if (instancia.HechosPorIdConcepto.TryGetValue(partida.IdConcepto, out idsHechosPartida))
                                                {
                                                    foreach (var idHecho in idsHechosPartida)
                                                    {
                                                        HechoDto    hechoPartida;
                                                        ContextoDto contexto;
                                                        ConceptoDto conceptoPartida;
                                                        if (instancia.HechosPorId.TryGetValue(idHecho, out hechoPartida) &&
                                                            instancia.ContextosPorId.TryGetValue(hechoPartida.IdContexto, out contexto) &&
                                                            contexto.ContieneInformacionDimensional &&
                                                            contexto.ValoresDimension.Where(X => X.IdDimension.Equals(conceptoDimension.IdConcepto) && X.IdItemMiembro.Equals(conceptoMiembro.IdConcepto)).Count() > 0)
                                                        {
                                                            if (instancia.Taxonomia.ConceptosPorId.TryGetValue(partida.IdConcepto, out conceptoPartida))
                                                            {
                                                                exportadorBase.EscribirValorHecho(docBuilder, estructuraReporte, hechoPartida, conceptoPartida);
                                                            }
                                                            break;
                                                        }
                                                    }
                                                }
                                                docBuilder.EndRow();
                                            }
                                        }
                                    }
                                    idConceptoHipercubo = conceptoHipercubo.IdConcepto;
                                }
                                establecerBordesGrisesTabla(tablaActual);
                                docBuilder.EndTable();
                                docBuilder.Writeln();
                                break;
                            }
                            else
                            {
                                estructurasAnalizar.AddRange(estructura.SubEstructuras);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error(ex);
            }
        }
Example #6
0
        private void PintaTablaCubo(
            HipercuboReporteDTO hipercubo,
            DocumentoInstanciaXbrlDto instancia,
            ReporteXBRLDTO estructuraReporte,
            DocumentBuilder docBuilder,
            ConceptoReporteDTO concepto,
            IndiceReporteDTO rolAExportar,
            ExportadorRolDocumentoBase exportadorOrigen)
        {
            docBuilder.InsertBreak(BreakType.PageBreak);
            Table tablaActual = docBuilder.StartTable();
            Color colorTitulo = exportadorOrigen.ObtenColorTitulo();

            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;

            //docBuilder.InsertCell();
            // docBuilder.EndRow();
            // Formatos de celdas que le da el color de fondo de los titulos de la tabla que se crea
            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.Font.Color = Color.White;
            docBuilder.Font.Size  = exportadorOrigen.TamanioLetraContenidoTabla;

            //   docBuilder.InsertCell();


            foreach (var idConcepto in hipercubo.Hechos.Keys)
            {
                var matrizPlantillaContexto = hipercubo.Hechos[idConcepto];
                docBuilder.InsertCell();
                var nombreConcepto =
                    DesgloseDeCreditosHelper
                    .obtenerEtiquetaDeConcepto(instancia.Taxonomia, idConcepto, "es", ReporteXBRLUtil.ETIQUETA_DEFAULT);
                docBuilder.Write(nombreConcepto);
            }
            docBuilder.EndRow();

            docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
            docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
            docBuilder.Font.Color = Color.Black;
            var cantidadCeldasVacias = hipercubo.Hechos.Count - 1;

            foreach (var idPlantillaContexto in hipercubo.Utileria.configuracion.PlantillasContextos.Keys)
            {
                var plantilla        = hipercubo.Utileria.configuracion.PlantillasContextos[idPlantillaContexto];
                var miembroPlantilla = plantilla.ValoresDimension[0];
                var nombreMiembro    =
                    DesgloseDeCreditosHelper.obtenerEtiquetaDeConcepto(instancia.Taxonomia, miembroPlantilla.IdItemMiembro, "es", ReporteXBRLUtil.ETIQUETA_DEFAULT);

                /* docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.LightGray;
                 * docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                 * docBuilder.Font.Color = Color.Black;*/
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                docBuilder.Font.Color = Color.White;
                docBuilder.Font.Size  = exportadorOrigen.TamanioLetraContenidoTabla;
                docBuilder.InsertCell();
                docBuilder.Write(nombreMiembro);
                if (cantidadCeldasVacias > 0)
                {
                    for (var indexMiembro = 0; indexMiembro < cantidadCeldasVacias; indexMiembro++)
                    {
                        docBuilder.InsertCell();
                        docBuilder.Write(String.Empty);
                    }
                    docBuilder.EndRow();
                }
                var countType = 0;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                docBuilder.Font.Color = Color.Black;
                docBuilder.Bold       = false;
                foreach (var idConcepto in hipercubo.Hechos.Keys)
                {
                    var matrizPlantillaContexto = hipercubo.Hechos[idConcepto];
                    countType = matrizPlantillaContexto[idPlantillaContexto].Length;
                    break;
                }
                Boolean dimensiones = false;
                for (var indexType = 0; indexType < countType; indexType++)
                {
                    if (indexType > 0)
                    {
                        dimensiones = true;
                    }

                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                    foreach (var idConcepto in hipercubo.Hechos.Keys)
                    {
                        var matrizPlantillaContexto = hipercubo.Hechos[idConcepto];
                        var listaHechos             = matrizPlantillaContexto[idPlantillaContexto];
                        if (listaHechos != null)
                        {
                            var hecho = listaHechos[indexType];

                            var valorHecho = hecho.Valor;
                            if (dimensiones)
                            {
                                docBuilder.EndRow();
                                docBuilder.InsertCell();
                                dimensiones = false;
                            }
                            else
                            {
                                docBuilder.InsertCell();
                            }

                            if (hecho.NoEsNumerico)
                            {
                                docBuilder.CellFormat.WrapText       = true;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                            }
                            else
                            {
                                docBuilder.CellFormat.WrapText       = false;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                            }
                            if ((hecho != null && !String.IsNullOrWhiteSpace(hecho.Valor)))
                            {
                                docBuilder.Write(valorHecho);
                            }
                        }
                    }
                }

                docBuilder.RowFormat.AllowBreakAcrossPages = true;
                docBuilder.RowFormat.HeadingFormat         = false;
                docBuilder.EndRow();
            }


            establecerBordesGrisesTabla(tablaActual);
            docBuilder.EndTable();
            docBuilder.Writeln();
        }
        /// <summary>
        /// Pinta el contenido de un cubo ya organizado en una tabla de Word
        /// </summary>

        private void PintaTablaCubo(
            HipercuboReporteDTO hipercubo,
            DocumentoInstanciaXbrlDto instancia,
            ReporteXBRLDTO estructuraReporte,
            DocumentBuilder docBuilder,
            ConceptoReporteDTO concepto,
            IndiceReporteDTO rolAExportar,
            ExportadorRolDocumentoBase exportadorOrigen)
        {
            var matrizHechosPlantillaContexto = hipercubo.Utileria.ReordenaConjutosPorExplicitaImplicitaTituloConcepto(hipercubo.Hechos, hipercubo.Titulos);
            var matrizHechosTitulo            = matrizHechosPlantillaContexto.Values.First();

            var colorTitulo = exportadorOrigen.ObtenColorTitulo();

            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;

            foreach (var tituloSerie in matrizHechosTitulo.Keys)
            {
                var tablaActual = docBuilder.StartTable();
                PintaFilaSubTitulo(tituloSerie, docBuilder, 2, exportadorOrigen);
                var hechosPorConcepto = matrizHechosTitulo[tituloSerie];
                foreach (var idConcepto in hechosPorConcepto.Keys)
                {
                    if (!ConceptosAplican.Contains(idConcepto))
                    {
                        continue;
                    }
                    var etiquetaConcepto =
                        DesgloseDeCreditosHelper
                        .obtenerEtiquetaDeConcepto(
                            instancia.Taxonomia, idConcepto,
                            estructuraReporte.Lenguaje,
                            ReporteXBRLUtil.ETIQUETA_DEFAULT);
                    AsignaEstilosConcepto(docBuilder, exportadorOrigen);
                    docBuilder.Bold = true;
                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                    docBuilder.InsertCell();
                    docBuilder.Write(etiquetaConcepto);
                    docBuilder.InsertCell();
                    docBuilder.Bold = false;
                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                    var hecho = hechosPorConcepto[idConcepto];
                    if (hecho != null && !String.IsNullOrWhiteSpace(hecho.Valor) && instancia.Taxonomia.ConceptosPorId.ContainsKey(hecho.IdConcepto))
                    {
                        var conceptoHecho = instancia.Taxonomia.ConceptosPorId[hecho.IdConcepto];
                        if (conceptoHecho.TipoDato.Contains(ExportadorRolDocumentoBase.TIPO_DATO_TEXT_BLOCK))
                        {
                            WordUtil.InsertHtml(docBuilder, hecho.IdConcepto + ":" +
                                                hecho.Id, ExportadorRolDocumentoBase.PARRAFO_HTML_NOTAS_Texblock + hecho.Valor + "</p>", false, true);
                        }
                        else
                        {
                            exportadorOrigen.EscribirValorHecho(docBuilder, estructuraReporte, hecho, instancia.Taxonomia.ConceptosPorId[hecho.IdConcepto]);
                        }
                    }
                    docBuilder.EndRow();
                }
                exportadorOrigen.establecerBordesGrisesTabla(tablaActual);
                docBuilder.EndTable();
                docBuilder.Writeln();
                docBuilder.Writeln();
            }
        }
        /// <summary>
        /// Pinta el contenido del hipercubo.
        /// </summary>
        /// <param name="hipercubo">Hipercubo.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="estructuraReporte">Estructura del reporte.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="concepto">Concepto origen.</param>
        /// <param name="rolAExportar">Rol que se pretende exportar.</param>
        /// <param name="exportadorOrigen">Exportador original</param>
        private void PintaTablaCubo(
            HipercuboReporteDTO hipercubo,
            DocumentoInstanciaXbrlDto instancia,
            ReporteXBRLDTO estructuraReporte,
            DocumentBuilder docBuilder,
            ConceptoReporteDTO concepto,
            IndiceReporteDTO rolAExportar,
            ExportadorRolDocumentoBase exportadorOrigen)
        {
            var tablaActual = docBuilder.StartTable();
            var colorTitulo = exportadorOrigen.ObtenColorTitulo();

            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;

            //docBuilder.InsertCell();
            // docBuilder.EndRow();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.Font.Color = Color.White;
            docBuilder.Font.Size  = exportadorOrigen.TamanioLetraContenidoTabla;

            var listaIdsConcepto = new List <string>();

            foreach (var idConcepto in hipercubo.Hechos.Keys)
            {
                if (ConceptosAplica != null && !ConceptosAplica.Contains(idConcepto))
                {
                    continue;
                }
                listaIdsConcepto.Add(idConcepto);
            }

            var etiquetaTitulo = String.Empty;

            if (!String.IsNullOrEmpty(IdConceptoReferencia))
            {
                etiquetaTitulo =
                    DesgloseDeCreditosHelper
                    .obtenerEtiquetaDeConcepto(instancia.Taxonomia, IdConceptoReferencia, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);
            }
            else
            {
                etiquetaTitulo = concepto.Valor;
            }
            PintaFilaSubTitulo(etiquetaTitulo, docBuilder, listaIdsConcepto.Count, exportadorOrigen);

            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.Font.Color = Color.White;
            docBuilder.Font.Size  = exportadorOrigen.TamanioLetraContenidoTabla;
            docBuilder.RowFormat.HeadingFormat = true;
            docBuilder.Bold = true;
            foreach (var idConcepto in listaIdsConcepto)
            {
                var nombreConcepto =
                    DesgloseDeCreditosHelper.obtenerEtiquetaDeConcepto(instancia.Taxonomia, idConcepto, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);
                docBuilder.InsertCell();
                docBuilder.Write(nombreConcepto ?? "");
            }
            docBuilder.EndRow();

            docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
            docBuilder.Font.Color = Color.Black;
            docBuilder.Bold       = false;

            var matrisHechos       = hipercubo.Utileria.ReordenaConjutosPorExplicitaImplicitaConcepto(hipercubo.Hechos);
            var idDimensionTitulos = String.Empty;

            if (matrisHechos.Count > 1)
            {
                var dimensionExplicita = hipercubo.Utileria.configuracion.PlantillaDimensiones.Values.Where(X => X.Explicita == true).FirstOrDefault();
                if (dimensionExplicita != null)
                {
                    idDimensionTitulos = dimensionExplicita.IdDimension;
                }
            }
            foreach (var idPlantillaContexto in matrisHechos.Keys)
            {
                if (IdsPlantillasContexto != null && !IdsPlantillasContexto.Contains(idPlantillaContexto))
                {
                    continue;
                }
                var listaImplicita = matrisHechos[idPlantillaContexto];
                var contieneHechos = listaImplicita.Where(X => X.Count > 0).FirstOrDefault() != null;
                if (!contieneHechos)
                {
                    continue;
                }

                if (!String.IsNullOrEmpty(idDimensionTitulos))
                {
                    Viewer.Application.Dto.Hipercubos.PlantillaContextoDto plantillaContexto;
                    if (hipercubo.Utileria.configuracion.PlantillasContextos.TryGetValue(idPlantillaContexto, out plantillaContexto))
                    {
                        var miembroDimension = plantillaContexto.ValoresDimension.Where(x => x.IdDimension.Equals(idDimensionTitulos)).FirstOrDefault();
                        if (miembroDimension != null)
                        {
                            var etiquetaMiembro =
                                DesgloseDeCreditosHelper
                                .obtenerEtiquetaDeConcepto(instancia.Taxonomia, miembroDimension.IdItemMiembro, estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT);
                            PintaFilaSubTitulo(etiquetaMiembro, docBuilder, listaIdsConcepto.Count, exportadorOrigen);
                        }
                    }
                }


                for (var indexImplicita = 0; indexImplicita < listaImplicita.Count; indexImplicita++)
                {
                    var      diccionarioPorconcepto = listaImplicita[indexImplicita];
                    HechoDto hecho;
                    foreach (var idConceptoItera in listaIdsConcepto)
                    {
                        docBuilder.InsertCell();
                        if (diccionarioPorconcepto.TryGetValue(idConceptoItera, out hecho))
                        {
                            if (hecho.NoEsNumerico)
                            {
                                docBuilder.CellFormat.WrapText       = true;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                            }
                            else
                            {
                                docBuilder.CellFormat.WrapText       = false;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                            }
                            exportadorOrigen.EscribirValorHecho(docBuilder, estructuraReporte, hecho, instancia.Taxonomia.ConceptosPorId[hecho.IdConcepto]);
                        }
                        else
                        {
                            docBuilder.Write(" ");
                        }
                    }
                    docBuilder.EndRow();
                }
            }
            exportadorOrigen.establecerBordesGrisesTabla(tablaActual);
            docBuilder.EndTable();
            docBuilder.Writeln();
            docBuilder.Writeln();
        }