Ejemplo n.º 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);
        }
        public void ImportarDatosDeHojaExcel(ISheet hojaAImportar, ISheet hojaPlantilla, DocumentoInstanciaXbrlDto instancia,
                                             string rol, ResumenProcesoImportacionExcelDto resumenImportacion, IDefinicionPlantillaXbrl plantillaDocumento)
        {
            var maxRow        = hojaPlantilla.LastRowNum;
            var fechaDefault  = plantillaDocumento.ObtenerVariablePorId("fecha_2015_01_01");
            var idiomaDefault = instancia.Taxonomia != null && instancia.Taxonomia.IdiomasTaxonomia != null && instancia.Taxonomia.IdiomasTaxonomia.Keys.Count > 0 ?
                                instancia.Taxonomia.IdiomasTaxonomia.Keys.First() : String.Empty;

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

                    for (var iCol = 0; iCol <= maxCol; iCol++)
                    {
                        var valorHechoPlantilla = ExcelUtil.ObtenerValorCelda(renglon, iCol);
                        if (!String.IsNullOrEmpty(valorHechoPlantilla) && valorHechoPlantilla.StartsWith(PREFIJO_CELDA_HECHO_PLANTILLA) &&
                            valorHechoPlantilla.Length > PREFIJO_CELDA_HECHO_PLANTILLA.Length)
                        {
                            var idHechoPlantilla = valorHechoPlantilla.Substring(PREFIJO_CELDA_HECHO_PLANTILLA.Length);

                            var valorCeldaImportar = ExcelUtil.ObtenerValorCelda(hojaAImportar, iRenglon, iCol);

                            if (!String.IsNullOrEmpty(valorCeldaImportar))
                            {
                                //Buscar el hecho de plantilla en el documento de instancia
                                var hechoInstancia =
                                    plantillaDocumento.BuscarHechoPlantillaEnHechosDocumentoInstancia(
                                        idHechoPlantilla);


                                //Si el hecho no existe crearlo en base a la plantilla
                                if (hechoInstancia == null)
                                {
                                    hechoInstancia =
                                        plantillaDocumento.CrearHechoAPartirDeIdDefinicionPlantilla(
                                            idHechoPlantilla);
                                    if (hechoInstancia != null)
                                    {
                                        hechoInstancia.NotasAlPie = ExcelUtil.ObtenerComentariosCelda(renglon, iCol, idiomaDefault);
                                        plantillaDocumento.InyectaHechoADocumentoInstancia(hechoInstancia);
                                    }
                                }
                                if (hechoInstancia != null)
                                {
                                    var conceptoImportar = instancia.Taxonomia.ConceptosPorId[hechoInstancia.IdConcepto];
                                    if (!UtilAbax.ActualizarValorHecho(conceptoImportar, hechoInstancia, valorCeldaImportar, fechaDefault))
                                    {
                                        resumenImportacion.AgregarErrorFormato(
                                            UtilAbax.ObtenerEtiqueta(instancia.Taxonomia, conceptoImportar.Id),
                                            hojaAImportar.SheetName,
                                            iRenglon.ToString(),
                                            iCol.ToString(),
                                            valorCeldaImportar);
                                    }
                                    else
                                    {
                                        resumenImportacion.TotalHechosImportados++;
                                        var hechoImportado = new InformacionHechoImportadoExcelDto()
                                        {
                                            IdConcepto     = hechoInstancia.IdConcepto,
                                            IdHecho        = hechoInstancia.Id,
                                            ValorImportado = valorCeldaImportar,
                                            HojaExcel      = hojaAImportar.SheetName,
                                            Renglon        = iRenglon,
                                            Columna        = iCol
                                        };

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