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