Esempio n. 1
0
        /// <summary>
        /// Genera un diccionario con los contextos por columna para las calificaciones.
        /// </summary>
        /// <param name="conceptoMiembro">Concepto miembro de las calificadoras.</param>
        /// <param name="diccionarioContextosSerie">Diccionario con los contextos por serie.</param>
        /// <param name="hipercuboUtil"></param>
        /// <param name="instancia">Documento de instancia a evaluar.</param>
        /// <param name="plantillaDocumento">Plantilla del documento de instancia.</param>
        /// <returns></returns>
        private IDictionary <int, Dto.ContextoDto> GeneraContextosCalificaciones(
            ConceptoDto conceptoMiembro,
            IDictionary <int, Dto.ContextoDto> diccionarioContextosSerie,
            EvaluadorHipercuboUtil hipercuboUtil,
            DocumentoInstanciaXbrlDto instancia,
            IDefinicionPlantillaXbrl plantillaDocumento)
        {
            var contextosColumna = new Dictionary <int, Dto.ContextoDto>();

            try
            {
                PlantillaContextoDto plantillaContextoDto = null;
                if (!hipercuboUtil.configuracion.PlantillasContextos.TryGetValue(conceptoMiembro.Nombre, out plantillaContextoDto))
                {
                    LogUtil.Error("No existe una definición de plantilla con el identificador \"" + conceptoMiembro.Nombre + "\".");
                    return(contextosColumna);
                }
                foreach (var indexColumn in diccionarioContextosSerie.Keys)
                {
                    var contextoSerie        = diccionarioContextosSerie[indexColumn];
                    var dimensiones          = contextoSerie.ValoresDimension;
                    var contextoCalificacion = plantillaContextoDto.GeneraContexto(instancia, plantillaDocumento, dimensiones);
                    plantillaDocumento.InyectarContextoADocumentoInstancia(contextoCalificacion);
                    contextosColumna.Add(indexColumn, contextoCalificacion);
                }
            }
            catch (Exception ex)
            {
                LogUtil.Error(ex);
            }
            return(contextosColumna);
        }
Esempio n. 2
0
        /// <summary>
        /// Genera los contextos de la serie.
        /// </summary>
        /// <param name="idDimension">Identificador de la idmensión evaluada.</param>
        /// <param name="rowImportar">Fila a iterar.</param>
        /// <param name="indiceColumnaInicio">Columna donde inicia la iteración.</param>
        /// <param name="hipercuboUtil">Utilería con la información del hipercubo.</param>
        /// <param name="resumenImportacion">Resumen de la importación para agregar errores en caso de presentarse.</param>
        /// <param name="nombreHoja">Nombre de la hoja.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="plantillaDocumento">Plantilla del documento.</param>
        /// <param name="claveIdioma"></param>
        /// <returns>Diccionario con los identificadores de contexto por columna.</returns>
        private IDictionary <int, Dto.ContextoDto> GeneraContextosSeries(
            String idDimension,
            IRow rowImportar,
            int indiceColumnaInicio,
            EvaluadorHipercuboUtil hipercuboUtil,
            ResumenProcesoImportacionExcelDto resumenImportacion,
            String nombreHoja,
            DocumentoInstanciaXbrlDto instancia,
            IDefinicionPlantillaXbrl plantillaDocumento,
            string claveIdioma)
        {
            var nombreConcepto   = ObtenEtiquetaConcepto(idDimension, instancia.Taxonomia, claveIdioma);
            var contextosColumna = new Dictionary <int, Dto.ContextoDto>();
            PlantillaDimensionInfoDto plantillaDimension = null;

            if (!hipercuboUtil.configuracion.PlantillaDimensiones.TryGetValue(idDimension, out plantillaDimension))
            {
                LogUtil.Error("No existe una definición de plantilla con el identificador \"" + idDimension + "\".");
                return(contextosColumna);
            }
            PlantillaContextoDto plantillaContexto = hipercuboUtil.configuracion.PlantillasContextos.Values.First();
            var seriesEvaluadas = new Dictionary <String, int>();

            for (var indexSerie = indiceColumnaInicio; indexSerie <= rowImportar.LastCellNum; indexSerie++)
            {
                var celdaSerie = rowImportar.GetCell(indexSerie);
                if (celdaSerie != null && !celdaSerie.CellType.Equals(CellType.Blank))
                {
                    var nombreSerie = ExcelUtil.ObtenerValorCelda(celdaSerie.CellType, celdaSerie);
                    if (String.IsNullOrWhiteSpace(nombreSerie))
                    {
                        continue;
                    }
                    if (seriesEvaluadas.ContainsKey(nombreSerie))
                    {
                        resumenImportacion.InformeErrores.Add(new InformeErrorImportacion()
                        {
                            Mensaje = "No fue posible agregar la serie \"" + nombreSerie +
                                      "\", de la hoja \"" + nombreHoja +
                                      "\" renglon \"" + rowImportar.RowNum.ToString() + "\" columna \"" + celdaSerie.ColumnIndex.ToString() +
                                      "\", debido a que este nombre de serie ya fué indicado previamente en la columna \"" + seriesEvaluadas[nombreSerie] + "\".",
                        });
                        continue;
                    }
                    var miembroDimensionSerie = plantillaDimension.CreaMiembroDimension(nombreSerie);
                    var listaDimensiones      = new List <DimensionInfoDto>()
                    {
                        miembroDimensionSerie
                    };
                    var contexto = plantillaContexto.GeneraContexto(instancia, plantillaDocumento, listaDimensiones);
                    plantillaDocumento.InyectarContextoADocumentoInstancia(contexto);
                    contextosColumna.Add(celdaSerie.ColumnIndex, contexto);
                    seriesEvaluadas.Add(nombreSerie, celdaSerie.ColumnIndex);
                }
            }
            return(contextosColumna);
        }
        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;
                            }
                            
                        }
                    }
                }                
            }
        }
Esempio n. 4
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);
        }