/// <summary>
        /// Crea un hecho y lo inyecta al documento de instancia y a la tupla padre
        /// </summary>
        /// <param name="hechoEnTupla"></param>
        /// <param name="idConcepto"></param>
        /// <param name="instancia"></param>
        /// <returns></returns>
        private AbaxXBRLCore.Viewer.Application.Dto.HechoDto CrearHechoEnTupla(AbaxXBRLCore.Viewer.Application.Dto.HechoDto tupla, string idConcepto, DocumentoInstanciaXbrlDto instancia,
                                                                               Model.IDefinicionPlantillaXbrl plantillaDocumento, string idContextoGeneral)
        {
            var idHecho  = "INV_H_" + Guid.NewGuid().ToString();
            var concepto = instancia.Taxonomia.ConceptosPorId[idConcepto];
            List <MedidaDto> listaMedidas = null;
            string           idUnidad     = null;
            var decimales = "";

            if (concepto.TipoDatoXbrl.Contains(TiposDatoXBRL.MonetaryItemType))
            {
                idUnidad  = "moneda_reporte";
                decimales = "2";
            }
            else if (concepto.EsTipoDatoNumerico)
            {
                idUnidad  = "pure";
                decimales = "2";
            }

            var hechoNuevo = instancia.CrearHecho(idConcepto, idUnidad, idContextoGeneral, idHecho);

            hechoNuevo.Decimales = decimales;
            plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo);
            tupla.Hechos.Add(hechoNuevo.Id);
            return(hechoNuevo);
        }
        /// <summary>
        /// Crea un nuevo hecho en el documento de instancia basado en los parámetros enviados.
        /// </summary>
        /// <returns></returns>
        private HechoDto CrearHecho(DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento, string idConcepto,
                                    ContextoDto contextoDestino)
        {
            HechoDto    hechoNuevo    = null;
            ConceptoDto concepto      = instancia.Taxonomia.ConceptosPorId[idConcepto];
            UnidadDto   unidadDestino = null;

            if (concepto.EsTipoDatoNumerico)
            {
                //Si es moentario
                var listaMedidas = new List <MedidaDto>();

                if (concepto.TipoDatoXbrl.Contains(TiposDatoXBRL.MonetaryItemType))
                {
                    listaMedidas.Add(new MedidaDto()
                    {
                        EspacioNombres = plantillaDocumento.ObtenerVariablePorId("medida_http___www_xbrl_org_2003_iso4217"),
                        Nombre         = plantillaDocumento.ObtenerVariablePorId("medida_MXN")
                    });
                }
                else
                {
                    //Unidad pure
                    listaMedidas.Add(new MedidaDto()
                    {
                        EspacioNombres = plantillaDocumento.ObtenerVariablePorId("medida_http___www_xbrl_org_2003_instance"),
                        Nombre         = plantillaDocumento.ObtenerVariablePorId("medida_pure")
                    });
                }

                var unidades = instancia.BuscarUnidades(Unit.Medida, listaMedidas, null);
                if (unidades == null || unidades.Count == 0)
                {
                    unidadDestino = new UnidadDto()
                    {
                        Id      = "U" + Guid.NewGuid().ToString(),
                        Tipo    = Unit.Medida,
                        Medidas = listaMedidas
                    };
                    instancia.UnidadesPorId.Add(unidadDestino.Id, unidadDestino);
                }
                else
                {
                    unidadDestino = unidades[0];
                }
            }

            hechoNuevo = instancia.CrearHecho(concepto.Id, unidadDestino != null ? unidadDestino.Id : null, contextoDestino.Id, "A" + Guid.NewGuid().ToString());
            if (concepto.EsTipoDatoNumerico)
            {
                hechoNuevo.Decimales = _valorDecimalesHechos;
            }
            plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo);

            return(hechoNuevo);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Crea un nuevo hecho.
        /// </summary>
        /// <param name="valor">Valor del hecho.</param>
        /// <param name="concepto">Concepto del hecho.</param>
        /// <param name="contexto">Contexto del hecho.</param>
        /// <param name="idUnidad">Identificador de la unidad.</param>
        /// <param name="instancia">Documento de instancia.</param>
        /// <param name="plantilla">Plantilla del documento.</param>
        /// <param name="resumenImportacion">Detalle de la importación.</param>
        /// <param name="nombreHoja">Nombre de la hoja.</param>
        /// <param name="numeroFila">Indice de la fila.</param>
        /// <param name="numeroColumna">Indice de la columna.</param>
        private void CreaHecho(
            String valor,
            ConceptoDto concepto,
            Dto.ContextoDto contexto,
            String idUnidad,
            DocumentoInstanciaXbrlDto instancia,
            IDefinicionPlantillaXbrl plantilla,
            ResumenProcesoImportacionExcelDto resumenImportacion,
            String nombreHoja,
            int numeroFila,
            int numeroColumna)
        {
            var idHecho    = "A" + Guid.NewGuid().ToString();
            var hechoNuevo = instancia.CrearHecho(concepto.Id, idUnidad, contexto.Id, idHecho);

            if (concepto.EsTipoDatoNumerico)
            {
                if (concepto.TipoDatoXbrl.Contains(TiposDatoXBRL.MonetaryItemType))
                {
                    hechoNuevo.Decimales = "-3";
                }
                else
                {
                    hechoNuevo.Decimales = "0";
                }
            }
            if (!ActualizarValor(concepto, valor, hechoNuevo, plantilla))
            {
                resumenImportacion.AgregarErrorFormato(
                    UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id),
                    nombreHoja,
                    numeroFila.ToString(),
                    numeroColumna.ToString(),
                    valor);
            }
            else
            {
                resumenImportacion.TotalHechosImportados++;
                var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                {
                    IdConcepto     = hechoNuevo.IdConcepto,
                    IdHecho        = hechoNuevo.Id,
                    ValorImportado = valor,
                    HojaExcel      = nombreHoja,
                    Renglon        = numeroFila,
                    Columna        = numeroColumna
                };
                resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, hechoNuevo.Id));
            }

            plantilla.InyectaHechoADocumentoInstancia(hechoNuevo);
        }
        /// <summary>
        /// Actualiza o crea un hecho en base a los criterios enviados como parámetro
        /// </summary>
        /// <param name="instancia">Documento instnacia actual</param>
        /// <param name="idConcepto">Concepto actual</param>
        /// <param name="hojaAImportar">Hoja actualmente procesada</param>
        /// <param name="renglonActual">Renglón actualmente procesado</param>
        /// <param name="numColumna">Columna actualmente procesada</param>
        /// <param name="contextoDestino">Contexto a donde se asignarán los hechos creados</param>
        private void ActualizarValorHecho(DocumentoInstanciaXbrlDto instancia, string idConcepto, ISheet hojaAImportar, int renglonActual, int numColumna,
                                          AbaxXBRLCore.Viewer.Application.Dto.ContextoDto contextoDestino, IDefinicionPlantillaXbrl plantillaDocumento, AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion)
        {
            var valorCelda   = ExcelUtil.ObtenerValorCelda(hojaAImportar, renglonActual, numColumna);
            var fechaDefault = plantillaDocumento.ObtenerVariablePorId("fecha_2016_10_12");

            if (!String.IsNullOrEmpty(valorCelda))
            {
                ConceptoDto conceptoImportado = instancia.Taxonomia.ConceptosPorId[idConcepto];
                HechoDto    hechoActualizar   = null;

                var hechos = instancia.BuscarHechos(idConcepto, null, null, contextoDestino.Periodo.FechaInstante, contextoDestino.Periodo.FechaInstante, null, false);

                if (hechos.Count > 0)
                {
                    hechoActualizar = hechos[0];
                }
                else
                {
                    hechoActualizar = instancia.CrearHecho(idConcepto, null, contextoDestino.Id, "A" + Guid.NewGuid().ToString());

                    plantillaDocumento.InyectaHechoADocumentoInstancia(hechoActualizar);
                }

                if (!UtilAbax.ActualizarValorHecho(conceptoImportado, hechoActualizar, valorCelda, fechaDefault))
                {
                    resumenImportacion.AgregarErrorFormato(
                        UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportado.Id),
                        hojaAImportar.SheetName,
                        renglonActual.ToString(),
                        numColumna.ToString(),
                        valorCelda);
                }
                else
                {
                    resumenImportacion.TotalHechosImportados++;
                    var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                    {
                        IdConcepto     = hechoActualizar.IdConcepto,
                        IdHecho        = hechoActualizar.Id,
                        ValorImportado = valorCelda,
                        HojaExcel      = hojaAImportar.SheetName,
                        Renglon        = renglonActual,
                        Columna        = numColumna
                    };

                    resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportado.Id));
                }
            }
        }
        private void ActualizarValorHecho(ConceptoDto concepto, string valorCelda, List <DimensionInfoDto> dimensiones,
                                          DateTime fechaInicio, DateTime fechaFin, string qNameEntidad, DocumentoInstanciaXbrlDto instancia, IDefinicionPlantillaXbrl plantillaDocumento,
                                          AbaxXBRLCore.Common.Dtos.ResumenProcesoImportacionExcelDto resumenImportacion, ISheet hojaImportar, int iRenglon, int columna)
        {
            if (String.IsNullOrEmpty(valorCelda))
            {
                return;
            }

            var             fechaDefault      = plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01");
            List <HechoDto> hechosAActualizar = new List <HechoDto>();

            var hechos = instancia.BuscarHechos(concepto.Id, null, null, fechaInicio, fechaFin, dimensiones);

            if (hechos.Count > 0)
            {
                hechosAActualizar.AddRange(hechos);
            }
            else
            {
                var         qNameCompleto   = XmlUtil.ParsearQName(qNameEntidad);
                ContextoDto contextoDestino = null;
                var         tipoPeriodo     = concepto.TipoPeriodo.Equals(EtiquetasXBRLConstantes.Instant) ? Period.Instante : Period.Duracion;
                var         contextos       = instancia.BuscarContexto(qNameEntidad,
                                                                       tipoPeriodo, fechaInicio, fechaFin, dimensiones);
                if (contextos == null || contextos.Count == 0)
                {
                    contextoDestino = new ContextoDto()
                    {
                        Entidad = new EntidadDto()
                        {
                            ContieneInformacionDimensional = false,
                            EsquemaId = qNameCompleto.Namespace,
                            Id        = qNameCompleto.Name
                        },
                        ContieneInformacionDimensional = dimensiones.Count > 0,
                        ValoresDimension = dimensiones,
                        Periodo          = new PeriodoDto()
                        {
                            Tipo          = tipoPeriodo,
                            FechaInicio   = fechaInicio,
                            FechaFin      = fechaFin,
                            FechaInstante = fechaFin
                        },
                        Id = "C" + Guid.NewGuid().ToString()
                    };
                    plantillaDocumento.InyectarContextoADocumentoInstancia(contextoDestino);
                }
                else
                {
                    contextoDestino = contextos[0];
                }

                UnidadDto unidadDestino = null;
                if (concepto.EsTipoDatoNumerico)
                {
                    var listaMedidas = new List <MedidaDto>()
                    {
                        new MedidaDto()
                        {
                            EspacioNombres = plantillaDocumento.ObtenerVariablePorId("medida_http___www_xbrl_org_2003_iso4217"),
                            Nombre         = plantillaDocumento.ObtenerVariablePorId("medida_MXN")
                        }
                    };

                    var unidades = instancia.BuscarUnidades(Unit.Medida, listaMedidas, null);
                    if (unidades == null || unidades.Count == 0)
                    {
                        unidadDestino = new UnidadDto()
                        {
                            Id      = "U" + Guid.NewGuid().ToString(),
                            Tipo    = Unit.Medida,
                            Medidas = listaMedidas
                        };
                        instancia.UnidadesPorId.Add(unidadDestino.Id, unidadDestino);
                    }
                    else
                    {
                        unidadDestino = unidades[0];
                    }
                }

                var hechoNuevo = instancia.CrearHecho(concepto.Id, unidadDestino != null ? unidadDestino.Id : null, contextoDestino.Id, "A" + Guid.NewGuid().ToString());
                if (concepto.EsTipoDatoNumerico)
                {
                    hechoNuevo.Valor     = "0";
                    hechoNuevo.Decimales = _valorDecimalesHechos;
                }
                hechosAActualizar.Add(hechoNuevo);

                plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo);
            }

            foreach (var hechoActualizar in hechosAActualizar)
            {
                var conceptoImportar = instancia.Taxonomia.ConceptosPorId[hechoActualizar.IdConcepto];
                if (!UtilAbax.ActualizarValorHecho(conceptoImportar, hechoActualizar, valorCelda, fechaDefault))
                {
                    resumenImportacion.AgregarErrorFormato(
                        UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportar.Id),
                        hojaImportar.SheetName,
                        iRenglon.ToString(),
                        columna.ToString(),
                        valorCelda);
                }
                else
                {
                    resumenImportacion.TotalHechosImportados++;
                    var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                    {
                        IdConcepto     = hechoActualizar.IdConcepto,
                        IdHecho        = hechoActualizar.Id,
                        ValorImportado = valorCelda,
                        HojaExcel      = hojaImportar.SheetName,
                        Renglon        = iRenglon,
                        Columna        = columna
                    };

                    resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportar.Id));
                }
            }
        }