public ReviewExamDTO Update(ExamAnswerDTO examAnswer, Guid userId) { ReviewExamDTO mark = examineeService.CalculateMark(examAnswer, userId); mark.Date = DateTime.Now.ToString("dd/MM/yyyy"); mark.ExamId = examAnswer.ExamId; Score score = Get(examAnswer.ExamId, userId); score.Score1 = Math.Round(mark.Score, 2, MidpointRounding.AwayFromZero); score.Time = mark.TimeSpent; score.AnswerContent = AnswerContentJSONToString(examAnswer, score.Score1, score.Time); scoreRepository.Update(score); ExamineeService.ExamineeService.QuestionState.Clear(); return(mark); }
public ReviewExamDTO CalculateMark(ExamAnswerDTO examAnswer, Guid userId) { ReviewExamDTO mark = new ReviewExamDTO(); mark.TimeSpent = CalculateTimeSpent(examAnswer.ExamId, userId); int numsOfTrue = 0; examAnswer.AnswerDetails.ForEach(answer => { var key = questionRepository.GetById(answer.QuestionId); if (key.Type == 3) { if (answer.Content.Equals(key.Content)) { QuestionState.Add(key.Id, true); numsOfTrue++; } } else { var userAnswers = answer.UserAnswers.Where(x => x.IsSelected == true).Select(x => x.AnswerId).OrderBy(x => x).ToList(); var trueAnswers = answerRepository.ListByQuestionId(key.Id).Where(x => x.IsCorrect == true).Select(x => x.Id).OrderBy(x => x).ToList(); if (string.Join("", userAnswers).Equals(string.Join("", trueAnswers))) { QuestionState.Add(key.Id, true); numsOfTrue++; } } if (!QuestionState.ContainsKey(key.Id)) { QuestionState.Add(key.Id, false); } }); mark.Score = Math.Round(((Double)numsOfTrue) / examRepository.Count(examAnswer.ExamId, examService.IsRandom(examAnswer.ExamId)) * 10, 2, MidpointRounding.AwayFromZero); return(mark); }