/// <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); }
/// <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); }
/// <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); }
/// <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; } } }