public void ExportarDatosDeHojaExcel(NPOI.SS.UserModel.ISheet hojaAExportar, NPOI.SS.UserModel.ISheet hojaPlantilla, Dto.DocumentoInstanciaXbrlDto instancia, string rol, Model.IDefinicionPlantillaXbrl plantillaDocumento, String idioma)
        {
            if (instancia.HechosPorIdConcepto.ContainsKey(_idConceptoRegistroCartera))
            {
                int renglonActual = _renglonInicioHechos;

                foreach (var idTupla in instancia.HechosPorIdConcepto[_idConceptoRegistroCartera])
                {
                    var tupla = instancia.HechosPorId[idTupla];
                    if (tupla.Hechos != null)
                    {
                        for (int iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++)
                        {
                            var idConcepto = ExcelUtil.ObtenerValorCelda(hojaPlantilla, _renglonIdConceptos, iCol);
                            var hecho      = tupla.Hechos.FirstOrDefault(x => x == idConcepto);
                            if (hecho != null)
                            {
                                ExcelUtil.AsignarValorCelda(hojaAExportar, renglonActual, iCol, instancia.HechosPorId[hecho].Valor, CellType.String, instancia.HechosPorId[hecho]);
                            }
                        }

                        renglonActual++;
                    }
                }
            }
        }
        public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, IDefinicionPlantillaXbrl plantillaDocumento, String idioma)
        {
            var numRenglones = hojaPlantilla.LastRowNum;

            for (var iRenglon = 0; iRenglon <= numRenglones; iRenglon++)
            {
                var renglon = hojaPlantilla.GetRow(iRenglon);
                if (renglon != null)
                {
                    var numCols = renglon.LastCellNum;

                    for (var iCol = 0; iCol <= numCols; iCol++)
                    {
                        var valorHechoPlantilla = ExcelUtil.ObtenerValorCelda(hojaPlantilla, iRenglon, iCol);
                        if (!String.IsNullOrEmpty(valorHechoPlantilla) &&
                            valorHechoPlantilla.StartsWith(PREFIJO_CELDA_HECHO_PLANTILLA) &&
                            valorHechoPlantilla.Length > PREFIJO_CELDA_HECHO_PLANTILLA.Length)
                        {
                            //Celda con valor de hecho plantilla
                            var idHechoPlantilla = valorHechoPlantilla.Substring(PREFIJO_CELDA_HECHO_PLANTILLA.Length);
                            var hechoInstancia   = plantillaDocumento.BuscarHechoPlantillaEnHechosDocumentoInstancia(idHechoPlantilla);
                            if (hechoInstancia != null)
                            {
                                var concepto = instancia.Taxonomia.ConceptosPorId[hechoInstancia.IdConcepto];
                                //Si existe hecho, asignar valor

                                //Si la celda es de tipo boolean, transformar el valor de salida a si y no
                                var valorFinal = hechoInstancia.Valor;
                                if (concepto.TipoDatoXbrl.Contains(TiposDatoXBRL.BooleanItemType))
                                {
                                    if (!String.IsNullOrEmpty(valorFinal))
                                    {
                                        if (CommonConstants.CADENAS_VERDADERAS.Contains(valorFinal.Trim().ToLower()))
                                        {
                                            valorFinal = CommonConstants.SI;
                                        }
                                        else
                                        {
                                            valorFinal = CommonConstants.NO;
                                        }
                                    }
                                    else
                                    {
                                        valorFinal = CommonConstants.NO;
                                    }
                                }
                                ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, valorFinal,
                                                            concepto.EsTipoDatoNumerico ? CellType.Numeric : CellType.String, hechoInstancia);
                            }
                        }
                    }
                }
            }
        }
 /// <summary>
 /// Obtiene y escribe el valor del primer hecho correspondiente al id de concepto enviado como parámetro
 /// </summary>
 /// <param name="instancia">Documento de instancia actualmente procesado</param>
 /// <param name="idConcepto">Concepto a escribir</param>
 private void EscribirValorPrimerHecho(DocumentoInstanciaXbrlDto instancia, string idConcepto, ISheet hojaAExportar,
                                       int renglonDestino, int columnaDestino)
 {
     if (instancia.HechosPorIdConcepto.ContainsKey(idConcepto) && instancia.HechosPorIdConcepto[idConcepto].Count > 0)
     {
         var hecho = instancia.HechosPorId[instancia.HechosPorIdConcepto[idConcepto][0]];
         if (hecho != null)
         {
             ExcelUtil.AsignarValorCelda(hojaAExportar, renglonDestino, columnaDestino, hecho.Valor,
                                         instancia.Taxonomia.ConceptosPorId[idConcepto].EsTipoDatoNumerico ?
                                         CellType.Numeric : CellType.String
                                         , hecho);
         }
     }
 }
        public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, IDefinicionPlantillaXbrl plantillaDocumento, String idioma)
        {
            int numeroRenglonActual = RENGLON_INICIO_DATOS;

            EscribirValorPrimerHecho(instancia, "rel_ev_Ticker", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);
            EscribirValorPrimerHecho(instancia, "rel_ev_Date", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);
            EscribirValorPrimerHecho(instancia, "rel_ev_BusinessName", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);
            EscribirValorPrimerHecho(instancia, "rel_ev_Place", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);
            EscribirValorPrimerHecho(instancia, "rel_ev_Subject", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);

            if (!instancia.EspacioNombresPrincipal.Contains("fondos"))
            {
                EscribirValorPrimerHecho(instancia, "rel_ev_ForeignMarket", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);
            }



            var descTipoEvento = "";

            if (instancia.HechosPorIdConcepto.ContainsKey("rel_ev_RelevantEventContent"))
            {
                var listaHechosId = instancia.HechosPorIdConcepto["rel_ev_RelevantEventContent"];
                if (listaHechosId.Count > 0)
                {
                    var hechoContenido = instancia.HechosPorId[listaHechosId[0]];
                    var contexto       = instancia.ContextosPorId[hechoContenido.IdContexto];
                    if (contexto.ValoresDimension != null && contexto.ValoresDimension.Count > 0)
                    {
                        descTipoEvento = ReporteXBRLUtil.obtenerEtiquetaConcepto(idioma, null, contexto.ValoresDimension[0].IdItemMiembro, instancia);
                    }
                }
            }

            ExcelUtil.AsignarValorCelda(hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS, descTipoEvento,
                                        CellType.String, null);

            EscribirValorPrimerHecho(instancia, "rel_ev_RelevantEventContent", hojaAExportar, numeroRenglonActual++, COLUMNA_DATOS);
        }
        public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, Model.IDefinicionPlantillaXbrl plantillaDocumento, String idioma)
        {
            DateTime fechaInicio = DateTime.MinValue;
            DateTime fechaFin    = DateTime.MinValue;

            //Trimestre actual

            if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_09_30"), out fechaFin)
                &&
                XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01"), out fechaInicio))
            {
                var todasLasMarcas = new DimensionInfoDto()
                {
                    Explicita                 = false,
                    IdDimension               = _idDimensionMarcas,
                    QNameDimension            = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionMarcas]),
                    ElementoMiembroTipificado = String.Format(_templateTypedMemeberMarcas, _todasLasMarcas)
                };
                var todosLosProductos = new DimensionInfoDto()
                {
                    Explicita                 = false,
                    IdDimension               = _idDimensionProductos,
                    QNameDimension            = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionProductos]),
                    ElementoMiembroTipificado = String.Format(_templateTypedMemeberProducto, _todosLosProductos)
                };


                var combinacionesMarcaProducto = ObtenerCombinacionesDimensionesMarcaProducto(instancia, fechaInicio, fechaFin);
                if (combinacionesMarcaProducto.Count > 0)
                {
                    hojaAExportar.ShiftRows(_renglonInicioHechos, hojaAExportar.LastRowNum, combinacionesMarcaProducto.Count);
                }

                var iRenglon = _renglonInicioHechos;
                foreach (var combinacion in combinacionesMarcaProducto)
                {
                    var renglon = hojaAExportar.CreateRow(iRenglon);

                    ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, _columnaMarca, ObtenerNombreMarcaOProducto(combinacion[0]), CellType.String, null);
                    ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, _columnaProducto, ObtenerNombreMarcaOProducto(combinacion[1]), CellType.String, null);

                    var dimensionTipoIngreso = new DimensionInfoDto()
                    {
                        Explicita = true,
                    };

                    var listaDimensiones = new List <DimensionInfoDto>
                    {
                        combinacion[0],
                        combinacion[1],
                        dimensionTipoIngreso
                    };

                    for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++)
                    {
                        dimensionTipoIngreso.IdDimension      = _idDimensionTipoIngresos;
                        dimensionTipoIngreso.QNameDimension   = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionTipoIngresos]);
                        dimensionTipoIngreso.IdItemMiembro    = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol);
                        dimensionTipoIngreso.QNameItemMiembro = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol)]);

                        var hecho = instancia.BuscarHechos(_idElementoPrimarioIngresos, null, null, fechaInicio,
                                                           fechaFin, listaDimensiones);
                        if (hecho != null && hecho.Count > 0)
                        {
                            ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, hecho[0].Valor, CellType.Numeric, hecho[0]);
                        }
                    }
                    iRenglon++;
                }

                var numRenglones = hojaAExportar.LastRowNum;
                for (; iRenglon <= numRenglones; iRenglon++)
                {
                    if (_tituloRenglonTotal.Equals(ExcelUtil.ObtenerValorCelda(hojaAExportar, iRenglon, _columnaProducto)))
                    {
                        for (var iCol = _columnaInicioHechos; iCol <= _columnaFinHechos; iCol++)
                        {
                            var tipoIngreso = new DimensionInfoDto()
                            {
                                Explicita        = true,
                                IdDimension      = _idDimensionTipoIngresos,
                                QNameDimension   = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[_idDimensionTipoIngresos]),
                                IdItemMiembro    = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol),
                                QNameItemMiembro = ObtenerQNameConcepto(instancia.Taxonomia.ConceptosPorId[ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionItemTipoIngreso, iCol)])
                            };

                            var hecho = instancia.BuscarHechos(_idElementoPrimarioIngresos, null, null, fechaInicio,
                                                               fechaFin, new List <DimensionInfoDto>()
                            {
                                todasLasMarcas, todosLosProductos, tipoIngreso
                            });
                            if (hecho != null && hecho.Count > 0)
                            {
                                ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, hecho[0].Valor, CellType.Numeric, hecho[0]);
                            }
                        }
                        break;
                    }
                }
            }
        }
        public void ExportarDatosDeHojaExcel(ISheet hojaAExportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia, string rol, Model.IDefinicionPlantillaXbrl plantillaDocumento, String idioma)
        {
            var numRenglones = hojaPlantilla.LastRowNum;

            for (var iRenglon = _renglonInicioHechos; iRenglon <= numRenglones; iRenglon++)
            {
                var idElementoPrimario = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, iRenglon, _columnaIdConcepto);
                if (idElementoPrimario != null && instancia.Taxonomia.ConceptosPorId.ContainsKey(idElementoPrimario))
                {
                    var concepto    = instancia.Taxonomia.ConceptosPorId[idElementoPrimario];
                    var EsAbstracto = concepto.EsAbstracto != null ? concepto.EsAbstracto.Value : false;
                    if (!EsAbstracto || (concepto.EsMiembroDimension != null && concepto.EsMiembroDimension.Value))
                    {
                        var idItemAjustes = _idItemMiembroSenialadoActualmenteAjustes;
                        //Si el concepto es un miembro de dimension, entonces se expresa el capital inicial para ese miembro
                        if (concepto.EsMiembroDimension != null && concepto.EsMiembroDimension.Value)
                        {
                            //Cambiar el concepto a capital contable y colocar el concepto a describir como miembro de la dimensión ajustes
                            idItemAjustes = concepto.Id;
                            concepto      = instancia.Taxonomia.ConceptosPorId[_elementosPrimarios[0]];
                        }
                        var numColumnas = hojaPlantilla.GetRow(iRenglon).LastCellNum;
                        for (int iCol = _columnaInicioHechos; iCol <= numColumnas; iCol++)
                        {
                            var valorDimensionAjustes = new DimensionInfoDto()
                            {
                                IdDimension   = _idDimensionAjustes,
                                IdItemMiembro = idItemAjustes,
                                Explicita     = true
                            };
                            var valorDimensionComponentesCapital = new DimensionInfoDto()
                            {
                                IdDimension   = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonDimensionComponentesCapital, _columnaInicioHechos),
                                IdItemMiembro = ExcelUtil.ObtenerIdConceptoDeCelda(hojaPlantilla, _renglonMiembroComponentesCapital, iCol),
                                Explicita     = true
                            };

                            if (!String.IsNullOrEmpty(valorDimensionAjustes.IdDimension) && !String.IsNullOrEmpty(valorDimensionAjustes.IdItemMiembro) &&
                                !String.IsNullOrEmpty(valorDimensionComponentesCapital.IdDimension) &&
                                !String.IsNullOrEmpty(valorDimensionComponentesCapital.IdItemMiembro))
                            {
                                DateTime fechaInicio         = DateTime.MinValue;
                                DateTime fechaFin            = DateTime.MinValue;
                                var      variableFechaFin    = hojaPlantilla.SheetName.Contains("Actual") ? "fecha_2015_09_30" : "fecha_2014_09_30";
                                var      variableFechaInicio = hojaPlantilla.SheetName.Contains("Actual") ? "fecha_2015_01_01" : "fecha_2014_01_01";

                                if (XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaFin), out fechaFin)
                                    &&
                                    XmlUtil.ParsearUnionDateTime(plantillaDocumento.ObtenerVariablePorId(variableFechaInicio), out fechaInicio))
                                {
                                    //Si es capital contable al inicio se envía de fecha de fin = fecha de inicio - 1 día
                                    //Si es capital contable al final se envía fecha de fin = fecha de fin
                                    if (iRenglon <= _renglonFinalAjustesRetrospectivos)
                                    {
                                        fechaFin = fechaInicio.AddDays(-1);
                                    }
                                    var listaDimensiones = new List <DimensionInfoDto>();

                                    if (instancia.Taxonomia.DimensionDefaults.ContainsKey(valorDimensionAjustes.IdDimension) &&
                                        !valorDimensionAjustes.IdItemMiembro.Equals(instancia.Taxonomia.DimensionDefaults[valorDimensionAjustes.IdDimension]))
                                    {
                                        listaDimensiones.Add(valorDimensionAjustes);
                                    }
                                    if (instancia.Taxonomia.DimensionDefaults.ContainsKey(valorDimensionComponentesCapital.IdDimension) &&
                                        !valorDimensionComponentesCapital.IdItemMiembro.Equals(instancia.Taxonomia.DimensionDefaults[valorDimensionComponentesCapital.IdDimension]))
                                    {
                                        listaDimensiones.Add(valorDimensionComponentesCapital);
                                    }

                                    var hechoDto = instancia.BuscarHechos(concepto.Id, null, null, fechaInicio, fechaFin,
                                                                          listaDimensiones);

                                    if (hechoDto != null && hechoDto.Count > 0)
                                    {
                                        ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol, hechoDto[0].Valor,
                                                                    concepto.EsTipoDatoNumerico?
                                                                    CellType.Numeric:CellType.String
                                                                    , hechoDto[0]);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Inserta los valores a exportar de un grupo de hechos relacionados a un miembro de la dimensión de tipo de pasivo
        /// En caso de que sea alguno de los miembros que totalizan entonces no se insertan renglones
        /// </summary>
        /// <param name="hojaAExportar"></param>
        /// <param name="renglonTipoPasivo"></param>
        /// <param name="tipoPasivoActual"></param>
        /// <param name="instancia"></param>
        /// <param name="plantillaDocumento"></param>
        private void ExportarGrupoTipoPasivo(NPOI.SS.UserModel.ISheet hojaAExportar, int renglonTipoPasivo, string tipoPasivoActual, DocumentoInstanciaXbrlDto instancia,
                                             IDefinicionPlantillaXbrl plantillaDocumento)
        {
            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;
            }

            //aplica para renglón primarios
            if (_miembrosTipoPasivoTotales.Contains(tipoPasivoActual))
            {
                int iMiembroSubtabla = 0;
                foreach (var elementoPrimario in listaPrimarios)
                {
                    if (_elementosPrimariosTotal.Contains(elementoPrimario))
                    {
                        IList <HechoDto> listaHechos = null;
                        if (elementoPrimario.Equals(_idConceptoSubtabla))
                        {
                            listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, hechosDeTipoPasivo, elementoPrimario, null);
                            listaHechos = FiltrarHechosPorDimensionYMiembro(instancia, listaHechos, _idDimensionIntervalo, _miembrosIntervaloDeTiempo[iMiembroSubtabla++]);
                        }
                        else
                        {
                            listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, hechosDeTipoPasivo, elementoPrimario, null);
                        }
                        if (listaHechos.Count > 0)
                        {
                            ExcelUtil.AsignarValorCelda(hojaAExportar, renglonTipoPasivo, iCol,
                                                        listaHechos[0].Valor, CellType.Numeric, null);
                        }
                    }
                    iCol++;
                }
            }
            else
            {
                //Organizar por secuencia
                var secuenciasEnHechos = OrganizarHechosPorSecuencia(instancia, hechosDeTipoPasivo);
                if (secuenciasEnHechos.Count > 0)
                {
                    hojaAExportar.ShiftRows(iRenglon + 1, hojaAExportar.LastRowNum, secuenciasEnHechos.Count);
                    iRenglon++;
                    foreach (var secuencia in secuenciasEnHechos.Keys)
                    {
                        var renglon = hojaAExportar.CreateRow(iRenglon);
                        iCol = _columnaInicioDatos;
                        int iMiembroSubtabla = 0;
                        foreach (var elementoPrimario in listaPrimarios)
                        {
                            IList <HechoDto> listaHechos = null;

                            if (elementoPrimario.Equals(_idConceptoSubtabla))
                            {
                                listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, secuenciasEnHechos[secuencia], elementoPrimario, null);
                                listaHechos = FiltrarHechosPorDimensionYMiembro(instancia, listaHechos, _idDimensionIntervalo, _miembrosIntervaloDeTiempo[iMiembroSubtabla++]);
                            }
                            else
                            {
                                listaHechos = ObtenerHechosPorElementoPrimarioYSecuencia(instancia, secuenciasEnHechos[secuencia], elementoPrimario, null);
                            }

                            if (listaHechos.Count > 0)
                            {
                                var cellType = CellType.String;
                                if (listaHechos[0].EsNumerico)
                                {
                                    cellType = CellType.Numeric;
                                }

                                ExcelUtil.AsignarValorCelda(hojaAExportar, iRenglon, iCol,
                                                            listaHechos[0].Valor, cellType, null);
                            }
                            iCol++;
                        }
                        iRenglon++;
                    }
                }
            }
        }