public JsonResult GravarAlternativa(string texto, bool certa)
        {
            var alternativas = (List <AlternativaViewModel>)TempData.Peek("Alternativas") ?? new List <AlternativaViewModel>();
            var alternativa  = new AlternativaViewModel()
            {
                Texto = texto,
                Certa = certa
            };

            alternativas.Add(alternativa);

            var newAlternativa = new AlternativaViewModel()
            {
                Texto = null,
                Certa = false
            };

            var html = BaseControllerMethods.RenderPartialViewToString(this, "_alternativaCreate", newAlternativa);

            TempData["Alternativas"] = alternativas;

            return(Json(new { html = html }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult FazerProva(ProvaViewModel prova)
        {
            var alternativas = (Dictionary <string, string>)TempData.Peek("Respostas") ?? new Dictionary <string, string>();

            var quantCertas = 0;

            var alternativasE = new List <AlternativaViewModel>();

            if (alternativas.Count > 0)
            {
                foreach (var alter in alternativas)
                {
                    var alternativa = _alternativaAppService.ObterPorId(Guid.Parse(alter.Value), true);

                    if (alternativa.Certa)
                    {
                        quantCertas++;
                    }
                    else
                    {
                        alternativasE.Add(alternativa);
                    }
                }

                SmtpClient objSmtp = new SmtpClient
                {
                    Host        = "smtp.milleniumformaturas.com.br",
                    Port        = 587,
                    EnableSsl   = false,
                    Credentials = new NetworkCredential("*****@*****.**", "s9m8t4M$$")
                };

                var email = (string)TempData.Peek("EmailCandidato");

                MailAddress from = new MailAddress("*****@*****.**");

                List <MailAddress> to = new List <MailAddress>();
                if (!string.IsNullOrEmpty(email))
                {
                    to.Add(new MailAddress(email));
                }

                var vaga = _vagaAppService.ObterPorId(prova.ProvaId, true);

                var pfull = _provaAppService.ObterProva(prova.ProvaId.ToString());

                var subject = "Resultado da prova para " + vaga.NomeVaga + ", vaga nª " + vaga.NumVaga + "";

                var body = "<label>Olá " + email + ", aqui está o resultado da sua prova: </label> ";
                body += "<br>";
                body += "<br>";

                if (quantCertas >= ((60 * pfull.Perguntas.Count) / 100))
                {
                    body += vaga.TextoAprovacao;
                }
                else
                {
                    body += vaga.TextoReprovacao;
                }

                body += "<br/>";
                body += "<br/>";
                body += "você acertou " + quantCertas + " de " + pfull.Perguntas.Count + " questões.";

                var pE = new List <PerguntaViewModel>();
                foreach (var p in pfull.Perguntas)
                {
                    foreach (var alt in p.Alternativas)
                    {
                        if (alternativasE.Any(x => x.AlternativaId == alt.AlternativaId))
                        {
                            pE.Add(p);
                        }
                    }
                }

                if (pE.Count > 0)
                {
                    body += "<br/>";
                    body += "Estas são as perguntas que você errou: ";
                    body += "<br/>";
                    foreach (var pergunta in pE)
                    {
                        body += "<br>";
                        body += pergunta.Texto;
                    }
                }

                BaseControllerMethods.SendEmail(objSmtp, from, to, body, subject, null, null);
            }
            else
            {
                return(RedirectToAction("Error", "Home", new { mensagem = "não foi possível identificar suas alternativas escolhidas, por favor tente fazer a prova novamente" }));
            }

            ViewBag.Mensagem = "sua prova foi realizada com sucesso!";

            return(View(prova));
        }