/// <summary>
        /// Depura el hipercubo en base a los filtros de la proyección.
        /// </summary>
        /// <param name="hipercuboReporteDto">Hipercubo a evaluar</param>
        /// <returns>Hipercubo ajustado.</returns>
        private HipercuboReporteDTO EvaluaProyeccion(HipercuboReporteDTO hipercuboReporteDto)
        {
            ConfiguracionProyeccionHipercubo configuracionProyeccion = null;
            HipercuboReporteDTO hipercuboAjustado = hipercuboReporteDto;

            if (!String.IsNullOrEmpty(Proyeccion) && hipercuboReporteDto.Utileria.configuracion.Proyecciones != null)
            {
                if (hipercuboReporteDto.Utileria.configuracion.Proyecciones.TryGetValue(Proyeccion, out configuracionProyeccion))
                {
                    hipercuboAjustado = ClonaHechosHipercubo(hipercuboReporteDto);
                    var indicesDescartar = new List <int>();
                    if (configuracionProyeccion.FiltrosContextoPorValorConcepto != null)
                    {
                        if (hipercuboAjustado.Hechos != null)
                        {
                            foreach (var idConceptoProyeccion in configuracionProyeccion.FiltrosContextoPorValorConcepto.Keys)
                            {
                                var valorHechoPoryeccion = configuracionProyeccion.FiltrosContextoPorValorConcepto[idConceptoProyeccion];
                                IDictionary <string, HechoDto[]> diccionarioHechosPorPlantillaContexto;
                                if (hipercuboAjustado.Hechos.TryGetValue(idConceptoProyeccion, out diccionarioHechosPorPlantillaContexto))
                                {
                                    foreach (var idPlantilla in diccionarioHechosPorPlantillaContexto.Keys)
                                    {
                                        var arregloHechos = diccionarioHechosPorPlantillaContexto[idPlantilla];
                                        for (var indexHecho = 0; indexHecho < arregloHechos.Length; indexHecho++)
                                        {
                                            var hecho = arregloHechos[indexHecho];
                                            if (hecho != null && !String.IsNullOrEmpty(hecho.Valor) && !hecho.Valor.Equals(valorHechoPoryeccion))
                                            {
                                                indicesDescartar.Add(indexHecho);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    foreach (var idConcepto in hipercuboAjustado.Hechos.Keys)
                    {
                        var hechosPorContexto = hipercuboAjustado.Hechos[idConcepto];
                        foreach (var idContexto in hechosPorContexto.Keys)
                        {
                            var arregloHechos = hechosPorContexto[idContexto];
                            foreach (var indiceDescartar in indicesDescartar)
                            {
                                if (indiceDescartar < arregloHechos.Length)
                                {
                                    arregloHechos[indiceDescartar] = null;
                                }
                            }
                        }
                    }
                }
            }
            return(hipercuboAjustado);
        }
        /// <summary>
        /// Pinta la sección de calificaciones en la tabla correspondiente.
        /// </summary>
        /// <param name="docBuilder">Puntero de </param>
        /// <param name="instancia"></param>
        /// <param name="estructuraReporte"></param>
        private void PintaCalificacionesEnTabla(
            DocumentBuilder docBuilder,
            DocumentoInstanciaXbrlDto instancia,
            ReporteXBRLDTO estructuraReporte,
            HipercuboReporteDTO hipercuboSerie,
            ExportadorRolDocumentoBase exportadorOrigen)
        {
            var hipercubo = estructuraReporte.Hipercubos["ar_pros_SecuritiesRatingTable"];

            hipercubo = FiltrarHipercuboCalificaciones(hipercubo, hipercuboSerie);

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

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

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

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

                foreach (var idConcepto in diccionarioConceptos.Keys)
                {
                    docBuilder.InsertCell();
                    var nombreConcepto = "    " + DesgloseDeCreditosHelper.obtenerEtiquetaDeConcepto(instancia.Taxonomia, idConcepto, "es", ReporteXBRLUtil.ETIQUETA_DEFAULT);
                    docBuilder.Write(nombreConcepto);
                    var listaHechos = diccionarioConceptos[idConcepto];
                    for (var indexHecho = 0; indexHecho < listaHechos.Count; indexHecho++)
                    {
                        var hecho = listaHechos[indexHecho];
                        docBuilder.InsertCell();
                        if (hecho != null && !String.IsNullOrWhiteSpace(hecho.Valor))
                        {
                            exportadorOrigen.EscribirValorHecho(docBuilder, estructuraReporte, hecho, instancia.Taxonomia.ConceptosPorId[hecho.IdConcepto]);
                        }
                    }
                    docBuilder.EndRow();
                }
            }
        }
        public override void crearHipercubos(DocumentoInstanciaXbrlDto instancia)
        {
            reporteXBRLDTO.Hipercubos = new Dictionary<String, HipercuboReporteDTO>();

            foreach (var definitionRolUri in instancia.Taxonomia.ListaHipercubos.Keys)
            {
                var listaHipercubos = instancia.Taxonomia.ListaHipercubos[definitionRolUri];
                for (var indexHipercubo = 0; indexHipercubo < listaHipercubos.Count; indexHipercubo++)
                {
                    var hipercubo = listaHipercubos[indexHipercubo];

                    var path = ReporteXBRLUtil.AR_PROS_PATH_HIPERCUBOS_JSON.
                        Replace(ReporteXBRLUtil.CLAVE_TAXONOMIA, reporteXBRLDTO.Taxonomia).
                        Replace(ReporteXBRLUtil.CLAVE_RA_PROS, reporteXBRLDTO.PrefijoRaProspecto).
                        Replace(ReporteXBRLUtil.CONCEPTO_HIPERCUBO, hipercubo.IdConceptoHipercubo);

                    var names = Assembly.GetExecutingAssembly().GetManifestResourceNames();
                    if (names.Contains(path))
                    {
                        plantilla.DeterminarParametrosConfiguracion(instancia);
                        plantilla.GenerarVariablesDocumentoInstancia();
                        var hipercuboUtil = new EvaluadorHipercuboUtil(path, instancia, plantilla);
                        if (hipercuboUtil.configuracion.DimensionesDinamicas.Count == 0)
                        {
                            LogUtil.Info("No existen dimensiones dinamicas en la configuración de hipercubo: " + path);
                            continue;
                        }
                        var aliasDimensionEje = hipercuboUtil.configuracion.DimensionesDinamicas[0];
                        var miembrosEje = hipercuboUtil.ObtenMiembrosDimension(aliasDimensionEje);
                        miembrosEje = miembrosEje.OrderBy(o => o.ElementoMiembroTipificado).ToList();

                        var titulos = hipercuboUtil.ObtenTitulosMiembrosDimension(aliasDimensionEje, miembrosEje);
                        var hechos = hipercuboUtil.ObtenMatrizHechos(miembrosEje);

                        if (titulos != null && hechos != null)
                        {
                            var hipercuboDto = new HipercuboReporteDTO();
                            hipercuboDto.Titulos = titulos;
                            hipercuboDto.Hechos = hechos;
                            hipercuboDto.Utileria = hipercuboUtil;
                            try
                            {
                                reporteXBRLDTO.Hipercubos[hipercubo.IdConceptoHipercubo] = hipercuboDto;
                            }
                            catch (Exception e)
                            {
                                throw e;
                            }
                            
                        }
                    }
                }                
            }
        }
        /// <summary>
        /// Recorta el hipercubo de calificaciones de acuerdo al cubo de serie enviado
        /// </summary>
        /// <param name="hipercubo"></param>
        /// <param name="hipercuboSerie"></param>
        /// <returns></returns>
        private HipercuboReporteDTO FiltrarHipercuboCalificaciones(HipercuboReporteDTO hipercubo, HipercuboReporteDTO hipercuboSerie)
        {
            HipercuboReporteDTO nuevoCubo = new HipercuboReporteDTO();

            nuevoCubo.Utileria = hipercubo.Utileria;

            nuevoCubo.Hechos  = new Dictionary <string, IDictionary <string, HechoDto[]> >();
            nuevoCubo.Titulos = new List <String>();


            for (var iCol = 0; iCol < hipercuboSerie.Titulos.Count; iCol++)
            {
                var tituloActual = hipercuboSerie.Titulos[iCol];

                nuevoCubo.Titulos.Add(tituloActual);
                foreach (var hechoKey in hipercubo.Hechos.Keys)
                {
                    if (!nuevoCubo.Hechos.ContainsKey(hechoKey))
                    {
                        nuevoCubo.Hechos[hechoKey] = new Dictionary <string, HechoDto[]>();
                    }

                    foreach (var subHechoKey in hipercubo.Hechos[hechoKey].Keys)
                    {
                        if (!nuevoCubo.Hechos[hechoKey].ContainsKey(subHechoKey))
                        {
                            nuevoCubo.Hechos[hechoKey][subHechoKey] = new HechoDto[hipercuboSerie.Titulos.Count];
                        }
                        try
                        {
                            if (hipercubo.Hechos[hechoKey][subHechoKey].Count() > hipercubo.Titulos.IndexOf(tituloActual))
                            {
                                nuevoCubo.Hechos[hechoKey][subHechoKey][iCol] = hipercubo.Hechos[hechoKey][subHechoKey][hipercubo.Titulos.IndexOf(tituloActual)];
                            }
                            else
                            {
                                nuevoCubo.Hechos[hechoKey][subHechoKey][iCol] = new HechoDto();
                            }
                        }
                        catch (Exception ex)
                        {
                            System.Console.WriteLine(ex.StackTrace);
                        }
                    }
                }
            }
            return(nuevoCubo);
        }
예제 #5
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);
                }
            }
        }
        /// <summary>
        /// Determina si el hipercubo tiene información que presentar.
        /// </summary>
        /// <param name="hipercuboReporteDto">Hiprecubo a evaluar.</param>
        /// <returns>Si contiene información que presentar.</returns>
        private bool ContieneInformacion(HipercuboReporteDTO hipercuboReporteDto)
        {
            var contieneInformacion = false;

            if (hipercuboReporteDto.Hechos != null)
            {
                foreach (var idConcepto in hipercuboReporteDto.Hechos.Keys)
                {
                    if (ConceptosAplica != null && !ConceptosAplica.Contains(idConcepto))
                    {
                        continue;
                    }
                    var hechosPorContexto = hipercuboReporteDto.Hechos[idConcepto];
                    foreach (var idContexto in hechosPorContexto.Keys)
                    {
                        if (IdsPlantillasContexto != null && !IdsPlantillasContexto.Contains(idContexto))
                        {
                            continue;
                        }
                        var arregloHechos = hechosPorContexto[idContexto];
                        for (var indexHecho = 0; indexHecho < arregloHechos.Length; indexHecho++)
                        {
                            var hecho = arregloHechos[indexHecho];
                            if (hecho != null && !String.IsNullOrWhiteSpace(hecho.Valor))
                            {
                                contieneInformacion = true;
                                break;
                            }
                        }
                        if (contieneInformacion)
                        {
                            break;
                        }
                    }
                    if (contieneInformacion)
                    {
                        break;
                    }
                }
            }
            return(contieneInformacion);
        }
예제 #7
0
        /// <summary>
        /// Obtiene la configuración del hipercubo que se pretende evaluar.
        /// </summary>
        /// <param name="idConceptoHipercubo">Identificador del concepto del hipercubo.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="plantilla">Plantilla del documento de instancia.</param>
        /// <returns>DTO con la configuración general del hipercubo.</returns>
        private HipercuboReporteDTO ObtenConfiguracionHipercubo(String idConceptoHipercubo, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantilla)
        {
            var claveTaxonomia = ObtenClaveTaxonomia(instancia.EspacioNombresPrincipal);
            var path           = ReporteXBRLUtil.AR_PROS_PATH_HIPERCUBOS_JSON.
                                 Replace(ReporteXBRLUtil.CLAVE_TAXONOMIA, claveTaxonomia).
                                 Replace(ReporteXBRLUtil.CONCEPTO_HIPERCUBO, idConceptoHipercubo);
            var hipercuboUtil     = new EvaluadorHipercuboUtil(path, instancia, plantilla);
            var aliasDimensionEje = hipercuboUtil.configuracion.DimensionesDinamicas[0];
            var miembrosEje       = hipercuboUtil.ObtenMiembrosDimension(aliasDimensionEje);

            miembrosEje = miembrosEje.OrderBy(o => o.ElementoMiembroTipificado).ToList();
            var titulos = hipercuboUtil.ObtenTitulosMiembrosDimension(aliasDimensionEje, miembrosEje);
            var hechos  = hipercuboUtil.ObtenMatrizHechos(miembrosEje);

            var hipercuboDto = new HipercuboReporteDTO();

            hipercuboDto.Titulos  = titulos;
            hipercuboDto.Hechos   = hechos;
            hipercuboDto.Utileria = hipercuboUtil;
            return(hipercuboDto);
        }
        /// <summary>
        /// Copia el contenido del diccionario a un nuevo diccionario.
        /// </summary>
        /// <param name="hechosHipercubo">Diccionario origen que se pretende copiar.</param>
        /// <returns>Copia del diccionario.</returns>
        private HipercuboReporteDTO ClonaHechosHipercubo(HipercuboReporteDTO hechosHipercubo)
        {
            var hechosClon = new Dictionary <String, IDictionary <String, HechoDto[]> >();

            foreach (var idConcepto in hechosHipercubo.Hechos.Keys)
            {
                IDictionary <String, HechoDto[]> hechosContextoAjustados;
                if (!hechosClon.TryGetValue(idConcepto, out hechosContextoAjustados))
                {
                    hechosContextoAjustados = new Dictionary <String, HechoDto[]>();
                    hechosClon.Add(idConcepto, hechosContextoAjustados);
                }
                var hechosPorContexto = hechosHipercubo.Hechos[idConcepto];
                foreach (var idContexto in hechosPorContexto.Keys)
                {
                    var        arregloHechos = hechosPorContexto[idContexto];
                    HechoDto[] arregloAjustado;
                    if (!hechosContextoAjustados.TryGetValue(idContexto, out arregloAjustado))
                    {
                        arregloAjustado = new HechoDto[arregloHechos.Length];
                        hechosContextoAjustados.Add(idContexto, arregloAjustado);
                    }
                    for (var index = 0; index < arregloHechos.Length; index++)
                    {
                        arregloAjustado[index] = arregloHechos[index];
                    }
                }
            }
            var hipercuboClon = new HipercuboReporteDTO()
            {
                Hechos   = hechosClon,
                Titulos  = hechosHipercubo.Titulos,
                Utileria = hechosHipercubo.Utileria
            };


            return(hipercuboClon);
        }
예제 #9
0
        private void PintaTablaCubo(
            HipercuboReporteDTO hipercubo,
            DocumentoInstanciaXbrlDto instancia,
            ReporteXBRLDTO estructuraReporte,
            DocumentBuilder docBuilder,
            ConceptoReporteDTO concepto,
            IndiceReporteDTO rolAExportar,
            ExportadorRolDocumentoBase exportadorOrigen)
        {
            docBuilder.InsertBreak(BreakType.PageBreak);
            Table tablaActual = docBuilder.StartTable();
            Color colorTitulo = exportadorOrigen.ObtenColorTitulo();

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

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

            //   docBuilder.InsertCell();


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

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

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

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

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

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

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

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


            establecerBordesGrisesTabla(tablaActual);
            docBuilder.EndTable();
            docBuilder.Writeln();
        }
        /// <summary>
        /// Imprime las tarjetas de los administradores.
        /// </summary>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="hipercubo">Información del hipercubo.</param>
        private void PintaPersonasResponsables(DocumentBuilder docBuilder, DocumentoInstanciaXbrlDto instancia, HipercuboReporteDTO hipercubo)
        {
            var matrizPlantillaContexto = hipercubo.Hechos;
            var diccionarioTarjetas     = hipercubo.Utileria.ReordenaConjutosPorExplicitaImplicitaConcepto(matrizPlantillaContexto);

            foreach (var clavePlantilla in diccionarioTarjetas.Keys)
            {
                var listaTajetas       = diccionarioTarjetas[clavePlantilla];
                var primerHecho        = listaTajetas.First().First().Value;
                var miembroExplicita   = hipercubo.Utileria.ObtenMiembroDimension(primerHecho, "ar_pros_TypeOfResponsibleFigureAxis", instancia);
                var textoTituloMiembro = ObtenEtiquetaConcepto(miembroExplicita.IdItemMiembro, instancia, Idioma);
                ImprimeSubTitulo(docBuilder, textoTituloMiembro);
                foreach (var tarjeta in listaTajetas)
                {
                    PintaTarjetaPersonaResponsable(docBuilder, tarjeta, instancia);
                }
            }
        }
예제 #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="hojaAExportar"></param>
        /// <param name="hojaPlantilla"></param>
        /// <param name="instancia"></param>
        /// <param name="rol"></param>
        /// <param name="plantillaDocumento"></param>
        /// <param name="idioma"></param>
        public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, IDefinicionPlantillaXbrl plantillaDocumento, string idioma)
        {
            var    nombreHoja = hojaPlantilla.SheetName;
            String idConceptoHipercubo;

            if (ConceptosHipercuboPorHoja.TryGetValue(nombreHoja, out idConceptoHipercubo))
            {
                var hiperCubo = ObtenConfiguracionHipercubo(idConceptoHipercubo, instancia, plantillaDocumento);
                HipercuboReporteDTO hiperCuboCalificaciones = null;
                var miembroCalificadora = String.Empty;

                for (var indexRow = hojaPlantilla.FirstRowNum; indexRow <= hojaPlantilla.LastRowNum; indexRow++)
                {
                    var rowPlantilla  = hojaPlantilla.GetRow(indexRow);
                    var rowExportar   = hojaAExportar.GetRow(indexRow);
                    var celdaConcepto = rowPlantilla.GetCell(rowPlantilla.FirstCellNum);
                    if (celdaConcepto == null ||
                        !celdaConcepto.CellType.Equals(CellType.String) ||
                        String.IsNullOrWhiteSpace(celdaConcepto.StringCellValue) ||
                        !celdaConcepto.StringCellValue.Contains("idConcepto"))
                    {
                        continue;
                    }
                    var         elementosCelda = celdaConcepto.StringCellValue.Split(';');
                    var         idConcepto     = elementosCelda[1];
                    ConceptoDto concepto;
                    var         indiceColumnaImprimir = celdaConcepto.ColumnIndex + 1;
                    if (instancia.Taxonomia.ConceptosPorId.TryGetValue(idConcepto, out concepto))
                    {
                        if (concepto.EsDimension ?? false)
                        {
                            PintaSeries(concepto.Id, rowExportar, indiceColumnaImprimir, hiperCubo);
                        }
                        else if (concepto.EsMiembroDimension ?? false)
                        {
                            if (hiperCuboCalificaciones == null)
                            {
                                hiperCuboCalificaciones = ObtenConfiguracionHipercubo("ar_pros_SecuritiesRatingTable", instancia, plantillaDocumento);
                            }
                            miembroCalificadora = concepto.Nombre;
                        }
                        else if (!concepto.EsAbstracto ?? false && !concepto.EsHipercubo)
                        {
                            if (ConceptosCalificaciones.Contains(concepto.Id))
                            {
                                if (hiperCuboCalificaciones != null && !String.IsNullOrEmpty(miembroCalificadora))
                                {
                                    IDictionary <String, Dto.HechoDto[]> hechosPorConceptoPlantilla;
                                    if (hiperCuboCalificaciones.Hechos.TryGetValue(concepto.Id, out hechosPorConceptoPlantilla))
                                    {
                                        Dto.HechoDto[] hechos;
                                        if (hechosPorConceptoPlantilla.TryGetValue(miembroCalificadora, out hechos))
                                        {
                                            PintaValoresHechos(hechos, rowExportar, indiceColumnaImprimir);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                IDictionary <String, Dto.HechoDto[]> diccionarioHechosPorcontextoPlantilla;
                                if (hiperCubo.Hechos.TryGetValue(concepto.Id, out diccionarioHechosPorcontextoPlantilla))
                                {
                                    if (diccionarioHechosPorcontextoPlantilla.Count > 0)
                                    {
                                        var hechos = diccionarioHechosPorcontextoPlantilla.First().Value;
                                        PintaValoresHechos(hechos, rowExportar, indiceColumnaImprimir);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
예제 #12
0
        public void ImportarDatosDeHojaExcel(ISheet hojaAImportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, ResumenProcesoImportacionExcelDto resumenImportacion, IDefinicionPlantillaXbrl plantillaDocumento)
        {
            var    nombreHoja = hojaPlantilla.SheetName;
            String idConceptoHipercubo;
            IDictionary <int, Dto.ContextoDto> diccionarioContextosSeries         = null;
            IDictionary <int, Dto.ContextoDto> diccionarioContextosCalificaciones = null;

            if (ConceptosHipercuboPorHoja.TryGetValue(nombreHoja, out idConceptoHipercubo))
            {
                HipercuboReporteDTO hiperCubo = ObtenConfiguracionHipercubo(idConceptoHipercubo, instancia, plantillaDocumento);
                HipercuboReporteDTO hiperCuboCalificaciones = null;
                var miembroCalificadora = String.Empty;

                for (var indexRow = hojaPlantilla.FirstRowNum; indexRow <= hojaPlantilla.LastRowNum; indexRow++)
                {
                    var rowPlantilla  = hojaPlantilla.GetRow(indexRow);
                    var rowImportar   = hojaAImportar.GetRow(indexRow);
                    var celdaConcepto = rowPlantilla.GetCell(rowPlantilla.FirstCellNum);
                    if (celdaConcepto == null ||
                        !celdaConcepto.CellType.Equals(CellType.String) ||
                        String.IsNullOrWhiteSpace(celdaConcepto.StringCellValue) ||
                        !celdaConcepto.StringCellValue.Contains("idConcepto"))
                    {
                        continue;
                    }
                    var         elementosCelda = celdaConcepto.StringCellValue.Split(';');
                    var         idConcepto     = elementosCelda[1];
                    ConceptoDto concepto;
                    var         indiceColumnaImprimir = celdaConcepto.ColumnIndex + 1;
                    if (instancia.Taxonomia.ConceptosPorId.TryGetValue(idConcepto, out concepto))
                    {
                        if (concepto.EsDimension ?? false)
                        {
                            diccionarioContextosSeries =
                                GeneraContextosSeries(
                                    concepto.Id,
                                    rowImportar,
                                    indiceColumnaImprimir,
                                    hiperCubo.Utileria,
                                    resumenImportacion,
                                    hojaAImportar.SheetName,
                                    instancia,
                                    plantillaDocumento, "es");
                            if (diccionarioContextosSeries.Count > 0)
                            {
                                EliminarHechos(hojaPlantilla, instancia);
                            }
                        }
                        else if (concepto.EsMiembroDimension ?? false)
                        {
                            if (hiperCuboCalificaciones == null)
                            {
                                hiperCuboCalificaciones = ObtenConfiguracionHipercubo("ar_pros_SecuritiesRatingTable", instancia, plantillaDocumento);
                            }
                            diccionarioContextosCalificaciones = GeneraContextosCalificaciones(
                                concepto,
                                diccionarioContextosSeries,
                                hiperCuboCalificaciones.Utileria,
                                instancia,
                                plantillaDocumento);
                        }
                        else if (!concepto.EsAbstracto ?? false && !concepto.EsHipercubo)
                        {
                            var diccionarioContextos = diccionarioContextosSeries;
                            if (ConceptosCalificaciones.Contains(concepto.Id))
                            {
                                if (hiperCuboCalificaciones != null && diccionarioContextosCalificaciones != null)
                                {
                                    diccionarioContextos = diccionarioContextosCalificaciones;
                                }
                            }
                            GeneraHechos(rowImportar, concepto, diccionarioContextos, instancia, plantillaDocumento, resumenImportacion, hojaAImportar.SheetName);
                        }
                    }
                }
            }
        }
예제 #13
0
        /// <summary>
        /// Pinta las series y retorna un diccionario con la información de los hechos del hipercubo.
        /// </summary>
        /// <param name="idDimension">Identificador de la dimension.</param>
        /// <param name="filaSerie">Fila donde se presentaran los valores de la serie.</param>
        /// <param name="indiceColumnaInicial">Indice de la columna donde se iniciara la presentación de las series.</param>
        /// <param name="hipercuboUtil">Utilería con la información del hipercubo.</param>
        private void PintaSeries(String idDimension, IRow filaSerie, int indiceColumnaInicial, HipercuboReporteDTO hipercubo)
        {
            var series = hipercubo.Titulos;

            for (var indexSerie = 0; indexSerie < series.Count; indexSerie++)
            {
                var nombreSerie = series[indexSerie];
                var indexColumn = indexSerie + indiceColumnaInicial;
                var celda       = filaSerie.GetCell(indexColumn);
                if (celda == null)
                {
                    celda = filaSerie.CreateCell(indexColumn, CellType.String);
                    celda.CellStyle.BorderBottom = BorderStyle.Medium;
                    celda.CellStyle.BorderTop    = BorderStyle.Medium;
                    celda.CellStyle.BorderLeft   = BorderStyle.Medium;
                    celda.CellStyle.BorderRight  = BorderStyle.Medium;
                }
                celda.SetCellValue(nombreSerie);
            }
        }
예제 #14
0
        private void escribirTablaSerie(DocumentBuilder docBuilder, ReporteXBRLDTO estructuraReporte, DocumentoInstanciaXbrlDto instancia, HipercuboReporteDTO hipercubo)
        {
            docBuilder.Font.Size = TamanioLetraTituloTabla;
            docBuilder.Writeln();
            Table tablaDesglose = docBuilder.StartTable();

            docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.FromArgb(ColorTituloTabla[0], ColorTituloTabla[1], ColorTituloTabla[2]);
            docBuilder.ParagraphFormat.SpaceAfter  = 0;
            docBuilder.ParagraphFormat.SpaceBefore = 2;

            docBuilder.InsertCell();

            docBuilder.CellFormat.PreferredWidth = PreferredWidth.Auto;
            docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
            docBuilder.Font.Name  = TipoLetraTituloConcepto;
            docBuilder.Font.Bold  = TituloConceptoNegrita;
            docBuilder.Font.Size  = TamanioLetraTituloTabla;
            docBuilder.Font.Color = Color.White;

            docBuilder.Write((String)estructuraReporte.ParametrosReporte["annext_SerieTypedAxis_HEADER"]);

            for (var indexTitulo = 0; indexTitulo < hipercubo.Titulos.Count; indexTitulo++)
            {
                docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaTitulos);
                var titulo = hipercubo.Titulos[indexTitulo];
                docBuilder.InsertCell();
                docBuilder.Write(titulo);
            }

            docBuilder.EndRow();
            docBuilder.CellFormat.Shading.BackgroundPatternColor = Color.White;
            docBuilder.CellFormat.PreferredWidth = PreferredWidth.FromPoints(AnchoPreferidoColumnaDatos);
            docBuilder.Font.Size  = TamanioLetraContenidoTabla;
            docBuilder.Font.Color = Color.Black;

            foreach (var idConcepto in hipercubo.Hechos.Keys)
            {
                var matrizPlantillaContexto = hipercubo.Hechos[idConcepto];
                docBuilder.InsertCell();
                var nombreConcepto = ReporteXBRLUtil.obtenerEtiquetaConcepto(estructuraReporte.Lenguaje, ReporteXBRLUtil.ETIQUETA_DEFAULT, idConcepto, instancia);
                docBuilder.Font.Name = TipoLetraTituloConcepto;
                docBuilder.Font.Bold = false;
                docBuilder.Font.Size = TamanioLetraContenidoTabla;
                docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
                docBuilder.Write(nombreConcepto);
                foreach (var idPlantillaContexto in matrizPlantillaContexto.Keys)
                {
                    var listaHechos = matrizPlantillaContexto[idPlantillaContexto];
                    for (var indexHecho = 0; indexHecho < listaHechos.Length; indexHecho++)
                    {
                        var hecho      = listaHechos[indexHecho];
                        var valorHecho = ReporteXBRLUtil.formatoDecimal(hecho.ValorNumerico, ReporteXBRLUtil.FORMATO_CANTIDADES_MONETARIAS);
                        docBuilder.InsertCell();
                        docBuilder.Font.Name = TipoLetraTextos;
                        docBuilder.Font.Bold = false;
                        docBuilder.Font.Size = TamanioLetraContenidoTabla;
                        docBuilder.ParagraphFormat.LeftIndent   = 0;
                        docBuilder.ParagraphFormat.Alignment    = ParagraphAlignment.Right;
                        docBuilder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
                        docBuilder.Write(valorHecho);
                    }
                }
                docBuilder.EndRow();
            }
            docBuilder.EndTable();
            docBuilder.Writeln();
        }
        /// <summary>
        /// Pinta el contenido de un cubo ya organizado en una tabla de Word
        /// </summary>

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

            var colorTitulo = exportadorOrigen.ObtenColorTitulo();

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

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

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

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

            var listaIdsConcepto = new List <string>();

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

            var etiquetaTitulo = String.Empty;

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

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

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

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

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

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


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