public void CreaSeccion(ConceptoReporteDTO conceptoOrigen, DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte, IExportadorRolDocumentoInstancia exportadorOrigen)
        {
            var         exportadorBase = (ExportadorGeneralProspecto)exportadorOrigen;
            var         hecho          = exportadorBase.ObtenPrimerHechoPorIdConcepto(instancia, "rel_news_RelevantEventContent");
            ContextoDto contexto;

            if (instancia.ContextosPorId.TryGetValue(hecho.IdContexto, out contexto))
            {
                var elementoDimension = contexto.ValoresDimension.First();
                var etiqueta          = "Tipo de evento relevante";//exportadorBase.ObtenEtiquetaConcepto(elementoDimension.IdDimension, instancia, estructuraReporte.Lenguaje);
                var miembro           = exportadorBase.ObtenEtiquetaConcepto(elementoDimension.IdItemMiembro, instancia, estructuraReporte.Lenguaje);

                AplicarEstilosEtiquetaNota(docBuilder, exportadorBase);
                docBuilder.Write(etiqueta);
                EliminaEstilosLinea(docBuilder, exportadorBase);

                AplicarEstilosValorNotaInicio(docBuilder, exportadorBase);
                WordUtil.InsertHtml(docBuilder, elementoDimension.IdDimension + ":" + hecho.Id, miembro, false, true);
                AplicarEstilosValorNotaFin(docBuilder, exportadorBase);
            }
            ConceptoDto concepto;

            if (instancia.Taxonomia.ConceptosPorId.TryGetValue(hecho.IdConcepto, out concepto))
            {
                var etiquetaHecho = exportadorBase.ObtenEtiquetaConcepto(hecho.IdConcepto, instancia, estructuraReporte.Lenguaje);
                AplicarEstilosEtiquetaNota(docBuilder, exportadorBase);
                docBuilder.Write(etiquetaHecho);
                EliminaEstilosLinea(docBuilder, exportadorBase);

                AplicarEstilosValorNotaInicio(docBuilder, exportadorBase);
                exportadorBase.EscribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                AplicarEstilosValorNotaFin(docBuilder, exportadorBase);
            }
        }
 /// <summary>
 /// Crea la tabla de series.
 /// </summary>
 /// <param name="conceptoContenedorHipercubo">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 conceptoContenedorHipercubo,
     DocumentBuilder docBuilder,
     DocumentoInstanciaXbrlDto instancia,
     IndiceReporteDTO rolAExportar,
     ReporteXBRLDTO estructuraReporte,
     IExportadorRolDocumentoInstancia exportadorOrigen)
 {
     try
     {
         docBuilder.Writeln();
         HipercuboReporteDTO hipercuboReporteDto;
         var idConceptoHipercubo = ObtenIdConceptoHipercubo(conceptoContenedorHipercubo, instancia, rolAExportar.Uri);
         if (estructuraReporte.Hipercubos.TryGetValue(idConceptoHipercubo, out hipercuboReporteDto) &&
             hipercuboReporteDto.Titulos.Count > 0)
         {
             PintaTablaCubo(hipercuboReporteDto, instancia, estructuraReporte, docBuilder,
                            conceptoContenedorHipercubo, rolAExportar, (ExportadorRolDocumentoBase)exportadorOrigen);
         }
     }
     catch (Exception ex)
     {
         LogUtil.Error(ex);
     }
 }
        public EstructuraFormatoDto ObtenEstructura(ConceptoReporteDTO conceptoOrigen, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar)
        {
            EstructuraFormatoDto estructuraRequerida = null;
            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))
                        {
                            estructuraRequerida = estructura;
                            break;
                        }
                        estructurasAnalizar.AddRange(estructura.SubEstructuras);
                    }
                }
            }
            return(estructuraRequerida);
        }
        public override void EvaluaEstructuraConcepto(EstructuraFormatoDto estructura, int tabuladores, IList <ConceptoReporteDTO> listaConceptos, String idRol)
        {
            List <String> idExcluyente = new List <String>()
            {
                "annext_UnpaidBalanceOfTheAssetsGroupedInArrearsAtTheEndOfThePeriodAbstract",
                "annext_CurrentMonth",
                "annext_LastMonth",

                "annext_NumberOfAssetsGroupedInArrearsAtTheEndOfThePeriodAbstract",
                "annext_NumberOfAssetsCurrentMonth",
                "annext_NumberOfAssetsLastMonth",
            };

            //LogUtil.Info("tabuladores:" + tabuladores + ",   idConcepto: " + estructura.IdConcepto);
            if (!reporteXBRLDTO.Instancia.Taxonomia.ConceptosPorId.ContainsKey(estructura.IdConcepto))
            {
                throw new NullReferenceException("No existe el contexto [" + estructura.IdConcepto + "] en la taxonomía.");
            }
            var concepto      = reporteXBRLDTO.Instancia.Taxonomia.ConceptosPorId[estructura.IdConcepto];
            var hechosReporte = new Dictionary <string, HechoReporteDTO>();

            if (!reporteXBRLDTO.ConfiguracionReporte.PeriodosPorRol.ContainsKey(idRol) || (concepto.EsMiembroDimension ?? false) || concepto.EsHipercubo || (concepto.EsDimension ?? false))
            {
                return;
            }
            foreach (var idPeriodo in reporteXBRLDTO.ConfiguracionReporte.PeriodosPorRol[idRol])
            {
                if ((!idPeriodo.Equals("periodo_actual") && idExcluyente.Contains(concepto.Id)) || (idPeriodo.Equals("periodo_actual") && !idExcluyente.Contains(concepto.Id)))
                {
                    hechosReporte.Add(idPeriodo, new HechoReporteDTO());
                }
            }
            var conceptoReporte = new ConceptoReporteDTO()
            {
                IdConcepto           = concepto.Id,
                Abstracto            = concepto.EsAbstracto ?? false,
                Etiqueta             = estructura.RolEtiquetaPreferido,
                Numerico             = concepto.EsTipoDatoNumerico,
                Tabuladores          = tabuladores * reporteXBRLDTO.ConfiguracionReporte.EstilosReporte.MultiploTabuladores,
                TipoDato             = concepto.TipoDato,
                Hechos               = hechosReporte,
                AtributosAdicionales = concepto.AtributosAdicionales
            };

            listaConceptos.Add(conceptoReporte);
            var listaSubEstructuras = estructura.SubEstructuras;

            if (listaSubEstructuras != null && listaSubEstructuras.Count() > 0)
            {
                var tabuladoresItera = tabuladores++;
                foreach (var subEstructura in listaSubEstructuras)
                {
                    EvaluaEstructuraConcepto(subEstructura, tabuladoresItera, listaConceptos, idRol);
                }
            }
        }
 /// <summary>
 /// Presenta un concepto determinado
 /// </summary>
 /// <param name="docBuilder">Constructor del documento.</param>
 /// <param name="instancia">Documento de instancia.</param>
 /// <param name="rolAExportar">Rol a exportar.</param>
 /// <param name="estructuraReporte">Dto con información general del reporte.</param>
 /// <param name="concepto">Concepto que se presenta.</param>
 /// <param name="idsConceptosDescartar">Listado de identificadores de concepto a descartar.</param>
 /// <param name="conceptosHiercubos">Listado de conceptos que pertenecen a hipercubos.</param>
 public void PresentaConcepto(
     DocumentBuilder docBuilder,
     DocumentoInstanciaXbrlDto instancia,
     IndiceReporteDTO rolAExportar,
     ReporteXBRLDTO estructuraReporte,
     ConceptoReporteDTO concepto,
     IList <string> idsConceptosDescartar,
     IDictionary <string, bool> conceptosHiercubos)
 {
     EscribeConcepto(concepto, docBuilder, estructuraReporte);
 }
        /// <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>
        /// Retorna el ConceptoReporteDTO con el identificador dado.
        /// </summary>
        /// <param name="idConcepto">Identificador del concepto.</param>
        /// <param name="estructuraReporte">Estructura del reporte.</param>
        /// <returns>Elemento requerido.</returns>
        public ConceptoReporteDTO ObtenConceptoReporte(String idConcepto, ReporteXBRLDTO estructuraReporte)
        {
            ConceptoReporteDTO conceptoReporte = null;

            foreach (var idRol in estructuraReporte.Roles.Keys)
            {
                var listaConceptosRol = estructuraReporte.Roles[idRol];
                if (listaConceptosRol != null)
                {
                    conceptoReporte = listaConceptosRol.Where(X => X.IdConcepto.Equals(idConcepto)).FirstOrDefault();
                    break;
                }
            }
            return(conceptoReporte);
        }
예제 #8
0
        /// <summary>
        /// Constructor de la sección.
        /// </summary>
        /// <param name="conceptoOrigen">Concepto que encapsula el hipercubo.</param>
        /// <param name="docBuilder">Constructor del reporte.</param>
        /// <param name="instancia">Documento de instancia con la información.</param>
        /// <param name="rolAExportar">Rol que se pretende exprotar.</param>
        /// <param name="estructuraReporte">DTO con información general del reporte.</param>
        /// <param name="exportadorOrigen">Exportador actual que maneja la exportación del rol.</param>
        /// <param name="hipercuboReporteDto">Definición del hipercubo con la información a presentar.</param>
        /// <param name="configuracionPresentacion">Definición de la configuración que se pretende presentar.</param>
        public void PintaTarjetasHipercubo(
            ConceptoReporteDTO conceptoOrigen,
            DocumentBuilder docBuilder,
            DocumentoInstanciaXbrlDto instancia,
            IndiceReporteDTO rolAExportar,
            ReporteXBRLDTO estructuraReporte,
            ExportadorRolDocumentoBase exportadorOrigen,
            HipercuboReporteDTO hipercuboReporteDto,
            ConfiguracionPresentacionRegistroHipercuboDto configuracionPresentacion)
        {
            var    diccionarioTarjetas  = hipercuboReporteDto.Utileria.ReordenaConjutosPorExplicitaImplicitaConcepto(hipercuboReporteDto.Hechos);
            String idDimensionExplicita = null;

            foreach (var idPlantillaDimension in hipercuboReporteDto.Utileria.configuracion.PlantillaDimensiones.Keys)
            {
                var plantillaDimension = hipercuboReporteDto.Utileria.configuracion.PlantillaDimensiones[idPlantillaDimension];
                if (plantillaDimension.Explicita)
                {
                    idDimensionExplicita = plantillaDimension.IdDimension;
                    break;
                }
            }

            var idsPlantillasContextos = configuracionPresentacion.IdsPlantillasContextos;

            foreach (var clavePlantilla in diccionarioTarjetas.Keys)
            {
                if (idsPlantillasContextos != null && !idsPlantillasContextos.Contains(clavePlantilla))
                {
                    continue;
                }
                var listaTajetas       = diccionarioTarjetas[clavePlantilla];
                var primerHecho        = listaTajetas.First().First().Value;
                var miembroExplicita   = hipercuboReporteDto.Utileria.ObtenMiembroDimension(primerHecho, idDimensionExplicita, instancia);
                var textoTituloMiembro = exportadorOrigen.
                                         ObtenEtiquetaConcepto(miembroExplicita.IdItemMiembro, instancia, estructuraReporte.Lenguaje);
                exportadorOrigen.ImprimeSubTitulo(docBuilder, textoTituloMiembro);
                foreach (var tarjeta in listaTajetas)
                {
                    PintaTarjeta(
                        docBuilder, estructuraReporte, exportadorOrigen,
                        instancia, tarjeta, configuracionPresentacion);
                }
            }
        }
예제 #9
0
 /// <summary>
 /// Constructor de la sección.
 /// </summary>
 /// <param name="conceptoOrigen">Concepto que encapsula el hipercubo.</param>
 /// <param name="docBuilder">Constructor del reporte.</param>
 /// <param name="instancia">Documento de instancia con la información.</param>
 /// <param name="rolAExportar">Rol que se pretende exprotar.</param>
 /// <param name="estructuraReporte">DTO con información general del reporte.</param>
 /// <param name="exportadorOrigen">Exportador actual que maneja la exportación del rol.</param>
 public void CreaSeccion(
     ConceptoReporteDTO conceptoOrigen,
     DocumentBuilder docBuilder,
     DocumentoInstanciaXbrlDto instancia,
     IndiceReporteDTO rolAExportar,
     ReporteXBRLDTO estructuraReporte,
     IExportadorRolDocumentoInstancia exportadorOrigen)
 {
     try
     {
         docBuilder.Writeln();
         var exportadorBase      = (ExportadorRolDocumentoBase)exportadorOrigen;
         var idConceptoHipercubo = ObtenIdConceptoHipercubo(conceptoOrigen, instancia, rolAExportar.Uri);
         HipercuboReporteDTO hipercuboReporteDto;
         if (estructuraReporte.Hipercubos.TryGetValue(idConceptoHipercubo, out hipercuboReporteDto) &&
             hipercuboReporteDto.Titulos.Count > 0)
         {
             var configuracionGeneral = hipercuboReporteDto.Utileria.configuracion;
             if (configuracionGeneral.ConfiguracionPresentacion != null &&
                 configuracionGeneral.ConfiguracionPresentacion.Count > 0)
             {
                 ConfiguracionPresentacionRegistroHipercuboDto configuracionPresentacion = null;
                 if (String.IsNullOrEmpty(IdConfiguracion) ||
                     !configuracionGeneral.ConfiguracionPresentacion.TryGetValue(IdConfiguracion, out configuracionPresentacion))
                 {
                     configuracionPresentacion = configuracionGeneral.ConfiguracionPresentacion.Values.FirstOrDefault();
                 }
                 if (configuracionPresentacion.Tipo.Equals("Tarjeta"))
                 {
                     PintaTarjetasHipercubo(
                         conceptoOrigen, docBuilder, instancia,
                         rolAExportar, estructuraReporte, exportadorBase,
                         hipercuboReporteDto, configuracionPresentacion);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         LogUtil.Error(ex);
     }
 }
        /// <summary>
        /// Escribe el valor de un concepto directamente en la página actual.
        /// </summary>
        /// <param name="concepto">Concepto del reporte que se pretende presentar.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="estructuraReporte">Datos generales del reporte.</param>
        /// <returns>Hecho presentado</returns>
        private HechoReporteDTO EscribeConcepto(ConceptoReporteDTO concepto, DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte)
        {
            HechoReporteDTO hechoReporteDTO = null;

            foreach (var idHecho in concepto.Hechos.Keys)
            {
                if (concepto.Hechos.TryGetValue(idHecho, out hechoReporteDTO) &&
                    hechoReporteDTO != null && !String.IsNullOrEmpty(hechoReporteDTO.Valor))
                {
                    break;
                }
            }
            var esBloqueDeTexto = false;
            var cadenaMuyGrande = false;

            if (hechoReporteDTO != null && !String.IsNullOrEmpty(hechoReporteDTO.Valor))
            {
                // condicion para obtener el formato de los tres primeros conceptos
                string text_block = ObtenertipoDato(concepto, ExportadorRolDocumentoBase.TIPO_DATO_TEXT_BLOCK);
                esBloqueDeTexto = concepto.TipoDato == text_block;
                var longitudFila = concepto.Valor.Length + hechoReporteDTO.Valor.Length;
                cadenaMuyGrande = longitudFila > 40;
                if (esBloqueDeTexto || cadenaMuyGrande)
                {
                    if (!docBuilder.CurrentParagraph.PreviousSibling.NodeType.Equals(NodeType.Paragraph))
                    {
                        docBuilder.Font.Size = 8;
                        docBuilder.Font.Bold = false;
                        docBuilder.Writeln();
                        docBuilder.Writeln();
                    }

                    EscribirTipoNotaTexto(docBuilder, estructuraReporte, hechoReporteDTO, concepto);
                }
                else
                {
                    EscribirADosColumnasConceptoValor(docBuilder, estructuraReporte, concepto, hechoReporteDTO);
                }
            }

            return(hechoReporteDTO);
        }
예제 #11
0
        /// <summary>
        /// Obtiene el identificador del concepto hipercubo.
        /// </summary>
        /// <param name="conceptoContenedorHipercubo">Concepto que contiene el hipercubo.</param>
        /// <param name="instancia">Instanica XBRL que se anliza.</param>
        /// <param name="idRol">Identificador del rol actual.</param>
        /// <returns>Identificador del hipercubo.</returns>
        private String ObtenIdConceptoHipercubo(ConceptoReporteDTO conceptoContenedorHipercubo, DocumentoInstanciaXbrlDto instancia, String idRol)
        {
            String idConceptoHipercubo        = null;
            var    listaEstructurasHipercubos = new List <EstructuraFormatoDto>();
            var    rolPresentacion            = instancia.Taxonomia.RolesPresentacion.Where(x => x.Uri.Equals(idRol)).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)
                    {
                        var idConceptoContenedor = String.IsNullOrEmpty(IdConceptoReferencia) ?
                                                   conceptoContenedorHipercubo.IdConcepto : IdConceptoReferencia;
                        if (estructura.IdConcepto.Equals(idConceptoContenedor))
                        {
                            ConceptoDto concepto;
                            var         conceptoHipercubo = estructura.SubEstructuras.
                                                            Where(x => (conceptosTaxonomia.TryGetValue(x.IdConcepto, out concepto) && concepto.EsHipercubo)).FirstOrDefault();
                            if (conceptoHipercubo != null)
                            {
                                idConceptoHipercubo = conceptoHipercubo.IdConcepto;
                            }
                            break;
                        }
                        else
                        {
                            estructurasAnalizar.AddRange(estructura.SubEstructuras);
                        }
                    }
                }
            }

            return(idConceptoHipercubo);
        }
예제 #12
0
        private void PintaTablaDimensionSerie(DocumentBuilder docBuilder, String valor, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte, ConceptoReporteDTO concepto)
        {
            docBuilder.Writeln();
            // var listaConseptosReportes = estructuraReporte.Hipercubos;
            foreach (var dato in estructuraReporte.Hipercubos)
            {
                var      variable = dato;
                string[] d        = variable.Key.Split(new string[] { "Table" }, StringSplitOptions.None);
                string   conceptoHipercuboTable = (d[0]);

                if (conceptoHipercuboTable == valor && !Evaluador.Contains(variable.Key))
                {
                    ConceptoReporteDTO primerConcepto = null;

                    if (!estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
                    {
                        throw new IndexOutOfRangeException("No existe el rol [" + rolAExportar.Rol + "] dentro del listado de roles del reporte.");
                    }
                    if (estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
                    {
                        if (!concepto.Abstracto)
                        {
                            primerConcepto = concepto;
                            break;
                        }
                    }

                    var hipercubo = variable;


                    Table tablaActual = docBuilder.StartTable();
                    Color colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);
                    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  = TamanioLetraContenidoTabla;

                    docBuilder.InsertCell();

                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                    docBuilder.Font.Color = Color.White;
                    establecerFuenteTituloCampo(docBuilder);
                    docBuilder.Font.Size = TamanioLetraTituloTabla;
                    docBuilder.Write("Serie [Eje]");
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.None;

                    if (hipercubo.Value.Titulos.Count > 0)
                    {
                        for (var indexTitulo = 0; indexTitulo < hipercubo.Value.Titulos.Count; indexTitulo++)
                        {
                            var titulo = hipercubo.Value.Titulos[indexTitulo];
                            docBuilder.InsertCell();
                            docBuilder.Write(titulo);
                        }
                        docBuilder.EndRow();
                    }



                    establecerFuenteTituloCampo(docBuilder);
                    docBuilder.Font.Size = TamanioLetraTituloTabla;

                    int fila = 0;


                    if (concepto.Abstracto)
                    {
                        fila = +1;

                        for (int iCell = 0; iCell < fila; iCell++)
                        {
                            docBuilder.InsertCell();
                            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                        }
                    }
                    if (concepto.Abstracto)
                    {
                        docBuilder.Bold       = true;
                        docBuilder.Font.Color = Color.White;
                        docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;

                        docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores < 0 ? concepto.Tabuladores : 0);
                        docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                        docBuilder.Write(concepto.Valor);
                        docBuilder.InsertCell();
                        docBuilder.EndRow();
                        //  tituloAbstracto.Add(concepto.Valor);
                    }
                    else
                    {
                        docBuilder.Bold = false;
                    }


                    docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                    docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                    docBuilder.Font.Color = Color.Black;
                    docBuilder.Bold       = false;
                    foreach (var idConcepto in hipercubo.Value.Hechos.Keys)
                    {
                        var matrizPlantillaContexto = hipercubo.Value.Hechos[idConcepto];
                        docBuilder.InsertCell();
                        var nombreConcepto =
                            DesgloseDeCreditosHelper.obtenerEtiquetaDeConcepto(instancia.Taxonomia, idConcepto, "es", ReporteXBRLUtil.ETIQUETA_DEFAULT);
                        docBuilder.Write(nombreConcepto);
                        ConceptoHiper.Add(idConcepto);

                        foreach (var idPlantillaContexto in matrizPlantillaContexto.Keys)
                        {
                            docBuilder.CellFormat.WrapText       = true;
                            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                            var listaHechos = matrizPlantillaContexto[idPlantillaContexto];
                            for (var indexHecho = 0; indexHecho < listaHechos.Length; indexHecho++)
                            {
                                var hecho      = listaHechos[indexHecho];
                                var valorHecho = hecho.Valor;

                                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)) && instancia.Taxonomia.ConceptosPorId.ContainsKey(hecho.IdConcepto))
                                {
                                    var conceptoHecho = instancia.Taxonomia.ConceptosPorId[hecho.IdConcepto];
                                    if (conceptoHecho.TipoDato.Contains(TIPO_DATO_TEXT_BLOCK))
                                    {
                                        WordUtil.InsertHtml(docBuilder, hecho.IdConcepto + ":" + hecho.Id, PARRAFO_HTML_NOTAS_Texblock + valorHecho + "</p>", false, true);

                                        //docBuilder.InsertHtml(PARRAFO_HTML_NOTAS_Texblock + limpiarBloqueTexto(valorHecho) + "</p>", true);
                                    }
                                    else
                                    {
                                        docBuilder.Writeln(valorHecho);
                                    }
                                }
                            }
                        }

                        docBuilder.EndRow();
                    }


                    establecerBordesGrisesTabla(tablaActual);
                    docBuilder.EndTable();
                    docBuilder.Writeln();
                    docBuilder.Writeln();
                    Evaluador.Add(variable.Key);
                    break;
                }
            }
        }
예제 #13
0
 /// <summary>
 /// Retorna un listado con los conceptos que deben ser considerados para no ser evaluados por el exportador origen.
 /// </summary>
 /// <param name="conceptoOrigen">Concepto origen que sirve como marca para iniciar la generación de la sección.</param>
 /// <param name="instancia">Documento de instancia evaluado.</param>
 /// <param name="rolAExportar">Rol que se está exportando.</param>
 /// <param name="estructuraReporte">DTO con información general del reporte.</param>
 /// <param name="exportadorOrigen">Exportador del rol.</param>
 /// <returns>Retorna un listado con los conceptos que deben ser descartados en la presentación del exportador original.</returns>
 public IList <string> ObtenConceptosDescartar(ConceptoReporteDTO conceptoOrigen, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte, IExportadorRolDocumentoInstancia exportadorOrigen)
 {
     return(null);
 }
예제 #14
0
        ///
        /// (non-Javadoc)
        /// @see com.bmv.spread.xbrl.reportes.exportador.ExportadorRolDocumentoInstancia#exportarRolAWord(com.aspose.words.DocumentBuilder, com.hh.xbrl.abax.viewer.application.dto.DocumentoInstanciaXbrlDto, com.bmv.spread.xbrl.reportes.dto.IndiceReporteDTO, com.bmv.spread.xbrl.reportes.dto.ReporteXBRLDTO)
        ////
        override public void exportarRolAWord(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte)
        {
            Color colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);

            docBuilder.CurrentSection.PageSetup.Orientation = Orientation.Portrait;
            docBuilder.CurrentSection.PageSetup.LeftMargin  = 40;
            docBuilder.CurrentSection.PageSetup.RightMargin = 40;
            escribirEncabezado(docBuilder, instancia, estructuraReporte, true);
            imprimirTituloRol(docBuilder, rolAExportar);

            //Escribir nota inicial
            IList <ConceptoReporteDTO> conceptos = estructuraReporte.Roles[rolAExportar.Rol];
            HechoReporteDTO            hechoNota = null;
            var conceptoNota = "ifrs_mx-cor_20141205_InformacionARevelarSobrePosicionMonetariaEnMonedaExtranjeraBloqueDeTexto";

            foreach (var concepto in conceptos)
            {
                if (!concepto.IdConcepto.Equals(conceptoNota))
                {
                    continue;
                }
                foreach (var llave in concepto.Hechos.Keys)
                {
                    hechoNota = concepto.Hechos[llave];
                    if (hechoNota != null)
                    {
                        if (String.IsNullOrWhiteSpace(hechoNota.Valor) && instancia.HechosPorIdConcepto.ContainsKey(conceptoNota))
                        {
                            var idsHechos = instancia.HechosPorIdConcepto[conceptoNota];
                            foreach (var idHecho in idsHechos)
                            {
                                if (instancia.HechosPorId.ContainsKey(idHecho))
                                {
                                    var hechoReal = instancia.HechosPorId[idHecho];
                                    if (!String.IsNullOrWhiteSpace(hechoReal.Valor))
                                    {
                                        hechoNota.Valor = hechoReal.Valor;
                                        break;
                                    }
                                }
                            }
                        }
                        if (!String.IsNullOrWhiteSpace(hechoNota.Valor))
                        {
                            escribirConceptoEnTablaNota(docBuilder, estructuraReporte, hechoNota, concepto);
                            break;
                        }
                    }
                }
            }
            //conceptos.Remove(0);

            conceptos = ((List <ConceptoReporteDTO>)conceptos).GetRange(1, conceptos.Count() - 1);


            Table tablaActual = docBuilder.StartTable();
            ConceptoReporteDTO primerConcepto = null;

            foreach (ConceptoReporteDTO concepto  in  conceptos)
            {        //estructuraReporte.Roles[rolAExportar.Rol]){
                if (!concepto.Abstracto)
                {
                    primerConcepto = concepto;
                    break;
                }
            }
            docBuilder.Font.Color = Color.White;
            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraTituloTabla;

            //Titlo de dimension

            docBuilder.InsertCell();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.Auto;
            docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
            int iCol = 0;

            foreach (String columna  in  primerConcepto.Hechos.Keys)
            {
                docBuilder.InsertCell();
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                docBuilder.CellFormat.WrapText       = false;
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                if (iCol == 0)
                {
                    String descPeriodo = (String)estructuraReporte.ParametrosReporte["ifrs_mx-cor_20141205_MonedasEje_HEADER"];
                    docBuilder.Write(descPeriodo);
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.First;
                }
                else
                {
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.Previous;
                }
                iCol++;
            }

            docBuilder.EndRow();

            docBuilder.InsertCell();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.Auto;
            docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
            foreach (String columna  in  primerConcepto.Hechos.Keys)
            {
                docBuilder.InsertCell();
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                docBuilder.CellFormat.WrapText       = false;
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                String descPeriodo = (String)estructuraReporte.ParametrosReporte[columna + "_HEADER"];
                docBuilder.Write(descPeriodo);
                docBuilder.CellFormat.HorizontalMerge = CellMerge.First;
            }
            docBuilder.EndRow();

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraContenidoTabla;
            foreach (ConceptoReporteDTO concepto  in  conceptos)
            {
                if (concepto.Abstracto && !ConceptosAbstractosPermitidos.Contains(concepto.IdConcepto))
                {
                    continue;
                }
                docBuilder.InsertCell();
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                docBuilder.CellFormat.WrapText = true;
                docBuilder.Font.Color          = Color.Black;
                if (concepto.Abstracto)
                {
                    docBuilder.Bold       = true;
                    docBuilder.Font.Color = Color.White;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                }
                else
                {
                    docBuilder.Bold = false;
                }
                docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores < 0 ? concepto.Tabuladores : 0);
                docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                docBuilder.Write(concepto.Valor);
                if (concepto.Abstracto)
                {
                    for (int iCell = 0; iCell < primerConcepto.Hechos.Count(); iCell++)
                    {
                        docBuilder.InsertCell();
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    }
                }
                else
                {
                    foreach (HechoReporteDTO hecho  in  concepto.Hechos.Values)
                    {
                        docBuilder.InsertCell();
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);

                        docBuilder.ParagraphFormat.LeftIndent = 0;
                        if (concepto.Numerico)
                        {
                            docBuilder.CellFormat.WrapText       = true;
                            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                        }
                        else
                        {
                            docBuilder.CellFormat.WrapText       = false;
                            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                        }
                        escribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                    }
                }
                docBuilder.RowFormat.AllowBreakAcrossPages = true;
                docBuilder.RowFormat.HeadingFormat         = false;
                docBuilder.EndRow();
            }


            tablaActual.SetBorders(LineStyle.Single, 1, ReportConstants.DEFAULT_BORDER_GREY_COLOR);
            docBuilder.EndTable();
        }
예제 #15
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();
        }
예제 #16
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);
            }
        }
예제 #17
0
        private void escribirTablaIntervaloTiempo(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, DocumentoInstanciaXbrlDto instancia, List <String> IdsConceptos, int inicio, int final)
        {
            Color colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);

            IList <string> ConceptosAbstractosPermitidos = new List <string>()
            {
                IdsConceptos[inicio]
            };

            List <ConceptoReporteDTO> conceptos = new List <ConceptoReporteDTO>();

            if (inicio < final & final <= IdsConceptos.Count)
            {
                for (int i = inicio; i < final; i++)
                {
                    conceptos.Add(BuscarPorIdConcepto(estructuraReporte, IdsConceptos[i]));
                }
            }

            docBuilder.Writeln();
            Table tablaActual = docBuilder.StartTable();
            ConceptoReporteDTO primerConcepto = null;

            foreach (ConceptoReporteDTO concepto in conceptos)
            {
                if (!concepto.Abstracto)
                {
                    primerConcepto = concepto;
                    break;
                }
            }
            docBuilder.Font.Color = Color.White;
            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraTituloTabla;

            //Titlo de dimension

            docBuilder.InsertCell();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.Auto;
            docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
            int iCol = 0;

            foreach (String columna in primerConcepto.Hechos.Keys)
            {
                if (!columna.Equals("periodo_actual"))
                {
                    docBuilder.InsertCell();
                    docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    docBuilder.CellFormat.WrapText       = false;
                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    if (iCol == 0)
                    {
                        String descPeriodo = (String)estructuraReporte.ParametrosReporte["annext_TimeIntervalAxis_HEADER"];
                        docBuilder.Write(descPeriodo);
                        docBuilder.CellFormat.HorizontalMerge = CellMerge.First;
                    }
                    else
                    {
                        docBuilder.CellFormat.HorizontalMerge = CellMerge.Previous;
                    }
                    iCol++;
                }
            }

            docBuilder.EndRow();

            docBuilder.InsertCell();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.Auto;
            docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
            foreach (String columna in primerConcepto.Hechos.Keys)
            {
                if (!columna.Equals("periodo_actual"))
                {
                    docBuilder.InsertCell();
                    docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    docBuilder.CellFormat.WrapText       = false;
                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    String descPeriodo = (String)estructuraReporte.ParametrosReporte[columna + "_HEADER"];
                    docBuilder.Write(descPeriodo);
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.First;
                }
            }
            docBuilder.EndRow();

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraContenidoTabla;
            foreach (ConceptoReporteDTO concepto in conceptos)
            {
                if (concepto.Abstracto && !ConceptosAbstractosPermitidos.Contains(concepto.IdConcepto))
                {
                    continue;
                }
                docBuilder.InsertCell();
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                docBuilder.CellFormat.WrapText = true;
                docBuilder.Font.Color          = Color.Black;
                if (concepto.Abstracto)
                {
                    docBuilder.Bold       = true;
                    docBuilder.Font.Color = Color.White;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                }
                else
                {
                    docBuilder.Bold = false;
                }
                docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores < 0 ? concepto.Tabuladores : 0);
                docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                docBuilder.Write(concepto.Valor);
                if (concepto.Abstracto)
                {
                    for (int iCell = 0; iCell < primerConcepto.Hechos.Count(); iCell++)
                    {
                        docBuilder.InsertCell();
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    }
                }
                else
                {
                    foreach (String contexto in concepto.Hechos.Keys)
                    {
                        if (!contexto.Equals("periodo_actual"))
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);

                            docBuilder.ParagraphFormat.LeftIndent = 0;
                            if (concepto.Numerico)
                            {
                                docBuilder.CellFormat.WrapText       = true;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                            }
                            else
                            {
                                docBuilder.CellFormat.WrapText       = false;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                            }
                            escribirValorHecho(docBuilder, estructuraReporte, concepto.Hechos[contexto], concepto);
                        }
                    }
                }
                docBuilder.RowFormat.AllowBreakAcrossPages = true;
                docBuilder.RowFormat.HeadingFormat         = false;
                docBuilder.EndRow();
            }

            tablaActual.SetBorders(LineStyle.Single, 1, ReportConstants.DEFAULT_BORDER_GREY_COLOR);
            docBuilder.EndTable();
            docBuilder.Writeln();
        }
        /// <summary>
        /// Imprime el valor de un hecho a dos columnas.
        /// </summary>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="estructuraReporte">DTO con información general del reporte actual</param>
        /// <param name="concepto">Concepto que se presenta.</param>
        /// <param name="hecho">Hecho que se persenta.</param>
        public override void EscribirADosColumnasConceptoValor(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, ConceptoReporteDTO concepto, HechoReporteDTO hecho)
        {
            Table tablaActual = docBuilder.StartTable();

            tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            docBuilder.ParagraphFormat.SpaceAfter  = 5;
            docBuilder.ParagraphFormat.SpaceBefore = 5;

            docBuilder.InsertCell();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
            var anchoMinimoEtiqueta = (AnchoMinimoTitulodosColumnas != null && AnchoMinimoTitulodosColumnas > 0) ? AnchoMinimoTitulodosColumnas ?? 30 : 30;
            var anchoMinimoValor    = 100 - anchoMinimoEtiqueta;

            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPercent(anchoMinimoEtiqueta);

            docBuilder.CellFormat.Borders.LineStyle = LineStyle.None;
            docBuilder.CellFormat.Borders.LineWidth = 0;
            if (!concepto.IdConcepto.Equals("rel_news_Ticker"))
            {
                docBuilder.CellFormat.Borders.Right.Color     = Color.Black;
                docBuilder.CellFormat.Borders.Right.LineStyle = LineStyle.Single;
                docBuilder.CellFormat.Borders.Right.LineWidth = .75;
            }
            else
            {
                docBuilder.CellFormat.Borders.Bottom.Color     = Color.Black;
                docBuilder.CellFormat.Borders.Bottom.LineStyle = LineStyle.Single;
                docBuilder.CellFormat.Borders.Bottom.LineWidth = .75;
            }

            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size  = 11;
            docBuilder.Font.Color = Color.Black;
            AplicaEstilosEtiquetaConcepto(docBuilder, concepto.IdConcepto, estructuraReporte);
            docBuilder.Write(concepto.Valor);
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;

            //docBuilder.Write(": ");
            var estructurasRol = estructuraReporte.Roles.Values.First();
            var esPar          = estructurasRol.IndexOf(concepto) % 2;

            docBuilder.InsertCell();
            if (esPar == 0)
            {
                docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.FromArgb(255, 242, 242, 242);
            }
            if (!concepto.IdConcepto.Equals("rel_news_Ticker"))
            {
                docBuilder.CellFormat.Borders.Right.Color     = Color.White;
                docBuilder.CellFormat.Borders.Right.LineStyle = LineStyle.None;
                docBuilder.CellFormat.Borders.Right.LineWidth = 0;
            }
            else
            {
                docBuilder.CellFormat.Borders.Bottom.Color     = Color.Black;
                docBuilder.CellFormat.Borders.Bottom.LineStyle = LineStyle.Single;
                docBuilder.CellFormat.Borders.Bottom.LineWidth = .75;
            }
            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPercent(anchoMinimoValor);
            establecerFuenteValorCampo(docBuilder);
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;

            docBuilder.Font.Size = 10;
            AplicaEstilosValorConcepto(docBuilder, concepto.IdConcepto, estructuraReporte);
            escribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
            docBuilder.EndRow();

            docBuilder.EndTable();
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
        }
        private void PintaTabla(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte, IList <ConceptoReporteDTO> listaConseptosReporte)
        {
            Table tablaActual = docBuilder.StartTable();
            Color colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);

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

            ConceptoReporteDTO primerConcepto = null;

            if (!estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
            {
                throw new IndexOutOfRangeException("No existe el rol [" + rolAExportar.Rol + "] dentro del listado de roles del reporte.");
            }
            if (estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
            {
                foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
                {
                    if (!concepto.Abstracto)
                    {
                        primerConcepto = concepto;
                        break;
                    }
                }
            }
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraTituloTabla;
            docBuilder.InsertCell();

            //tablaActual.StyleIdentifier = StyleIdentifier.LIGHT_GRID_ACCENT_1;
            //tablaActual.StyleOptions = TableStyleOptions.FIRST_ROW;

            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
            docBuilder.Font.Color = Color.White;
            docBuilder.Write(estructuraReporte.ObtenValorEtiquetaReporte("ETIQUETA_CONCEPTO"));

            String fechaReporteCadena      = estructuraReporte.FechaReporte;
            String fechaConstitucionCadena = estructuraReporte.Plantilla.ObtenerParametrosConfiguracion()["fechaConstitucion"];

            DateTime fechaReporte      = DateReporteUtil.obtenerFecha(fechaReporteCadena);
            DateTime fechaConstitucion = DateReporteUtil.obtenerFecha(fechaConstitucionCadena);

            int diferenciaAnios = fechaReporte.Year - fechaConstitucion.Year;

            var periodosPermitidos = new Dictionary <String, bool>()
            {
                { "anual_actual", true },
            };

            if (diferenciaAnios == 1)
            {
                periodosPermitidos.Add("anual_anterior", true);
            }
            else if (diferenciaAnios >= 2)
            {
                periodosPermitidos.Add("anual_anterior", true);
                periodosPermitidos.Add("anual_pre_anterior", true);
            }

            foreach (String periodo in primerConcepto.Hechos.Keys)
            {
                if (!periodosPermitidos.ContainsKey(periodo))
                {
                    continue;
                }

                docBuilder.InsertCell();
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                //docBuilder.CellFormat.Width = 35;
                docBuilder.CellFormat.WrapText = false;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                String descPeriodo = estructuraReporte.PeriodosReporte[periodo];
                docBuilder.Writeln(estructuraReporte.Titulos[periodo]);
                docBuilder.Writeln(estructuraReporte.Moneda);
                docBuilder.Write(descPeriodo.Replace("_", " - "));
            }
            docBuilder.RowFormat.HeadingFormat = true;
            docBuilder.EndRow();

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraContenidoTabla;
            foreach (ConceptoReporteDTO concepto in listaConseptosReporte)
            {
                /* if (ConceptosOcultar.Contains(concepto.IdConcepto))
                 * {
                 *   continue;
                 * }*/

                //if(!concepto.Abstracto && !concepto.Numerico)
                //{
                //    establecerBordesGrisesTabla(tablaActual);
                //    docBuilder.EndTable();
                //    var subLista = ObtenSubLista(listaConseptosReporte, listaConseptosReporte.IndexOf(concepto));
                //    EscribeNotas(docBuilder, instancia, rolAExportar, estructuraReporte, subLista);
                //    return;
                //}
                if (concepto.TipoDato.EndsWith(TIPO_DATO_MONETARY) || concepto.TipoDato.EndsWith(TIPO_DATO_PERSHERE))
                {
                    docBuilder.InsertCell();
                    docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                    docBuilder.CellFormat.WrapText = true;
                    docBuilder.Font.Color          = Color.Black;
                    if (concepto.Abstracto)
                    {
                        docBuilder.Bold       = true;
                        docBuilder.Font.Color = Color.White;
                        docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    }
                    else
                    {
                        docBuilder.Bold = false;
                    }
                    docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores < 0 ? concepto.Tabuladores : 0);
                    docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                    if (concepto.AtributosAdicionales != null)
                    {
                        if (concepto.AtributosAdicionales.Count == 1)
                        {
                            conceptosEnIndice(docBuilder, concepto);
                        }
                        else
                        {
                            docBuilder.Write(concepto.Valor);
                        }
                    }
                    else
                    {
                        docBuilder.Write(concepto.Valor);
                    }

                    if (concepto.Abstracto)
                    {
                        for (int iCell = 0; iCell < primerConcepto.Hechos.Count(); iCell++)
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                        }
                    }
                    else
                    {
                        foreach (var periodo in concepto.Hechos.Keys)
                        {
                            if (!periodosPermitidos.ContainsKey(periodo))
                            {
                                continue;
                            }
                            HechoReporteDTO hecho = concepto.Hechos[periodo];
                            if ((hecho != null && !String.IsNullOrWhiteSpace(hecho.Valor)))
                            {
                                docBuilder.InsertCell();
                                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);

                                docBuilder.ParagraphFormat.LeftIndent = 0;
                                if (concepto.Numerico)
                                {
                                    docBuilder.CellFormat.WrapText       = true;
                                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                                }
                                else
                                {
                                    docBuilder.CellFormat.WrapText       = false;
                                    docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                                }
                                escribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                            }
                        }
                        docBuilder.RowFormat.AllowBreakAcrossPages = true;
                        docBuilder.RowFormat.HeadingFormat         = false;
                        docBuilder.EndRow();
                    }
                }
            }
            establecerBordesGrisesTabla(tablaActual);
            docBuilder.EndTable();
        }
        protected override void escribirConceptoEnTablaNota(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, HechoReporteDTO hecho, ConceptoReporteDTO conceptoActual, bool forzarHtml = false)
        {
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size  = TamanioLetraTituloConceptoNota;
            docBuilder.Font.Color = Color.Black;
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;

            if (conceptoActual.AtributosAdicionales != null && conceptoActual.AtributosAdicionales.Count == 1)
            {
                conceptosEnIndice(docBuilder, conceptoActual);
            }
            else
            {
                docBuilder.Write(conceptoActual != null ? conceptoActual.Valor + ":" : "");
            }

            Table tablaActual = docBuilder.StartTable();

            docBuilder.InsertCell();
            docBuilder.Font.Size    = 1;
            docBuilder.Font.Spacing = 1;
            tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            docBuilder.CellFormat.Borders.Top.Color     = Color.DarkGray;
            docBuilder.CellFormat.Borders.Top.LineStyle = LineStyle.Single;
            docBuilder.CellFormat.Borders.Top.LineWidth = 2;
            docBuilder.EndRow();
            docBuilder.EndTable();

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Color = Color.Black;
            docBuilder.InsertParagraph();
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
            escribirValorHecho(docBuilder, estructuraReporte, hecho, conceptoActual);

            tablaActual = docBuilder.StartTable();
            docBuilder.InsertCell();
            docBuilder.Font.Size    = 1;
            docBuilder.Font.Spacing = 1;
            tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            docBuilder.CellFormat.Borders.Bottom.Color     = Color.DarkGray;
            docBuilder.CellFormat.Borders.Bottom.LineStyle = LineStyle.Single;
            docBuilder.CellFormat.Borders.Bottom.LineWidth = 2;
            docBuilder.EndRow();
            docBuilder.EndTable();

            docBuilder.Writeln();
            docBuilder.Writeln();
        }
        /// <summary>
        /// Escribe el contenido de un hecho de tipo textbloc marcando los estilos del título en color negro.
        /// También lo marca compo titulo 2 para que se muestre en la tabla de contenido.
        /// </summary>
        /// <param name="docBuilder">Constructor del documento..</param>
        /// <param name="estructuraReporte">Información general de la distribución de elementos en el reporte.</param>
        /// <param name="hecho">Hecho de tipo nota de texot que se pretende imprimir.</param>
        /// <param name="conceptoActual">Identificador del concepto de tipo bloque de texot.</param>
        public override void EscribirTipoNotaTexto(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, HechoReporteDTO hecho, ConceptoReporteDTO conceptoActual)
        {
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size  = TamanioLetraTituloConceptoNota;
            docBuilder.Font.Color = Color.Black;
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
            docBuilder.ParagraphFormat.Borders.Bottom.LineStyle = LineStyle.Single;
            docBuilder.ParagraphFormat.Borders.Bottom.Color     = Color.DarkGray;
            docBuilder.ParagraphFormat.Borders.Bottom.LineWidth = 2;
            if (conceptoActual.AtributosAdicionales != null)
            {
                if (conceptoActual.AtributosAdicionales.Count == 1)
                {
                    conceptosEnIndice(docBuilder, conceptoActual);
                }
                else
                {
                    //AplicaEstilosEtiquetaConcepto(docBuilder, conceptoActual.IdConcepto, estructuraReporte);
                    docBuilder.Write(conceptoActual.Valor);
                }
            }
            else
            {
                //AplicaEstilosEtiquetaConcepto(docBuilder, conceptoActual.IdConcepto, estructuraReporte);
                docBuilder.Write(conceptoActual.Valor);
            }
            //Table tablaActual = docBuilder.StartTable();
            //docBuilder.InsertCell();
            //docBuilder.Font.Size = 1;
            //docBuilder.Font.Spacing = 1;
            //tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            //docBuilder.CellFormat.Borders.Top.Color = Color.DarkGray;
            //docBuilder.CellFormat.Borders.Top.LineStyle = LineStyle.Single;
            //docBuilder.CellFormat.Borders.Top.LineWidth = 2;
            //docBuilder.EndRow();
            //docBuilder.EndTable();

            docBuilder.ParagraphFormat.Borders.LineStyle = LineStyle.None;

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Color = Color.Black;
            docBuilder.InsertParagraph();
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
            //AplicaEstilosValorConcepto(docBuilder, conceptoActual.IdConcepto, estructuraReporte);
            escribirValorHecho(docBuilder, estructuraReporte, hecho, conceptoActual);

            docBuilder.Writeln();
            docBuilder.ParagraphFormat.Borders.Top.LineStyle = LineStyle.Single;
            docBuilder.ParagraphFormat.Borders.Top.Color     = Color.DarkGray;
            docBuilder.ParagraphFormat.Borders.Top.LineWidth = 2;
            docBuilder.Writeln();
            docBuilder.ParagraphFormat.Borders.LineStyle = LineStyle.None;
            //tablaActual = docBuilder.StartTable();
            //docBuilder.InsertCell();
            //docBuilder.Font.Size = 1;
            //docBuilder.Font.Spacing = 1;
            //tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            //docBuilder.CellFormat.Borders.Bottom.Color = Color.DarkGray;
            //docBuilder.CellFormat.Borders.Bottom.LineStyle = LineStyle.Single;
            //docBuilder.CellFormat.Borders.Bottom.LineWidth = 2;
            //docBuilder.EndRow();
            //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();
        }
        /// <summary>
        /// Imprime el valor de un hecho a dos columnas.
        /// </summary>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="estructuraReporte">DTO con información general del reporte actual</param>
        /// <param name="concepto">Concepto que se presenta.</param>
        /// <param name="hecho">Hecho que se persenta.</param>
        public override void EscribirADosColumnasConceptoValor(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, ConceptoReporteDTO concepto, HechoReporteDTO hecho)
        {
            Table tablaActual = docBuilder.StartTable();

            docBuilder.ParagraphFormat.SpaceAfter  = 5;
            docBuilder.ParagraphFormat.SpaceBefore = 5;

            docBuilder.InsertCell();
            if (AnchoMinimoTitulodosColumnas != null && AnchoMinimoTitulodosColumnas > 0)
            {
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPercent(AnchoMinimoTitulodosColumnas ?? 50);
            }

            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size  = 11;
            docBuilder.Font.Color = Color.Black;
            //AplicaEstilosEtiquetaConcepto(docBuilder, concepto.IdConcepto, estructuraReporte);
            docBuilder.Write(concepto.Valor);
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
            docBuilder.Write(": ");

            docBuilder.InsertCell();
            int porcentajeSegundaColumna = 50;

            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPercent(porcentajeSegundaColumna);
            establecerFuenteValorCampo(docBuilder);
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
            docBuilder.Font.Size = 10;
            //AplicaEstilosValorConcepto(docBuilder, concepto.IdConcepto, estructuraReporte);
            escribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
            docBuilder.EndRow();

            tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            tablaActual.SetBorder(BorderType.Horizontal, LineStyle.Single, .75, Color.DarkGray, true);
            tablaActual.SetBorder(BorderType.Bottom, LineStyle.Single, .75, Color.DarkGray, true);

            docBuilder.EndTable();
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
        }
        override public void exportarRolAWord(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte)
        {
            var colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);

            docBuilder.CurrentSection.PageSetup.Orientation = Orientation.Landscape;
            if (UsarHojaOficio)
            {
                docBuilder.CurrentSection.PageSetup.PaperSize = PaperSize.Legal;
            }
            else
            {
                docBuilder.CurrentSection.PageSetup.PaperSize = PaperSize.Letter;
            }
            escribirEncabezado(docBuilder, instancia, estructuraReporte, true);
            var etiquetaHoja = estructuraReporte.ObtenValorEtiquetaReporte("ETIQUETA_HOJA");
            var etiquetaDe   = estructuraReporte.ObtenValorEtiquetaReporte("ETIQUETA_DE");

            imprimirTituloRol(docBuilder, rolAExportar);
            //var pageCount = docBuilder.Document.PageCount;

            Table tablaActual = docBuilder.StartTable();
            ConceptoReporteDTO primerConcepto = null;

            foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
            {
                if (!concepto.Abstracto)
                {
                    primerConcepto = concepto;
                    break;
                }
            }
            int             iCol     = 0;
            HechoReporteDTO hecho    = null;
            List <String>   columnas = new List <String>();

            foreach (String periodoItera in primerConcepto.Hechos.Keys)
            {
                columnas.Add(periodoItera);
            }
            String periodo = null;
            int    hoja    = 1;
            int    hojas   = (int)Math.Ceiling((double)columnas.Count() / (double)ColumnasPorHoja);

            while (iCol < columnas.Count())
            {
                int iColFinalInicio   = iCol;
                int iColSeccionActual = iCol;
                //Fila encabezado
                docBuilder.ParagraphFormat.SpaceAfter  = 0;
                docBuilder.ParagraphFormat.SpaceBefore = 2;
                establecerFuenteTituloCampo(docBuilder);
                docBuilder.Font.Size = TamanioLetraTituloTabla;

                docBuilder.InsertCell();
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaTitulos);

                docBuilder.CellFormat.HorizontalMerge = CellMerge.None;

                docBuilder.InsertCell();
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                docBuilder.CellFormat.HorizontalMerge = CellMerge.First;
                docBuilder.Font.Color = Color.White;
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                docBuilder.Write((String)estructuraReporte.ParametrosReporte["ifrs-full_ComponentsOfEquityAxis_HEADER"]);

                for (; iColSeccionActual + 1 < iColFinalInicio + ColumnasPorHoja && iColSeccionActual + 1 < columnas.Count(); iColSeccionActual++)
                {
                    docBuilder.InsertCell();
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.Previous;
                }
                docBuilder.EndRow();

                docBuilder.InsertCell();
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaTitulos);
                docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
                docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Center;
                docBuilder.Font.Color = Color.White;
                docBuilder.Font.Bold  = true;
                if (hojas > 1)
                {
                    docBuilder.Write(etiquetaHoja + " " + hoja + " " + etiquetaDe + " " + hojas);
                }


                iColSeccionActual = iCol;
                for (; iColSeccionActual < iColFinalInicio + ColumnasPorHoja && iColSeccionActual < columnas.Count(); iColSeccionActual++)
                {
                    periodo = columnas[iColSeccionActual];
                    docBuilder.InsertCell();
                    docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Center;
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
                    docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    docBuilder.CellFormat.WrapText        = true;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    String descPeriodo = (String)estructuraReporte.ParametrosReporte[periodo + "_HEADER"];
                    docBuilder.Writeln(descPeriodo);
                    iCol++;
                }
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                docBuilder.EndRow();
                foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
                {
                    if (concepto.Abstracto && !ConceptosAbstractosPermitidos.Contains(concepto.IdConcepto))
                    {
                        continue;
                    }
                    //LogUtil.Info("Exportador == > Concepto:[" + concepto.IdConcepto + "],\t\t\tAbstracto:[" + concepto.Abstracto + "],\t\thechos:[" + concepto.Hechos.Count() + "]");
                    iColSeccionActual = iColFinalInicio;

                    docBuilder.InsertCell();
                    docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
                    if (hojas > 1)
                    {
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaTitulos);
                    }
                    else
                    {
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                    }

                    docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                    docBuilder.Font.Color = Color.Black;
                    if (concepto.Abstracto)
                    {
                        docBuilder.Bold       = true;
                        docBuilder.Font.Color = Color.White;
                        docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    }
                    else
                    {
                        docBuilder.Bold = false;
                    }
                    docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores != null?concepto.Tabuladores:0);              ///3);
                    docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                    docBuilder.Write(concepto.Valor);

                    for (; iColSeccionActual < (iColFinalInicio + ColumnasPorHoja) && iColSeccionActual < columnas.Count(); iColSeccionActual++)
                    {
                        docBuilder.InsertCell();
                        docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                        docBuilder.ParagraphFormat.LeftIndent = 0;
                        docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Right;
                        docBuilder.CellFormat.HorizontalMerge = CellMerge.None;

                        if (concepto.Abstracto)
                        {
                            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                        }
                        else
                        {
                            //LogUtil.Info("ExportadorEntro == > Concepto:[" + concepto.IdConcepto + "],\t\t\tSeccionActual:[" + columnas[iColSeccionActual] + "],\t\thecho:[" + hecho == null ? "sinHecho" : hecho.ValorFormateado ?? "null" + "]");
                            docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                            docBuilder.Font.Color = Color.Black;
                            if (concepto.Hechos.ContainsKey(columnas[iColSeccionActual]))
                            {
                                hecho = concepto.Hechos[columnas[iColSeccionActual]];
                            }
                            else
                            {
                                hecho = null;
                            }

                            if (hecho != null && hecho.ValorFormateado != null)
                            {
                                escribirLinkNotaAlPie(docBuilder, hecho, estructuraReporte);
                                docBuilder.Write(hecho.ValorFormateado);
                            }
                        }
                    }



                    if (hojas > 1)
                    {
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                    }

                    docBuilder.EndRow();
                }
                if (iCol >= columnas.Count())
                {
                    break;
                }
                tablaActual.SetBorders(LineStyle.Single, 1, ReportConstants.DEFAULT_BORDER_GREY_COLOR);
                docBuilder.EndTable();
                if (estructuraReporte.Roles[rolAExportar.Rol].Count < 25)
                {
                    docBuilder.InsertBreak(BreakType.PageBreak);
                }

                /*if (pageCount == docBuilder.Document.PageCount)
                 * {
                 *  docBuilder.InsertBreak(BreakType.PageBreak);
                 * }
                 * pageCount = docBuilder.Document.PageCount;
                 */
                tablaActual = docBuilder.StartTable();
                hoja++;
            }
            tablaActual.SetBorders(LineStyle.Single, 1, ReportConstants.DEFAULT_BORDER_GREY_COLOR);
            docBuilder.EndTable();
        }
        /// <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();
            }
        }
예제 #26
0
        protected override void escribirConceptoEnTablaNota(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, HechoReporteDTO hecho, ConceptoReporteDTO conceptoActual, bool forzarHtml = false)
        {
            // condicion para obtener el formato de los tres primeros conceptos
            string text_block = ObtenertipoDato(conceptoActual, TIPO_DATO_TEXT_BLOCK);


            string cadena = ObtenertipoDato(conceptoActual, TIPO_DATO_STRING);

            if (conceptoActual.TipoDato == cadena || conceptoActual.TipoDato == text_block)
            {
                establecerFuenteTituloCampo(docBuilder);
                docBuilder.Font.Size  = TamanioLetraTituloConceptoNota;
                docBuilder.Font.Color = Color.Black;
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                if (conceptoActual.AtributosAdicionales != null && conceptoActual.AtributosAdicionales.Count == 1)
                {
                    conceptosEnIndice(docBuilder, conceptoActual);
                }
                else
                {
                    docBuilder.Write(conceptoActual != null ? conceptoActual.Valor + ":" : "");
                }
                Table tablaActual2 = docBuilder.StartTable();
                docBuilder.InsertCell();
                docBuilder.Font.Size    = 1;
                docBuilder.Font.Spacing = 1;
                tablaActual2.SetBorders(LineStyle.None, 0, Color.Black);
                docBuilder.CellFormat.Borders.Top.Color     = Color.DarkGray;
                docBuilder.CellFormat.Borders.Top.LineStyle = LineStyle.Single;
                docBuilder.CellFormat.Borders.Top.LineWidth = 2;
                docBuilder.EndRow();
                docBuilder.EndTable();

                establecerFuenteValorCampo(docBuilder);
                docBuilder.Font.Color = Color.Black;
                //  docBuilder.InsertParagraph();
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                escribirValorHecho(docBuilder, estructuraReporte, hecho, conceptoActual);

                tablaActual2 = docBuilder.StartTable();
                docBuilder.InsertCell();
                docBuilder.Font.Size    = 1;
                docBuilder.Font.Spacing = 1;
                tablaActual2.SetBorders(LineStyle.None, 0, Color.Black);
                docBuilder.CellFormat.Borders.Bottom.Color     = Color.DarkGray;
                docBuilder.CellFormat.Borders.Bottom.LineStyle = LineStyle.Single;
                docBuilder.CellFormat.Borders.Bottom.LineWidth = 2;

                docBuilder.EndRow();
                docBuilder.EndTable();
                docBuilder.Writeln();
            }
            docBuilder.MoveToDocumentEnd();
        }
        protected void escribirConceptoEnTablaNotaPeriodo(DocumentBuilder docBuilder, HechoReporteDTO hecho, ConceptoReporteDTO conceptoActual, ReporteXBRLDTO estructuraReporte, String periodo)
        {
            docBuilder.Writeln();
            Table tablaActual = docBuilder.StartTable();

            String descPeriodo = estructuraReporte.PeriodosReporte[periodo];

            docBuilder.InsertCell();
            tablaActual.SetBorders(LineStyle.None, 0, Color.Black);
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size  = TamanioLetraTituloConceptoNota;
            docBuilder.Font.Color = Color.Gray;
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
            docBuilder.Writeln(conceptoActual != null ? conceptoActual.Valor : String.Empty);
            docBuilder.Writeln(estructuraReporte.Titulos[periodo]);
            docBuilder.Write(descPeriodo.Replace("_", " - "));
            docBuilder.RowFormat.HeadingFormat = true;

            docBuilder.EndRow();
            docBuilder.InsertCell();
            docBuilder.Font.Color = Color.Black;
            tablaActual.SetBorders(LineStyle.None, 0, Color.Black);

            establecerBordesNota(docBuilder);

            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
            establecerFuenteValorCampo(docBuilder);
            escribirValorHecho(docBuilder, estructuraReporte, hecho, conceptoActual);
            docBuilder.RowFormat.HeadingFormat = false;
            docBuilder.EndRow();
            docBuilder.EndTable();
            docBuilder.InsertParagraph();
        }
예제 #28
0
        private void PintaTabla(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte, IList <ConceptoReporteDTO> listaConseptosReporte)
        {
            docBuilder.Writeln();
            Table tablaActual = docBuilder.StartTable();
            Color colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);

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

            ConceptoReporteDTO primerConcepto = null;

            if (!estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
            {
                throw new IndexOutOfRangeException("No existe el rol [" + rolAExportar.Rol + "] dentro del listado de roles del reporte.");
            }
            if (estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
            {
                foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
                {
                    if (!concepto.Abstracto)
                    {
                        primerConcepto = concepto;
                        break;
                    }
                }
            }
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraTituloTabla;
            docBuilder.InsertCell();

            //tablaActual.StyleIdentifier = StyleIdentifier.LIGHT_GRID_ACCENT_1;
            //tablaActual.StyleOptions = TableStyleOptions.FIRST_ROW;

            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
            docBuilder.Font.Color = Color.White;
            docBuilder.Write(estructuraReporte.ObtenValorEtiquetaReporte("ETIQUETA_CONCEPTO"));

            foreach (String periodo in primerConcepto.Hechos.Keys)
            {
                docBuilder.InsertCell();
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                //docBuilder.CellFormat.Width = 35;
                docBuilder.CellFormat.WrapText = false;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                String descPeriodo = estructuraReporte.PeriodosReporte[periodo];
                docBuilder.Writeln(estructuraReporte.Titulos[periodo]);
                docBuilder.Write(descPeriodo.Replace("_", " - "));
            }
            docBuilder.RowFormat.HeadingFormat = true;
            docBuilder.EndRow();

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraContenidoTabla;


            foreach (ConceptoReporteDTO concepto in listaConseptosReporte)
            {
                //  string valor = ObtenertipoDato(concepto, TIPO_DATO_MONETARY);
                //string tipoNoNegativo = ObtenertipoDato(concepto, TIPO_DATO_NoNEGATIVO);
                if (concepto.IdConcepto != ID_Importe && concepto.IdConcepto != ID_IVA && concepto.IdConcepto != ID_Total)

                {
                    docBuilder.InsertCell();
                    docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                    docBuilder.CellFormat.WrapText = true;
                    docBuilder.Font.Color          = Color.Black;
                    if (concepto.Abstracto)
                    {
                        docBuilder.Bold       = true;
                        docBuilder.Font.Color = Color.White;
                        docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                    }
                    else
                    {
                        docBuilder.Bold = false;
                    }
                    docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores < 0 ? concepto.Tabuladores : 0);
                    docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                    if (concepto.AtributosAdicionales != null)
                    {
                        if (concepto.AtributosAdicionales.Count == 1)
                        {
                            conceptosEnIndice(docBuilder, concepto);
                        }
                        else
                        {
                            docBuilder.Write(concepto.Valor);
                        }
                    }
                    else
                    {
                        docBuilder.Write(concepto.Valor);
                    }
                    if (concepto.Abstracto)
                    {
                        for (int iCell = 0; iCell < primerConcepto.Hechos.Count(); iCell++)
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                        }
                    }
                    else
                    {
                        foreach (HechoReporteDTO hecho in concepto.Hechos.Values)
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);

                            docBuilder.ParagraphFormat.LeftIndent = 0;
                            if (concepto.Numerico)
                            {
                                docBuilder.CellFormat.WrapText       = true;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                            }
                            else
                            {
                                docBuilder.CellFormat.WrapText       = false;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                            }
                            escribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                        }
                    }
                    docBuilder.RowFormat.AllowBreakAcrossPages = true;
                    docBuilder.RowFormat.HeadingFormat         = false;
                    docBuilder.EndRow();
                }
            }
            establecerBordesGrisesTabla(tablaActual);
            docBuilder.EndTable();
            docBuilder.Writeln();
        }
예제 #29
0
        ///
        /// (non-Javadoc)
        /// @see com.bmv.spread.xbrl.reportes.exportador.ExportadorRolDocumentoInstancia#exportarRolAWord(com.aspose.words.DocumentBuilder, com.hh.xbrl.abax.viewer.application.dto.DocumentoInstanciaXbrlDto, com.bmv.spread.xbrl.reportes.dto.IndiceReporteDTO, com.bmv.spread.xbrl.reportes.dto.ReporteXBRLDTO)
        ////
        override public void exportarRolAWord(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, IndiceReporteDTO rolAExportar, ReporteXBRLDTO estructuraReporte)
        {
            docBuilder.CurrentSection.PageSetup.Orientation = Orientation.Portrait;
            docBuilder.CurrentSection.PageSetup.PaperSize   = PaperSize.Letter;
            Color colorTitulo = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);

            docBuilder.CurrentSection.PageSetup.LeftMargin  = 40;
            docBuilder.CurrentSection.PageSetup.RightMargin = 40;

            escribirEncabezado(docBuilder, instancia, estructuraReporte, true);

            imprimirTituloRol(docBuilder, rolAExportar);

            Table tablaActual = docBuilder.StartTable();

            //docBuilder.ParagraphFormat.LineSpacing = 1.5;
            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;

            ConceptoReporteDTO primerConcepto = null;

            if (!estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
            {
                throw new IndexOutOfRangeException("No existe el rol [" + rolAExportar.Rol + "] dentro del listado de roles del reporte.");
            }
            if (estructuraReporte.Roles.ContainsKey(rolAExportar.Rol))
            {
                foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
                {
                    if (!concepto.Abstracto)
                    {
                        primerConcepto = concepto;
                        break;
                    }
                }
            }
            if (primerConcepto == null)
            {
                LogUtil.Error("No existen conceptos configurados para el rol: " + rolAExportar.Rol);
                throw new IndexOutOfRangeException("No existen conceptos configurados para el rol: " + rolAExportar.Rol);
            }
            establecerFuenteTituloCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraTituloTabla;
            docBuilder.InsertCell();

            //tablaActual.StyleIdentifier = StyleIdentifier.LIGHT_GRID_ACCENT_1;
            //tablaActual.StyleOptions = TableStyleOptions.FIRST_ROW;

            docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
            docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
            docBuilder.Font.Color = Color.White;
            docBuilder.Write(estructuraReporte.ObtenValorEtiquetaReporte("ETIQUETA_CONCEPTO"));
            foreach (String periodo  in  primerConcepto.Hechos.Keys)
            {
                docBuilder.InsertCell();
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                //docBuilder.CellFormat.Width = 35;
                docBuilder.CellFormat.WrapText = false;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                String descPeriodo = String.Empty;
                if (estructuraReporte.PeriodosReporte.ContainsKey(periodo))
                {
                    descPeriodo = estructuraReporte.PeriodosReporte[periodo];
                }
                else if (estructuraReporte.ParametrosReporte.ContainsKey(periodo + "_HEADER"))
                {
                    descPeriodo = (string)estructuraReporte.ParametrosReporte[(periodo + "_HEADER")];
                }
                if (estructuraReporte.Titulos.ContainsKey(periodo))
                {
                    docBuilder.Writeln(estructuraReporte.Titulos[periodo]);
                }
                docBuilder.Write(descPeriodo.Replace("_", " - "));
            }
            docBuilder.RowFormat.HeadingFormat = true;
            docBuilder.EndRow();

            establecerFuenteValorCampo(docBuilder);
            docBuilder.Font.Size = TamanioLetraContenidoTabla;
            foreach (ConceptoReporteDTO concepto in estructuraReporte.Roles[rolAExportar.Rol])
            {
                var conceptoNota = concepto.TipoDato.Contains("textBlockItemType");
                docBuilder.InsertCell();
                docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
                docBuilder.CellFormat.PreferredWidth  = PreferredWidth.Auto;
                docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                docBuilder.CellFormat.WrapText = true;
                docBuilder.Font.Color          = Color.Black;
                if (concepto.Abstracto)
                {
                    docBuilder.Bold       = true;
                    docBuilder.Font.Color = Color.White;
                    docBuilder.CellFormat.Shading.BackgroundPatternColor = colorTitulo;
                }
                else
                {
                    docBuilder.Bold = false;
                }
                docBuilder.ParagraphFormat.LeftIndent = (concepto.Tabuladores != null ? concepto.Tabuladores : 0);          ///3);
                docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                docBuilder.Write(concepto.Valor);



                if (concepto.Abstracto)
                {
                    for (int iCell = 0; iCell < primerConcepto.Hechos.Count(); iCell++)
                    {
                        docBuilder.InsertCell();
                        docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
                        docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                    }
                }
                else
                {
                    if (conceptoNota)
                    {
                        //Extender el título
                        HechoReporteDTO ultimoHecho = null;
                        docBuilder.CellFormat.HorizontalMerge = CellMerge.First;
                        foreach (HechoReporteDTO hecho in concepto.Hechos.Values)
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                            docBuilder.CellFormat.HorizontalMerge = CellMerge.Previous;
                            ultimoHecho = hecho;
                        }
                        docBuilder.RowFormat.AllowBreakAcrossPages = true;
                        docBuilder.RowFormat.HeadingFormat         = false;
                        docBuilder.EndRow();

                        docBuilder.InsertCell();
                        docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
                        docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
                        docBuilder.CellFormat.WrapText = true;
                        docBuilder.Font.Color          = Color.Black;
                        docBuilder.CellFormat.WrapText = false;
                        escribirValorHecho(docBuilder, estructuraReporte, ultimoHecho, concepto);

                        docBuilder.ParagraphFormat.Alignment  = ParagraphAlignment.Left;
                        docBuilder.CellFormat.HorizontalMerge = CellMerge.First;

                        foreach (HechoReporteDTO hecho in concepto.Hechos.Values)
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
                            docBuilder.ParagraphFormat.LeftIndent = 0;
                            docBuilder.CellFormat.HorizontalMerge = CellMerge.Previous;
                        }
                    }
                    else
                    {
                        foreach (HechoReporteDTO hecho in concepto.Hechos.Values)
                        {
                            docBuilder.InsertCell();
                            docBuilder.CellFormat.HorizontalMerge = CellMerge.None;
                            docBuilder.CellFormat.PreferredWidth  = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);

                            docBuilder.ParagraphFormat.LeftIndent = 0;
                            if (concepto.Numerico)
                            {
                                docBuilder.CellFormat.WrapText       = true;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
                            }
                            else
                            {
                                docBuilder.CellFormat.WrapText       = false;
                                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                            }
                            escribirValorHecho(docBuilder, estructuraReporte, hecho, concepto);
                        }
                    }
                }
                docBuilder.RowFormat.AllowBreakAcrossPages = true;
                docBuilder.RowFormat.HeadingFormat         = false;
                docBuilder.EndRow();
            }
            establecerBordesGrisesTabla(tablaActual);
            docBuilder.EndTable();
        }