Exemplo n.º 1
0
        public ActionResult EditGroupTest(int groupInfoId, int?id)
        {
            var groupTest = new GroupTest();

            groupTest.TestPassRule = new TestPassRule();
            var modules        = new List <TestModule>();
            var modulePercents = new Dictionary <int, int>();

            if (id.HasValue)
            {
                GroupTestService.LoadWith(x => x.Test, x => x.TestPassRule);
                groupTest      = GroupTestService.GetByPK(id.Value);
                modulePercents = EntityUtils.GetModulePercents(groupTest.TestPassRule);
                modules        = TestModuleService.GetForTest(groupTest.TestId).ToList();
            }
            else
            {
                var groupId = GetGroupIdForInfo(groupInfoId);
                var group   = GroupService.GetByPK(groupId);
                groupTest.GroupInfoId = groupInfoId;
                groupTest.DateBegin   = group.DateBeg ?? DateTime.Now;
                groupTest.DateEnd     = group.DateEnd ?? DateTime.Now;
            }
            var model = new GroupTestEditVM {
                GroupTest      = groupTest,
                Modules        = modules,
                ModulePercents = modulePercents,
            };

            return(BaseView(new PagePart(new GroupTestEditView().Init(model, Url))));
        }
Exemplo n.º 2
0
        public ActionResult EditTest(int?id)
        {
            var        test            = new Test();
            AjaxGridVM modulesModel    = null;
            AjaxGridVM moduleSetsModel = null;
            AjaxGridVM questionsModel  = null;
            var        modules         = new List <TestModule>();
            var        modulePercents  = new Dictionary <int, int>();

            if (id.HasValue)
            {
                TestService.LoadWith(x => x.TestPassRule);
                test = TestService.GetByPK(id);
                EditTestPermission(test.Id);
                modulesModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetModules(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditModule(id.Value, null)),
                    DeleteUrl  = Url.Action <TestEditController>(c => c.DeleteModule(null)),
                    Caption    = "Модули"
                };
                AddColumns <TestModule>(modulesModel, x => x.Name);
                moduleSetsModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetModuleSets(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditModuleSet(id.Value, null)),
                    Caption    = "План тестирования"
                };
                AddColumns <TestModuleSet>(moduleSetsModel, x => x.Number);
                AddColumns <TestModuleSet>(moduleSetsModel, x => x.Description);
                questionsModel = new AjaxGridVM {
                    GetListUrl = Url.Action <TestEditController>(c => c.GetQuestions(id.Value, null)),
                    EditUrl    = Url.Action <TestEditController>(c => c.EditQuestion(id.Value, null)),
                    DeleteUrl  = Url.Action <TestEditController>(c => c.DeleteQuestion(null)),
                    Caption    = "Вопросы"
                };
                AddColumns <TestQuestion>(questionsModel, x => x.Description);
                modulePercents = EntityUtils.GetModulePercents(test.TestPassRule);
                modules        = TestModuleService.GetAll(x => x.TestId == id.Value).ToList();
            }
            test.TestPassRule = test.TestPassRule ?? new TestPassRule();

            var testEditVM = new TestEditVM {
                Test       = test,
                CourseName = CourseService.AllCourseLinks()
                             .GetValueOrDefault(test.CourseTCList).GetOrDefault(x => x.WebName),
                Modules        = modules,
                ModulePercents = modulePercents
            };

            return(BaseView(
                       new PagePart(new TestEditView().Init(testEditVM, Url)),
                       modulesModel == null ? null : new PagePart(PartialViewNames.AjaxList, modulesModel),
                       questionsModel == null ? null : new PagePart(PartialViewNames.AjaxList, questionsModel),
                       moduleSetsModel == null || test.CompanyId.HasValue ? null : new PagePart(PartialViewNames.AjaxList, moduleSetsModel)
                       ));
        }
Exemplo n.º 3
0
        public void Validate(TestPassRule rule)
        {
            var totalPercents = EntityUtils.GetModulePercents(rule).Sum(x => x.Value);

            ErrorIfFalse(totalPercents == 100 || totalPercents == 0, "Сумма процентов модулей должна быть 100");
            ErrorIfFalse(rule.QuestionCount > 0, "Количество вопросов должно быть больше 0");
            ErrorIfFalse(rule.Time > 0, "Время должно быть больше 0");
            ErrorIfFalse((!rule.AverageMark.HasValue && !rule.ExpertMark.HasValue) ||
                         (rule.PassMark < rule.AverageMark && rule.AverageMark < rule.ExpertMark)
                         , "Проходные баллы должны идти по возрастанию");
        }
Exemplo n.º 4
0
        public object Modules()
        {
            var percents = EntityUtils.GetModulePercents(Model.Test.TestPassRule);

            if (percents.Sum(x => x.Value) == 0)
            {
                return(strong["Равномерно распределение по модулям"]);
            }
            return(div[h3["Модули"], Model.Modules.Select((m, i) => p[strong[m.Name], " - ",
                                                                      percents.GetValueOrDefault(m.Id).NotNullString() + "%"])]);
        }
Exemplo n.º 5
0
        public ActionResult EditGroupTest(GroupTestEditVM model)
        {
            if (!LinqToSqlValidator.Validate(ModelState, model.GroupTest))
            {
                return(ErrorJson());
            }
            GroupTestService.EnableTracking();
            var newGroupTest = model.GroupTest;

            if (newGroupTest.Id == 0)
            {
                var rule = TestPassRuleService.FirstOrDefault(x => x.TestId == newGroupTest.TestId);
                if (newGroupTest.TestPassRule.QuestionCount == 0)
                {
                    newGroupTest.TestPassRule.UpdateBy(rule);
                }
                newGroupTest.TestPassRule.ModulePercents = rule.ModulePercents;
                Validate(newGroupTest);
                if (!ModelState.IsValid)
                {
                    return(ErrorJson());
                }
                GroupTestService.InsertAndSubmit(newGroupTest);
                return(UrlJson(Url.Action <GroupTestController>(c => c.EditGroupTest(newGroupTest.GroupInfoId,
                                                                                     newGroupTest.Id))));
            }
            GroupTestService.LoadWith(x => x.TestPassRule);
            var groupTest = GroupTestService.GetByPK(newGroupTest.Id);
            var isNewTest = groupTest.TestId != newGroupTest.TestId;

            if (isNewTest)
            {
                var rule = TestPassRuleService.FirstOrDefault(x => x.TestId == newGroupTest.TestId);
                model.ModulePercents = EntityUtils.GetModulePercents(rule);
            }
            groupTest.Update(newGroupTest, x => x.TestId,
                             x => x.DateBegin, x => x.DateEnd, x => x.AttemptCount);
            groupTest.TestPassRule.UpdateBy(newGroupTest.TestPassRule);
            EntityUtils.SetModulePercents(groupTest.TestPassRule, model.ModulePercents);
            Validate(groupTest);
            if (!ModelState.IsValid)
            {
                return(ErrorJson());
            }
            GroupTestService.SubmitChanges();
            if (isNewTest)
            {
                return(UrlJson(Url.GroupTest().Urls.EditGroupTest(groupTest.GroupInfoId, groupTest.Id)));
            }
            return(UrlJson(Url.Action <GroupTestController>(c => c.EditGroupTest(groupTest.GroupInfoId,
                                                                                 groupTest.Id))));
        }
Exemplo n.º 6
0
        private List <TestQuestion> GetQuestions()
        {
            var questions      = new List <TestQuestion>();
            var modulePercents = EntityUtils.GetModulePercents(Model.UserTest.TestPassRule);
            var questionCount  = Model.UserTest.TestPassRule.QuestionCount;
            var testQuestions  = Model.Test.TestQuestions.Shuffle();

            if (Model.OtherPreTestQuestions.Any())
            {
                testQuestions = testQuestions.Concat(Model.OtherPreTestQuestions)
                                .Shuffle();
            }
            if (modulePercents.Count == 0 || Model.UserTest.IsPrerequisite)
            {
                return(testQuestions.Take(questionCount).ToList());
            }
            if (modulePercents.All(x => x.Value == 0))
            {
                var modules = testQuestions.Select(x => x.ModuleId.GetValueOrDefault()).Where(x => x != 0)
                              .Distinct().ToList();
                var average = 100 / modules.Count;
                modulePercents = modules.ToDictionary(x => x, y => average);
            }
            var counts = modulePercents.ToDictionary(x => x.Key, x => (questionCount * x.Value) / 100);

            foreach (var moduleCount in counts)
            {
                questions.AddRange(testQuestions
                                   .Where(x => x.ModuleId == moduleCount.Key).Take(moduleCount.Value));
            }

            if (questionCount > questions.Count)
            {
                var ids = new HashSet <int>(questions.Select(x => x.Id));
                questions.AddRange(
                    testQuestions.Where(x => !ids.Contains(x.Id)).Take(questionCount - questions.Count));
            }
            return(questions);
        }
Exemplo n.º 7
0
        public ActionResult EditModuleSet(int testId, int?id)
        {
            EditTestPermission(testId);
            var model          = new ModuleSetVM();
            var set            = new TestModuleSet();
            var modulePercents = new Dictionary <int, int>();

            set.TestPassRule = new TestPassRule();
            if (id.HasValue)
            {
                TestModuleSetService.LoadWith(x => x.TestPassRule);
                set            = TestModuleSetService.GetByPK(id.Value);
                modulePercents = EntityUtils.GetModulePercents(set.TestPassRule);
            }
            else
            {
                set.TestId = testId;
                set.Number = (short)(1 + MaxModuleSetNumber(testId));
            }
            model.ModulePercents = modulePercents;
            model.ModuleSet      = set;
            model.Modules        = TestModuleService.GetForTest(testId).ToList();
            return(BaseViewWithModel(new ModuleSetEditView(), model));
        }