Example #1
0
        public static RecruitQuestionAnalysisView MapAnalysisView(this ExamSettingsViewModel examSettings)
        {
            var model = new RecruitQuestionAnalysisView();

            model.Recruit   = examSettings.Recruit;
            model.RecruitId = examSettings.Recruit.Id;

            var subjectList = examSettings.Parts.FirstOrDefault().Subjects;

            model.SummaryList = subjectList.Select(item => new QuestionAnalysisSummaryView()
            {
                Subject = item.Subject, SubjectId = item.SubjectId
            }).ToList();

            foreach (var part in examSettings.Parts)
            {
                var points = part.Points / part.Questions;
                foreach (var subject in part.Subjects)
                {
                    var summaryView = model.SummaryList.FirstOrDefault(x => x.SubjectId == subject.SubjectId);
                    summaryView.QuestionCount += subject.TotalQuestions;
                    summaryView.Points        += points * subject.TotalQuestions;
                }
            }

            return(model);
        }
        public ActionResult SaveExamSettings([FromBody] ExamSettingsViewModel model)
        {
            var subjectId = model.SubjectId;

            model.Subject = null;
            model.Recruit = null;

            //移除object資料
            foreach (var part in model.Parts)
            {
                foreach (var subjectsSettings in part.Subjects)
                {
                    subjectsSettings.Subject = null;
                    foreach (var tqSettings in subjectsSettings.TermQuestions)
                    {
                        tqSettings.Term = null;
                        foreach (var item in tqSettings.SubItems)
                        {
                            item.Term = null;
                        }
                    }
                }
            }

            _dataService.SaveExamSettings(subjectId, model);



            return(Ok());
        }
Example #3
0
        public async Task <ActionResult> Store([FromBody] ExamSettingsViewModel model)
        {
            //Save ExamSettings

            var subjectId = model.SubjectId;

            return(Ok());
        }
        async Task InitExamPartsAsync(Exam exam, ExamSettingsViewModel examSettingsView, IEnumerable <SubjectQuestionsViewModel> subjectQuestionsList)
        {
            List <int> recruitQuestionIds = new List <int>();

            if (exam.ExamType == ExamType.Recruit)
            {
                //只要歷屆試題
                recruitQuestionIds = _questionsService.FetchAllRecruitQuestionIds().ToList();
            }

            var pickedQids = new List <int>();

            foreach (var examPartSettings in examSettingsView.Parts)
            {
                // 依照設定, 隨機出題
                var examPart = new ExamPart
                {
                    Points       = examPartSettings.Points,
                    MultiAnswers = examPartSettings.MultiAnswers,
                    Order        = examPartSettings.Order,
                    OptionCount  = examPartSettings.OptionCount,
                    Title        = examPartSettings.Title
                };

                var qids = examPartSettings.PickQuestionIds(subjectQuestionsList, pickedQids, recruitQuestionIds);
                pickedQids.AddRange(qids);

                var questions = (await _questionsService.FetchByIdsAsync(qids)).ToList();

                examPart.LoadExamQuestions(questions);

                exam.Parts.Add(examPart);
            }

            //測試是否全為歷屆試題
            if (recruitQuestionIds.HasItems())
            {
                var examQids = exam.QuestionIds;
                var notIn    = examQids.Where(x => !recruitQuestionIds.Contains(x));

                if (notIn.HasItems())
                {
                    throw new ExamNotRecruitQuestionSelected();
                }
            }
        }
Example #5
0
        public void SaveExamSettings(int subjectId, ExamSettingsViewModel model)
        {
            var    existingDoc = _examSettingsRepository.FindOne(item => item.SubjectId == subjectId);
            string content     = JsonConvert.SerializeObject(model);

            if (existingDoc == null)
            {
                _examSettingsRepository.InsertOne(new ExamSettings {
                    SubjectId = subjectId, Content = content
                });
            }
            else
            {
                existingDoc.Content     = content;
                existingDoc.LastUpdated = DateTime.Now;
                _examSettingsRepository.ReplaceOne(existingDoc);
            }
        }
Example #6
0
        public async Task <ActionResult> RQ(int subject)
        {
            var rootSubject = _subjectsService.GetById(subject);

            if (rootSubject == null)
            {
                return(NotFound());
            }
            if (rootSubject.ParentId > 0)
            {
                ModelState.AddModelError("subject", "錯誤的科目");
                return(BadRequest(ModelState));
            }

            var rootSubjectView = rootSubject.MapViewModel(_mapper);
            var subjectViews    = rootSubject.SubItems.MapViewModelList(_mapper);

            var allTerms = await _termsService.FetchAsync(new TermFilterBySubjectsSpecification(rootSubject.GetSubIds().ToList()));

            var allRecruits = await _recruitsService.GetAllAsync();

            var recruits = allRecruits.Where(x => x.SubjectId == subject).ToList();

            var models = new List <ExamSettingsViewModel>();

            foreach (var recruit in recruits)
            {
                recruit.LoadParent(allRecruits);
                recruit.LoadSubItems(allRecruits);

                //取得一個recruit年度的試題
                var rqModel = await GetRQModelAsync(recruit, rootSubject);

                var model = new ExamSettingsViewModel(rootSubjectView, recruit.MapViewModel(_mapper));
                foreach (var rqPart in rqModel.Parts)
                {
                    var partSettings = new ExamPartSettings()
                    {
                        Order        = rqPart.Order,
                        Title        = rqPart.Title,
                        Points       = rqPart.Points,
                        OptionCount  = rqPart.OptionCount,
                        OptionType   = rqPart.OptionType,
                        MultiAnswers = rqPart.MultiAnswers,

                        Questions = rqPart.Questions.Count
                    };


                    var subjectSettings = new List <ExamSubjectSettings>();
                    foreach (var subjectView in subjectViews)
                    {
                        var terms = allTerms.Where(x => x.SubjectId == subjectView.Id && x.ParentId == 0).GetOrdered();
                        foreach (var term in terms)
                        {
                            term.LoadSubItems(allTerms);
                        }

                        var termViews = terms.MapViewModelList(_mapper);

                        var examSubjectSettings = new ExamSubjectSettings(subjectView, termViews);
                        subjectSettings.Add(examSubjectSettings);
                    }

                    partSettings.Subjects = subjectSettings;

                    foreach (var question in rqPart.Questions)
                    {
                        partSettings.AddQuestion(question);
                    }

                    model.Parts.Add(partSettings);
                }

                models.Add(model);
            }


            var indexModel = new AnalysisIndexModel();

            indexModel.Results  = models;
            indexModel.ViewList = models.MapAnalysisViewList();


            return(Ok(indexModel));
        }