Ejemplo n.º 1
0
        public IList <EmailEnvio> ObterPorFiltro(EmailEnvio registro)
        {
            var query = repositorio.session.Query <EmailEnvio>();

            if (registro != null)
            {
                if (!string.IsNullOrWhiteSpace(registro.Texto))
                {
                    query = query.Where(x => x.Texto.ToUpper().Contains(registro.Texto.ToUpper()));
                }

                if (!string.IsNullOrWhiteSpace(registro.Assunto))
                {
                    query = query.Where(x => x.Assunto.ToUpper().Contains(registro.Assunto.ToUpper()));
                }

                if (registro.ID > 0)
                {
                    query = query.Where(x => x.ID == registro.ID);
                }

                if (registro.Uf != null)
                {
                    query = query.Where(x => x.Uf != null && x.Uf.ID == registro.Uf.ID);
                }
            }

            return(query.ToList <EmailEnvio>());
        }
Ejemplo n.º 2
0
        public EmailEnvio RemoverEmailsGerados(EmailEnvio email)
        {
            var bmEmail = new BMEmail();

            var emailsRemover = bmEmail.ObterPorEmailEnvio(email.ID, false);

            // Remove os itens já removidos
            bmEmailEnvio.ExcluirTodos(emailsRemover);

            return(email);
        }
Ejemplo n.º 3
0
        private void ValidarEmailEnvio(EmailEnvio email)
        {
            if (string.IsNullOrWhiteSpace(email.Texto))
            {
                throw new AcademicoException("Texto. Campo Obrigatório");
            }

            if (string.IsNullOrWhiteSpace(email.Assunto))
            {
                throw new AcademicoException("Assunto. Campo Obrigatório");
            }
        }
Ejemplo n.º 4
0
 public void IncluirEmailEnvio(EmailEnvio EmailEnvio)
 {
     try
     {
         this.PreencherInformacoesDeAuditoria(EmailEnvio);
         bmEmailEnvio.Salvar(EmailEnvio);
     }
     catch (AcademicoException ex)
     {
         throw ex;
     }
 }
Ejemplo n.º 5
0
        private void ValidarEmailEnvioInformada(EmailEnvio EmailEnvio)
        {
            ValidarDependencias(EmailEnvio);

            if (string.IsNullOrWhiteSpace(EmailEnvio.Texto))
            {
                throw new AcademicoException("Texto. Campo Obrigatório.");
            }

            if (string.IsNullOrWhiteSpace(EmailEnvio.Assunto))
            {
                throw new AcademicoException("Assunto. Campo Obrigatório.");
            }
        }
Ejemplo n.º 6
0
        public void AlterarEmailEnvio(EmailEnvio EmailEnvio, bool resetarEmailsNaoEnviados = false)
        {
            this.PreencherInformacoesDeAuditoria(EmailEnvio);

            // Retira e-mails não enviados da lista de envio
            if (resetarEmailsNaoEnviados)
            {
                RemoverEmailsGerados(EmailEnvio);

                // Coloca somente os itens enviados na lista
                EmailEnvio.ListaEmailsGerados = new BMEmail().ObterPorEmailEnvio(EmailEnvio.ID, true).ToList();
            }

            bmEmailEnvio.Salvar(EmailEnvio);
        }
Ejemplo n.º 7
0
        public IQueryable <Usuario> ObterUsuariosParaEnvio(EmailEnvio emailEnvio)
        {
            var bmUsuario = new BMUsuario();
            var list      = bmUsuario.ObterTodosIQueryable().Where(x => x.Situacao.ToLower() == "ativo");

            var userIds   = new List <int>();
            var perfisIds = new List <int>();
            var niveisIds = new List <int>();
            var ufsIds    = new List <int>();
            var turmasIds = new List <int>();

            if (emailEnvio.ListaPermissao.Any(x => x.Usuario != null))
            {
                userIds.AddRange(emailEnvio.ListaPermissao.Where(x => x.Usuario != null).Select(x => x.ID).ToList());
            }

            if (emailEnvio.ListaPermissao.Any(x => x.Perfil != null))
            {
                perfisIds.AddRange(
                    emailEnvio.ListaPermissao.Where(x => x.Perfil != null).Select(y => y.Perfil.ID).ToList());
            }

            if (emailEnvio.ListaPermissao.Any(x => x.NivelOcupacional != null))
            {
                niveisIds.AddRange(
                    emailEnvio.ListaPermissao.Where(x => x.NivelOcupacional != null)
                    .Select(y => y.NivelOcupacional.ID)
                    .ToList());
            }

            if (emailEnvio.ListaPermissao.Any(x => x.Uf != null))
            {
                ufsIds.AddRange(emailEnvio.ListaPermissao.Where(x => x.Uf != null).Select(y => y.Uf.ID).ToList());
            }

            if (emailEnvio.ListaPermissao.Any(x => x.Turma != null))
            {
                turmasIds.AddRange(emailEnvio.ListaPermissao.Where(x => x.Turma != null).Select(y => y.Turma.ID).ToList());
            }

            return(list.Where(u =>
                              userIds.Contains(u.ID) ||
                              u.ListaPerfil.Any(p => perfisIds.Contains(p.Perfil.ID)) ||
                              niveisIds.Contains(u.NivelOcupacional.ID) ||
                              ufsIds.Contains(u.UF.ID) ||
                              u.ListaMatriculaOferta.Any(mo => mo.MatriculaTurma.Any(mt => turmasIds.Contains(mt.Turma.ID)))
                              ));
        }
Ejemplo n.º 8
0
    /// <summary>
    /// Configuración del asunto y el cuerpo del mensaje a enviar
    /// El mensaje enviado va con la fecha del envío como control
    /// </summary>
    public void EnvioMensaje()
    {
        if (SaveSystem.LoadControl() > 0)
        {
            string asunto = Constantes.EMAIL_ASUNTO + DateTime.Now;
            string cuerpo = "";
            for (int i = 0; i < _playerData.Length; i++)
            {
                cuerpo += Constantes.MENSAJE_TITULO_ID + _playerData[i].idPaciente + "\n" +
                          Constantes.MENSAJE_TITULO_NOMBRE + _playerData[i].nombrePaciente + "\n" +
                          Constantes.MENSAJE_TITULO_ENCUESTA + _playerData[i].nombreTest + "\n" +
                          Constantes.MENSAJE_TITULO_RESULTADO + CalculaResultado.Calcula(_playerData[i].nombreTest, _playerData[i].resultados) + "\n\n";
            }

            EmailEnvio.Envio(asunto, cuerpo);
        }
    }
Ejemplo n.º 9
0
        public void ExcluirEmailEnvio(int idNotificacao)
        {
            try
            {
                EmailEnvio notificacao = null;

                if (idNotificacao > 0)
                {
                    notificacao = bmEmailEnvio.ObterPorID(idNotificacao);
                }

                bmEmailEnvio.Excluir(notificacao);
            }
            catch (AcademicoException ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 10
0
        public IEnumerable <Email> ObterEmailsParaEnvio(EmailEnvio emailEnvio, bool ignorarEnviados = false)
        {
            var bmEmail = new BMEmail();
            var list    = bmEmail.ObterPorEmailEnvio(emailEnvio.ID, null);

            list = list.Where(x => x.Usuario != null && x.Usuario.Situacao.ToLower() == "ativo");

            if (!ignorarEnviados)
            {
                list = list.Where(x => x.Enviado == false);
            }

            if (emailEnvio.ListaPermissao.Where(x => x.Usuario != null).Any())
            {
                var usuarios = emailEnvio.ListaPermissao.Where(x => x.Usuario != null).Select(y => y.Usuario.ID).ToList();
                list = list.Where(x => usuarios.Contains(x.Usuario.ID));
            }

            if (emailEnvio.ListaPermissao.Where(x => x.Perfil != null).Any())
            {
                var perfis = emailEnvio.ListaPermissao.Where(x => x.Perfil != null).Select(y => y.Perfil.ID).ToList();
                list = list.Where(x => x.Usuario.ListaPerfil.Any(y => perfis.Contains(y.Perfil.ID)));
            }

            if (emailEnvio.ListaPermissao.Where(x => x.NivelOcupacional != null).Any())
            {
                var niveiscupacionais = emailEnvio.ListaPermissao.Where(x => x.NivelOcupacional != null).Select(y => y.NivelOcupacional.ID).ToList();
                list = list.Where(x => niveiscupacionais.Contains(x.Usuario.NivelOcupacional.ID));
            }

            if (emailEnvio.ListaPermissao.Where(x => x.Uf != null).Any())
            {
                var ufs = emailEnvio.ListaPermissao.Where(x => x.Uf != null).Select(y => y.Uf.ID).ToList();
                list = list.Where(x => ufs.Contains(x.Usuario.UF.ID));
            }

            return(list);
        }
Ejemplo n.º 11
0
        public void FormatarEmailEnvioFormulario(EmailEnvio emailEnvioEdicao, int[] perfisSelecionados,
                                                 int[] niveisOcupacionais, int[] ufs, int[] status, Turma turma, List <Usuario> usuarios)
        {
            var listUserIds = new List <int>();

            if (usuarios.Any())
            {
                listUserIds.AddRange(usuarios.Select(user => user.ID));
            }

            // Se tiver turma selecionada
            var selectedClass = emailEnvioEdicao.ListaPermissao.FirstOrDefault(x => x.Turma != null);
            var hashTags      = new List <Tuple <Dictionary <string, string>, int> >();

            var matrTurma = selectedClass != null
                ? new ManterTurma().ObterTurmaPorID(selectedClass.Turma.ID).ListaMatriculas
                : null;

            if (matrTurma != null && matrTurma.Any())
            {
                // Caso não tenha nenhum status selecionado pega todos da turma, do contrário pega somente aqueles que possuam o status buscado
                var matriculasTurma =
                    matrTurma.Where(
                        x =>
                        (!status.Any() ||
                         status.Contains((int)x.MatriculaOferta.StatusMatricula)));

                if (matrTurma.Any())
                {
                    foreach (var mt in matriculasTurma)
                    {
                        var lnk = string.Format("<a href=\"http://{0}\">{0}</a>",
                                                string.IsNullOrEmpty(mt.MatriculaOferta.LinkAcesso)
                                ? "www.uc.sebrae.com.br"
                                : mt.MatriculaOferta.LinkAcesso.Replace("http://", ""));

                        var hashTag = new Dictionary <string, string>
                        {
                            { "#NOMETURMA", mt.Turma.Nome },
                            { "#NOMEOFERTA", mt.Turma.Oferta.Nome },
                            { "#NOME_CURSO", mt.Turma.Oferta.SolucaoEducacional.Nome },
                            { "#LINK_CONFIRMAR_INSCRICAO", lnk },
                            { "#DATA_INSCRICAO", mt.MatriculaOferta.DataSolicitacao.ToString("dd/MM/yyyy") },
                            { "#DATA_TERMINO", mt.DataLimite.ToString("dd/MM/yyyy") }
                        };

                        var hashUsuario = new Tuple <Dictionary <string, string>, int>(hashTag,
                                                                                       mt.MatriculaOferta.Usuario.ID);
                        hashTags.Add(hashUsuario);
                    }
                }
                else
                {
                    throw new AcademicoException(
                              "Nenhum usuário inscrito na turma selecionado. Favor selecionar outra.");
                }
            }

            var usuariosSelecionados = listUserIds.ToArray();

            var manter = new ManterEmail();

            manter.PublicarEmail(emailEnvioEdicao,
                                 emailEnvioEdicao.Assunto,
                                 emailEnvioEdicao.Texto,
                                 hashTags,
                                 ufs,
                                 status,
                                 niveisOcupacionais,
                                 perfisSelecionados,
                                 turma,
                                 usuariosSelecionados);
        }
Ejemplo n.º 12
0
 public void Merge(EmailEnvio emailEnvio)
 {
     repositorio.FazerMerge(emailEnvio);
 }
Ejemplo n.º 13
0
        /// <summary>
        /// Método utilizado para enviar email utilizando configurações de cada loja,
        /// enviando o e-mail imediatamente.
        /// </summary>
        /// <returns>true - Email enviado, false - Falha no envio do email</returns>
        internal static void EnviaEmail(HttpContext context, uint idLoja, string emailDestinatario, string assunto, string mensagem,
                                        EmailEnvio emailEnvio, params AnexoEmail[] anexos)
        {
            if (idLoja == 0)
            {
                throw new Exception("Loja não informada.");
            }

            if (String.IsNullOrEmpty(emailDestinatario))
            {
                throw new Exception("Email do destinatário inválido.");
            }

            Loja loja = LojaDAO.Instance.GetElement(idLoja);

            string emailRemet         = String.Empty;
            string servidorEmailRemet = String.Empty;
            string loginEmailRemet    = String.Empty;
            string senhaEmailRemet    = String.Empty;

            if (emailEnvio == EmailEnvio.Fiscal)
            {
                emailRemet         = loja.EmailFiscal;
                servidorEmailRemet = loja.ServidorEmailFiscal;
                loginEmailRemet    = loja.LoginEmailFiscal;
                senhaEmailRemet    = loja.SenhaEmailFiscal;
            }
            else if (emailEnvio == EmailEnvio.Comercial)
            {
                emailRemet         = loja.EmailComercial;
                servidorEmailRemet = loja.ServidorEmailComercial;
                loginEmailRemet    = loja.LoginEmailComercial;
                senhaEmailRemet    = loja.SenhaEmailComercial;
            }

            if (String.IsNullOrEmpty(emailRemet))
            {
                throw new Exception("Email da loja inválido.");
            }

            if (String.IsNullOrEmpty(loginEmailRemet))
            {
                throw new Exception("O usuário do email da loja não foi informado.");
            }

            if (String.IsNullOrEmpty(senhaEmailRemet))
            {
                throw new Exception("A senha do email da loja não foi informado.");
            }

            if (String.IsNullOrEmpty(servidorEmailRemet))
            {
                throw new Exception("O servidor de email da loja não foi informado.");
            }

            // Não envia o e-mail se não for possível identificar o contexto HTTP
            if (context == null)
            {
                throw new Exception("HttpContext não identificado.");
            }

            // Cria novo objeto MailMessage
            MailMessage mailMessage = new MailMessage {
                From = new MailAddress(emailRemet)
            };

            // Define o remetente

            // Define o endereço de resposta
            if (!String.IsNullOrEmpty(loja.EmailContato))
            {
                mailMessage.ReplyToList.Add(new MailAddress(loja.EmailContato));
            }

            // Define primeiro destinatário
            mailMessage.To.Add(emailDestinatario);

            // Define assunto do e-mail
            mailMessage.Subject = assunto;

            bool temPdf = false;

            //48546 - Devido a correção do chamado 13132
            //Ao fazer a remoção do item com a lista ainda em loop a proxima interação vai dar exceção pois o index é maior que a coleção
            var anexosRemover = new List <int>();

            // Anexa os arquivos
            if (anexos != null && anexos.Length > 0)
            {
                for (int i = 0; i < anexos.Length; i++)
                {
                    anexos[i].GetDados = true;
                    anexos[i].Context  = context;

                    mailMessage.Attachments.Add(new Attachment(new MemoryStream(anexos[i].Dados), anexos[i].NomeArquivo));

                    // Chamado 13132. Ocorreu um problema ao enviar o e-mail da liberação para o cliente que fez com que
                    // o anexo fosse enviado com o tamanho zerado. Por isso, incluímos a verificação abaixo que certifica
                    // que o anexo foi recuperado, e caso não seja será incluído um registro na tabela de erro.
                    if (mailMessage.Attachments[i] != null && mailMessage.Attachments[i].ContentStream != null && mailMessage.Attachments[i].ContentStream.Length == 0)
                    {
                        anexosRemover.Add(i);
                        ErroDAO.Instance.InserirFromException("Enviar e-mail.", new Exception("Falha ao adicionar o anexo " + anexos[i].NomeArquivo + " ao e-mail."));
                    }

                    if (anexos[i] != null && anexos[i].NomeArquivo != null)
                    {
                        temPdf = temPdf || anexos[i].NomeArquivo.ToLower().Contains(".pdf");
                    }
                }
            }

            //48546
            foreach (var index in anexosRemover)
            {
                mailMessage.Attachments.RemoveAt(index);
            }

            // Seta propriedade para enviar email em html como true(verdadeiro)
            // Apenas se houver PDF anexado
            mailMessage.IsBodyHtml = temPdf;

            // Seta o corpo do e-mail com a estrutura HTML gravada na stringbuilder sbBody
            mailMessage.Body = mensagem;
            if (temPdf)
            {
                mailMessage.Body += "\n\nEsse e-mail contém um arquivo PDF anexado. Para visualizar o arquivo obtenha o Adobe Reader através do endereço " +
                                    "<a href=\"http://get.adobe.com/br/reader/\">http://get.adobe.com/br/reader/</a>.";
            }

            mailMessage.Body += "\n\n\nAtenção: Email gerado automaticamente via software WebGlass v" + Geral.ObtemVersao() + ".";

            if (String.IsNullOrEmpty(loja.EmailContato))
            {
                mailMessage.Body += "\nFavor não responder esse e-mail.";
            }

            if (mailMessage.IsBodyHtml)
            {
                mailMessage.Body = mailMessage.Body.Replace("\n", "<br />");
            }

            // Cria novo SmtpCliente e seta o endereço
            SmtpClient smtpClient = new SmtpClient(servidorEmailRemet)
            {
                Credentials = new NetworkCredential(loginEmailRemet, senhaEmailRemet)
            };

            // Credencial para envio por SMTP Seguro (APENAS QUANDO O SERVIDOR EXIGE AUTENTICAÇÃO)

            if (ControleSistema.PortaEnvioEmail > 0)
            {
                smtpClient.Port = ControleSistema.PortaEnvioEmail.Value;
            }

            if (ControleSistema.AtivarSslEnvio)
            {
                smtpClient.EnableSsl = true;
            }
            else
            {
                smtpClient.EnableSsl = false;
            }

            try
            {
                // Envia a mensagem
                smtpClient.Send(mailMessage);
            }
            catch (Exception ex)
            {
                ErroDAO.Instance.InserirFromException("ProcessaEmail (0)", ex);
                throw ex;
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Método utilizado para enviar email utilizando configurações de cada loja,
        /// colocando o e-mail na fila de envio.
        /// </summary>
        public static uint EnviaEmailAsync(GDASession session, uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, bool emailAdmin,
                                           params AnexoEmail[] anexos)
        {
            if (idLoja == 0)
            {
                throw new Exception("Loja não informada.");
            }

            if (string.IsNullOrEmpty(emailDestinatario))
            {
                throw new Exception("Email do destinatário inválido.");
            }

            var emailsDestinatario = emailDestinatario.Trim().Split(';').Where(f => !string.IsNullOrEmpty(f)).Select(f => f.Trim());

            uint idEmail = 0;

            foreach (var e in emailsDestinatario)
            {
                var email = new FilaEmail();
                email.IdLoja            = idLoja;
                email.EmailDestinatario = e;
                email.Assunto           = assunto;
                email.Mensagem          = mensagem;
                email.EmailEnvio        = emailEnvio;
                email.DataCad           = DateTime.Now;
                email.EmailAdmin        = emailAdmin;

                var contador = 0;

                /* Chamado 57290. */
                while (contador < 2)
                {
                    try { idEmail = FilaEmailDAO.Instance.Insert(session, email); break; } catch { contador++; }
                }
                ;

                if (idEmail == 0)
                {
                    idEmail = FilaEmailDAO.Instance.Insert(session, email);
                }

                if (anexos != null && anexos.Length > 0)
                {
                    foreach (AnexoEmail anexo in anexos)
                    {
                        anexo.IdEmail = idEmail;
                        AnexoEmailDAO.Instance.Insert(session, anexo);
                    }
                }
            }

            return(idEmail);
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Método utilizado para enviar email utilizando configurações de cada loja,
        /// colocando o e-mail na fila de envio.
        /// </summary>
        public static uint EnviaEmailAsyncComTransacao(uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, bool emailAdmin,
                                                       params AnexoEmail[] anexos)
        {
            using (var transaction = new GDATransaction())
            {
                try
                {
                    transaction.BeginTransaction();

                    uint idEmail = EnviaEmailAsync(transaction, idLoja, emailDestinatario, assunto, mensagem, emailEnvio, emailAdmin, anexos);

                    transaction.Commit();
                    transaction.Close();

                    return(idEmail);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    transaction.Close();

                    ErroDAO.Instance.InserirFromException("EnviaEmailAsync", ex);
                    throw;
                }
            }
        }
Ejemplo n.º 16
0
 /// <summary>
 /// /// Método utilizado para enviar email utilizando configurações de cada loja,
 /// colocando o e-mail na fila de envio.
 /// </summary>
 public static uint EnviaEmailAsync(uint idLoja, string emailDestinatario, string assunto, string mensagem, EmailEnvio emailEnvio, params AnexoEmail[] anexos)
 {
     return(EnviaEmailAsyncComTransacao(idLoja, emailDestinatario, assunto, mensagem, emailEnvio, false, anexos));
 }
Ejemplo n.º 17
0
 public IList <EmailEnvio> ObterEmailEnvioPorFiltro(EmailEnvio EmailEnvio)
 {
     return(bmEmailEnvio.ObterPorFiltro(EmailEnvio));
 }
Ejemplo n.º 18
0
        private void GerarEmailBaseEmail(IList <int> usuariosIds, string assunto, string texto,
                                         List <Tuple <Dictionary <string, string>, int> > hashTags, string cpfLogado, EmailEnvio emailEnvio)
        {
            var count     = 0;
            var endPortal =
                ListaConfiguracaoSistema.FirstOrDefault(x => x.ID == (int)enumConfiguracaoSistema.EnderecoPortal)?
                .Registro;
            var endSgus =
                ListaConfiguracaoSistema.FirstOrDefault(x => x.ID == (int)enumConfiguracaoSistema.EnderecoSGUS)?
                .Registro;

            foreach (var u in usuariosIds)
            {
                if (emailEnvio.ListaEmailsGerados.Any(x => x.Usuario.ID == u))
                {
                    continue;
                }

                var usuario = usuarioBM.ObterPorId(u);

                var textoEmailUsuario = texto.Replace("#NOME_ALUNO", usuario.Nome)
                                        .Replace("#CPF", usuario.CPF)
                                        .Replace("#UF", usuario.UF.Nome)
                                        .Replace("#EMAIL", usuario.Email)
                                        .Replace("#SENHA", CriptografiaHelper.Decriptografar(usuario.Senha))
                                        .Replace("#URL_PORTAL", endPortal)
                                        .Replace("#URL_SGUS", endSgus);

                if (hashTags != null)
                {
                    textoEmailUsuario = hashTags.Where(x => x.Item2 == usuario.ID)
                                        .Aggregate(textoEmailUsuario,
                                                   (current1, registro) =>
                                                   registro.Item1.Aggregate(current1,
                                                                            (current, item) => current.Replace(item.Key, item.Value)));
                }

                var email = new Email
                {
                    DataGeracao = DateTime.Now,
                    Assunto     = assunto,
                    TextoEmail  = textoEmailUsuario,
                    Enviado     = false,
                    Usuario     = usuario,
                    EmailEnvio  = emailEnvio,
                    Auditoria   = new Auditoria(cpfLogado)
                };

                count++;
                bmEmail.SalvarSemCommit(email);

                if (count < 300)
                {
                    continue;
                }

                bmEmail.Commit();
                count = 0;
            }

            bmEmail.Commit();
        }
Ejemplo n.º 19
0
 public IQueryable <Email> ObterPorEmailEnvio(EmailEnvio email)
 {
     return(bmEmail.ObterTodosIqueryable().Where(x => x.EmailEnvio.ID == email.ID));
 }
Ejemplo n.º 20
0
        public void PublicarEmail(EmailEnvio emailEnvio, string assunto, string texto,
                                  List <Tuple <Dictionary <string, string>, int> > hashTags, int[] ufs, int[] statusSelecionados,
                                  int[] niveisOcupacionais, int[] perfis, Turma turma = null, int[] usuarios = null)
        {
            var lstUf = new List <Uf>();
            var ufBm  = new BMUf();

            if (ufs != null)
            {
                lstUf.AddRange(ufs.Select(uf => ufBm.ObterPorId(uf)));
            }

            var statusBm  = new BMStatusMatricula();
            var lstStatus = statusSelecionados
                            .Where(status => statusBm.ObterPorId(status) != null)
                            .Select(status => statusBm.ObterPorId(status)).ToList();

            var lstNivel = new List <NivelOcupacional>();
            var nivelBm  = new BMNivelOcupacional();

            if (niveisOcupacionais != null)
            {
                lstNivel.AddRange(niveisOcupacionais.Select(nivel => nivelBm.ObterPorID(nivel)));
            }

            var lstPerfil = new List <Perfil>();
            var perfilBm  = new BMPerfil();

            if (perfis != null)
            {
                lstPerfil.AddRange(perfis.Select(perfil => perfilBm.ObterPorId(perfil)));
            }

            var lstUsuariosIds = new List <int>();

            usuarioBM = new BMUsuario();

            // Caso tenha algum filtro selecionado recupera os usuários filtrados
            if (ufs.Any() || lstStatus.Any() || lstNivel.Any() || lstPerfil.Any() || turma != null)
            {
                //var usuariosFiltrados = usuarioBM.ObterUsuariosParaEnvioEmail(lstUf, lstStatus, lstNivel, lstPerfil, turma);

                var statusIds = lstStatus.Select(x => x.ID).ToList();
                var niveisIds = lstNivel.Select(x => x.ID).ToList();
                var perfisIds = lstPerfil.Select(x => x.ID).ToList();

                var usuariosFiltradosIds = new ManterUsuario().ObterTodosIQueryable()
                                           .Join(new BMUf().ObterTodosIQueryable(), u => u.UF.ID, uf => uf.ID,
                                                 (usuario, uf) => new { usuario, uf })
                                           .Join(new ManterUsuarioPerfil().ObterTodosIQueryable(), join => join.usuario.ID,
                                                 usuarioPerfil => usuarioPerfil.Usuario.ID, (lastJoin, usuarioPerfil) =>
                                                 new
                {
                    lastJoin.usuario,
                    lastJoin.uf,
                    usuarioPerfil
                })
                                           .Join(new ManterMatriculaOferta().ObterTodosIQueryable(), join => join.usuario.ID,
                                                 matricula => matricula.Usuario.ID,
                                                 (lastJoin, matriculaOferta) =>
                                                 new
                {
                    lastJoin.usuario,
                    lastJoin.uf,
                    lastJoin.usuarioPerfil,
                    matriculaOferta
                })
                                           .Join(new ManterMatriculaTurma().ObterTodosIQueryable(), join => join.matriculaOferta.ID,
                                                 matricula => matricula.MatriculaOferta.ID,
                                                 (lastJoin, matriculaTurma) =>
                                                 new
                {
                    lastJoin.usuario,
                    lastJoin.uf,
                    lastJoin.usuarioPerfil,
                    lastJoin.matriculaOferta,
                    matriculaTurma
                })
                                           .Where(x =>
                                                  (!ufs.Any() || ufs.Contains(x.uf.ID)) &&
                                                  (!statusIds.Any() || statusIds.Contains((int)x.matriculaOferta.StatusMatricula)) &&
                                                  (!niveisIds.Any() || niveisIds.Contains(x.usuario.NivelOcupacional.ID)) &&
                                                  (!perfisIds.Any() || perfisIds.Contains(x.usuarioPerfil.Perfil.ID)) &&
                                                  (turma == null || x.matriculaTurma.Turma.ID == turma.ID))
                                           .Select(x => new
                {
                    x.usuario.ID
                })
                                           .Distinct()
                                           .ToList()
                                           .Select(x => x.ID)
                                           .ToList();

                lstUsuariosIds.AddRange(usuariosFiltradosIds);
            }

            // Adiciona usuários avulsos nos filtros gerais
            if (usuarios != null && usuarios.Any())
            {
                var lstUsuarioSelecionados = usuarios.Select(usuario => usuarioBM.ObterPorId(usuario)).Where(x => !lstUsuariosIds.Contains(x.ID));

                lstUsuariosIds.AddRange(lstUsuarioSelecionados.Where(u => u.Ativo).Select(x => x.ID));
            }

            var cpfLogado = usuarioBM.ObterUsuarioLogado().CPF;

            GerarEmailBaseEmail(lstUsuariosIds, assunto, texto, hashTags, cpfLogado, emailEnvio);
        }
Ejemplo n.º 21
0
 public void Excluir(EmailEnvio EmailEnvio)
 {
     repositorio.Excluir(EmailEnvio);
 }
Ejemplo n.º 22
0
 public void Salvar(EmailEnvio EmailEnvio)
 {
     ValidarEmailEnvioInformada(EmailEnvio);
     repositorio.Salvar(EmailEnvio);
 }