コード例 #1
0
ファイル: Scores.cshtml.cs プロジェクト: ychsieh95/MoKUAS
        public void OnGet()
        {
            var student = JsonConvert.DeserializeObject <Models.Student>(
                User.Claims.First(claim => claim.Type == "Information").Value);
            var kuasAp = new Services.KUASAPService();

            // Set SysValue default value
            if (string.IsNullOrEmpty(SysValue))
            {
                SysValue = $"{ student.SysYear },{ student.SysSemester }";
            }

            // DropDownList items
            DropDownList = new List <SelectListItem>();
            kuasAp.GetOptionValueList(student: student).ForEach(sysItem =>
                                                                DropDownList.Add(new SelectListItem()
            {
                Text     = sysItem.SysText,
                Value    = $"{ sysItem.SysYear },{ sysItem.SysSemester }",
                Selected = string.IsNullOrEmpty(SysValue) ?
                           (sysItem.SysYear == student.SysYear && sysItem.SysSemester == student.SysSemester) :
                           (sysItem.SysYear == SysValue.Split(',')[0] && sysItem.SysSemester == SysValue.Split(',')[1])
            }));

            // Score list
            ScoreList = kuasAp.GetScores(
                student: student,
                year: SysValue.Split(',')[0],
                semester: SysValue.Split(',')[1]);

            // If empty, display alert
            if (ScoreList.Scores.Count <= 0)
            {
                ModelState.AddModelError("Warning", $"查無 { DropDownList.First(item => item.Selected).Text } 之學期成績");
            }
        }
コード例 #2
0
ファイル: Credits.cshtml.cs プロジェクト: ychsieh95/MoKUAS
        public void OnGet()
        {
            var student = JsonConvert.DeserializeObject <Models.Student>(
                User.Claims.First(claim => claim.Type == "Information").Value);
            var kuasAp       = new Services.KUASAPService();
            var sysValueList = kuasAp.GetOptionValueList(student: student);
            var scores       = new List <Models.Score>();

            var subject = new Dictionary <string, List <Models.Score> >()
            {
                { "Get", new List <Models.Score>() },
                { "Miss", new List <Models.Score>() }
            };
            var generalEducation = new Dictionary <string, List <Models.Score> >()
            {
                { "Core", new List <Models.Score>() },
                { "Extend", new List <Models.Score>() }
            };

            for (int i = 0, countOfEmpty = 0; countOfEmpty < 10; i++)
            {
                var tmpScores = kuasAp.GetScores(student: student, year: sysValueList[i].SysYear, semester: sysValueList[i].SysSemester).Scores;
                if (tmpScores.Count <= 0)
                {
                    countOfEmpty++;
                }
                else
                {
                    scores.AddRange(tmpScores);
                    countOfEmpty = 0;
                }
            }
            if (scores.Count > 0)
            {
                foreach (Models.Score score in scores)
                {
                    if (!string.IsNullOrEmpty(score.SemesterScore))
                    {
                        if (score.SemesterScore == "合格")
                        {
                            subject["Get"].Add(score);
                        }
                        else if (score.SemesterScore.Contains("*") && score.IsRequired)
                        {
                            subject["Miss"].Add(score);
                        }
                        else if (score.SemesterScore.Contains("不合格") && score.IsRequired)
                        {
                            subject["Miss"].Add(score);
                        }
                        else if (float.Parse(score.SemesterScore) < 60)
                        {
                            subject["Miss"].Add(score);
                        }
                        else
                        {
                            subject["Get"].Add(score);
                            if (score.SubjectChineseName.Contains("核心通識"))
                            {
                                generalEducation["Core"].Add(score);
                            }
                            else if (score.SubjectChineseName.Contains("延伸通識"))
                            {
                                generalEducation["Extend"].Add(score);
                            }
                        }
                    }
                }
            }

            // 刪除課程中的通識課程
            subject["Get"].RemoveAll(x => x.SubjectChineseName.Contains("通識"));
            subject["Miss"].RemoveAll(x => x.SubjectChineseName.Contains("通識"));

            // 刪除重複已失去課程
            foreach (Models.Score score in subject["Miss"].ToArray())
            {
                // 建立暫存課程
                Models.Score temp = score;
                // 尋找是否有重複 (2 個以上) 項目
                if (subject["Miss"].FindAll(x => x.SubjectChineseName == temp.SubjectChineseName &&
                                            x.PropertiesCredit == temp.PropertiesCredit &&
                                            x.PropertiesRequiredOrElective == temp.PropertiesRequiredOrElective).Count > 1)
                {
                    // 若有則全數移除並重新加入
                    subject["Miss"].RemoveAll(x => x.SubjectChineseName == temp.SubjectChineseName &&
                                              x.PropertiesCredit == temp.PropertiesCredit &&
                                              x.PropertiesRequiredOrElective == temp.PropertiesRequiredOrElective);
                    subject["Miss"].Add(temp);
                }
            }

            // 重修已及格修正
            foreach (Models.Score score in subject["Get"].ToArray())
            {
                if (subject["Miss"].FindAll(x => x.SubjectChineseName == score.SubjectChineseName &&
                                            x.PropertiesCredit == score.PropertiesCredit &&
                                            x.PropertiesRequiredOrElective == score.PropertiesRequiredOrElective).Count > 0)
                {
                    subject["Miss"].RemoveAll(x => x.SubjectChineseName == score.SubjectChineseName &&
                                              x.PropertiesCredit == score.PropertiesCredit &&
                                              x.PropertiesRequiredOrElective == score.PropertiesRequiredOrElective);
                }
            }

            // 對 subject 做排序
            foreach (string key in subject.Keys.ToArray())
            {
                subject[key] = subject[key].OrderBy(x => float.Parse(x.PropertiesCredit))
                               .ThenBy(x => x.SubjectChineseName)
                               .ThenBy(x => float.Parse(x.TeachTime))
                               .ThenBy(x => x.PropertiesRequiredOrElective)
                               .ThenBy(x => x.ClassType)
                               .ThenBy(x => x.MidtermScore)
                               .ThenBy(x => x.SemesterScore)
                               .ThenBy(x => x.Remark).ToList();
            }
            // 對 generalEducation 以自定義做排序
            foreach (string key in generalEducation.Keys.ToArray())
            {
                generalEducation[key].Sort((x, y) => new OrderBySubjectChtName().Compare(x.SubjectChineseName, y.SubjectChineseName));
            }

            Credits = new Models.Credits()
            {
                Subject          = subject,
                GeneralEducation = generalEducation
            };
            // 已取得所有學分
            GetCredits = (int)subject["Get"].Sum(x => float.Parse(x.PropertiesCredit));
            // 已取得必修學分
            GetRequiredCredits = (int)subject["Get"].FindAll(x => x.IsRequired).Sum(x => float.Parse(x.PropertiesCredit));
            // 已取得選修學分
            GetNotRequiredCredits = (int)subject["Get"].FindAll(x => !x.IsRequired).Sum(x => float.Parse(x.PropertiesCredit));
            // 已失去必修學分
            MissRequiredCredits = (int)subject["Miss"].Sum(x => float.Parse(x.PropertiesCredit));
        }