Пример #1
0
        private void ExecutarThreadEnvioInforme(classes.EnvioInforme envio)
        {
            var destinatarios = new ManterEnvioInforme().ObterDestinatarios(envio);

            var assunto = envio.Informe.Numero + " " + envio.Informe.ObterMesAno();

            var manterEmail        = new ManterEmail();
            var manterEnvioInforme = new ManterEnvioInforme();

            // Pode ser lento.
            var mensagem = new ManterInforme().ObterTemplateHTML(envio.Informe);

            var imagens = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Header", Server.MapPath("../../img/newsletter/header.jpg")),
                new KeyValuePair <string, string>("Footer", Server.MapPath("../../img/newsletter/footer.jpg")),
                new KeyValuePair <string, string>("RightArrow", Server.MapPath("../../img/newsletter/right-arrow.jpg")),
                new KeyValuePair <string, string>("PageFlip", Server.MapPath("../../img/newsletter/page-flip.jpg"))
            };

            var thread = new Thread(() =>
            {
                foreach (var email in destinatarios)
                {
                    try
                    {
                        manterEmail.EnviarEmail(email, assunto, mensagem, imagens);
                    }
                    catch (Exception)
                    {
                        // Ignored.
                    }
                }

                envio.DataEnvio = DateTime.Now;

                manterEnvioInforme.Salvar(envio);
            })
            {
                IsBackground = true
            };

            // Let the chaos COMMENCE!
            thread.Start();

            WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso, "As mensagens estão sendo enviadas para " + destinatarios.Count() + " email(s) automaticamente. Este processo pode demorar dependendo da quantidade de receptores.");
        }
Пример #2
0
        /// <summary>
        /// Obtém ou cria um novo envio. Se existirem envios não enviados, os busca para preencher a tela ou para que sejam enviados.
        /// Se não existem envios enviados, cria um novo envio baseado no último envio que foi enviado.
        /// Caso nunca tenha havido um envio, traz um objeto novo obtendo os dados da tela.
        /// </summary>
        /// <param name="obterDadosDaTela">Caso true, obtém os dados do objeto a partir da tela. Caso false, obtém o objeto clone ou um novo objeto.</param>
        /// <param name="informe">Caso já existe um informe buscado, passá-lo como esse parâmetro para evitar mais uma consulta ao banco.</param>
        /// <returns></returns>
        private classes.EnvioInforme ObterObjeto(bool obterDadosDaTela, classes.Informe informe = null)
        {
            informe = informe ?? new ManterInforme().ObterPorId(int.Parse(Request["Id"]));

            classes.EnvioInforme envio;

            if (informe.Envios.Any(x => !x.Enviado()))
            {
                // Caso já tenha envios não enviados, busca os dados desse envio e preenche a tela.
                envio = informe.Envios.FirstOrDefault(x => !x.Enviado());
            }
            else
            {
                envio = new classes.EnvioInforme();

                // Busca o último envio, caso existente.
                var ultimoEnvio = informe.Envios.LastOrDefault();

                if (ultimoEnvio != null)
                {
                    Mapper.Map(ultimoEnvio, envio);
                }
            }

            // Vai que... né?
            if (envio == null)
            {
                envio = new classes.EnvioInforme();
            }


            // Caso esteja chamando para obter os dados da tela.
            if (obterDadosDaTela)
            {
                envio.Informe = new ManterInforme().ObterPorId(int.Parse(Request["Id"]));
                envio.Usuario = ucLupaUsuario.SelectedUser;

                // Buscar perfis; níveis ocupacionais e UFs das permissões.
                envio.Perfis             = ucPermissoes.ObterPerfisSelecionados();
                envio.NiveisOcupacionais = ucPermissoes.ObterNiveisOcupacionaisSelecionados();
                envio.Ufs = ucPermissoes.ObterUfsSelecionadas();
            }

            return(envio);
        }