Ejemplo n.º 1
0
        protected void btnEnviarAvaliacao_OnClick(object sender, EventArgs e)
        {
            if (BloquearCampos)
            {
                WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Não é possível alterar esta avaliação, pois ela está bloqueada.");
                return;
            }

            // Salvar os dados da tela antes de enviar, só para se certificar.
            btnSalvar_OnClick(null, null);

            // O evento de salvar persiste a avaliação salva na variável AvaliacaoSalva.
            var avaliacao = AvaliacaoSalva;

            var manterAvaliacao = new ManterAvaliacao();

            var qtQuestoes = manterAvaliacao.ObterQuestoes().Count();

            var qtMatriculas = ObterTurma().ListaMatriculas.Count();

            var manterUsuario = new ManterUsuario();

            var usuarioLogado = manterUsuario.ObterUsuarioLogado();

            if (avaliacao.Status == enumStatusAvaliacao.AguardandoResposta)
            {
                if (avaliacao.IsRespondido(qtQuestoes, qtMatriculas) && usuarioLogado.IsConsultorEducacional())
                {
                    var template = new ManterTemplate().ObterTemplatePorID((int)enumTemplate.AvaliacaoGestor);

                    if (template == null)
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                     "Não foi possível enviar e-mail ao gestor. Tente novamente.");
                        return;
                    }

                    // Obter todos os gestores da UF do usuário logado.
                    var usuarioFiltro = new classes.Usuario
                    {
                        ListaPerfil =
                            new List <classes.UsuarioPerfil>
                        {
                            new classes.UsuarioPerfil {
                                Perfil = new classes.Perfil {
                                    ID = (int)enumPerfil.GestorUC
                                }
                            }
                        },
                        UF = new classes.Uf {
                            ID = usuarioLogado.UF.ID
                        }
                    };

                    var gestores = manterUsuario.ObterPorFiltro(usuarioFiltro)
                                   .Where(x => x.Email != null && x.Email != "")
                                   // Selecionar somente os campos que interessam.
                                   .Select(x => new classes.Usuario {
                        Email = x.Email, Nome = x.Nome
                    })
                                   .ToList();

                    // Caso não haja gestores para atualizar, notifica o usuário e impede a alteração.
                    if (!gestores.Any())
                    {
                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                                     "Não há gestor na UF " + usuarioLogado.UF.Sigla + " para validar a avaliação dos alunos.");
                        return;
                    }

                    var manterEmail = new ManterEmail();

                    var textoTemplate = template.TextoTemplate;


                    // Reza a lenda que cada oferta desses cursos só possui uma turma. Vamos torcer para isso ser verdade.
                    var turma = avaliacao.Turma;

                    textoTemplate =
                        textoTemplate
                        // Substituir o nome da solução duas vezes porque tem duas tags de solução.
                        .Replace("#SOLUCAO", turma.Oferta.SolucaoEducacional.Nome)
                        .Replace("#SOLUCAO", turma.Oferta.SolucaoEducacional.Nome)
                        .Replace("#OFERTA", turma.Oferta.Nome)
                        .Replace("#TURMA", turma != null ? turma.Nome : "")
                        .Replace("#CONSULTOR",
                                 turma != null && turma.ConsultorEducacional != null
                                    ? turma.ConsultorEducacional.Nome
                                    : "");

                    // Executa o envio de e-mails via Threading para deixar o fluxo mais rápido.
                    var thread = new Thread(() =>
                    {
                        foreach (var gestor in gestores)
                        {
                            try
                            {
                                var templateFinal = textoTemplate.Replace("#GESTOR", gestor.Nome);

                                manterEmail.EnviarEmail(gestor.Email, template.Assunto ?? template.DescricaoTemplate, templateFinal);
                            }
                            catch (Exception)
                            {
                                // Ignored.
                            }
                        }
                    })
                    {
                        IsBackground = true
                    };

                    thread.Start();

                    avaliacao.Status = enumStatusAvaliacao.AguardandoGestor;

                    manterAvaliacao.Salvar(avaliacao);

                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso,
                                                 "Avaliação enviada ao gestor e aguardando análise.",
                                                 "GerenciamentoMatricula.aspx?oferta=" + avaliacao.Turma.Oferta.ID);
                }
                else
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Você precisa responder todas as questões antes de enviar sua avaliação ao Gestor.");
                }
            }
        }