private Dictionary <int, bool> ProcessAnswers(UserTest userTest, TestResultData model, List <TestQuestion> questions) { var userTestId = userTest.Id; var answers = new Dictionary <int, bool>(); var answerList = new List <UserTestAnswer>(); if (model.Data == null) { Logger.Exception(new Exception("model.Data == null"), User); } foreach (var questionAnswer in model.Data) { var question = questions.First(x => x.Id == questionAnswer.QuestionId); var isRight = IsRight(question, questionAnswer); answers.Add(questionAnswer.QuestionId, isRight); var answer = new UserTestAnswer { QuestionId = questionAnswer.QuestionId, IsRight = isRight, UserTestId = userTestId, Answer = questionAnswer.GetText(), }; answerList.Add(answer); } if (userTest.IsCoursePlanned || userTest.ShowAnswers) { UserTestAnswerService.EnableTracking(); foreach (var userTestAnswer in answerList.Where(x => !x.Answer.IsEmpty())) { UserTestAnswerService.Insert(userTestAnswer); } UserTestAnswerService.SubmitChanges(); } return(answers); }
public IActionResult Question(TestQuestionViewModel model, string submit) { int TestId = model.TestId; DbfunctionUtility dbfunction = new DbfunctionUtility(_appSettings); TestUtility _testUtility = new TestUtility(_appSettings, _dbContext); var checkUserTest = _dbContext.tbl_UserTests.Where(w => w.UserId == UserId && w.TestId == TestId && w.IsReset == false).FirstOrDefault(); if (submit == "Save") { var checkAnswer = _dbContext.tbl_UserTestAnswers.Where(w => w.UserTestId == checkUserTest.Id && w.QuestionId == model.QuestionId).FirstOrDefault(); if (checkAnswer == null) { UserTestAnswer userTestAnswer = new UserTestAnswer() { QuestionId = model.QuestionId, UserTestId = checkUserTest.Id, UserSelected = model.UserAnswer, IsRight = (model.Answer == model.UserAnswer ? true : false) }; _dbContext.tbl_UserTestAnswers.Add(userTestAnswer); _dbContext.SaveChanges(); checkUserTest.QuestionsAttend = checkUserTest.QuestionsAttend + 1; checkUserTest.QuestionsRight = checkUserTest.QuestionsRight + (userTestAnswer.IsRight ? 1 : 0); _dbContext.SaveChanges(); } else { if (checkAnswer.IsRight == true && (model.Answer != model.UserAnswer)) { checkUserTest.QuestionsRight = checkUserTest.QuestionsRight - 1; } else if (checkAnswer.IsRight == false && (model.Answer == model.UserAnswer)) { checkUserTest.QuestionsRight = checkUserTest.QuestionsRight + 1; } _dbContext.SaveChanges(); checkAnswer.UserSelected = model.UserAnswer; checkAnswer.IsRight = (model.Answer == model.UserAnswer ? true : false); _dbContext.SaveChanges(); } var questionList = _testUtility.GetUserQuestions(UserId, TestId); if (model.SeqNo != model.MaxSequenceId) { model = questionList.Where(w => w.SeqNo == model.SeqNo + 1).FirstOrDefault(); model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } } if (submit == "Previous") { var questionList = _testUtility.GetUserQuestions(UserId, TestId); model = questionList.Where(w => w.SeqNo == model.SeqNo - 1).FirstOrDefault(); model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } if (submit == "Next") { var questionList = _testUtility.GetUserQuestions(UserId, TestId); model = questionList.Where(w => w.SeqNo == model.SeqNo + 1).FirstOrDefault(); model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } if (submit == "Finish") { checkUserTest.IsLocked = true; checkUserTest.EndDate = DateTime.Now; _dbContext.SaveChanges(); return(RedirectToAction("Exam", "Attendant")); } return(RedirectToAction("Question", new { id = model.SeqNo, TestId = TestId })); }