/// <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);
        }
Exemple #3
0
        /// <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;
                    }
                }
            }
        }