public VersionDocumentoInstancia ObtenerVersionDocumentoInstanciaSinDatosPorIdBitacoraVersionDocumento(long idBitacoraVersionDocumento) { var resultados = BitacoraVersionDocumentoRepository.GetQueryable().Where(x => x.IdBitacoraVersionDocumento == idBitacoraVersionDocumento).Select(x => new{ x.VersionDocumentoInstancia.IdDocumentoInstancia, x.VersionDocumentoInstancia.Version }).ToList(); if (resultados.Count > 0) { return(new VersionDocumentoInstancia() { IdDocumentoInstancia = resultados[0].IdDocumentoInstancia, Version = resultados[0].Version }); } return(null); }
public void ActualizaEstadoBitacoraDistribucion(long IdBitacoraDistribucionDocumento, int estatus) { var distribucion = BitacoraDistribucionDocumentoRepository.GetQueryable().Where(x => x.IdBitacoraDistribucionDocumento == IdBitacoraDistribucionDocumento).FirstOrDefault(); if (distribucion == null) { return; } distribucion.Estatus = estatus; BitacoraDistribucionDocumentoRepository.Update(distribucion); var version = BitacoraVersionDocumentoRepository.GetQueryable().Where(x => x.IdBitacoraVersionDocumento == distribucion.IdBitacoraVersionDocumento).FirstOrDefault(); if (version == null) { return; } version.Estatus = estatus; BitacoraVersionDocumentoRepository.Update(version); }
public ResultadoOperacionDto DistribuirDocumentoInstanciaXBRL(long idDocumentoInstancia, long version, IDictionary <string, object> parametros) { LogUtil.Info("Iniciando las distribuciones del documento XBRL:" + idDocumentoInstancia + ", version:" + version); var resultado = new ResultadoOperacionDto(); //Obtener la bitácora de la distribución de este documento VersionDocumentoInstanciaRepository.DbContext.Database.CommandTimeout = 380; var versionDocumento = VersionDocumentoInstanciaRepository.GetQueryable().Where(x => x.IdDocumentoInstancia == idDocumentoInstancia && x.Version == version).FirstOrDefault(); if (versionDocumento == null) { LogUtil.Error("No se encontró la versión del documento de instancia:" + idDocumentoInstancia + " version " + version); resultado.Resultado = false; resultado.Mensaje = "No se encontró el registro de Versión de Documento de Instancia ID:" + idDocumentoInstancia + " version " + version; return(resultado); } var bitacora = BitacoraVersionDocumentoRepository.GetQueryable().Where(x => x.IdVersionDocumentoInstancia == versionDocumento.IdVersionDocumentoInstancia).FirstOrDefault(); if (bitacora == null) { LogUtil.Error("No se encontró el registro de Bitácora de Documento de Instancia ID:" + versionDocumento.IdVersionDocumentoInstancia); resultado.Resultado = false; resultado.Mensaje = "No se encontró el registro de Bitácora de Documento de Instancia ID:" + versionDocumento.IdVersionDocumentoInstancia; return(resultado); } if (bitacora.Estatus == DistribucionDocumentoConstants.DISTRIBUCION_ESTATUS_APLICADO) { LogUtil.Error("El estatus de la distribución del documento ya es \"Aplicado\", no se ejecuta distribución para el documento \"" + idDocumentoInstancia + "\" version " + version); resultado.Resultado = true; resultado.Mensaje = "El estatus de la distribución del documento ya es \"Aplicado\", no se ejecuta distribución para el documento \"" + idDocumentoInstancia + "\" version " + version; return(resultado); } String newData = ZipUtil.UnZip(versionDocumento.Datos); versionDocumento.Datos = null; System.GC.Collect(); LogUtil.Info("Memoria usada:" + System.GC.GetTotalMemory(true)); var documentoInstanciaXbrlDto = JsonConvert.DeserializeObject <DocumentoInstanciaXbrlDto>(newData); newData = null; documentoInstanciaXbrlDto.IdDocumentoInstancia = bitacora.IdDocumentoInstancia; documentoInstanciaXbrlDto.Version = bitacora.VersionDocumentoInstancia.Version; documentoInstanciaXbrlDto.Taxonomia = ObtenerTaxonomia(documentoInstanciaXbrlDto.DtsDocumentoInstancia); var fechaRecepcion = DocumentoInstanciaRepository.GetQueryable().Where(x => x.IdDocumentoInstancia == idDocumentoInstancia).Select(x => x.FechaCreacion).FirstOrDefault(); if (parametros == null) { parametros = new Dictionary <string, object>(); } if (!parametros.ContainsKey("FechaRecepcion")) { parametros.Add("FechaRecepcion", fechaRecepcion); } var bitacorasAActualizar = new List <BitacoraDistribucionDocumento>(); if (documentoInstanciaXbrlDto.Taxonomia == null) { resultado.Resultado = false; resultado.Mensaje = "Ocurrió un error al obtener la taxonomía del documento"; } else { resultado.Resultado = true; //aplicar cada una de las distribuciones foreach (var dist in Distribuciones) { var bitacoraDist = ObtenerOCrearBitacoraDistribucionExitosa(dist, bitacora); if (bitacoraDist.Estatus != DistribucionDocumentoConstants.DISTRIBUCION_ESTATUS_APLICADO) { ResultadoOperacionDto resultadoDist = null; try { resultadoDist = dist.EjecutarDistribucion(documentoInstanciaXbrlDto, parametros); if (!resultadoDist.Resultado && resultadoDist.Mensaje.Equals("NA")) { continue; } } catch (Exception ex) { resultadoDist = new ResultadoOperacionDto(); resultadoDist.Resultado = false; resultadoDist.Mensaje = ex.Message; resultadoDist.Excepcion = ex.StackTrace; } if (!resultadoDist.Resultado) { LogUtil.Error("Falló distribución de documento, Id Documento:" + idDocumentoInstancia + " Error:" + resultadoDist.Mensaje); LogUtil.Error(resultadoDist.Excepcion); resultado.Resultado = false; resultado.Mensaje = "Al menos una distribución falló en su ejecución"; bitacoraDist.Estatus = DistribucionDocumentoConstants.DISTRIBUCION_ESTATUS_ERROR; bitacoraDist.FechaUltimaModificacion = DateTime.Now; bitacoraDist.MensajeError = resultadoDist.Mensaje; } else { bitacoraDist.Estatus = DistribucionDocumentoConstants.DISTRIBUCION_ESTATUS_APLICADO; bitacoraDist.FechaUltimaModificacion = DateTime.Now; bitacoraDist.MensajeError = null; } bitacoraDist.IdBitacoraVersionDocumento = bitacora.IdBitacoraVersionDocumento; ActualizarBitacoraDistribucion(bitacoraDist); LogUtil.Info("Memoria usada:" + System.GC.GetTotalMemory(true)); } } System.GC.Collect(); } ActualizarBitacoraVersionDocumento(bitacora.IdBitacoraVersionDocumento, resultado); resultado.InformacionAuditoria = new InformacionAuditoriaDto() { Accion = ConstantsAccionAuditable.Insertar, Empresa = null, Fecha = DateTime.Now, IdUsuario = null, Modulo = ConstantsModulo.ServicioAlmacenamientoDocumentosXBRL, Registro = "Procesamiento de distribuciones XBRL para documento de instancia:" + idDocumentoInstancia }; NotificarAListaDeDistribucion(bitacora, documentoInstanciaXbrlDto); documentoInstanciaXbrlDto.Cerrar(); System.GC.Collect(0, GCCollectionMode.Forced, true); System.GC.Collect(1, GCCollectionMode.Forced, true); return(resultado); }