Пример #1
0
        /// <summary>
        /// Ответить на вопрос.
        /// </summary>
        /// <param name="InterviweeTestId">Прохождение теста.</param>
        /// <param name="QuestionId">Вопрос.</param>
        /// <param name="AnswerId">Ответ.</param>
        public void AnswerToQuestion(DAO.InterviweeTests InterviweeTest, DAO.Question Question, DAO.Answer Answer)
        {
            // Если ответ на такой вопрос уже был - выходим.
            var ExistAnswer = _DbContext.TestingResults.Where(x =>
                                                              x.InterviweeTestsId == InterviweeTest.Id
                                                              & x.QuestionId == Question.Id).Count();

            if (ExistAnswer > 0)
            {
                return;
            }

            // Определить ответ.
            DAO.TestingResult _TestingResult = new DAO.TestingResult()
            {
                InterviweeTestsId = InterviweeTest.Id,
                QuestionId        = Question.Id,
                AnswerId          = Answer.Id,
                IsCorrect         = _DbContext.QuestionAnswers.Where(x => x.QuestionId == Question.Id & x.IsCorrect).FirstOrDefault()?.AnswerId == Answer.Id
            };

            // Добавить в результаты теста.
            _DbContext.TestingResults.Add(_TestingResult);
            _DbContext.SaveChanges();
        }
Пример #2
0
        /// <summary>
        /// Начать/получить процесс тестирования.
        /// </summary>
        private DAO.InterviweeTests StartTesting(DAO.InterviweeTests InterviweeTest)
        {
            DAO.InterviweeTests _InterviweeTest = _DbContext.InterviweeTests.Add(InterviweeTest);
            _DbContext.SaveChanges();

            return(_InterviweeTest);
        }
Пример #3
0
        /// <summary>
        /// Получить следующий вопрос для прохождения теста.
        /// </summary>
        /// <param name="InterviweeTests">Прохождение теста.</param>
        /// <returns></returns>
        public DAO.Question GetNextQuestion(DAO.InterviweeTests InterviweeTest, DAO.Question ExcludeQuestion = null)
        {
            // Если прохождение теста завершено.
            if (InterviweeTest.IsComplete)
            {
                return(null);
            }

            // Получим массив вопросов с ответами.
            DAO.Question[] _QuestionResults = _DbContext.TestingResults
                                              .Where(x => x.InterviweeTestsId == InterviweeTest.Id)
                                              .Select(x => x.Question)
                                              .ToArray();

            // Получим массив вопросов теста.
            DAO.Question[] _QuestionsTest = _DbContext.TestQuestions
                                            .Where(x => x.TestId == InterviweeTest.TestId)
                                            .Select(x => x.Question)
                                            .ToArray();

            // Получим массив незаданных вопросов.
            DAO.Question[] _QuestionsNotAnswer = _QuestionsTest.Except(_QuestionResults).ToArray();

            // Случайный вопрос.
            DAO.Question _Question = RandomQuestion(_QuestionsNotAnswer, ExcludeQuestion);

            return(_Question);
        }
        public string AnswerTheQuestion(DTO.InterviweeTest DtoInterviweeTest)
        {
            DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest;

            // Прохождение теста.
            DAO.InterviweeTests _DaoInterviweeTest = GetInterviweeTestByDtoId(ref _DtoInterviweeTest);

            // Текущий вопрос.
            DAO.Question _CurrentQuestion = m_QuestionManagement.GetQuestion(_DtoInterviweeTest.CurrentQuestion.Id);

            // Ответ на вопрос.
            DAO.Answer _Answer = m_AnswerManagement.GetAnswer(_DtoInterviweeTest.CurrentQuestion.SelectedAnswerId);
            m_Testing.AnswerToQuestion(_DaoInterviweeTest, _CurrentQuestion, _Answer);
            // Определим завершенность теста.
            m_Testing.DetermineStatusComplete(_DaoInterviweeTest);

            // Прохождение теста - обновление после ответа.
            _DaoInterviweeTest = GetInterviweeTestByDtoId(ref _DtoInterviweeTest);

            // Вопрос.
            _DtoInterviweeTest = GetNextQuestion(_DtoInterviweeTest, _DaoInterviweeTest, _CurrentQuestion);

            string _Json = Utils.JsonSerialize(_DtoInterviweeTest);

            return(_Json);
        }
        /// <summary>
        /// Получить текст статуса прохождения теста.
        /// </summary>
        /// <returns></returns>
        private string GetTextProgressTesting(DAO.InterviweeTests DaoInterviweeTest)
        {
            string _TestName          = DaoInterviweeTest.Test.Name;
            int    _Questions         = m_Testing.GetCountQuestions(DaoInterviweeTest);
            int    _QuestionsComplete = m_Testing.GetCountCompletedQuestion(DaoInterviweeTest);
            int    _CorrectAnswers    = m_Testing.GetCountCorrectAnswers(DaoInterviweeTest);

            return($"тест [{_TestName}] пройдено вопросов [{_QuestionsComplete}/{_Questions}] правильных ответов [{_CorrectAnswers}]");
        }
Пример #6
0
        /// <summary>
        /// Опделить статус завершения теста.
        /// </summary>
        /// <returns></returns>
        public void DetermineStatusComplete(DAO.InterviweeTests InterviweeTest)
        {
            // Количество вопросов с ответом.
            int _CounTestResults = _DbContext.TestingResults.Where(x => x.InterviweeTestsId == InterviweeTest.Id).Count();
            // Количество вопросов в тесте.
            int _CountTestQustions = _DbContext.TestQuestions.Where(x => x.TestId == InterviweeTest.TestId).Count();

            // Сохраним в БД состояние теста.
            InterviweeTest.IsComplete = _CounTestResults >= _CountTestQustions;
            _DbContext.SaveChanges();
        }
Пример #7
0
        /// <summary>
        /// Получить процесс тестирования.
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public InterviweeTests GetTesting(int Id)
        {
            // Найдем незавершенный тест.
            DAO.InterviweeTests _InterviweeTest = _DbContext.InterviweeTests
                                                  .Include(x => x.Test)
                                                  .Include(x => x.Interviwee)
                                                  .Include(x => x.TestingResults)
                                                  .Where(x => x.Id == Id)
                                                  .SingleOrDefault();

            return(_InterviweeTest);
        }
Пример #8
0
        /// <summary>
        /// Получить процесс тестирования.
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        internal InterviweeTests GetTesting(DAO.Interviwee Interviwee, DAO.Test Test)
        {
            // Найдем незавершенный тест.
            // Сначала необходимо завершить предыдущий, потом начинать заново.
            DAO.InterviweeTests _InterviweeTest = _DbContext.InterviweeTests
                                                  .Include(x => x.Test)
                                                  .Include(x => x.Interviwee)
                                                  .Include(x => x.TestingResults)
                                                  .Where(x => x.InterviweeId == Interviwee.Id & x.TestId == Test.Id & x.IsComplete == false)
                                                  .SingleOrDefault();

            return(_InterviweeTest);
        }
        public void TestingTest()
        {
            TestManagement       _TestManagement       = new TestManagement();
            InterviweeManagement _InterviweeManagement = new InterviweeManagement();

            KnowledgeTesting.BL.Testing _Testing = new KnowledgeTesting.BL.Testing();



            DAO.Interviwee _Interviwee = _InterviweeManagement.GetInterviwee(StaticInterviwee.LasName, StaticInterviwee.FirstName, StaticInterviwee.SecondName);
            DAO.Test       _Test       = _TestManagement.GetTest(StaticTests.T1);

            int _CountCompleteTeststBefore = _Interviwee.Tests.Count();

            DAO.InterviweeTests _InterviweeTests = _Testing.GetTesting(_Interviwee, _Test);

            // Количество отвеченных вопросов
            // (в конце на 1 больше чем вопрсов из-за последнего прохода цикла для определения статуса завершения).
            int _CountQuestions = 0;

            while (!_InterviweeTests.IsComplete)
            {
                // Определить статус завершения.
                _InterviweeTests.IsComplete = _Testing.DetermineStatusComplete(_InterviweeTests);

                if (!_InterviweeTests.IsComplete)
                {
                    // Получить следующий вопрос.
                    DAO.Question _Question = _Testing.GetNextQuestion(_InterviweeTests);
                    // Отвтеить на вопрос.
                    if (_Question != null)
                    {
                        _Testing.AnswerToQuestion(_InterviweeTests, _Question, _Question.Answers.First().Answer);
                    }
                }

                // Сохранить изменения - БЕЗ этого не возможно определить статус завершения теста.
                _DbContext.SaveChanges();

                _CountQuestions++;
                Assert.True(_CountQuestions <= 10);
            }

            int _CountCompleteTeststAfter = _Interviwee.Tests.Count();

            Assert.True(_DbContext.InterviweeTests.Where(x => x.Id == _InterviweeTests.Id).First().IsComplete);
            Assert.True(_CountCompleteTeststAfter > _CountCompleteTeststBefore);
            Assert.True(_InterviweeTests.TestingResults.Count() > 0);
        }
        public string StartTest(DTO.InterviweeTest DtoInterviweeTest)
        {
            // Получим объекты параметры для старта прохождения теста.
            DAO.Interviwee _DaoInterviwee = m_InterviweeManagement.GetInterviwee(DtoInterviweeTest.InterviweeId);
            DAO.Test       _DaoTest       = m_TestManagement.GetTest(DtoInterviweeTest.TestId);

            // Создадим прохождение теста.
            DAO.InterviweeTests _DaoInterviweeTest = m_Testing.StartTesting(_DaoInterviwee, _DaoTest);
            // Заполним объект для клиента.
            DTO.InterviweeTest _DtoInterviweeTest = Utils.ConverObjectByJson <DTO.InterviweeTest>(_DaoInterviweeTest);
            _DtoInterviweeTest.ProgressText = GetTextProgressTesting(_DaoInterviweeTest);

            string _Json = GetNextQuestion(_DtoInterviweeTest);

            return(_Json);
        }
        /// <summary>
        /// Получить прохождение теста.
        /// </summary>
        /// <param name="DtoInterviweeTest"></param>
        /// <returns></returns>
        private DAO.InterviweeTests GetInterviweeTestByDtoId(ref DTO.InterviweeTest DtoInterviweeTest)
        {
            if (DtoInterviweeTest.Id <= 0)
            {
                throw new ArgumentException("Не задан Id входящего параметра.");
            }
            DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest;

            DAO.InterviweeTests _DaoInterviweeTest = m_Testing.GetTesting(DtoInterviweeTest.Id);

            // Прогресс прохождения теста.
            Utils.CopyPropObects(_DtoInterviweeTest, _DaoInterviweeTest);
            _DtoInterviweeTest.ProgressText = GetTextProgressTesting(_DaoInterviweeTest);

            DtoInterviweeTest = _DtoInterviweeTest;
            return(_DaoInterviweeTest);
        }
Пример #12
0
        /// <summary>
        /// Начать/получить процесс тестирования.
        /// </summary>
        public DAO.InterviweeTests StartTesting(DAO.Interviwee Interviwee, DAO.Test Test)
        {
            DAO.InterviweeTests _InterviweeTest = GetTesting(Interviwee, Test);

            // Не нашли - создать прохождение теста.
            if (_InterviweeTest != null)
            {
                return(_InterviweeTest);
            }

            _InterviweeTest = new DAO.InterviweeTests()
            {
                InterviweeId = Interviwee.Id,
                TestId       = Test.Id,
                IsComplete   = false
            };

            return(StartTesting(_InterviweeTest));
        }
        public string GetNextQuestion(DTO.InterviweeTest DtoInterviweeTest)
        {
            DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest;

            // Прохождение теста.
            DAO.InterviweeTests _DaoInterviweeTest = GetInterviweeTestByDtoId(ref _DtoInterviweeTest);

            // Текущий вопрос.
            DAO.Question _CurrentQuestion = null;
            if (DtoInterviweeTest.CurrentQuestion != null)
            {
                _CurrentQuestion = m_QuestionManagement.GetQuestion(DtoInterviweeTest.CurrentQuestion.Id);
            }

            // Вопрос.
            _DtoInterviweeTest = GetNextQuestion(_DtoInterviweeTest, _DaoInterviweeTest, _CurrentQuestion);

            string _Json = Utils.JsonSerialize(_DtoInterviweeTest);

            return(_Json);
        }
        /// <summary>
        /// Получить следующий вопрос.
        /// </summary>
        /// <returns></returns>
        private DTO.InterviweeTest GetNextQuestion(
            DTO.InterviweeTest DtoInterviweeTest,
            DAO.InterviweeTests DaoInterviweeTest,
            DAO.Question CurrentQuestion)
        {
            DTO.InterviweeTest _DtoInterviweeTest = DtoInterviweeTest;

            // Вопрос.
            DAO.Question _DaoQuestion = m_Testing.GetNextQuestion(DaoInterviweeTest, CurrentQuestion);

            if (_DaoQuestion == null)
            {
                _DtoInterviweeTest.CurrentQuestion = new DTO.Question();
                return(_DtoInterviweeTest);
            }

            if (_DaoQuestion != null)
            {
                _DtoInterviweeTest.CurrentQuestion = Utils.ConverObjectByJson <DTO.Question>(_DaoQuestion);

                // Ответы на вопрос.
                DAO.QuestionAnswers[]      _DaoQuestionAnswers = _DaoQuestion.Answers.ToArray();
                List <DTO.QuestionAnswers> _ListAnswers        = new List <DTO.QuestionAnswers>();
                foreach (var _DaoQuestionAnswer in _DaoQuestionAnswers)
                {
                    _ListAnswers.Add(new DTO.QuestionAnswers()
                    {
                        AnswerId   = _DaoQuestionAnswer.Answer.Id,
                        AnswerText = _DaoQuestionAnswer.Answer.Text,
                        IsCorrect  = false,
                        QuestionId = _DaoQuestionAnswer.QuestionId
                    });
                }
                _DtoInterviweeTest.CurrentQuestion.Answers = _ListAnswers;
            }

            return(_DtoInterviweeTest);
        }
Пример #15
0
        /// <summary>
        /// Получить количество вопросов.
        /// </summary>
        public int GetCountQuestions(DAO.InterviweeTests InterviweeTest)
        {
            int _CountQuestions = InterviweeTest.Test.Questions.Count();

            return(_CountQuestions);
        }
Пример #16
0
        /// <summary>
        /// Получить количество ответов на вопрсы.
        /// </summary>
        public int GetCountCompletedQuestion(DAO.InterviweeTests InterviweeTest)
        {
            int _CompletedQuestion = InterviweeTest.TestingResults.Count();

            return(_CompletedQuestion);
        }
Пример #17
0
        /// <summary>
        /// Получить количество правильных ответов.
        /// </summary>
        public int GetCountCorrectAnswers(DAO.InterviweeTests InterviweeTest)
        {
            int _CorrectAnswers = InterviweeTest.TestingResults.Where(x => x.IsCorrect).Count();

            return(_CorrectAnswers);
        }