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); }
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); }
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); } }
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 }); }
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(); } }
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")); }
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); }
public TestPassResult GetTestPassingTime(int testId, int studentId) { TestPassResult passingResult = GetTestPassResult(testId, studentId); return(passingResult); }