public GenerateBasePage CreateGenerateLevel(TestLevel level, GenerateBaseVM pageViewModel) { GenerateBasePage result = null; switch (level) { case TestLevel.GLevelA: case TestLevel.GcLevelA: result = new GenerateLevelA(pageViewModel); break; case TestLevel.GLevelB: case TestLevel.GcLevelB: result = new GenerateLevelB(pageViewModel); break; case TestLevel.GLevelC: case TestLevel.GcLevelC: result = new GenerateLevelC(pageViewModel); break; case TestLevel.GLevelB1: case TestLevel.GcLevelB1: result = new GenerateLevelB1(pageViewModel); break; case TestLevel.GLevelB2: case TestLevel.GcLevelB2: result = new GenerateLevelB2(pageViewModel); break; } return(result); }
public GenerateContainer() { InitializeComponent(); Created = DateTime.Now; m_pageViewModel = new GenerateBaseVM(); DataContext = m_pageViewModel; }
public GenerateLevelB2(GenerateBaseVM pageViewModel) { InitializeComponent(); m_pageViewModel = pageViewModel ?? new GenerateBaseVM(); // reading m_pageViewModel.ConfigLevels = new ObservableCollection <GenerateConfigLevel>(); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 10, QuestionLevel.Normal.ToString(), 10, Sections[0], false, QuestionType.RQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[1], true, QuestionType.RPAB1B2.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[2], true, QuestionType.RPQAB1B2.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[3], true, QuestionType.RPQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[4], true, QuestionType.RPA.ToString(), B1B2Configs)); if (!m_pageViewModel.IsChoice) { // writing m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 5, QuestionLevel.Normal.ToString(), 10, Sections[5], false, QuestionType.WQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 5, QuestionLevel.Normal.ToString(), 10, Sections[6], false, QuestionType.WQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 5, QuestionLevel.Normal.ToString(), 10, Sections[7], false, QuestionType.WQA.ToString(), B1B2Configs)); // Listening m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[8], true, QuestionType.LQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[9], true, QuestionType.LQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[10], true, QuestionType.LQA1.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( string.Empty, 1, QuestionLevel.Normal.ToString(), 10, Sections[11], true, QuestionType.LQA1.ToString(), B1B2Configs)); } else { groupListening.Visibility = Visibility.Collapsed; } DataContext = m_pageViewModel; }
public static XElement BuildConfigStructure(GenerateBaseVM model) { var element = model.ConfigLevels.Select(x => new XElement("Section", new XElement("Id", x.Section), new XElement("TemplateKey", x.Templatekey), new XElement("NumOfQuestion", x.NumOfQuestion), new XElement("QuestionLevel", x.QuestionLevel), new XElement("TimeDone", x.TimeDone))); return(new XElement("Config", element)); }
public GenerateLevelA(GenerateBaseVM pageViewModel) { InitializeComponent(); m_pageViewModel = pageViewModel ?? new GenerateBaseVM(); // Create config sections m_pageViewModel.ConfigLevels = new ObservableCollection <GenerateConfigLevel>(); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[0], 10, QuestionLevel.Normal.ToString(), 10, Sections[0], false, QuestionType.RQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[1], 1, QuestionLevel.Normal.ToString(), 10, Sections[1], true, QuestionType.RPQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[2], 1, QuestionLevel.Normal.ToString(), 10, Sections[2], true, QuestionType.RPA.ToString(), B1B2Configs)); if (!m_pageViewModel.IsChoice) { // writing m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[3], 5, QuestionLevel.Normal.ToString(), 10, Sections[3], false, QuestionType.WQA.ToString(), B1B2Configs)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[4], 5, QuestionLevel.Normal.ToString(), 10, Sections[4], false, QuestionType.WQA.ToString(), B1B2Configs)); // Listening m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[5], 1, QuestionLevel.Normal.ToString(), 10, Sections[5], true, QuestionType.LQA1.ToString(), B1B2Configs, true)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[6], 1, QuestionLevel.Normal.ToString(), 10, Sections[6], true, QuestionType.LQA.ToString(), B1B2Configs, true)); m_pageViewModel.ConfigLevels.Add(new GenerateConfigLevel( DefaultSectionTitle[7], 1, QuestionLevel.Normal.ToString(), 10, Sections[7], true, QuestionType.LQA1.ToString(), B1B2Configs, true)); } else { section4A.Visibility = Visibility.Collapsed; section4B.Visibility = Visibility.Collapsed; groupListening.Visibility = Visibility.Collapsed; } DataContext = m_pageViewModel; }
public static Test GenerateTest(GenerateBaseVM model) { // 1. Get Ids NumOfTest * NumOfQuestion from DB // 2. Loop NumOfTest // 3. Each NumOfTest, generate all test, random ids, remove from list if can // 4. Use something.OrderBy(x => Guid.NewGuid()) to select random row if (model.GenerateConfig.NumOfSubTests == 0) { throw new Exception(AppCommonResource.NumOfSubTestGreaterThan0); } var subTestMetaList = new List <SubTestMeta>(); for (int i = 0; i < model.GenerateConfig.NumOfSubTests; i++) { subTestMetaList.Add(new SubTestMeta()); } foreach (var config in model.ConfigLevels) { //config.Templatekey: template key if (config.IsManual) { for (int i = 0; i < model.GenerateConfig.NumOfSubTests; i++) { if (config.IsLitening) { config.ParagraphMeta.IsListening = true; subTestMetaList[i].ListeningParagraphMetas.Add(config.Section, config.ParagraphMeta); } else { subTestMetaList[i].WritingParagraphMetas.Add(config.Section, config.ParagraphMeta); } } continue; } if (config.IsParagraph) { var paragraphMetaList = DbHelper.Instance.GetParagraphMetaOfSection( model.GenerateConfig.TestLevel.GetSubTypeFromTestLevel(), config.QuestionLevel, model.GenerateConfig.Purpose, config.Section); if (paragraphMetaList.Count == 0 || paragraphMetaList.Count < config.NumOfQuestion) { throw new Exception(AppCommonResource.NotEnoughQuestion); } bool isRemove = paragraphMetaList.Count > config.NumOfQuestion * model.GenerateConfig.NumOfSubTests; for (int i = 0; i < model.GenerateConfig.NumOfSubTests; i++) { if (config.IsLitening) { var listeningParagraph = paragraphMetaList.OrderBy(x => Guid.NewGuid()).First(); listeningParagraph.IsListening = true; subTestMetaList[i].ListeningParagraphMetas.Add(config.Section, listeningParagraph); } else { subTestMetaList[i].WritingParagraphMetas.Add(config.Section, paragraphMetaList.OrderBy(x => Guid.NewGuid()).First()); } if (isRemove) { paragraphMetaList.Remove(config.IsLitening ? subTestMetaList[i].ListeningParagraphMetas[config.Section] : subTestMetaList[i].WritingParagraphMetas[config.Section]); } } } else { var paragraphMeta = DbHelper.Instance.GetQuestionMetaOfSection( model.GenerateConfig.TestLevel.GetSubTypeFromTestLevel(), config.QuestionLevel, model.GenerateConfig.Purpose, config.Section); if (paragraphMeta.QuestionMeta.Count == 0 || paragraphMeta.QuestionMeta.Count < config.NumOfQuestion) { throw new Exception(AppCommonResource.NotEnoughQuestion); } bool isRemove = paragraphMeta.QuestionMeta.Count > config.NumOfQuestion * model.GenerateConfig.NumOfSubTests; for (int i = 0; i < model.GenerateConfig.NumOfSubTests; i++) { if (config.IsLitening) { subTestMetaList[i].ListeningParagraphMetas.Add(config.Section, new ParagraphMeta() { Id = 1, QuestionMeta = paragraphMeta.QuestionMeta.OrderBy(x => Guid.NewGuid()).Take(config.NumOfQuestion).ToList() }); subTestMetaList[i].ListeningParagraphMetas[config.Section].TimeDone = subTestMetaList[i].ListeningParagraphMetas[config.Section].QuestionMeta.Sum(x => x.TimeDone); if (isRemove) { foreach (var qMeta in subTestMetaList[i].ListeningParagraphMetas[config.Section].QuestionMeta) { var removeItem = paragraphMeta.QuestionMeta.First(x => x.Id == qMeta.Id); paragraphMeta.QuestionMeta.Remove(removeItem); } } } else { subTestMetaList[i].WritingParagraphMetas.Add(config.Section, new ParagraphMeta() { Id = 1, QuestionMeta = paragraphMeta.QuestionMeta.OrderBy(x => Guid.NewGuid()).Take(config.NumOfQuestion).ToList() }); subTestMetaList[i].WritingParagraphMetas[config.Section].TimeDone = subTestMetaList[i].WritingParagraphMetas[config.Section].QuestionMeta.Sum(x => x.TimeDone); if (isRemove) { foreach (var qMeta in subTestMetaList[i].WritingParagraphMetas[config.Section].QuestionMeta) { var removeItem = paragraphMeta.QuestionMeta.First(x => x.Id == qMeta.Id); paragraphMeta.QuestionMeta.Remove(removeItem); } } } } } } var test = new Test() { Name = model.GenerateConfig.TestName, ClassNo = model.GenerateConfig.ClassNo, Level = model.GenerateConfig.TestLevel.GetSubTypeFromTestLevel(), TotalTime = model.GenerateConfig.TotalTime, TotalQuestion = subTestMetaList[0].WritingParagraphMetas.Sum(x => x.Value.QuestionMeta.Count), NumOfSubTest = model.GenerateConfig.NumOfSubTests, Purpose = model.GenerateConfig.Purpose, ConfigStructure = XmlHelper.BuildConfigStructure(model).ToString(), SubTests = new ObservableCollection <SubTest>(), RealTestTime = subTestMetaList[0].WritingParagraphMetas.Sum(x => x.Value.TimeDone), TestDate = model.GenerateConfig.TestDate, IsChoice = model.IsChoice, No = model.GenerateConfig.TestDate.ToString("yyyyMMddHHmmss") }; int subTestCount = 0; foreach (var subTestMeta in subTestMetaList) { var subTest = new SubTest() { Name = $"{AppCommonResource.SubTest} {++subTestCount}", XmlWritingStructure = XmlHelper.BuildStructureSubTest(subTestMeta.WritingParagraphMetas, test).ToString(), XmlListeningStructure = XmlHelper.BuildStructureSubTest(subTestMeta.ListeningParagraphMetas, test).ToString() }; TestLevel level; TestLevel.TryParse(model.GenerateConfig.TestLevel, out level); var builder = new StringBuilder(); builder.AppendLine(XmlHelper.BuildTestHeader(level, SubTestType.Writing.ToString(), subTest, test)); builder.AppendLine(XmlHelper.BuildTestFromXml(subTest.XmlWritingStructure)); subTest.WritingTestContent = builder.ToString(); builder = new StringBuilder(); builder.AppendLine(XmlHelper.BuildTestHeader(level, SubTestType.Listening.ToString(), subTest, test)); builder.AppendLine(XmlHelper.BuildTestFromXml(subTest.XmlListeningStructure)); subTest.ListeningTestContent = builder.ToString(); test.SubTests.Add(subTest); } return(test); }