Пример #1
0
 public TestViewModel(SATTest model)
 {
     Test = model;
 }
Пример #2
0
        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());
                    }
                }
            }
        }