Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        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);
        }