예제 #1
0
        /// <summary>
        /// Genera el contexto para el miembro indicado.
        /// </summary>
        /// <param name="conceptoMiembro">Miembro del que se requiere el contexto.</param>
        /// <param name="configuracion">Configuración para obtener el contexto.</param>
        /// <returns>Contexto generado o null si no se cuenta con lo necesario para generarlo.</returns>
        private Dto.ContextoDto GeneraContextoMiembro(ConceptoDto conceptoMiembro, ConfiguracionReporteExcel427000 configuracion)
        {
            PlantillaContextoDto plantillaContextoMiembro;

            Dto.ContextoDto contexto = null;
            var             configuracionPlantilla = configuracion.HipercuboReporte.Utileria.configuracion;

            if (configuracionPlantilla.PlantillasContextos.TryGetValue(conceptoMiembro.Nombre, out plantillaContextoMiembro) ||
                configuracionPlantilla.PlantillasContextos.TryGetValue(conceptoMiembro.Id, out plantillaContextoMiembro))
            {
                var idDimensionType = configuracionPlantilla.DimensionesDinamicas.First();
                PlantillaDimensionInfoDto plantillaDimensionType;
                if (configuracionPlantilla.PlantillaDimensiones.TryGetValue(idDimensionType, out plantillaDimensionType))
                {
                    var miembroType = plantillaDimensionType.CreaMiembroDimension(configuracion.IndiceSerieType.ToString());
                    configuracion.IndiceSerieType++;
                    var listaMiembrosDimension = new List <DimensionInfoDto>()
                    {
                        miembroType
                    };
                    contexto = plantillaContextoMiembro.GeneraContexto(configuracion.Instancia, configuracion.PlantillaDocumento, listaMiembrosDimension);
                    configuracion.PlantillaDocumento.InyectarContextoADocumentoInstancia(contexto);
                }
                else
                {
                    LogUtil.Error("No existe la definición de dimensión con el identificador [" + idDimensionType + "]");
                }
            }
            else
            {
                LogUtil.Error("No existe la definición de plantilla con el identificador [" + conceptoMiembro.Nombre + "]");
            }
            return(contexto);
        }
예제 #2
0
        /// <summary>
        /// Obtiene la configuración para procesar los elementos de la hoja actual.
        /// </summary>
        /// <param name="hojaPlantilla">Hoja de plantilla que se pertende procesar.</param>
        /// <param name="instancia">Documento de instancia que se procesa.</param>
        /// <param name="plantillaDocumento">Plantilla de la taxonomía que se procesa.</param>
        /// <param name="resumenImportacion">Detalle de la importación.</param>
        /// <returns>Configuración del documento a procesar.</returns>
        private ConfiguracionReporteExcel427000 GeneraConfiguracionReporte(ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, ResumenProcesoImportacionExcelDto resumenImportacion = null)
        {
            var configuracion = new ConfiguracionReporteExcel427000(instancia, plantillaDocumento, resumenImportacion);

            configuracion.NombreHoja = hojaPlantilla.SheetName;
            for (var indexRow = 0; indexRow < hojaPlantilla.LastRowNum; indexRow++)
            {
                var row           = hojaPlantilla.GetRow(indexRow);
                var currentColumn = row.FirstCellNum;
                var cell          = row.GetCell(currentColumn);
                if (cell != null && cell.CellType.Equals(CellType.String))
                {
                    var valorCelda = cell.StringCellValue;
                    if (valorCelda.Contains("idConcepto"))
                    {
                        var             splitCell  = valorCelda.Split(';');
                        var             idConcepto = splitCell[1];
                        Dto.ConceptoDto concepto;
                        if (instancia.Taxonomia.ConceptosPorId.TryGetValue(idConcepto, out concepto))
                        {
                            if (concepto.EsHipercubo)
                            {
                                configuracion.HipercuboReporte = ObtenConfiguracionHipercubo(concepto.Id, instancia, plantillaDocumento);
                            }
                            else if (concepto.EsMiembroDimension ?? false)
                            {
                                configuracion.ListaConceptosMiembro.Add(concepto);
                            }
                            else if (!(concepto.EsDimension ?? false) && !(concepto.EsAbstracto ?? false))
                            {
                                for (var indexColumn = currentColumn; indexColumn < row.LastCellNum; indexColumn++)
                                {
                                    var celdaConceptoItem = row.GetCell(indexColumn);
                                    if (celdaConceptoItem != null && celdaConceptoItem.CellType.Equals(CellType.String))
                                    {
                                        var valorCeldaItem = celdaConceptoItem.StringCellValue;
                                        if (valorCeldaItem.Contains("idConcepto"))
                                        {
                                            var         splitItems     = valorCeldaItem.Split(';');
                                            var         idConceptoItem = splitItems[1];
                                            ConceptoDto conceptoItem;
                                            if (instancia.Taxonomia.ConceptosPorId.TryGetValue(idConceptoItem, out conceptoItem))
                                            {
                                                configuracion.DiccionarioConceptosPorColumna[indexColumn] = conceptoItem;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(configuracion);
        }
예제 #3
0
        /// <summary>
        /// Exporta todos los hechos asociados al miembro de la figura enviada como parámetro
        /// </summary>
        /// <returns></returns>
        private int ExportarFigura(int numRow, ConceptoDto miembroActual, ISheet hojaAExportar, ConfiguracionReporteExcel427000 configuracion)
        {
            var hipercuboHechos = configuracion.HipercuboReporte.Utileria.ReordenaConjutosPorExplicitaImplicitaConcepto(
                configuracion.HipercuboReporte.Hechos);
            IList <IDictionary <string, Dto.HechoDto> > listaHechosPorconcepto;

            if (hipercuboHechos.TryGetValue(miembroActual.Nombre, out listaHechosPorconcepto) ||
                hipercuboHechos.TryGetValue(miembroActual.Id, out listaHechosPorconcepto))
            {
                foreach (var hechosPorConcepto in listaHechosPorconcepto)
                {
                    numRow++;
                    hojaAExportar.ShiftRows(numRow, hojaAExportar.LastRowNum, 1);
                    var renglon = hojaAExportar.CreateRow(numRow);
                    foreach (var indexColumn in configuracion.DiccionarioConceptosPorColumna.Keys)
                    {
                        var          concepto = configuracion.DiccionarioConceptosPorColumna[indexColumn];
                        Dto.HechoDto hecho;
                        if (hechosPorConcepto.TryGetValue(concepto.Id, out hecho))
                        {
                            var celda = renglon.GetCell(indexColumn, MissingCellPolicy.CREATE_NULL_AS_BLANK);
                            celda.SetCellValue(hecho.Valor);
                        }
                    }
                }
            }
            return(numRow);
        }
예제 #4
0
        /// <summary>
        /// Crea los hechos en base a la configuración.
        /// </summary>
        /// <param name="fila">Fila donde se obtendrán los datos para genarar los hechos.</param>
        /// <param name="contexto">Contexto al que pertenecen los nuevos hechos.</param>
        /// <param name="configuracion">Configuración con la información general para la generación de los hechos.</param>
        private void GeneraHechos(IRow fila, ConceptoDto conceptoMiembroActual, ConfiguracionReporteExcel427000 configuracion)
        {
            var fechaDefault = configuracion.FechaDefault;

            Dto.ContextoDto contextoActual   = null;
            var             registroGenerado = false;

            foreach (var indexColumna in configuracion.DiccionarioConceptosPorColumna.Keys)
            {
                var    celda      = fila.GetCell(indexColumna);
                String valorHecho = null;
                if (celda != null && !celda.CellType.Equals(CellType.Blank))
                {
                    valorHecho = ExcelUtil.ObtenerValorCelda(celda.CellType, celda);
                }
                if (String.IsNullOrEmpty(valorHecho))
                {
                    if (!registroGenerado)
                    {
                        return;
                    }
                    else
                    {
                        //valorHecho = String.Empty;
                        continue;
                    }
                }
                ConceptoDto concepto;
                if (configuracion.DiccionarioConceptosPorColumna.TryGetValue(indexColumna, out concepto))
                {
                    if (contextoActual == null)
                    {
                        contextoActual = GeneraContextoMiembro(conceptoMiembroActual, configuracion);
                    }
                    configuracion.InicializaImportacion();
                    String    idUnidad   = null;
                    String    decimales  = null;
                    var       idConcepto = concepto.Id;
                    UnidadDto unidad;
                    if (configuracion.DiccionarioUnidadesPorIdConcepto.TryGetValue(idConcepto, out unidad))
                    {
                        idUnidad = unidad.Id;
                        configuracion.DiccionarioDecimalesPorIdConcepto.TryGetValue(idConcepto, out decimales);
                    }
                    var idHecho    = "A" + Guid.NewGuid().ToString();
                    var hechoNuevo = configuracion.Instancia.CrearHecho(concepto.Id, idUnidad, contextoActual.Id, idHecho);
                    hechoNuevo.Decimales = decimales;
                    if (!UtilAbax.ActualizarValorHecho(concepto, hechoNuevo, valorHecho, fechaDefault))
                    {
                        configuracion.ResumenImportacion.AgregarErrorFormato(
                            UtilAbax.ObtenerEtiqueta(configuracion.Instancia.Taxonomia, concepto.Id),
                            configuracion.NombreHoja,
                            fila.RowNum.ToString(),
                            indexColumna.ToString(),
                            valorHecho);
                    }
                    else
                    {
                        configuracion.ResumenImportacion.TotalHechosImportados++;
                        var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                        {
                            IdConcepto     = hechoNuevo.IdConcepto,
                            IdHecho        = hechoNuevo.Id,
                            ValorImportado = valorHecho,
                            HojaExcel      = configuracion.NombreHoja,
                            Renglon        = fila.RowNum,
                            Columna        = indexColumna
                        };
                        configuracion.ResumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(configuracion.Instancia.Taxonomia, hechoNuevo.Id));
                    }

                    configuracion.PlantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo);
                    registroGenerado = true;
                }
            }
        }