private List <Question> NewQuestion(int id, QuestionPageViewModel userQuestionPage, Test test, UrlTest urlTest, UrlTestAttend urlAttendBase, List <Result> resultsBase) { userQuestionPage.TestName = test.Name; userQuestionPage.UrlTestName = urlTest.Name; userQuestionPage.UrlTestAttendId = urlAttendBase.Id; var questions = context.Questions.AsNoTracking().Where(a => a.TestId == test.Id & !a.IsDel) .OrderBy(a => a.Id) .ToList(); userQuestionPage.Answers = context.Answers.AsNoTracking().Where(a => a.QuestionId == id & !a.IsDel).ToList(); var answersPage = new List <Answer>(); foreach (var result in resultsBase) { var answer = context.Answers.FirstOrDefault(a => a.Id == result.AnswerId & a.QuestionId == id); if (answer != null) { answersPage.Add(answer); } } if (answersPage.Count != 0) { foreach (var answer in answersPage) { userQuestionPage.Answers.Find(a => a.Id == answer.Id).Selected = true; } } return(questions); }
public IActionResult Start(int id, QuestionPageViewModel userQuestionPage) { userQuestionPage.QuestionId = id; var urlTestBase = context.UrlTests.AsNoTracking().First(a => a.Url == userQuestionPage.Url); if (!string.IsNullOrEmpty(userQuestionPage.UrlTestName)) { if (urlTestBase.Name != userQuestionPage.UrlTestName) { urlTestBase.Name = userQuestionPage.UrlTestName; context.Update(urlTestBase); context.SaveChanges(); } } if (!ModelState.IsValid) { userQuestionPage.TestName = context.Tests.First(a => a.Id == urlTestBase.TestId & !a.IsDel).Name; return(View(userQuestionPage)); } if (string.IsNullOrEmpty(urlTestBase.Name)) { userQuestionPage.TestName = context.Tests.First(a => a.Id == urlTestBase.TestId & !a.IsDel).Name; userQuestionPage.Mes = "Write Name"; return(View(userQuestionPage)); } var urlAttends = context.UrlTestAttends.AsNoTracking().Where(a => a.UrlTestUrl == userQuestionPage.Url) .OrderByDescending(a => a.NumberOfRun).ToList(); var urlAttend = new UrlTestAttend() { UrlTestUrl = userQuestionPage.Url }; if (urlAttends.Count == 0) { urlAttend.NumberOfRun = 1; } else { urlAttend.NumberOfRun = urlAttends[0].NumberOfRun + 1; } urlAttend.StartTimeTest = DateTime.Now; context.UrlTestAttends.Add(urlAttend); context.SaveChanges(); var urlAttendBase = context.UrlTestAttends.AsNoTracking().First(a => a.UrlTestUrl == userQuestionPage.Url & a.NumberOfRun == urlAttend.NumberOfRun); return(RedirectToAction("QuestionPage", new{ testAttemptId = urlAttendBase.Id, id })); }
private void AddResult(QuestionPageViewModel userQuestionPage, List <Answer> answersUser, UrlTestAttend urlAttend, UrlTestAttend urlAttendBase) { foreach (var answer in userQuestionPage.Answers) { if (answersUser.Count == 0) { if (answer.Selected) { var result = new Result() { AnswerId = answer.Id, UrlTestAttendId = urlAttend.Id }; context.Results.Add(result); } } else { if (answersUser.FirstOrDefault(a => a.Id == answer.Id) == null) { if (answer.Selected) { var result = new Result() { AnswerId = answer.Id, UrlTestAttendId = urlAttend.Id }; context.Results.Add(result); } } else { if (!answer.Selected) { var resultBase = context.Results.AsNoTracking() .First(a => a.UrlTestAttendId == urlAttendBase.Id & a.AnswerId == answer.Id); context.Remove(resultBase); } } } } context.SaveChanges(); }