예제 #1
0
        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);
        }
예제 #2
0
        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 }));
        }