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();
        }