Beispiel #1
0
        private int CloseTest(IEnumerable <AnswerOnTestQuestion> testAnswers, int userId)
        {
            int            testId         = testAnswers.First().TestId;
            TestPassResult testPassResult = GetTestPassResult(testId, userId);

            int points = GetResultPoints(testAnswers);

            testPassResult.Points = points;

            using (var repositoriesContainer = new LmPlatformRepositoriesContainer())
            {
                repositoriesContainer.RepositoryFor <AnswerOnTestQuestion>().Delete(testAnswers);
                repositoriesContainer.RepositoryFor <TestPassResult>().Save(testPassResult);

                var savedTestUnlock = repositoriesContainer.TestUnlocksRepository.GetAll(new
                                                                                         Query <TestUnlock>()
                                                                                         .AddFilterClause(testUnlock => testUnlock.StudentId == userId && testUnlock.TestId == testId))
                                      .SingleOrDefault();

                if (!GetTest(testId).ForSelfStudy&& savedTestUnlock != null)
                {
                    repositoriesContainer.TestUnlocksRepository.Delete(savedTestUnlock);
                }

                repositoriesContainer.ApplyChanges();
            }

            return(points);
        }
Beispiel #2
0
        private int GetRemainingTime(int testId, int questionId, int userId)
        {
            var            test           = GetTest(testId);
            TestPassResult testPassResult = GetTestPassResult(testId, userId);

            double seconds = 0;

            if (test.SetTimeForAllTest)
            {
                seconds = (test.TimeForCompleting * 60) - (DateTime.UtcNow - testPassResult.StartTime).TotalSeconds;
            }
            else
            {
                if (testPassResult.Comment == questionId.ToString())
                {
                    seconds = test.TimeForCompleting - ((DateTime.UtcNow.Ticks - testPassResult.StartTime.Ticks) / TimeSpan.TicksPerSecond);
                }
                else
                {
                    seconds = test.TimeForCompleting;
                    testPassResult.StartTime = DateTime.UtcNow;
                    testPassResult.Comment   = questionId.ToString();
                }

                using (var repositoriesContainer = new LmPlatformRepositoriesContainer())
                {
                    repositoriesContainer.RepositoryFor <TestPassResult>().Save(testPassResult);
                    repositoriesContainer.ApplyChanges();
                }
            }

            return(seconds > 0 ? (int)seconds : 0);
        }
Beispiel #3
0
        private void CheckForTimeEndeed(int userId, int testId, Test test, TestPassResult testPassResult)
        {
            if (test.SetTimeForAllTest && (DateTime.UtcNow - testPassResult.StartTime).Seconds > (test.TimeForCompleting * 60))
            {
                List <AnswerOnTestQuestion> testAnswers = GetAnswersForTest(testId, userId);
                foreach (AnswerOnTestQuestion answer in testAnswers)
                {
                    if (!answer.Time.HasValue)
                    {
                        answer.Time   = DateTime.UtcNow;
                        answer.Points = 0;
                    }
                }

                CloseTest(testAnswers, userId);
            }
        }
Beispiel #4
0
 public static TestPassResultViewModel FromModel(TestPassResult model, Test test)
 {
     return(new TestPassResultViewModel
     {
         StudentId = model.StudentId,
         TestId = model.TestId,
         Points = model.Points,
         Percent = model.Percent,
         StartTime = model.StartTime,
         User = model.User,
         Comment = model.Comment,
         CalculationType = model.CalculationType,
         TestName = model.TestName,
         ForSelfStudy = test == null || test.ForSelfStudy,
         ForNN = test?.ForNN ?? false,
         ForEUMK = test?.ForEUMK ?? true,
         BeforeEUMK = test?.BeforeEUMK ?? true,
         TestNumber = test.TestNumber
     });
 }
Beispiel #5
0
        private void StartNewTest(int testId, int userId)
        {
            Test test = GetTest(testId);

            int questionsCount = test.CountOfQuestions > test.Questions.Count
                ? test.Questions.Count
                : test.CountOfQuestions;

            var random = new Random(DateTime.Now.Millisecond);
            IEnumerable <Question> includedQuestions = test.Questions.OrderBy(t => random.Next()).Take(questionsCount);

            var answersTemplate = new List <AnswerOnTestQuestion>();

            int counter = 1;

            foreach (Question includedQuestion in includedQuestions)
            {
                answersTemplate.Add(new AnswerOnTestQuestion
                {
                    QuestionId = includedQuestion.Id,
                    TestId     = testId,
                    UserId     = userId,
                    Number     = counter++
                });
            }

            TestPassResult testPassResult = GetTestPassResult(testId, userId) ?? new TestPassResult
            {
                TestId    = testId,
                StudentId = userId
            };

            testPassResult.StartTime = DateTime.UtcNow;

            using (var repositoriesContainer = new LmPlatformRepositoriesContainer())
            {
                repositoriesContainer.RepositoryFor <AnswerOnTestQuestion>().Save(answersTemplate);
                repositoriesContainer.RepositoryFor <TestPassResult>().Save(testPassResult);
                repositoriesContainer.ApplyChanges();
            }
        }
Beispiel #6
0
        public ActionResult ChangeLockForUserForStudent(int testId, int studentId, bool unlocked)
        {
            TestsManagementService.UnlockTestForStudent(testId, studentId, unlocked);
            if (unlocked)
            {
                TestPassResult passedByUser = TestPassingService.GetTestPassingTime(testId, studentId);
                if (passedByUser != null)
                {
                    Student student = StudentManagementService.GetStudent(studentId);
                    return(Json(new
                    {
                        PassedTime = passedByUser.StartTime.ToShortDateString(),
                        Test = TestsManagementService.GetTest(testId).Title,
                        Student = string.Format("{0} {1}", student.FirstName, student.LastName),
                        Points = passedByUser.Points
                    }));
                }
            }

            return(Json("Ok"));
        }
Beispiel #7
0
        public void MakeUserAnswer(IEnumerable <Answer> answers, int userId, int testId, int questionNumber)
        {
            var            test           = GetTest(testId);
            TestPassResult testPassResult = GetTestPassResult(testId, userId);

            CheckForTimeEndeed(userId, testId, test, testPassResult);

            AnswerOnTestQuestion answerOnTestQuestion = GetAnswerOntestQuestion(userId, testId, questionNumber);

            if (answers == null)
            {
                answerOnTestQuestion.Points = 0;
            }
            else
            {
                Question question = GetQuestionById(answerOnTestQuestion.QuestionId);

                switch (question.QuestionType)
                {
                case QuestionType.HasOneCorrectAnswer:
                    ProcessOneVariantAnswer(answers, question, answerOnTestQuestion);
                    break;

                case QuestionType.HasManyCorrectAnswers:
                    ProcessManyVariantsAnswer(answers, question, answerOnTestQuestion);
                    break;

                case QuestionType.TextAnswer:
                    ProcessTextAnswer(answers, question, answerOnTestQuestion);
                    break;

                case QuestionType.SequenceAnswer:
                    ProcessSequenceAnswer(answers.ToList(), question, answerOnTestQuestion);
                    break;
                }
            }

            answerOnTestQuestion.Time = DateTime.UtcNow;
            SaveAnswerOnTestQuestion(answerOnTestQuestion);
        }
Beispiel #8
0
        public TestPassResult GetTestPassingTime(int testId, int studentId)
        {
            TestPassResult passingResult = GetTestPassResult(testId, studentId);

            return(passingResult);
        }