/// <summary> /// Envia un correo a la lista de notificación enviada como parámetro. /// El contenido del correo depende del estatus de la bitácoa. /// </summary> /// <param name="lista">Lista a enviar</param> /// <param name="bitacora">Bitácora que se procesó</param> private void EnviarCorreoALista(ListaNotificacion lista, BitacoraVersionDocumento bitacora, DocumentoInstanciaXbrlDto documentoInstancia) { var empresa = DocumentoInstanciaRepository.ObtenerEmpresaDeDocumento(bitacora.IdDocumentoInstancia); var cuerpoCorreo = ""; if (bitacora.Estatus == DistribucionDocumentoConstants.DISTRIBUCION_ESTATUS_APLICADO) { cuerpoCorreo = TemplateMail.ObtenerContenidoTemplateHtml(TemplateMailExito); } else if (bitacora.Estatus == DistribucionDocumentoConstants.DISTRIBUCION_ESTATUS_ERROR) { cuerpoCorreo = TemplateMail.ObtenerContenidoTemplateHtml(TemplateMailError); } var destinatarios = new StringBuilder(); foreach (var destinatario in lista.DestinatarioNotificacion) { if (destinatarios.Length > 0) { destinatarios.Append(","); } destinatarios.Append(destinatario.CorreoElectronico); } try { LogUtil.Info("Enviando correo a lista de distribución:" + lista.ClaveLista); MailUtil.EnviarEmail(destinatarios.ToString(), lista.TituloMensaje, String.Format(cuerpoCorreo, documentoInstancia.Titulo ?? "null", empresa != null?empresa.NombreCorto:"")); } catch (Exception ex) { LogUtil.Error("Falló el envío de correo por el host:" + MailUtil.S_HOST); LogUtil.Error(ex); } }
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); }