/// <summary> /// Actualiza el valor de un hecho en el documento de instancia /// </summary> /// <param name="resumenImportacion"></param> /// <param name="hechoActualizar"></param> /// <param name="valorImportar"></param> /// <param name="plantillaDocumento"></param> private void ActualizarValorHecho(Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, HechoDto hechoActualizar, string valorImportar, IDefinicionPlantillaXbrl plantillaDocumento, DocumentoInstanciaXbrlDto instancia, ISheet hojaImportar, int iRenglon, int columna) { var concepto = instancia.Taxonomia.ConceptosPorId[hechoActualizar.IdConcepto]; if (!ActualizarValor(concepto, valorImportar, hechoActualizar, plantillaDocumento)) { resumenImportacion.AgregarErrorFormato( UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id), hojaImportar.SheetName, iRenglon.ToString(), "0", valorImportar); } else { resumenImportacion.TotalHechosImportados++; var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto() { IdConcepto = hechoActualizar.IdConcepto, IdHecho = hechoActualizar.Id, ValorImportado = valorImportar, HojaExcel = hojaImportar.SheetName, Renglon = iRenglon, Columna = columna }; resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, hechoActualizar.Id)); } }
/// <summary> /// Implementació default /// </summary> /// <param name="workbook"></param> /// <param name="resumenProceso"></param> /// <returns></returns> public override bool ValidarPlantillaExcelImportacion(NPOI.SS.UserModel.IWorkbook workBookImportar, Common.Dtos.ResumenProcesoImportacionExcelDto resumenProceso) { bool puedeContinuar = true; var espacioNombresPlantilla = ""; if (workBookImportar.NumberOfSheets > 0) { //2019 Validar opcionalmente que la plantilla corresponda al espacio de nombres de la taxonomía //en la hoja 1, renglón 1, columna 2 se colocará el espacio de nombres de la taxonomía var hoja1 = workBookImportar.GetSheetAt(0); var renglon1 = hoja1.GetRow(0); if (renglon1 != null) { var celdaValidacion = renglon1.GetCell(1); if (celdaValidacion != null) { espacioNombresPlantilla = celdaValidacion.StringCellValue; } } } if (!this.documentoInstancia.EspacioNombresPrincipal.Equals(espacioNombresPlantilla)) { resumenProceso.InformeErrores.Add(new InformeErrorImportacion() { Mensaje = "El documento Excel no pertenece a la taxonomía que está utilizando (" + this.documentoInstancia.Taxonomia.nombreAbax + ")." + "\nAsegúrese que el documento corresponda a la taxonomía de la que desea importar los datos." }); puedeContinuar = false; } return(puedeContinuar); }
/// <summary> /// Implementació default /// </summary> /// <param name="workbook"></param> /// <param name="resumenProceso"></param> /// <returns></returns> public override bool ValidarPlantillaExcelImportacion(NPOI.SS.UserModel.IWorkbook workBookImportar, Common.Dtos.ResumenProcesoImportacionExcelDto resumenProceso) { bool puedeContinuar = true; var espacioNombresPlantilla = ""; var valorDefaultValidacionPlantilla2014 = ""; if (workBookImportar.NumberOfSheets > 0) { //2014 Validar opcionalmente que la plantilla no corresponda al espacio de nombres de la taxonomía //en la hoja 1, renglón 1, columna 2 debe encontrarse un espacio. var hoja1 = workBookImportar.GetSheetAt(0); var renglon1 = hoja1.GetRow(0); if (renglon1 != null) { var celdaValidacion = renglon1.GetCell(1); if (celdaValidacion != null) { espacioNombresPlantilla = celdaValidacion.StringCellValue; } } } if (!valorDefaultValidacionPlantilla2014.Equals(espacioNombresPlantilla)) { resumenProceso.InformeErrores.Add(new InformeErrorImportacion() { Mensaje = "La plantilla de importación para la taxonomía (" + this.documentoInstancia.Taxonomia.nombreAbax + ") " + "\n no es la esperada." }); puedeContinuar = false; } return(puedeContinuar); }
public void ImportarDatosDeHojaExcel(NPOI.SS.UserModel.ISheet hojaAImportar, NPOI.SS.UserModel.ISheet hojaPlantilla, Dto.DocumentoInstanciaXbrlDto instancia, string rol, Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, Model.IDefinicionPlantillaXbrl plantillaDocumento) { DateTime fechaEvento = DateTime.MinValue; int numeroRenglonActual = RENGLON_INICIO_DATOS; var qNameEntidad = plantillaDocumento.ObtenerVariablePorId("esquemaEntidad") + ":" + plantillaDocumento.ObtenerVariablePorId("nombreEntidad"); ContextoDto contextoDestinoSimple = null; ContextoDto contextoDestinoDimension = null; if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2016_10_12"), out fechaEvento)) { contextoDestinoSimple = ObtenerContextoDestino(instancia, plantillaDocumento, qNameEntidad, fechaEvento, new List <DimensionInfoDto>()); ActualizarValorHecho(instancia, "rel_ev_Ticker", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_Date", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_BusinessName", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_Place", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); ActualizarValorHecho(instancia, "rel_ev_Subject", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); if (!instancia.EspacioNombresPrincipal.Contains("fondos")) { ActualizarValorHecho(instancia, "rel_ev_ForeignMarket", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoSimple, plantillaDocumento, resumenImportacion); } var valorTipoEvento = ExcelUtil.ObtenerValorCelda(hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS); var idConceptoTipoEvento = BuscarTipoEvento(valorTipoEvento, instancia); if (idConceptoTipoEvento != null) { DimensionInfoDto dimInfo = new DimensionInfoDto() { Explicita = true, IdDimension = "rel_ev_RelevantEventTypesAxis", QNameDimension = instancia.Taxonomia.ConceptosPorId["rel_ev_RelevantEventTypesAxis"].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId["rel_ev_RelevantEventTypesAxis"].Nombre, IdItemMiembro = idConceptoTipoEvento, QNameItemMiembro = instancia.Taxonomia.ConceptosPorId[idConceptoTipoEvento].EspacioNombres + ":" + instancia.Taxonomia.ConceptosPorId[idConceptoTipoEvento].Nombre }; contextoDestinoDimension = ObtenerContextoDestino(instancia, plantillaDocumento, qNameEntidad, fechaEvento, new List <DimensionInfoDto>() { dimInfo }); ActualizarValorHecho(instancia, "rel_ev_RelevantEventContent", hojaAImportar, numeroRenglonActual++, COLUMNA_DATOS, contextoDestinoDimension, plantillaDocumento, resumenImportacion); } } }
/// <summary> /// Importa los datos de un grupo de hechos que corresponden a un tipo de pasivo en específico /// </summary> private void ImportarGrupoTipoPasivo(ISheet hojaAImportar, int renglonTipoPasivo, string tipoPasivoActual, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, IDictionary <string, string> secuenciasAsignadas, IList <string> etiquetasConceptosMiembro) { var hechosDeTipoPasivo = ObtenerHechosPorDimensionYMiembro(instancia, plantillaDocumento, _idDimensionTipoPasivo, tipoPasivoActual); int iCol = _columnaInicioDatos; int iRenglon = renglonTipoPasivo; string[] listaPrimarios = null; if (_miembrosBancarios.Contains(tipoPasivoActual)) { listaPrimarios = _elementosPrimariosBancarios; } if (_miembrosBursatiles.Contains(tipoPasivoActual)) { listaPrimarios = _elementosPrimariosBursatiles; } if (_miembrosOtros.Contains(tipoPasivoActual)) { listaPrimarios = _elementosPrimariosOtros; } if (_idItemMiembroGranTotal.Equals(tipoPasivoActual)) { listaPrimarios = _elementosPrimariosGranTotal; } if (_miembrosTipoPasivoTotales.Contains(tipoPasivoActual)) { int iMiembroSubtabla = 0; var dimensiones = new List <DimensionInfoDto>() { new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionTipoPasivo, IdItemMiembro = tipoPasivoActual } }; var contextoTotales = BuscarOCrearContexto(instancia, plantillaDocumento, dimensiones, _idDimensionSecuencia, null, secuenciasAsignadas); foreach (var elementoPrimario in listaPrimarios) { if (_elementosPrimariosTotal.Contains(elementoPrimario)) { var valorImportar = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, iCol); if (!String.IsNullOrEmpty(valorImportar)) { HechoDto hechoActualizar = null; if (elementoPrimario.Equals(_idConceptoSubtabla)) { var dimensionesSubtabla = new List <DimensionInfoDto>(); dimensionesSubtabla.AddRange(dimensiones); dimensionesSubtabla.Add(new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionIntervalo, IdItemMiembro = _miembrosIntervaloDeTiempo[iMiembroSubtabla] }); var contextoSubtabla = BuscarOCrearContexto(instancia, plantillaDocumento, dimensionesSubtabla, _idDimensionSecuencia, null, secuenciasAsignadas); var listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, hechosDeTipoPasivo, elementoPrimario, null); listaHechos = FiltrarHechosPorDimensionYMiembro(instancia, listaHechos, _idDimensionIntervalo, _miembrosIntervaloDeTiempo[iMiembroSubtabla++]); if (listaHechos.Count > 0) { hechoActualizar = listaHechos[0]; } else { hechoActualizar = CrearHecho(instancia, plantillaDocumento, elementoPrimario, contextoSubtabla); } } else { var listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, hechosDeTipoPasivo, elementoPrimario, null); if (listaHechos.Count > 0) { hechoActualizar = listaHechos[0]; } else { hechoActualizar = CrearHecho(instancia, plantillaDocumento, elementoPrimario, contextoTotales); } } if (hechoActualizar != null) { ActualizarValorHecho(resumenImportacion, hechoActualizar, valorImportar, plantillaDocumento, instancia, hojaAImportar, iRenglon, iCol); } } } iCol++; } } else { //Inicio de un grupo de detalle de pasivos iRenglon++; var dimensiones = new List <DimensionInfoDto>() { new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionTipoPasivo, IdItemMiembro = tipoPasivoActual } }; bool finGrupo = false; while (!finGrupo) { int iMiembroSubtabla = 0; //Determinar la secuencia string secuencia = null; var nombrePasivo = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, _columnaInicioDatos); if (!String.IsNullOrEmpty(nombrePasivo)) { secuencia = BuscarSecuenciaDePasivo(instancia, hechosDeTipoPasivo, nombrePasivo); if (secuencia == null) { secuencia = ObtenerSiguienteSecuencia(secuenciasAsignadas); } var contextoDestino = BuscarOCrearContexto(instancia, plantillaDocumento, dimensiones, _idDimensionSecuencia, secuencia, secuenciasAsignadas); iCol = _columnaInicioDatos; foreach (var elementoPrimario in listaPrimarios) { var valorImportar = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, iCol); if (!String.IsNullOrEmpty(valorImportar)) { HechoDto hechoActualizar = null; if (elementoPrimario.Equals(_idConceptoSubtabla)) { var dimensionesSubtabla = new List <DimensionInfoDto>(); dimensionesSubtabla.AddRange(dimensiones); dimensionesSubtabla.Add(new DimensionInfoDto() { Explicita = true, IdDimension = _idDimensionIntervalo, IdItemMiembro = _miembrosIntervaloDeTiempo[iMiembroSubtabla] }); var contextoSubtabla = BuscarOCrearContexto(instancia, plantillaDocumento, dimensionesSubtabla, _idDimensionSecuencia, secuencia, secuenciasAsignadas); var listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, hechosDeTipoPasivo, elementoPrimario, secuencia); listaHechos = FiltrarHechosPorDimensionYMiembro(instancia, listaHechos, _idDimensionIntervalo, _miembrosIntervaloDeTiempo[iMiembroSubtabla++]); if (listaHechos.Count > 0) { hechoActualizar = listaHechos[0]; } else { hechoActualizar = CrearHecho(instancia, plantillaDocumento, elementoPrimario, contextoSubtabla); } } else { var listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, hechosDeTipoPasivo, elementoPrimario, secuencia); if (listaHechos.Count > 0) { hechoActualizar = listaHechos[0]; } else { hechoActualizar = CrearHecho(instancia, plantillaDocumento, elementoPrimario, contextoDestino); } } if (hechoActualizar != null) { ActualizarValorHecho(resumenImportacion, hechoActualizar, valorImportar, plantillaDocumento, instancia, hojaAImportar, iRenglon, iCol); } } iCol++; } } iRenglon++; finGrupo = iRenglon > hojaAImportar.LastRowNum || etiquetasConceptosMiembro.Contains(ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, _columnaTituloTipoPasivo)); } } }
public void ImportarDatosDeHojaExcel(NPOI.SS.UserModel.ISheet hojaAImportar, NPOI.SS.UserModel.ISheet hojaPlantilla, Dto.DocumentoInstanciaXbrlDto instancia, string rol, Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, Model.IDefinicionPlantillaXbrl plantillaDocumento) { var secuenciasAsignadas = new Dictionary <string, string>(); foreach (var ctx in instancia.ContextosPorId.Values) { var seq = ObtenerSecuenciaDeContexto(ctx, _idDimensionSecuencia); if (seq != null) { if (!secuenciasAsignadas.ContainsKey(seq)) { secuenciasAsignadas[seq] = ctx.Id; } } } var etiquetasConceptosMiembro = ObtenerListaEtiquetasConceptosMiembro(instancia.Taxonomia, _miembrosTipoPasivo); foreach (var tipoPasivoActual in _miembrosTipoPasivo) { //Utilizar etiquetas var etiquetasTipoPasivo = TaxonomiaXbrlUtil.ObtenerEtiquetasConcepto(instancia.Taxonomia, tipoPasivoActual); foreach (var etqTipo in etiquetasTipoPasivo) { int renglonTipoPasivo = LocalizarRenglonTipoPasivo(hojaAImportar, etqTipo, _columnaTituloTipoPasivo); if (renglonTipoPasivo >= 0) { ImportarGrupoTipoPasivo(hojaAImportar, renglonTipoPasivo, tipoPasivoActual, instancia, plantillaDocumento, resumenImportacion, secuenciasAsignadas, etiquetasConceptosMiembro); break; } } } }