Beispiel #1
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);
        }
Beispiel #2
0
        /// <summary>
        /// Agrega un nuevo hecho importado al listado y verifica si es un hecho que sobreescribe a otro
        /// </summary>
        /// <param name="hechoImportado">Hecho que se importa</param>
        public void AgregarHechoImportado(InformacionHechoImportadoExcelDto hechoImportado, String nombreConcepto)
        {
            if (!HechosImportados.ContainsKey(hechoImportado.IdConcepto))
            {
                HechosImportados.Add(hechoImportado.IdConcepto, new List <InformacionHechoImportadoExcelDto>());
            }
            //Verificar si ya existe una importación a ese hecho y si el valor el diferente
            InformacionHechoImportadoExcelDto hechoInicial = HechosImportados[hechoImportado.IdConcepto].
                                                             FirstOrDefault(x => x.IdHecho.Equals(hechoImportado.IdHecho) && !x.ValorImportado.Equals(hechoImportado.ValorImportado));

            if (hechoInicial != null)
            {
                var valTmp = hechoInicial.ValorImportado;
                if (valTmp.Length > 30)
                {
                    valTmp = valTmp.Substring(0, 30) + "...";
                }
                var valTmpFinal = hechoImportado.ValorImportado;
                if (valTmpFinal.Length > 30)
                {
                    valTmpFinal = valTmpFinal.Substring(0, 30) + "...";
                }
                //Hecho sobreescrito
                HechosSobreescritos.Add(new InformacionHechoSobreescritoDto()
                {
                    IdConcepto   = hechoImportado.IdConcepto,
                    IdHecho      = hechoImportado.IdHecho,
                    ValorInicial = valTmp,
                    ValorFinal   = valTmpFinal,
                    HojaInicial  = hechoInicial.HojaExcel,
                    HojaFinal    = hechoImportado.HojaExcel,
                    Mensaje      = "El concepto (" + nombreConcepto + ") fue importado desde la hoja (" + hechoInicial.HojaExcel + ") con valor (" + valTmp +
                                   ") pero fue importado nuevamente desde la hoja (" + hechoImportado.HojaExcel + ")"
                });
            }
            HechosImportados[hechoImportado.IdConcepto].Add(hechoImportado);
        }
Beispiel #3
0
        /// <summary>
        /// Actualiza o crea un hecho en base a los parámetros enviados
        /// </summary>

        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 hechos = instancia.BuscarHechos(concepto.Id, null, null, fechaInicio, fechaFin, dimensiones);

            if (hechos.Count > 0)
            {
                foreach (var hechoActualizar in hechos)
                {
                    if (!ActualizarValor(concepto, valorCelda, hechoActualizar, plantillaDocumento))
                    {
                        resumenImportacion.AgregarErrorFormato(
                            UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id),
                            hojaImportar.SheetName,
                            iRenglon.ToString(),
                            "0",
                            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, hechoActualizar.Id));
                    }
                }
            }
            else
            {
                var qNameCompleto = XmlUtil.ParsearQName(qNameEntidad);
                AbaxXBRLCore.Viewer.Application.Dto.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 AbaxXBRLCore.Viewer.Application.Dto.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)
                {
                    //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];
                    }
                }

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

                if (!ActualizarValor(concepto, valorCelda, hechoNuevo, plantillaDocumento))
                {
                    resumenImportacion.AgregarErrorFormato(
                        UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, concepto.Id),
                        hojaImportar.SheetName,
                        iRenglon.ToString(),
                        "0",
                        valorCelda);
                }
                else
                {
                    resumenImportacion.TotalHechosImportados++;
                    var hechoImportado = new AbaxXBRLCore.Common.Dtos.InformacionHechoImportadoExcelDto()
                    {
                        IdConcepto     = hechoNuevo.IdConcepto,
                        IdHecho        = hechoNuevo.Id,
                        ValorImportado = valorCelda,
                        HojaExcel      = hojaImportar.SheetName,
                        Renglon        = iRenglon,
                        Columna        = columna
                    };
                    resumenImportacion.AgregarHechoImportado(hechoImportado, UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, hechoNuevo.Id));
                }

                plantillaDocumento.InyectaHechoADocumentoInstancia(hechoNuevo);
            }
        }
Beispiel #4
0
        /// <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;
                }
            }
        }