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);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 4
0
        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);
        }