public TestViewModel(SATTest model) { Test = model; }
public ActionResult Test(SATTest model, FormCollection collection) { var choose = collection.Get("sectionValue"); var examCode = !string.IsNullOrEmpty(collection.Get("examCode")) ? int.Parse(collection.Get("examCode")) : 1; using (var db = new SATEntities()) { using (var transaction = db.Database.BeginTransaction()) { try { var email = Session["AccountEmail"].ToString(); var user = db.Users.Where(u => u.Email == email).FirstOrDefault(); var now = DateTime.Now; var section = int.Parse(choose); var _existTest = db.SATTests.Include("User").Any(u => u.UserID == user.Id && (u.User.IsDeleted == null || u.User.IsDeleted == false) && u.ExamCode == examCode); if (_existTest) { var testData = db.SATTests.FirstOrDefault(t => t.UserID == user.Id && t.Status == false); var sectionData = testData.SATTestSections.FirstOrDefault(s => s.Section == section); sectionData.TotalRightAnswer = 0; //var type = db.SATExamForms.Where(e => e.TypeID == section).FirstOrDefault(); //var typeID = type != null ? type.TypeID : 0; var defaultScore = db.SATScores.Where(s => s.RawValue == 0 && s.TypeID == section).FirstOrDefault(); sectionData.ScoreID = defaultScore.ID; sectionData.Section = section; sectionData.rowguid = testData.rowguid; sectionData.StartTime = now; sectionData.EndTime = now.AddMinutes(Utils.Instance.GetSectionDuration(section)); var entry = db.Entry(sectionData); entry.State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); Session["Section"] = section; TempData["guidTest"] = testData.rowguid.ToString(); TempData.Keep("guidTest"); transaction.Commit(); return(RedirectToAction("BeginTest", new { guid = testData.rowguid })); } else { //new test #region NewTest var duration = Utils.Instance.GetSectionDuration(section); // add pre define test var beginTest = new SATTest(); beginTest.ExamCode = examCode; beginTest.StartTime = now; beginTest.EndTime = now.AddMinutes(duration); beginTest.SubmitTime = beginTest.EndTime; beginTest.TotalScore = 0; beginTest.Status = false;// true is done the test beginTest.rowguid = Guid.NewGuid(); beginTest.UserID = user.Id; db.SATTests.Add(beginTest); db.SaveChanges(); var currentTest = db.SATTests.Where(t => t.rowguid == beginTest.rowguid).FirstOrDefault(); var timeStep = now; var testSectionRedirectGuid = Guid.Empty; //add pre define section for (int i = 1; i < 5; i++) { var testSection = new SATTestSection(); testSection.TestID = currentTest.ID; testSection.TotalRightAnswer = 0; //var type = db.SATExamForms.Where(e => e.Section == i).FirstOrDefault().TypeID; var type = i; var defaultScore = db.SATScores.Where(s => s.RawValue == 0 && s.TypeID == type).FirstOrDefault(); testSection.ScoreID = defaultScore.ID; testSection.Section = i; testSection.rowguid = beginTest.rowguid; switch (i) { case 1: testSection.StartTime = now; testSection.EndTime = now.AddMinutes(65); timeStep = testSection.EndTime; break; case 2: testSection.StartTime = timeStep; testSection.EndTime = timeStep.AddMinutes(35); timeStep = testSection.EndTime; break; case 3: testSection.StartTime = timeStep; testSection.EndTime = timeStep.AddMinutes(25); timeStep = testSection.EndTime; break; case 4: testSection.StartTime = timeStep; testSection.EndTime = timeStep.AddMinutes(55); timeStep = testSection.EndTime; break; default: break; } testSection.Status = false; db.SATTestSections.Add(testSection); db.SaveChanges(); } Session["Section"] = section; ////add pre define user answer //foreach (var item in db.SATQuestions.ToList()) //{ // var userAnswer = new SATUserAnswer(); // userAnswer.rowguid = Guid.NewGuid(); // userAnswer.TestID = currentTest.ID; // userAnswer.UserAnswer = null; // db.SATUserAnswers.Add(userAnswer); // db.SaveChanges(); //} TempData["guidTest"] = beginTest.rowguid.ToString(); TempData.Keep("guidTest"); transaction.Commit(); return(RedirectToAction("BeginTest", new { guid = beginTest.rowguid })); #endregion } } catch (Exception ex) { transaction.Rollback(); ViewBag.Ex = ex.ToString(); return(View()); } } } }