Пример #1
0
        /// <summary>
        /// Obtiene una taxonomía del caché o la carga y agrega en caso de no encontrarse
        /// </summary>
        /// <param name="listaDts"></param>
        /// <returns></returns>
        private TaxonomiaDto ObtenerTaxonomia(IList <DtsDocumentoInstanciaDto> listaDts)
        {
            var tax = CacheTaxonomia.ObtenerTaxonomia(listaDts);

            if (tax == null)
            {
                //Cargar taxonomía si no se encuentra en cache
                var errores = new List <ErrorCargaTaxonomiaDto>();
                var xpe     = AbaxXBRLCore.XPE.impl.XPEServiceImpl.GetInstance(ForzarHttp);
                tax = xpe.CargarTaxonomiaXbrl(listaDts.Where(x => x.Tipo == DtsDocumentoInstanciaDto.SCHEMA_REF).First().HRef, errores, false);
                if (tax != null)
                {
                    CacheTaxonomia.AgregarTaxonomia(listaDts, tax);
                }
                else
                {
                    LogUtil.Error("Error al cargar taxonomía:" + listaDts.Where(x => x.Tipo == DtsDocumentoInstanciaDto.SCHEMA_REF).First().HRef);
                    foreach (var error in errores)
                    {
                        LogUtil.Error(error.Mensaje);
                    }
                }
            }
            return(tax);
        }
        public IHttpActionResult CargarDocumentoInstanciaXbrl(long?idDocumentoInstancia, int?numeroVersion)
        {
            var viewerService      = new XbrlViewerService();
            var resultadoOperacion = new ResultadoOperacionDto();

            if (idDocumentoInstancia != null)
            {
                if (numeroVersion != null)
                {
                    resultadoOperacion = DocumentoInstanciaService.ObtenerVersionModeloDocumentoInstanciaXbrl(idDocumentoInstancia.Value, numeroVersion.Value, IdUsuarioExec);
                }
                else
                {
                    resultadoOperacion = DocumentoInstanciaService.ObtenerModeloDocumentoInstanciaXbrl(idDocumentoInstancia.Value, IdUsuarioExec);
                }

                var instanciaDto = (resultadoOperacion.InformacionExtra as DocumentoInstanciaXbrlDto);

                if (instanciaDto != null)
                {
                    var taxonomiaDto = CacheTaxonomia.ObtenerTaxonomia(instanciaDto.DtsDocumentoInstancia);
                    if (taxonomiaDto == null)
                    {
                        var taxo = new TaxonomiaXBRL {
                            ManejadorErrores = new ManejadorErroresCargaTaxonomia()
                        };
                        foreach (var dts in instanciaDto.DtsDocumentoInstancia)
                        {
                            if (dts.Tipo == DtsDocumentoInstanciaDto.SCHEMA_REF)
                            {
                                taxo.ProcesarDefinicionDeEsquema(dts.HRef);
                            }
                        }
                        taxo.CrearArbolDeRelaciones();
                        taxonomiaDto = viewerService.CrearTaxonomiaAPartirDeDefinicionXbrl(taxo);
                        CacheTaxonomia.AgregarTaxonomia(instanciaDto.DtsDocumentoInstancia, taxonomiaDto);
                        EstrategiaCacheTaxonomia.AgregarTaxonomia(DocumentoInstanciaXbrlDtoConverter.ConvertirDtsDocumentoInstancia(instanciaDto.DtsDocumentoInstancia), taxo);
                    }
                    (resultadoOperacion.InformacionExtra as DocumentoInstanciaXbrlDto).Taxonomia = taxonomiaDto;
                }
            }
            else
            {
                resultadoOperacion.Resultado = false;
                resultadoOperacion.Mensaje   = "El identificador del documento de instancia es requerido";
            }
            var jsonResult = this.Json(resultadoOperacion);

            return(jsonResult);
        }