public ActionResult Index(QuizReviewViewModel model) { var quizRating = new QuizRating(); quizRating.Rating = model.Rating * 100; quizRating.Level = model.Level * 20; quizRating.QuizId = model.QuizId; _quizRatingRepo.Insert(quizRating); _quizRatingRepo.Save(); return(RedirectToAction("Index", "Quizzes")); }
public QuizReviewViewModel ToQuizReviewViewModel(QuizResult quizResult) { var vm = new QuizReviewViewModel(); var quiz = _quizService.Get(quizResult.QuizId); var questions = quiz.Questions.Where(x => x.QuizId == quizResult.QuizId).ToList(); var qDetails = new List <QuizReviewItemViewModel>(); foreach (var userAnswer in quizResult.UserAnswers) { var answer = _answerService.GetAll().FirstOrDefault(x => x.Id == userAnswer.AnswerId); var isAnswerCorrect = answer != null && answer.IsCorrect; var question = questions.First(x => x.Id == userAnswer.QuestionId); var questionText = question.Text; var pointsEarned = isAnswerCorrect ? question.Points : 0; qDetails.Add(new QuizReviewItemViewModel { IsCorrectAnswer = isAnswerCorrect, QuestionId = userAnswer.QuestionId, QuestionText = questionText, PointsEarned = pointsEarned, }); } if (quiz.AllowPoints) { var totalPoints = questions.Sum(x => x.Points); vm.ScoreText = quizResult.Score + " / " + totalPoints + " points"; vm.ScorePercent = Math.Ceiling(((double)quizResult.Score * 100) / totalPoints); } else { vm.ScoreText = quizResult.Score + " / " + questions.Sum(x => x.Points) + "points"; vm.ScorePercent = ((double)quizResult.Score * 100) / questions.Sum(x => x.Points); } vm.Items = qDetails; vm.ResultId = quizResult.Id; vm.Score = quizResult.Score; vm.EllapsedTime = quizResult.EllapsedTime; vm.UserAnswers = new List <UserAnswerViewModel>(); vm.UserAnswers.AddRange( quizResult.UserAnswers.Select(x => new UserAnswerViewModel { AnswerId = x.AnswerId, QuestionId = x.QuestionId })); vm.EllapsedTimePercent = (int)(quizResult.EllapsedTime / (double)questions.Sum(x => x.EstimatedTime) * 100); vm.QuizId = quizResult.QuizId; if (_quizResultService.GetAll().Count(x => x.QuizId == quiz.Id) > 1) { vm.RelativeScore = _quizResultService.GetRelativeScore(quiz.Id, quizResult.Score); vm.RelativeTime = _quizResultService.GetRelativeTime(quiz.Id, quizResult.EllapsedTime); } else { vm.RelativeScore = -1; vm.RelativeTime = -1; } return(vm); }
public static QuizReviewViewModel ToQuizReviewViewModel(this QuizResult quizResult, IQuizService quizzes, IAnswerService answers, IQuizResultService quizResultService) { var vm = new QuizReviewViewModel(); var quiz = quizzes.Get(quizResult.QuizId); var questions = quiz.Questions.Where(x => x.QuizId == quizResult.QuizId); var qDetails = new List <QuizReviewItemViewModel>(); foreach (var userAnswer in quizResult.Answers) { var answer = answers.GetAll().FirstOrDefault(x => x.Id == userAnswer.AnswerId); var isAnswerCorrect = answer != null && answer.IsCorrect; var question = questions.First(x => x.Id == userAnswer.QuestionId); var questionText = question.Text; var pointsEarned = isAnswerCorrect ? question.Points : 0; qDetails.Add(new QuizReviewItemViewModel() { IsCorrectAnswer = isAnswerCorrect, QuestionId = userAnswer.QuestionId, QuestionText = questionText, PointsEarned = pointsEarned, }); } var allowPoints = quiz.AllowPoints; string scoreText; if (allowPoints) { var totalPoints = questions.Sum(x => x.Points); var scoredPoints = quizResult.Score * totalPoints / 100; scoreText = scoredPoints + " / " + totalPoints + " points"; } else { scoreText = quizResult.Score + "%"; } vm.Items = qDetails; vm.ResultId = quizResult.Id; vm.Score = quizResult.Score; vm.EllapsedTime = quizResult.EllapsedTime; vm.UserAnswers = new List <UserAnswerViewModel>(); vm.UserAnswers.AddRange( quizResult.Answers.Select(x => new UserAnswerViewModel() { AnswerId = x.AnswerId, QuestionId = x.QuestionId, Value = x.Value })); vm.ScoreText = scoreText; vm.EllapsedTimePercent = (int)((double)quizResult.EllapsedTime / (double)questions.Sum(x => x.EstimatedTime) * 100); vm.QuizId = quizResult.QuizId; vm.RelativeScore = quizResultService.GetRelativeScore(quiz.Id, quizResult.Score); vm.RelativeTime = quizResultService.GetRelativeTime(quiz.Id, quizResult.EllapsedTime); return(vm); }