예제 #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.");
                }
            }
        }
예제 #2
0
        private void ValidarAvaliacao(bool aprovar)
        {
            try
            {
                var turma = ObterTurma();

                var usuarioLogado = new ManterUsuario().ObterUsuarioLogado();

                if (UsuarioPodeValidarAvaliacao(turma, usuarioLogado))
                {
                    var avaliacao = turma.Avaliacoes.FirstOrDefault();

                    if (avaliacao != null)
                    {
                        var manterMatriculaOferta = new ManterMatriculaOferta();
                        var manterAvaliacao       = new ManterAvaliacao();

                        var emailsAlunos = new List <string>();

                        // Alterar status das matrículas.
                        foreach (var respostaId in avaliacao.Respostas.Where(x => x.Questao.Tipo == enumTipoQuestao.Resultado).Select(x => x.ID))
                        {
                            // Busca a resposta denovo do banco pois o NHibernate tá pirando com o Lazy.
                            var resposta = manterAvaliacao.ObterQuestaoRespostaPorId(respostaId);

                            var matricula = resposta.MatriculaTurma.MatriculaOferta;

                            // Adicionar emails para envio posterior.
                            if (aprovar && !string.IsNullOrWhiteSpace(matricula.Usuario.Email))
                            {
                                emailsAlunos.Add(matricula.Usuario.Email);
                            }

                            if (resposta.StatusMatricula != null)
                            {
                                matricula.StatusMatricula = (enumStatusMatricula)resposta.StatusMatricula.ID;

                                manterMatriculaOferta.Salvar(matricula);
                            }
                        }

                        // Mandar e-mail aos alunos caso a avaliação seja aprovada.
                        if (aprovar)
                        {
                            var manterEmail = new ManterEmail();

                            var template = new ManterTemplate().ObterTemplatePorID((int)enumTemplate.ResultadoAvaliacao);

                            var thread = new Thread(() =>
                            {
                                foreach (var email in emailsAlunos)
                                {
                                    manterEmail.EnviarEmail(email, template.Assunto ?? template.DescricaoTemplate, template.TextoTemplate);
                                }
                            })
                            {
                                IsBackground = true
                            };

                            thread.Start();
                        }

                        // Finalizar status da avaliação e setar o usuário que analisou.
                        avaliacao.Status   = aprovar ? enumStatusAvaliacao.Aprovada : enumStatusAvaliacao.AguardandoResposta;
                        avaliacao.Analista = usuarioLogado;

                        manterAvaliacao.Salvar(avaliacao);

                        WebFormHelper.ExibirMensagem(enumTipoMensagem.Sucesso,
                                                     "Avaliação " + (!aprovar ? "não" : "") + " aprovada com sucesso",
                                                     "GerenciamentoMatricula.aspx?oferta=" + turma.Oferta.ID);
                        return;
                    }
                }
            }
            catch (Exception)
            {
                // ignored.
            }

            WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro,
                                         "Houve um erro na validação da avaliação. Tente novamente.");
        }
예제 #3
0
        private classes.Avaliacao ObterObjetoAvaliacao(ManterAvaliacao manterAvaliacao = null)
        {
            manterAvaliacao = manterAvaliacao ?? new ManterAvaliacao();

            var questoes = manterAvaliacao.ObterQuestoes().ToList();

            var turma = ObterTurma();

            var avaliacao = turma.Avaliacoes.FirstOrDefault() ?? new classes.Avaliacao
            {
                Turma = turma
            };

            var respostas = new List <classes.QuestaoResposta>();

            // Salvar de acordo com os dados preenchidos na tela e recarregar a tela.
            foreach (RepeaterItem repeaterMatriculasItem in rptMatriculas.Items)
            {
                int matriculaId;

                if (int.TryParse(((HiddenField)repeaterMatriculasItem.FindControl("hdnIdMatriculaTurma")).Value, out matriculaId))
                {
                    var rptQuestaoResposta = (Repeater)repeaterMatriculasItem.FindControl("rptQuestaoResposta");

                    foreach (RepeaterItem repeaterQuestaoRespostaItem in rptQuestaoResposta.Items)
                    {
                        //var repeaterQuestaoRespostaItem = rptQuestaoResposta.Controls[j];

                        int idQuestaoResposta;

                        int.TryParse(
                            ((HiddenField)repeaterQuestaoRespostaItem.FindControl("hdnIdQuestaoResposta")).Value,
                            out idQuestaoResposta);

                        var questaoResposta = idQuestaoResposta == 0
                            ? new classes.QuestaoResposta()
                            : questoes.SelectMany(x => x.Respostas).FirstOrDefault(x => x.ID == idQuestaoResposta) ??
                                              new classes.QuestaoResposta();

                        var matriculaTurma = turma.ListaMatriculas.FirstOrDefault(x => x.ID == matriculaId);

                        questaoResposta.MatriculaTurma = matriculaTurma != null ? matriculaTurma : null;

                        int idQuestao;

                        int.TryParse(
                            ((HiddenField)repeaterQuestaoRespostaItem.FindControl("hdnIdQuestao")).Value,
                            out idQuestao);

                        questaoResposta.Questao = questoes.FirstOrDefault(x => x.ID == idQuestao);

                        if (questaoResposta.Questao == null)
                        {
                            throw new AcademicoException("Erro na montagem das respostas da questão. Contacte o suporte técnico ou atualize a tela e tente novamente.");
                        }

                        switch (questaoResposta.Questao.Tipo)
                        {
                        case enumTipoQuestao.Dominio:
                            enumDominio?dominio;

                            try
                            {
                                var dominioId =
                                    int.Parse(
                                        ((DropDownList)repeaterQuestaoRespostaItem.FindControl("ddlDominio"))
                                        .SelectedValue);

                                dominio = dominioId == 0 ? null : (enumDominio?)dominioId;
                            }
                            catch (Exception)
                            {
                                dominio = null;
                            }

                            questaoResposta.Dominio = dominio;

                            break;

                        case enumTipoQuestao.Dissertativa:
                            var dissercao =
                                ((TextBox)repeaterQuestaoRespostaItem.FindControl("txtDissertativo")).Text;

                            questaoResposta.Comentario = string.IsNullOrWhiteSpace(dissercao) ? null : dissercao;

                            break;

                        case enumTipoQuestao.Resultado:

                            int statusId;

                            int.TryParse(((DropDownList)repeaterQuestaoRespostaItem.FindControl("ddlStatus")).SelectedValue, out statusId);

                            var status = statusId == 0
                                    ? null
                                    : ObterStatusDisponiveis().FirstOrDefault(x => x.ID == statusId);

                            questaoResposta.StatusMatricula = status == null ? null : new classes.StatusMatricula {
                                ID = status.ID
                            };

                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }

                        manterAvaliacao.Salvar(questaoResposta);

                        respostas.Add(questaoResposta);
                    }
                }
                else
                {
                    WebFormHelper.ExibirMensagem(enumTipoMensagem.Erro, "Houve um erro ao tentar salvar as matrículas. Tente novamente ou contacte o suporte técnico.");
                }
            }

            // Salvar a avaliação antes caso esteja criando uma nova. Está aqui no método ObterObjetoAvaliacao() porque sempre usa a mesma avaliação da Oferta.
            if (avaliacao.ID == 0)
            {
                manterAvaliacao.Salvar(avaliacao);
            }

            avaliacao.Respostas = respostas;

            // Salvar as associações da avaliação com as respostas.
            manterAvaliacao.Salvar(avaliacao);

            return(avaliacao);
        }