Exemplo n.º 1
0
        private void cboSchoolYear_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cboSchoolYear.SelectedItem == null || cboSemester.SelectedItem == null)
            {
                return;
            }

            SemesterInfo info = new SemesterInfo();

            info.SchoolYear = Framework.Int.Parse("" + cboSchoolYear.SelectedItem);
            info.Semester   = Framework.Int.Parse("" + cboSemester.SelectedItem);

            cboCourseName.Items.Clear();

            if (_allcourses.ContainsKey(info) && _allcourses[info].Count > 0)
            {
                _allcourses[info].Sort(delegate(Data.JHCourseRecord x, Data.JHCourseRecord y)
                {
                    return(x.Name.CompareTo(y.Name));
                });

                cboCourseName.Items.AddRange(_allcourses[info].ToArray());
                cboCourseName.SelectedIndex = 0;
            }
        }
Exemplo n.º 2
0
        private void InitializeCourses()
        {
            _allcourses = new Dictionary <SemesterInfo, List <JHSchool.Data.JHCourseRecord> >();
            List <int> schoolYearList = new List <int>();

            cboSchoolYear.Items.Clear();
            cboSemester.Items.Clear();

            SemesterInfo last = new SemesterInfo();

            foreach (JHCourseRecord course in JHCourse.SelectAll())
            {
                SemesterInfo info = new SemesterInfo();

                if (course.SchoolYear.HasValue)
                {
                    info.SchoolYear = course.SchoolYear.Value;
                }

                if (course.Semester.HasValue)
                {
                    info.Semester = course.Semester.Value;
                }

                //info.SchoolYear = (int)course.SchoolYear;
                //info.Semester = (int)course.Semester;


                if (!_allcourses.ContainsKey(info))
                {
                    _allcourses.Add(info, new List <JHSchool.Data.JHCourseRecord>());
                }
                _allcourses[info].Add(course);

                if (!schoolYearList.Contains(info.SchoolYear))
                {
                    schoolYearList.Add(info.SchoolYear);
                }

                if (info > last)
                {
                    last = info;
                }
            }

            schoolYearList.Sort();
            foreach (int sy in schoolYearList)
            {
                cboSchoolYear.Items.Add(sy);
            }

            cboSemester.Items.Add(1);
            cboSemester.Items.Add(2);

            cboCourseName.DisplayMember = "Name";

            cboSchoolYear.SelectedItem = last.SchoolYear;
            cboSemester.SelectedItem   = last.Semester;
        }
Exemplo n.º 3
0
        public int GetGradeYear(int schoolYear, int semester)
        {
            SemesterInfo info = new SemesterInfo();

            info.SchoolYear = schoolYear;
            info.Semester   = semester;
            return(GetGradeYear(info));
        }
Exemplo n.º 4
0
        public bool GradeYearExist(int schoolYear, int semester)
        {
            SemesterInfo info = new SemesterInfo();

            info.SchoolYear = schoolYear;
            info.Semester   = semester;
            return(GradeYearExist(info));
        }
Exemplo n.º 5
0
        public void UpdateSemester(SemesterInfo semester)
        {
            UpdateSemesterRequest request = new UpdateSemesterRequest()
            {
                Semester = semester
            };

            CallWebService <IOrgUnitManagementServicev1_0, UpdateSemesterRequest, UpdateOrgUnitResponse>(
                m_service1_0, request, (s, q) => s.UpdateSemester(q));
        }
Exemplo n.º 6
0
 public bool GradeYearExist(SemesterInfo semesterInfo)
 {
     if (_gradeYears.ContainsKey(semesterInfo))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 7
0
 // GET: api/Semester/5
 public IHttpActionResult Get(int id)
 {
     try
     {
         SemesterInfo semester = db.Query("SemesterDetails").Where("semesterID", id).First <SemesterInfo>();
         return(Ok(semester));
     }catch (Exception err)
     {
         return(InternalServerError());
     }
 }
Exemplo n.º 8
0
 public int GetGradeYear(SemesterInfo semesterInfo)
 {
     if (_gradeYears.ContainsKey(semesterInfo))
     {
         return(_gradeYears[semesterInfo]);
     }
     else
     {
         return(0);
     }
 }
Exemplo n.º 9
0
        // POST: api/Semester
        public IHttpActionResult Post([FromBody] SemesterInfo semester)
        {
            if (semester is null)
            {
                return(BadRequest(General.INVALID_INPUT));
            }
            if (!HelperFunctions.checkDateFormat(semester.registrationStartDate.ToString()))
            {
                return(BadRequest(SemesterConstants.INVALID_REG_START_DATE));
            }
            if (!HelperFunctions.checkDateFormat(semester.registrationEndDate.ToString()))
            {
                return(BadRequest(SemesterConstants.INVALID_REG_END_DATE));
            }
            if (!HelperFunctions.checkDateFormat(semester.semesterStartDate.ToString()))
            {
                return(BadRequest(SemesterConstants.INVALID_REG_START_DATE));
            }
            if (!HelperFunctions.checkDateFormat(semester.semesterEndDate.ToString()))
            {
                return(BadRequest(SemesterConstants.INVALID_SEM_END_DATE));
            }

            if (semester.creditLimit <= 0)
            {
                return(BadRequest(SemesterConstants.INVALID_CREDIT_LIMIT));
            }

            if (!HelperFunctions.dateVerfication(semester.registrationStartDate, semester.registrationEndDate))
            {
                return(BadRequest(SemesterConstants.REG_START_DATE_GT_END_DATE));
            }
            if (!HelperFunctions.dateVerfication(semester.semesterStartDate, semester.semesterEndDate))
            {
                return(BadRequest(SemesterConstants.SEM_START_DATE_GT_END_DATE));
            }

            try
            {
                SemesterBasic semesterBasic = new SemesterBasic(semester);
                int           semesterID    = db.Query("Semester").InsertGetId <int>(semesterBasic);

                semester.semesterID = semesterID;
                SemesterConfig semesterConfig = new SemesterConfig(semester);
                var            affected       = db.Query("Config").Insert(semesterConfig);
                return(Ok());
            }
            catch (Exception err)
            {
                return(InternalServerError(err));
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Parses the Json string and returns the complete academic history of the user. On failure, the method returns null.
        /// </summary>
        /// <param name="jsonString"></param>
        /// <returns></returns>
        public static AcademicHistory TryParseGrades(string jsonString)
        {
            try
            {
                AcademicHistory academicHistory = null;
                JsonObject      rootObject      = JsonObject.Parse(jsonString);

                // Adding complete list of raw grades
                JsonArray gradesArray = rootObject.GetNamedArray("grades");
                academicHistory = new AcademicHistory(gradesArray.Count);
                foreach (JsonValue gradeValue in gradesArray)
                {
                    academicHistory._grades.Add(GetGradeInfo(gradeValue));
                }

                // Adding semester-wise grades and gpa
                var       groupedGrades     = academicHistory.Grades.GroupBy <GradeInfo, string>((GradeInfo gradeInfo) => { return(gradeInfo.Id); });
                JsonArray semesterWiseArray = rootObject.GetNamedArray("semester_wise");
                var       semInfoList       = groupedGrades.Join <IGrouping <string, GradeInfo>, IJsonValue, string, SemesterInfo>(
                    semesterWiseArray,
                    (group) => { return(group.Key); },
                    (semValue) => { return(semValue.GetObject().GetNamedString("exam_held")); },
                    (IGrouping <string, GradeInfo> group, IJsonValue value) =>
                {
                    JsonObject semesterInfoObject = value.GetObject();
                    SemesterInfo semesterInfo     = new SemesterInfo(group.ToList <GradeInfo>());
                    semesterInfo.CreditsEarned    = (ushort)semesterInfoObject.GetNamedNumber("credits");
                    semesterInfo.Gpa = semesterInfoObject.GetNamedNumber("gpa");
                    return(semesterInfo);
                });
                foreach (var semInfo in semInfoList)
                {
                    academicHistory._semesterGroupedGrades.Add(semInfo);
                }
                academicHistory._semesterGroupedGrades.Sort();

                // Adding summary data
                academicHistory.Cgpa = rootObject.GetNamedNumber("cgpa");
                academicHistory.CreditsRegistered = (ushort)rootObject.GetNamedNumber("credits_registered");
                academicHistory.CreditsEarned     = (ushort)rootObject.GetNamedNumber("credits_earned");
                academicHistory.LastRefreshed     = GetRefreshUTC(rootObject.GetNamedString("grades_refreshed"));

                return(academicHistory);
            }
            catch
            {
                return(null);
            }
        }
Exemplo n.º 11
0
        //public SemesterHistoryUtility(string studentID)
        //{
        //}

        //public SemesterHistoryUtility(Data.StudentRecord student)
        //{
        //}

        public SemesterHistoryUtility(Data.JHSemesterHistoryRecord record)
        {
            StudentID             = record.RefStudentID;
            SemesterHistoryRecord = record;

            foreach (K12.Data.SemesterHistoryItem item in SemesterHistoryRecord.SemesterHistoryItems)
            {
                SemesterInfo info = new SemesterInfo();
                info.SchoolYear = item.SchoolYear;
                info.Semester   = item.Semester;

                if (!_gradeYears.ContainsKey(info))
                {
                    _gradeYears.Add(info, item.GradeYear);
                }
            }
        }
Exemplo n.º 12
0
        public IHttpActionResult getCurrentSemester(int currentDate)
        {
            if (!HelperFunctions.checkDateFormat(currentDate.ToString()))
            {
                return(BadRequest(General.INVALID_DATE_FORMAT));
            }

            try
            {
                SemesterInfo semester = db.Query("SemesterDetails").Where("SemesterStartDate", "<=", currentDate)
                                        .Where("SemesterEndDate", ">=", currentDate).First <SemesterInfo>();
                if (semester is null)
                {
                    return(NotFound());
                }
                return(Ok(semester));
            }catch (Exception err)
            {
                return(InternalServerError(err));
            }
        }
Exemplo n.º 13
0
        private void Filter_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (_reseting)
            {
                return;
            }
            if (_worker.IsBusy)
            {
                return;
            }

            listView.Items.Clear();
            lblCount.Text = "";
            listView.SuspendLayout();

            if (cboSchoolYear.SelectedItem != null && cboSemester.SelectedItem != null)
            {
                int schoolYear = 0;
                int semester   = 0;
                int.TryParse("" + cboSchoolYear.SelectedItem, out schoolYear);
                int.TryParse("" + cboSemester.SelectedItem, out semester);
                SemesterInfo sems = new SemesterInfo();
                sems.SchoolYear = schoolYear;
                sems.Semester   = semester;

                if (_items.ContainsKey(sems))
                {
                    foreach (ListViewItem item in _items[sems])
                    {
                        listView.Items.Add(item);
                    }
                    lblCount.Text = "" + _items[sems].Count;
                }
            }
            listView.ResumeLayout();
        }
        public Dictionary <string, bool> Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            list.SyncSemesterHistoryCache();

            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }

            foreach (StudentRecord student in list)
            {
                passList.Add(student.ID, true);

                Dictionary <SemesterInfo, int> gyMapping = new Dictionary <SemesterInfo, int>();
                if (UIConfig._StudentSHistoryRecDict.ContainsKey(student.ID))
                {
                    foreach (K12.Data.SemesterHistoryItem shi in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                    {
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = shi.SchoolYear;
                        info.Semester   = shi.Semester;
                        if (!gyMapping.ContainsKey(info))
                        {
                            gyMapping.Add(info, shi.GradeYear);
                        }
                        else
                        {
                            FISCA.Presentation.Controls.MsgBox.Show("學生:" + UIConfig._StudentSHistoryRecDict[student.ID].Student.Name + " 學期歷程重覆");
                        }
                    }
                }

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }
                string keyStr = "所有學期";
                Dictionary <string, DisTestABC> counter = new Dictionary <string, DisTestABC>();
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    if (!counter.ContainsKey(keyStr))
                    {
                        counter.Add(keyStr, new DisTestABC());
                    }

                    if (_balance)
                    {
                        decimal total_merit   = _meritConverter.BtoC(_meritConverter.AtoB(record.MeritA) + record.MeritB) + record.MeritC;
                        decimal total_demerit = _demeritConverter.BtoC(_demeritConverter.AtoB(record.DemeritA) + record.DemeritB) + record.DemeritC;
                        total_demerit -= total_merit;
                        if (total_demerit > 0)
                        {
                            counter[keyStr].ABC = _demeritConverter.Change(total_demerit);
                        }
                        total_demerit = _demeritConverter.BtoA(_demeritConverter.CtoB(total_demerit));
                        counter[keyStr].demeritINT = total_demerit;
                    }
                    else
                    {
                        decimal total_demerit     = record.DemeritA + _demeritConverter.BtoA(record.DemeritB) + _demeritConverter.BtoA(_demeritConverter.CtoB(record.DemeritC));
                        decimal total_demerit_ABC = _demeritConverter.BtoC(_demeritConverter.AtoB(record.DemeritA) + record.DemeritB) + record.DemeritC;
                        if (total_demerit_ABC > 0)
                        {
                            counter[keyStr].ABC = _demeritConverter.Change(total_demerit_ABC);
                        }
                        counter[keyStr].demeritINT = total_demerit;
                    }
                }

                List <ResultDetail> resultList = new List <ResultDetail>();
                if (counter[keyStr].demeritINT >= _amount)
                {
                    ResultDetail rd = new ResultDetail(student.ID, "0", "0");
                    rd.AddMessage("懲戒表現不符合畢業規範");
                    rd.AddDetail("懲戒表現不符合畢業規範(" + counter[keyStr].ABC + ")");
                    resultList.Add(rd);
                }


                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
Exemplo n.º 15
0
        /// <summary>
        /// 根據學生判斷是否符合條件
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public Dictionary <string, bool> Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            //學生通過或不通過列表
            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            list.SyncSemesterHistoryCache();

            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            //取得學生的自動缺曠獎懲統計
            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }


            foreach (StudentRecord student in list)
            {
                //先假設每位學生通過判斷
                passList.Add(student.ID, true);

                #region 針對每位學生產生學年度學期對學年度對照
                Dictionary <SemesterInfo, int> gyMapping = new Dictionary <SemesterInfo, int>();
                if (UIConfig._StudentSHistoryRecDict.ContainsKey(student.ID))
                {
                    //針對學生的每筆學期歷程
                    foreach (K12.Data.SemesterHistoryItem shi in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                    {
                        //建立學年度學期物件,並將學期歷程的學年度及學期複製過去
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = shi.SchoolYear;
                        info.Semester   = shi.Semester;

                        //將學年度學期對年級加入到集合中
                        if (!gyMapping.ContainsKey(info))
                        {
                            gyMapping.Add(info, shi.GradeYear);
                        }
                        else
                        {
                            FISCA.Presentation.Controls.MsgBox.Show("學生:" + UIConfig._StudentSHistoryRecDict[student.ID].Student.Name + " 學期歷程重覆");
                        }
                    }
                }
                #endregion

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }

                Dictionary <SemesterInfo, decimal> counter = new Dictionary <SemesterInfo, decimal>();

                #region 針對學生的每筆自動缺曠獎懲統計,統計缺曠節數
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;

                    //針對每筆缺曠名稱的統計
                    foreach (AbsenceCountRecord acRecord in record.AbsenceCounts)
                    {
                        //要缺曠類別在成績計算規則中才統計
                        if (!_types.ContainsKey(acRecord.PeriodType + ":" + acRecord.Name))
                        {
                            continue;
                        }

                        //將自動獎懲缺曠統計放入到變數中
                        if (!counter.ContainsKey(info))
                        {
                            counter.Add(info, 0);
                        }
                        //加總缺曠節次
                        counter[info] += acRecord.Count * _types[acRecord.PeriodType + ":" + acRecord.Name];
                    }
                }
                #endregion

                List <ResultDetail> resultList = new List <ResultDetail>();

                decimal count = 0;
                foreach (SemesterInfo info in counter.Keys)
                {
                    count += counter[info];
                }

                if (count >= _amount)
                {
                    ResultDetail rd = new ResultDetail(student.ID, "0", "0");
                    rd.AddMessage("缺課節數超次");
                    rd.AddDetail("缺課節數超次(累計" + count + "節)");
                    resultList.Add(rd);
                }

                //若ResultDetail的列表項目大於0
                if (resultList.Count > 0)
                {
                    //將ResultDetail加入到回傳結果中
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
        Dictionary <string, bool> IEvaluative.Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            list.SyncSemesterHistoryCache();
            //Dictionary<string, List<Data.JHMoralScoreRecord>> morals = new Dictionary<string, List<JHSchool.Data.JHMoralScoreRecord>>();
            //foreach (Data.JHMoralScoreRecord moral in Data.JHMoralScore.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    if (!morals.ContainsKey(moral.RefStudentID))
            //        morals.Add(moral.RefStudentID, new List<JHSchool.Data.JHMoralScoreRecord>());
            //    morals[moral.RefStudentID].Add(moral);
            //}
            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }

            //// 取得學生目前班級年級
            //Dictionary<string, int> studGrYearDic = new Dictionary<string, int>();
            //foreach (JHSchool.Data.JHStudentRecord stud in JHSchool.Data.JHStudent.SelectByIDs(list.AsKeyList()))
            //{
            //    if (stud.Class != null)
            //        if (stud.Class.GradeYear.HasValue)
            //            studGrYearDic.Add(stud.ID, stud.Class.GradeYear.Value);
            //}

            //bool checkInsShi = false;

            //// 取得學生學期歷程
            //Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord> studHisRecDic = new Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord>();
            //foreach (JHSchool.Data.JHSemesterHistoryRecord rec in JHSchool.Data.JHSemesterHistory.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    checkInsShi = true;
            //    K12.Data.SemesterHistoryItem shi = new K12.Data.SemesterHistoryItem();
            //    shi.SchoolYear = UIConfig._UserSetSHSchoolYear;
            //    shi.Semester = UIConfig._UserSetSHSemester;
            //    if (studGrYearDic.ContainsKey(rec.RefStudentID))
            //        shi.GradeYear = studGrYearDic[rec.RefStudentID];

            //    foreach (K12.Data.SemesterHistoryItem shiItem in rec.SemesterHistoryItems)
            //        if (shiItem.SchoolYear == shi.SchoolYear && shiItem.Semester == shi.Semester)
            //            checkInsShi = false;
            //    if (checkInsShi)
            //        rec.SemesterHistoryItems.Add(shi);

            //    studHisRecDic.Add(rec.RefStudentID, rec);
            //}

            foreach (StudentRecord student in list)
            {
                passList.Add(student.ID, true);

                Dictionary <SemesterInfo, int> gyMapping = new Dictionary <SemesterInfo, int>();
                if (UIConfig._StudentSHistoryRecDict.ContainsKey(student.ID))
                {
                    foreach (K12.Data.SemesterHistoryItem shi in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                    {
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = shi.SchoolYear;
                        info.Semester   = shi.Semester;
                        if (!gyMapping.ContainsKey(info))
                        {
                            gyMapping.Add(info, shi.GradeYear);
                        }
                        else
                        {
                            FISCA.Presentation.Controls.MsgBox.Show("學生:" + UIConfig._StudentSHistoryRecDict[student.ID].Student.Name + " 學期歷程重覆");
                        }
                    }
                }

                //foreach (SemesterHistoryRecord record in student.GetSemesterHistories())
                //{
                //    SemesterInfo info = new SemesterInfo();
                //    info.SchoolYear = record.SchoolYear;
                //    info.Semester = record.Semester;
                //    if (!gyMapping.ContainsKey(info))
                //        gyMapping.Add(info, record.GradeYear);
                //}

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }
                Dictionary <SemesterInfo, DisTestABC> counter = new Dictionary <SemesterInfo, DisTestABC>();
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;
                    if (!counter.ContainsKey(info))
                    {
                        counter.Add(info, new DisTestABC());
                    }

                    //decimal meritA = 0, meritB = 0, meritC = 0;
                    //decimal demeritA = 0, demeritB = 0, demeritC = 0;

                    //foreach (XmlElement itemElement in record.Summary.SelectNodes("DisciplineStatistics/Merit"))
                    //{
                    //    decimal merit;
                    //    if (decimal.TryParse(itemElement.GetAttribute("A"), out merit))
                    //        meritA = merit;
                    //    if (decimal.TryParse(itemElement.GetAttribute("B"), out merit))
                    //        meritB = merit;
                    //    if (decimal.TryParse(itemElement.GetAttribute("C"), out merit))
                    //        meritC = merit;
                    //}

                    //foreach (XmlElement itemElement in record.Summary.SelectNodes("DisciplineStatistics/Demerit"))
                    //{
                    //    decimal demerit;
                    //    if (decimal.TryParse(itemElement.GetAttribute("A"), out demerit))
                    //        demeritA = demerit;
                    //    if (decimal.TryParse(itemElement.GetAttribute("B"), out demerit))
                    //        demeritB = demerit;
                    //    if (decimal.TryParse(itemElement.GetAttribute("C"), out demerit))
                    //        demeritC = demerit;
                    //}

                    if (_balance)
                    {
                        decimal total_merit   = _meritConverter.BtoC(_meritConverter.AtoB(record.MeritA) + record.MeritB) + record.MeritC;
                        decimal total_demerit = _demeritConverter.BtoC(_demeritConverter.AtoB(record.DemeritA) + record.DemeritB) + record.DemeritC;
                        total_demerit -= total_merit;
                        if (total_demerit > 0)
                        {
                            counter[info].ABC = _demeritConverter.Change(total_demerit);
                        }
                        total_demerit            = _demeritConverter.BtoA(_demeritConverter.CtoB(total_demerit));
                        counter[info].demeritINT = total_demerit;
                    }
                    else
                    {
                        decimal total_demerit     = record.DemeritA + _demeritConverter.BtoA(record.DemeritB) + _demeritConverter.BtoA(_demeritConverter.CtoB(record.DemeritC));
                        decimal total_demerit_ABC = _demeritConverter.BtoC(_demeritConverter.AtoB(record.DemeritA) + record.DemeritB) + record.DemeritC;
                        if (total_demerit_ABC > 0)
                        {
                            counter[info].ABC = _demeritConverter.Change(total_demerit_ABC);
                        }
                        counter[info].demeritINT = total_demerit;
                    }
                }

                List <ResultDetail> resultList = new List <ResultDetail>();
                foreach (SemesterInfo info in counter.Keys)
                {
                    if (gyMapping.ContainsKey(info) && counter[info].demeritINT >= _amount)
                    {
                        ResultDetail rd = new ResultDetail(student.ID, "" + gyMapping[info], "" + info.Semester);
                        rd.AddMessage("懲戒表現不符合畢業規範");
                        rd.AddDetail("懲戒表現不符合畢業規範(" + counter[info].ABC + ")");
                        resultList.Add(rd);
                    }
                }

                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
Exemplo n.º 17
0
        public Dictionary <string, bool> Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            list.SyncSemesterHistoryCache();
            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }

            //foreach (Data.JHMoralScoreRecord moral in Data.JHMoralScore.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    if (!morals.ContainsKey(moral.RefStudentID))
            //        morals.Add(moral.RefStudentID, new List<JHSchool.Data.JHMoralScoreRecord>());
            //    morals[moral.RefStudentID].Add(moral);
            //}

            //// 取得學生目前班級年級
            //Dictionary<string, int> studGrYearDic = new Dictionary<string, int>();
            //foreach (JHSchool.Data.JHStudentRecord stud in JHSchool.Data.JHStudent.SelectByIDs(list.AsKeyList()))
            //{
            //    if (stud.Class != null)
            //        if (stud.Class.GradeYear.HasValue)
            //            studGrYearDic.Add(stud.ID, stud.Class.GradeYear.Value);
            //}

            //bool checkInsShi = false;

            //// 取得學生學期歷程
            //Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord> studHisRecDic = new Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord>();
            //foreach (JHSchool.Data.JHSemesterHistoryRecord rec in JHSchool.Data.JHSemesterHistory.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    checkInsShi = true;
            //    K12.Data.SemesterHistoryItem shi = new K12.Data.SemesterHistoryItem();
            //    shi.SchoolYear = UIConfig._UserSetSHSchoolYear;
            //    shi.Semester = UIConfig._UserSetSHSemester;
            //    if (studGrYearDic.ContainsKey(rec.RefStudentID))
            //        shi.GradeYear = studGrYearDic[rec.RefStudentID];

            //    foreach (K12.Data.SemesterHistoryItem shiItem in rec.SemesterHistoryItems)
            //        if (shiItem.SchoolYear == shi.SchoolYear && shiItem.Semester == shi.Semester)
            //            checkInsShi = false;
            //    if (checkInsShi)
            //        rec.SemesterHistoryItems.Add(shi);

            //    studHisRecDic.Add(rec.RefStudentID, rec);
            //}


            foreach (StudentRecord student in list)
            {
                passList.Add(student.ID, true);

                // 產生學期歷程對照
                Dictionary <SemesterInfo, int> gyMapping = new Dictionary <SemesterInfo, int>();
                if (UIConfig._StudentSHistoryRecDict.ContainsKey(student.ID))
                {
                    foreach (K12.Data.SemesterHistoryItem shi in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                    {
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = shi.SchoolYear;
                        info.Semester   = shi.Semester;
                        if (!gyMapping.ContainsKey(info))
                        {
                            gyMapping.Add(info, shi.GradeYear);
                        }
                        else
                        {
                            FISCA.Presentation.Controls.MsgBox.Show("學生:" + UIConfig._StudentSHistoryRecDict[student.ID].Student.Name + " 學期歷程重覆");
                        }
                    }
                }

                //foreach (SemesterHistoryRecord record in student.GetSemesterHistories())
                //{
                //    SemesterInfo info = new SemesterInfo();
                //    info.SchoolYear = record.SchoolYear;
                //    info.Semester = record.Semester;
                //    if (!gyMapping.ContainsKey(info))
                //        gyMapping.Add(info, record.GradeYear);
                //}

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }
                Dictionary <SemesterInfo, decimal> counter = new Dictionary <SemesterInfo, decimal>();
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;

                    if (gyMapping.ContainsKey(info) &&
                        !((gyMapping[info] == 3 || gyMapping[info] == 9) && info.Semester == 2))
                    {
                        continue;
                    }

                    //foreach (XmlElement itemElement in record.Summary.SelectNodes("AttendanceStatistics/Absence"))
                    foreach (AbsenceCountRecord acRecord in record.AbsenceCounts)
                    {
                        //string name = itemElement.GetAttribute("Name");
                        //string periodType = itemElement.GetAttribute("PeriodType");

                        if (!_types.ContainsKey(acRecord.PeriodType + ":" + acRecord.Name))
                        {
                            continue;
                        }

                        //decimal count;
                        //if (!decimal.TryParse(itemElement.GetAttribute("Count"), out count))
                        //    count = 0;
                        //else
                        //    count *= _types[periodType + ":" + name];

                        if (!counter.ContainsKey(info))
                        {
                            counter.Add(info, 0);
                        }
                        counter[info] += acRecord.Count * _types[acRecord.PeriodType + ":" + acRecord.Name];
                    }
                }

                List <ResultDetail> resultList = new List <ResultDetail>();
                foreach (SemesterInfo info in counter.Keys)
                {
                    if (gyMapping.ContainsKey(info) && counter[info] >= _amount)
                    {
                        ResultDetail rd = new ResultDetail(student.ID, "" + gyMapping[info], "" + info.Semester);
                        rd.AddMessage("缺課節數超次");
                        rd.AddDetail("缺課節數超次(累計" + counter[info] + "節)");
                        resultList.Add(rd);
                    }
                }

                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
Exemplo n.º 18
0
        public override void InitializeImport(SmartSchool.API.PlugIn.Import.ImportWizard wizard)
        {
            Dictionary <string, int>             _ID_SchoolYear_Semester_GradeYear = new Dictionary <string, int>();
            Dictionary <string, List <string> >  _ID_SchoolYear_Semester_Subject   = new Dictionary <string, List <string> >();
            Dictionary <string, JHStudentRecord> _StudentCollection = new Dictionary <string, JHStudentRecord>();
            Dictionary <JHStudentRecord, Dictionary <int, decimal> > _StudentPassScore = new Dictionary <JHStudentRecord, Dictionary <int, decimal> >();
            Dictionary <string, List <JHSemesterScoreRecord> >       semsDict          = new Dictionary <string, List <JHSemesterScoreRecord> >();

            wizard.PackageLimit = 3000;
            //wizard.ImportableFields.AddRange("領域", "科目", "學年度", "學期", "權數", "節數", "分數評量", "努力程度", "文字描述", "註記");
            //wizard.ImportableFields.AddRange("領域", "科目", "學年度", "學期", "權數", "節數", "分數評量", "文字描述", "註記");

            //2015.1.27 Cloud新增
            wizard.ImportableFields.AddRange("領域", "科目", "學年度", "學期", "權數", "節數", "成績", "原始成績", "補考成績", "努力程度", "文字描述", "註記");

            wizard.RequiredFields.AddRange("領域", "科目", "學年度", "學期");

            wizard.ValidateStart += delegate(object sender, SmartSchool.API.PlugIn.Import.ValidateStartEventArgs e)
            {
                #region ValidateStart
                _ID_SchoolYear_Semester_GradeYear.Clear();
                _ID_SchoolYear_Semester_Subject.Clear();
                _StudentCollection.Clear();

                List <JHStudentRecord> list = JHStudent.SelectByIDs(e.List);

                MultiThreadWorker <JHStudentRecord> loader = new MultiThreadWorker <JHStudentRecord>();
                loader.MaxThreads     = 3;
                loader.PackageSize    = 250;
                loader.PackageWorker += delegate(object sender1, PackageWorkEventArgs <JHStudentRecord> e1)
                {
                    foreach (var item in JHSemesterScore.SelectByStudents(e1.List))
                    {
                        if (!semsDict.ContainsKey(item.RefStudentID))
                        {
                            semsDict.Add(item.RefStudentID, new List <JHSchool.Data.JHSemesterScoreRecord>());
                        }
                        semsDict[item.RefStudentID].Add(item);
                    }
                };
                loader.Run(list);

                foreach (JHStudentRecord stu in list)
                {
                    if (!_StudentCollection.ContainsKey(stu.ID))
                    {
                        _StudentCollection.Add(stu.ID, stu);
                    }
                }
                #endregion
            };
            wizard.ValidateRow += delegate(object sender, SmartSchool.API.PlugIn.Import.ValidateRowEventArgs e)
            {
                #region ValidateRow
                int             t;
                decimal         d;
                JHStudentRecord student;
                if (_StudentCollection.ContainsKey(e.Data.ID))
                {
                    student = _StudentCollection[e.Data.ID];
                }
                else
                {
                    e.ErrorMessage = "壓根就沒有這個學生" + e.Data.ID;
                    return;
                }
                bool inputFormatPass = true;
                #region 驗各欄位填寫格式
                foreach (string field in e.SelectFields)
                {
                    string value = e.Data[field];
                    switch (field)
                    {
                    default:
                        break;

                    case "領域":
                        //if (value == "")
                        //{
                        //    inputFormatPass &= false;
                        //    e.ErrorFields.Add(field, "必須填寫");
                        //}
                        //else if (!Domains.Contains(value))
                        //{
                        //    inputFormatPass &= false;
                        //    e.ErrorFields.Add(field, "必須為七大領域");
                        //}
                        break;

                    case "科目":
                        if (value == "")
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填寫");
                        }
                        break;

                    case "學年度":
                        if (value == "" || !int.TryParse(value, out t))
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入學年度");
                        }
                        break;

                    case "權數":
                    case "節數":
                        if (value == "" || !decimal.TryParse(value, out d))
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入數值");
                        }
                        break;

                    //case "成績年級":
                    //    if (value == "" || !int.TryParse(value, out t))
                    //    {
                    //        inputFormatPass &= false;
                    //        e.ErrorFields.Add(field, "必須填入整數");
                    //    }
                    //    break;
                    case "學期":
                        if (value == "" || !int.TryParse(value, out t) || t > 2 || t < 1)
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入1或2");
                        }
                        break;

                    //case "分數評量":
                    //    if (value != "" && !decimal.TryParse(value, out d))
                    //    {
                    //        inputFormatPass &= false;
                    //        e.ErrorFields.Add(field, "必須填入空白或數值");
                    //    }
                    //    break;
                    case "成績":
                        if (value != "" && !decimal.TryParse(value, out d))
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入空白或數值");
                        }
                        break;

                    case "原始成績":
                        if (value != "" && !decimal.TryParse(value, out d))
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入空白或數值");
                        }
                        break;

                    case "補考成績":
                        if (value != "" && !decimal.TryParse(value, out d))
                        {
                            inputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入空白或數值");
                        }
                        break;
                        //case "努力程度":
                        //    if (value != "" && !int.TryParse(value, out t))
                        //    {
                        //        inputFormatPass &= false;
                        //        e.ErrorFields.Add(field, "必須填入空白或數值");
                        //    }
                        //    break;
                    }
                }
                #endregion
                //輸入格式正確才會針對情節做檢驗
                if (inputFormatPass)
                {
                    string errorMessage = "";

                    string subject    = e.Data["科目"];
                    string schoolYear = e.Data["學年度"];
                    string semester   = e.Data["學期"];
                    int?   sy         = null;
                    int?   se         = null;
                    if (int.TryParse(schoolYear, out t))
                    {
                        sy = t;
                    }
                    if (int.TryParse(semester, out t))
                    {
                        se = t;
                    }
                    if (sy != null && se != null)
                    {
                        string key = e.Data.ID + "_" + sy + "_" + se;
                        #region 驗證新增科目成績
                        List <JHSemesterScoreRecord> semsList;
                        if (semsDict.ContainsKey(student.ID))
                        {
                            semsList = semsDict[student.ID];
                        }
                        else
                        {
                            semsList = new List <JHSemesterScoreRecord>();
                        }
                        foreach (JHSemesterScoreRecord record in semsList)
                        {
                            if (record.SchoolYear != sy)
                            {
                                continue;
                            }
                            if (record.Semester != se)
                            {
                                continue;
                            }

                            bool   isNewSubjectInfo = true;
                            string message          = "";
                            foreach (K12.Data.SubjectScore s in record.Subjects.Values)
                            {
                                if (s.Subject == subject)
                                {
                                    isNewSubjectInfo = false;
                                }
                            }
                            if (isNewSubjectInfo)
                            {
                                if (!e.WarningFields.ContainsKey("查無此科目"))
                                {
                                    e.WarningFields.Add("查無此科目", "學生在此學期並無此筆科目成績資訊,將會新增此科目成績");
                                }
                                foreach (string field in new string[] { "領域", "科目", "學年度", "學期", "權數", "節數" })
                                {
                                    if (!e.SelectFields.Contains(field))
                                    {
                                        message += (message == "" ? "發現此學期無此科目,\n將會新增成績\n缺少成績必要欄位" : "、") + field;
                                    }
                                }
                                if (message != "")
                                {
                                    errorMessage += (errorMessage == "" ? "" : "\n") + message;
                                }
                            }
                        }
                        #endregion
                        #region 驗證重複科目資料
                        //string skey = subject + "_" + le;
                        string skey = subject;
                        if (!_ID_SchoolYear_Semester_Subject.ContainsKey(key))
                        {
                            _ID_SchoolYear_Semester_Subject.Add(key, new List <string>());
                        }
                        if (_ID_SchoolYear_Semester_Subject[key].Contains(skey))
                        {
                            errorMessage += (errorMessage == "" ? "" : "\n") + "同一學期不允許多筆相同科目的資料";
                        }
                        else
                        {
                            _ID_SchoolYear_Semester_Subject[key].Add(skey);
                        }
                        #endregion
                    }
                    e.ErrorMessage = errorMessage;
                }
                #endregion
            };

            wizard.ImportPackage += delegate(object sender, SmartSchool.API.PlugIn.Import.ImportPackageEventArgs e)
            {
                #region ImportPackage
                Dictionary <string, List <RowData> > id_Rows = new Dictionary <string, List <RowData> >();
                #region 分包裝
                foreach (RowData data in e.Items)
                {
                    if (!id_Rows.ContainsKey(data.ID))
                    {
                        id_Rows.Add(data.ID, new List <RowData>());
                    }
                    id_Rows[data.ID].Add(data);
                }
                #endregion
                //List<SmartSchool.Feature.Score.AddScore.InsertInfo> insertList = new List<SmartSchool.Feature.Score.AddScore.InsertInfo>();
                //List<SmartSchool.Feature.Score.EditScore.UpdateInfo> updateList = new List<SmartSchool.Feature.Score.EditScore.UpdateInfo>();
                List <JHSemesterScoreRecord> insertList = new List <JHSemesterScoreRecord>();
                List <JHSemesterScoreRecord> updateList = new List <JHSemesterScoreRecord>();
                //交叉比對各學生資料
                #region 交叉比對各學生資料
                foreach (string id in id_Rows.Keys)
                {
                    XmlDocument     doc        = new XmlDocument();
                    JHStudentRecord studentRec = _StudentCollection[id];
                    //該學生的學期科目成績
                    Dictionary <SemesterInfo, JHSemesterScoreRecord> semesterScoreDictionary = new Dictionary <SemesterInfo, JHSemesterScoreRecord>();
                    #region 整理現有的成績資料
                    List <JHSchool.Data.JHSemesterScoreRecord> semsList;
                    if (semsDict.ContainsKey(studentRec.ID))
                    {
                        semsList = semsDict[studentRec.ID];
                    }
                    else
                    {
                        semsList = new List <JHSchool.Data.JHSemesterScoreRecord>();
                    }
                    foreach (JHSemesterScoreRecord var in semsList)
                    {
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = var.SchoolYear;
                        info.Semester   = var.Semester;

                        if (!semesterScoreDictionary.ContainsKey(info))
                        {
                            semesterScoreDictionary.Add(info, var);
                        }

                        //string key = var.Subject + "_" + var.Level;
                        //if (!semesterScoreDictionary.ContainsKey(var.SchoolYear))
                        //    semesterScoreDictionary.Add(var.SchoolYear, new Dictionary<int, Dictionary<string, SemesterSubjectScoreInfo>>());
                        //if (!semesterScoreDictionary[var.SchoolYear].ContainsKey(var.Semester))
                        //    semesterScoreDictionary[var.SchoolYear].Add(var.Semester, new Dictionary<string, SemesterSubjectScoreInfo>());
                        //if (!semesterScoreDictionary[var.SchoolYear][var.Semester].ContainsKey(key))
                        //    semesterScoreDictionary[var.SchoolYear][var.Semester].Add(key, var);
                    }
                    #endregion

                    //要匯入的學期科目成績
                    Dictionary <SemesterInfo, Dictionary <string, RowData> > semesterImportScoreDictionary = new Dictionary <SemesterInfo, Dictionary <string, RowData> >();

                    #region 整理要匯入的資料
                    foreach (RowData row in id_Rows[id])
                    {
                        int    t;
                        string subject    = row["科目"];
                        string schoolYear = row["學年度"];
                        string semester   = row["學期"];
                        int    sy         = int.Parse(schoolYear);
                        int    se         = int.Parse(semester);

                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = sy;
                        info.Semester   = se;

                        if (!semesterImportScoreDictionary.ContainsKey(info))
                        {
                            semesterImportScoreDictionary.Add(info, new Dictionary <string, RowData>());
                        }
                        if (!semesterImportScoreDictionary[info].ContainsKey(subject))
                        {
                            semesterImportScoreDictionary[info].Add(subject, row);
                        }
                    }
                    #endregion

                    //學期年級重整
                    //Dictionary<SemesterInfo, int> semesterGradeYear = new Dictionary<SemesterInfo, int>();
                    //要變更成績的學期
                    List <SemesterInfo> updatedSemester = new List <SemesterInfo>();
                    //在變更學期中新增加的成績資料
                    Dictionary <SemesterInfo, List <RowData> > updatedNewSemesterScore = new Dictionary <SemesterInfo, List <RowData> >();
                    //要增加成績的學期
                    Dictionary <SemesterInfo, List <RowData> > insertNewSemesterScore = new Dictionary <SemesterInfo, List <RowData> >();
                    //開始處理ImportScore
                    #region 開始處理ImportScore
                    foreach (SemesterInfo info in semesterImportScoreDictionary.Keys)
                    {
                        foreach (string subject in semesterImportScoreDictionary[info].Keys)
                        {
                            RowData data = semesterImportScoreDictionary[info][subject];
                            //如果是本來沒有這筆學期的成績就加到insertNewSemesterScore
                            if (!semesterScoreDictionary.ContainsKey(info))
                            {
                                if (!insertNewSemesterScore.ContainsKey(info))
                                {
                                    insertNewSemesterScore.Add(info, new List <RowData>());
                                }
                                insertNewSemesterScore[info].Add(data);
                            }
                            else
                            {
                                bool hasChanged = false;
                                //修改已存在的資料
                                if (semesterScoreDictionary[info].Subjects.ContainsKey(subject))
                                {
                                    JHSemesterScoreRecord record = semesterScoreDictionary[info];

                                    #region 直接修改已存在的成績資料的Detail
                                    foreach (string field in e.ImportFields)
                                    {
                                        K12.Data.SubjectScore score = record.Subjects[subject];
                                        string value = data[field];
                                        //"分數評量", "努力程度", "文字描述", "註記"
                                        switch (field)
                                        {
                                        default:
                                            break;

                                        case "領域":
                                            if (score.Domain != value)
                                            {
                                                score.Domain = value;
                                                hasChanged   = true;
                                            }
                                            break;

                                        case "權數":
                                            if ("" + score.Credit != value)
                                            {
                                                score.Credit = decimal.Parse(value);
                                                hasChanged   = true;
                                            }
                                            break;

                                        case "節數":
                                            if ("" + score.Period != value)
                                            {
                                                score.Period = decimal.Parse(value);
                                                hasChanged   = true;
                                            }
                                            break;

                                        //case "成績年級":
                                        //    int gy = int.Parse(data["成績年級"]);
                                        //    if (record.GradeYear != gy)
                                        //    {
                                        //        semesterGradeYear[info] = gy;
                                        //        hasChanged = true;
                                        //    }
                                        //    break;
                                        //case "分數評量":
                                        //    if ("" + score.Score != value)
                                        //    {
                                        //        decimal d;
                                        //        if (decimal.TryParse(value, out d))
                                        //            score.Score = d;
                                        //        else
                                        //            score.Score = null;
                                        //        hasChanged = true;
                                        //    }
                                        //    break;
                                        case "成績":
                                            if ("" + score.Score != value)
                                            {
                                                decimal d;
                                                if (decimal.TryParse(value, out d))
                                                {
                                                    score.Score = d;
                                                }
                                                else
                                                {
                                                    score.Score = null;
                                                }
                                                hasChanged = true;
                                            }
                                            break;

                                        case "原始成績":
                                            if ("" + score.ScoreOrigin != value)
                                            {
                                                decimal d;
                                                if (decimal.TryParse(value, out d))
                                                {
                                                    score.ScoreOrigin = d;
                                                }
                                                else
                                                {
                                                    score.ScoreOrigin = null;
                                                }
                                                hasChanged = true;
                                            }
                                            break;

                                        case "補考成績":
                                            if ("" + score.ScoreMakeup != value)
                                            {
                                                decimal d;
                                                if (decimal.TryParse(value, out d))
                                                {
                                                    score.ScoreMakeup = d;
                                                }
                                                else
                                                {
                                                    score.ScoreMakeup = null;
                                                }
                                                hasChanged = true;
                                            }
                                            break;

                                        //case "努力程度":
                                        //    if ("" + score.Effort != value)
                                        //    {
                                        //        int i;
                                        //        if (int.TryParse(value, out i))
                                        //            score.Effort = i;
                                        //        else
                                        //            score.Effort = null;
                                        //        hasChanged = true;
                                        //    }
                                        //    break;
                                        case "文字描述":
                                            if ("" + score.Text != value)
                                            {
                                                score.Text = value;
                                                hasChanged = true;
                                            }
                                            break;

                                        case "註記":
                                            if (score.Comment != value)
                                            {
                                                score.Comment = value;
                                                hasChanged    = true;
                                            }
                                            break;
                                        }
                                    }
                                    #endregion
                                }
                                else//加入新成績至已存在的學期
                                {
                                    if (!updatedNewSemesterScore.ContainsKey(info))
                                    {
                                        updatedNewSemesterScore.Add(info, new List <RowData>());
                                    }
                                    updatedNewSemesterScore[info].Add(data);
                                    hasChanged = true;
                                }
                                //真的有變更
                                if (hasChanged)
                                {
                                    #region 登錄有變更的學期
                                    if (!updatedSemester.Contains(info))
                                    {
                                        updatedSemester.Add(info);
                                    }
                                    #endregion
                                }
                            }
                        }
                    }
                    #endregion
                    //處理已登錄要更新的學期成績
                    #region 處理已登錄要更新的學期成績
                    foreach (SemesterInfo info in updatedSemester)
                    {
                        //Dictionary<int, Dictionary<int, string>> semeScoreID = (Dictionary<int, Dictionary<int, string>>)studentRec.Fields["SemesterSubjectScoreID"];
                        //string semesterScoreID = semeScoreID[sy][se];//從學期抓ID
                        //int gradeyear = semesterGradeYear[info];//抓年級
                        //XmlElement subjectScoreInfo = doc.CreateElement("SemesterSubjectScoreInfo");
                        #region 產生該學期科目成績的XML
                        //foreach (SemesterSubjectScoreInfo scoreInfo in semesterScoreDictionary[sy][se].Values)
                        //{
                        //    subjectScoreInfo.AppendChild(doc.ImportNode(scoreInfo.Detail, true));
                        //}

                        updateList.Add(semesterScoreDictionary[info]);

                        //if (updatedNewSemesterScore.ContainsKey(sy) && updatedNewSemesterScore[sy].ContainsKey(se))
                        if (updatedNewSemesterScore.ContainsKey(info))
                        {
                            foreach (RowData row in updatedNewSemesterScore[info])
                            {
                                //XmlElement newScore = doc.CreateElement("Subject");
                                K12.Data.SubjectScore subjectScore = new K12.Data.SubjectScore();
                                #region 建立newScore
                                //foreach (string field in new string[] { "領域", "科目", "權數", "節數", "分數評量", "努力程度", "文字描述", "註記" })
                                //foreach (string field in new string[] { "領域", "科目", "權數", "節數", "分數評量", "文字描述", "註記" })
                                foreach (string field in new string[] { "領域", "科目", "權數", "節數", "成績", "原始成績", "補考成績", "文字描述", "註記" })
                                {
                                    if (e.ImportFields.Contains(field))
                                    {
                                        decimal d;

                                        #region 填入科目資訊
                                        string value = row[field];
                                        switch (field)
                                        {
                                        default:
                                            break;

                                        case "領域":
                                            subjectScore.Domain = value;
                                            break;

                                        case "科目":
                                            subjectScore.Subject = value;
                                            break;

                                        case "權數":
                                            subjectScore.Credit = decimal.Parse(value);
                                            break;

                                        case "節數":
                                            subjectScore.Period = decimal.Parse(value);
                                            break;

                                        //case "分數評量":
                                        //    decimal d;
                                        //    if (decimal.TryParse(value, out d))
                                        //        subjectScore.Score = d;
                                        //    else
                                        //        subjectScore.Score = null;
                                        //    break;
                                        case "成績":
                                            if (decimal.TryParse(value, out d))
                                            {
                                                subjectScore.Score = d;
                                            }
                                            else
                                            {
                                                subjectScore.Score = null;
                                            }
                                            break;

                                        case "原始成績":
                                            if (decimal.TryParse(value, out d))
                                            {
                                                subjectScore.ScoreOrigin = d;
                                            }
                                            else
                                            {
                                                subjectScore.ScoreOrigin = null;
                                            }
                                            break;

                                        case "補考成績":
                                            if (decimal.TryParse(value, out d))
                                            {
                                                subjectScore.ScoreMakeup = d;
                                            }
                                            else
                                            {
                                                subjectScore.ScoreMakeup = null;
                                            }
                                            break;

                                        //case "努力程度":
                                        //    int i;
                                        //    if (int.TryParse(value, out i))
                                        //        subjectScore.Effort = i;
                                        //    else
                                        //        subjectScore.Effort = null;
                                        //    break;
                                        case "文字描述":
                                            subjectScore.Text = value;
                                            break;

                                        case "註記":
                                            subjectScore.Comment = value;
                                            break;
                                        }
                                        #endregion
                                    }
                                }
                                #endregion
                                //subjectScoreInfo.AppendChild(newScore);
                                JHSemesterScoreRecord record = semesterScoreDictionary[info];
                                if (!record.Subjects.ContainsKey(subjectScore.Subject))
                                {
                                    record.Subjects.Add(subjectScore.Subject, subjectScore);
                                }
                                else
                                {
                                    record.Subjects[subjectScore.Subject] = subjectScore;
                                }

                                updateList.Add(record);
                            }
                        }
                        #endregion
                        //updateList.Add(new SmartSchool.Feature.Score.EditScore.UpdateInfo(semesterScoreID, gradeyear, subjectScoreInfo));
                    }
                    #endregion
                    //處理新增成績學期
                    #region 處理新增成績學期
                    foreach (SemesterInfo info in insertNewSemesterScore.Keys)
                    {
                        //int gradeyear = semesterGradeYear[info];//抓年級
                        foreach (RowData row in insertNewSemesterScore[info])
                        {
                            K12.Data.SubjectScore subjectScore = new K12.Data.SubjectScore();
                            //foreach (string field in new string[] { "領域", "科目", "權數", "節數", "分數評量", "努力程度", "文字描述", "註記" })
                            //foreach (string field in new string[] { "領域", "科目", "權數", "節數", "分數評量", "文字描述", "註記" })
                            foreach (string field in new string[] { "領域", "科目", "權數", "節數", "成績", "原始成績", "補考成績", "文字描述", "註記" })
                            {
                                if (e.ImportFields.Contains(field))
                                {
                                    decimal d;

                                    string value = row[field];
                                    switch (field)
                                    {
                                    default: break;

                                    case "領域":
                                        subjectScore.Domain = value;
                                        break;

                                    case "科目":
                                        subjectScore.Subject = value;
                                        break;

                                    case "權數":
                                        subjectScore.Credit = decimal.Parse(value);
                                        break;

                                    case "節數":
                                        subjectScore.Period = decimal.Parse(value);
                                        break;

                                    //case "分數評量":
                                    //    decimal d;
                                    //    if (decimal.TryParse(value, out d))
                                    //        subjectScore.Score = d;
                                    //    else
                                    //        subjectScore.Score = null;
                                    //    break;
                                    case "成績":
                                        if (decimal.TryParse(value, out d))
                                        {
                                            subjectScore.Score = d;
                                        }
                                        else
                                        {
                                            subjectScore.Score = null;
                                        }
                                        break;

                                    case "原始成績":
                                        if (decimal.TryParse(value, out d))
                                        {
                                            subjectScore.ScoreOrigin = d;
                                        }
                                        else
                                        {
                                            subjectScore.ScoreOrigin = null;
                                        }
                                        break;

                                    case "補考成績":
                                        if (decimal.TryParse(value, out d))
                                        {
                                            subjectScore.ScoreMakeup = d;
                                        }
                                        else
                                        {
                                            subjectScore.ScoreMakeup = null;
                                        }
                                        break;

                                    //case "努力程度":
                                    //    int i;
                                    //    if (int.TryParse(value, out i))
                                    //        subjectScore.Effort = i;
                                    //    else
                                    //        subjectScore.Effort = null;
                                    //    break;
                                    case "文字描述":
                                        subjectScore.Text = value;
                                        break;

                                    case "註記":
                                        subjectScore.Comment = value;
                                        break;
                                    }
                                }
                            }
                            //subjectScoreInfo.AppendChild(newScore);
                            JHSemesterScoreRecord record = new JHSemesterScoreRecord();
                            record.SchoolYear   = info.SchoolYear;
                            record.Semester     = info.Semester;
                            record.RefStudentID = studentRec.ID;
                            //record.GradeYear = gradeyear;

                            if (!record.Subjects.ContainsKey(subjectScore.Subject))
                            {
                                record.Subjects.Add(subjectScore.Subject, subjectScore);
                            }
                            else
                            {
                                record.Subjects[subjectScore.Subject] = subjectScore;
                            }

                            insertList.Add(record);
                        }
                        //insertList.Add(new SmartSchool.Feature.Score.AddScore.InsertInfo(studentRec.StudentID, "" + sy, "" + se, gradeyear, "", subjectScoreInfo));
                    }
                    #endregion
                }
                #endregion


                Dictionary <string, JHSemesterScoreRecord> iList = new Dictionary <string, JHSemesterScoreRecord>();
                Dictionary <string, JHSemesterScoreRecord> uList = new Dictionary <string, JHSemesterScoreRecord>();

                foreach (var record in insertList)
                {
                    string key = record.RefStudentID + "_" + record.SchoolYear + "_" + record.Semester;
                    if (!iList.ContainsKey(key))
                    {
                        iList.Add(key, new JHSemesterScoreRecord());
                    }
                    JHSemesterScoreRecord newRecord = iList[key];
                    newRecord.RefStudentID = record.RefStudentID;
                    newRecord.SchoolYear   = record.SchoolYear;
                    newRecord.Semester     = record.Semester;

                    foreach (var subject in record.Subjects.Keys)
                    {
                        if (!newRecord.Subjects.ContainsKey(subject))
                        {
                            newRecord.Subjects.Add(subject, record.Subjects[subject]);
                        }
                    }
                }

                foreach (var record in updateList)
                {
                    string key = record.RefStudentID + "_" + record.SchoolYear + "_" + record.Semester;
                    if (!uList.ContainsKey(key))
                    {
                        uList.Add(key, record);
                    }
                    JHSemesterScoreRecord newRecord = uList[key];
                    newRecord.RefStudentID = record.RefStudentID;
                    newRecord.SchoolYear   = record.SchoolYear;
                    newRecord.Semester     = record.Semester;
                    newRecord.ID           = record.ID;

                    foreach (var subject in record.Subjects.Keys)
                    {
                        if (!newRecord.Subjects.ContainsKey(subject))
                        {
                            newRecord.Subjects.Add(subject, record.Subjects[subject]);
                        }
                    }
                }

                List <string> ids = new List <string>(id_Rows.Keys);
                Dictionary <string, JHSemesterScoreRecord> origs = new Dictionary <string, JHSemesterScoreRecord>();
                foreach (var record in JHSemesterScore.SelectByStudentIDs(ids))
                {
                    if (!origs.ContainsKey(record.ID))
                    {
                        origs.Add(record.ID, record);
                    }
                }
                foreach (var record in uList.Values)
                {
                    if (origs.ContainsKey(record.ID))
                    {
                        foreach (var domain in origs[record.ID].Domains.Keys)
                        {
                            if (!record.Domains.ContainsKey(domain))
                            {
                                record.Domains.Add(domain, origs[record.ID].Domains[domain]);
                            }
                        }
                    }
                }

                JHSemesterScore.Insert(new List <JHSemesterScoreRecord>(iList.Values));

                JHSemesterScore.Update(new List <JHSemesterScoreRecord>(uList.Values));

                FISCA.LogAgent.ApplicationLog.Log("成績系統.匯入匯出", "匯入學期科目成績", "總共匯入" + (insertList.Count + updateList.Count) + "筆學期科目成績。");
                #endregion
            };
            wizard.ImportComplete += delegate
            {
                MsgBox.Show("匯入完成");
            };
        }
Exemplo n.º 19
0
        public static void SaveSemesterHistoryRecordEditor(IEnumerable <JHSchool.Editor.SemesterHistoryRecordEditor> editors)
        {
            Dictionary <string, List <JHSchool.Editor.SemesterHistoryRecordEditor> > grouped = new Dictionary <string, List <JHSchool.Editor.SemesterHistoryRecordEditor> >();

            foreach (var editor in editors)
            {
                if (!grouped.ContainsKey(editor.RefStudentID))
                {
                    grouped.Add(editor.RefStudentID, new List <JHSchool.Editor.SemesterHistoryRecordEditor>());
                }
                grouped[editor.RefStudentID].Add(editor);
            }
            SemesterHistory.Instance.SyncData(grouped.Keys);

            DSXmlHelper helper     = new DSXmlHelper("UpdateStudentList");
            bool        hasChanged = false;

            List <LogInfo> logs = new List <LogInfo>();

            foreach (var primaryKey in grouped.Keys)
            {
                List <SemesterInfo> contentsSemester = new List <SemesterInfo>();
                Dictionary <SemesterInfo, JHSchool.Editor.SemesterHistoryRecordEditor> changedValues = new Dictionary <SemesterInfo, JHSchool.Editor.SemesterHistoryRecordEditor>();
                Dictionary <SemesterInfo, SemesterHistoryRecord> values = new Dictionary <SemesterInfo, SemesterHistoryRecord>();

                foreach (var item in grouped[primaryKey])//把這個人的變更資料依學期整裡好
                {
                    if (item.EditorStatus == JHSchool.Editor.EditorStatus.NoChanged)
                    {
                        continue;                                                             //沒變更的就跳過
                    }
                    SemesterInfo semester = new SemesterInfo()
                    {
                        SchoolYear = item.SchoolYear, Semester = item.Semester
                    };
                    if (!contentsSemester.Contains(semester))
                    {
                        contentsSemester.Add(semester);
                    }
                    if (!changedValues.ContainsKey(semester))
                    {
                        changedValues.Add(semester, item);
                    }
                    else
                    {
                        changedValues[semester] = item;
                    }
                }
                if (changedValues.Count == 0)
                {
                    continue;                          //更本沒有資料有變更就換下一個人
                }
                helper.AddElement("Student");

                foreach (var item in SemesterHistory.Instance[primaryKey])//把原來就有的學期資料整裡好
                {
                    SemesterInfo semester = new SemesterInfo()
                    {
                        SchoolYear = item.SchoolYear, Semester = item.Semester
                    };
                    if (!contentsSemester.Contains(semester))
                    {
                        contentsSemester.Add(semester);
                    }
                    if (!values.ContainsKey(semester))
                    {
                        values.Add(semester, item);
                    }
                    else
                    {
                        values[semester] = item;
                    }
                }
                contentsSemester.Sort();
                hasChanged = true;
                helper.AddElement("Student", "Field");
                helper.AddElement("Student/Field", "SemesterHistory");
                helper.AddElement("Student", "Condition");
                helper.AddElement("Student/Condition", "ID", primaryKey);
                foreach (var semester in contentsSemester)
                {
                    if (changedValues.ContainsKey(semester))
                    {
                        if (changedValues[semester].EditorStatus != JHSchool.Editor.EditorStatus.Delete)
                        {
                            XmlElement element = helper.AddElement("Student/Field/SemesterHistory", "History");
                            element.SetAttribute("SchoolYear", "" + semester.SchoolYear);
                            element.SetAttribute("Semester", "" + semester.Semester);
                            element.SetAttribute("GradeYear", "" + changedValues[semester].GradeYear);
                            element.SetAttribute("SeatNo", "" + changedValues[semester].SeatNo);
                            element.SetAttribute("ClassName", "" + changedValues[semester].ClassName);
                            element.SetAttribute("Teacher", "" + changedValues[semester].Teacher);
                            element.SetAttribute("SchoolDayCount", "" + changedValues[semester].SchoolDayCount);
                            if (values.ContainsKey(semester))
                            {
                                LogInfo logInfo = new LogInfo()
                                {
                                    Action = "修改學期歷程", Entity = "Student", EntityID = primaryKey
                                };
                                logInfo.Description = "修改 「" + semester.SchoolYear + "」學年度 第「" + semester.Semester + "」學期" +
                                                      (changedValues[semester].GradeYear != values[semester].GradeYear ? ("\n\t年級由「" + values[semester].GradeYear + "」年級變更為「" + changedValues[semester].GradeYear + "」年級") : "") +
                                                      (changedValues[semester].ClassName != values[semester].ClassName ? ("\n\t班級由「" + values[semester].ClassName + "」變更為「" + changedValues[semester].ClassName + "」") : "") +
                                                      (changedValues[semester].SeatNo != values[semester].SeatNo ? ("\n\t座號由「" + values[semester].SeatNo + "」變更為「" + changedValues[semester].SeatNo + "」") : "") +
                                                      (changedValues[semester].Teacher != values[semester].Teacher ? ("\n\t班導師由「" + values[semester].Teacher + "」變更為「" + changedValues[semester].Teacher + "」") : "") + (changedValues[semester].SchoolDayCount != values[semester].SchoolDayCount  ? ("\n\t上課天數由「" + values[semester].SchoolDayCount + "」變更為「" + changedValues[semester].SchoolDayCount + "」") : "");
                                logs.Add(logInfo);
                            }
                            else
                            {
                                LogInfo logInfo = new LogInfo()
                                {
                                    Action = "新增學期歷程", Entity = "Student", EntityID = primaryKey
                                };
                                logInfo.Description = "新增 「" + semester.SchoolYear + "」學年度 第「" + semester.Semester + "」學期" +
                                                      "\n\t年級為「" + changedValues[semester].GradeYear + "」年級" +
                                                      "\n\t班級為「" + changedValues[semester].ClassName + "」" +
                                                      "\n\t座號為「" + changedValues[semester].SeatNo + "」" +
                                                      "\n\t班導師為「" + changedValues[semester].Teacher + "」" +
                                                      "\n\t上課天數為「" + changedValues[semester].SchoolDayCount + "」";
                                logs.Add(logInfo);
                            }
                        }
                        else
                        {
                            logs.Add(new LogInfo()
                            {
                                Action = "刪除學期歷程", Entity = "Student", EntityID = primaryKey, Description = "刪除 「" + semester.SchoolYear + "」學年度 第「" + semester.Semester + "」學期學期歷程。"
                            });
                        }
                    }
                    else
                    {
                        XmlElement element = helper.AddElement("Student/Field/SemesterHistory", "History");
                        element.SetAttribute("SchoolYear", "" + semester.SchoolYear);
                        element.SetAttribute("Semester", "" + semester.Semester);
                        element.SetAttribute("GradeYear", "" + values[semester].GradeYear);
                        element.SetAttribute("SeatNo", "" + values[semester].SeatNo);
                        element.SetAttribute("ClassName", "" + values[semester].ClassName);
                        element.SetAttribute("Teacher", "" + values[semester].Teacher);
                        element.SetAttribute("SchoolDayCount", "" + values[semester].SchoolDayCount);
                    }
                }
            }
            if (hasChanged)
            {
                DSAServices.CallService("SmartSchool.Student.Update", new DSRequest(helper.BaseElement));
                Framework.LogInfoExtendFunctions.SaveAll(logs);
                SemesterHistory.Instance.SyncDataBackground(grouped.Keys);
            }
        }
Exemplo n.º 20
0
 public void UpdateSemester( SemesterInfo semester )
 {
     UpdateSemesterRequest request = new UpdateSemesterRequest() { Semester = semester };
     CallWebService<IOrgUnitManagementServicev1_0, UpdateSemesterRequest, UpdateOrgUnitResponse>(
         m_service1_0, request, ( s, q ) => s.UpdateSemester( q ) );
 }
Exemplo n.º 21
0
        Dictionary <string, bool> IEvaluative.Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            list.SyncSemesterHistoryCache();
            //Dictionary<string, List<Data.JHMoralScoreRecord>> morals = new Dictionary<string, List<JHSchool.Data.JHMoralScoreRecord>>();
            //foreach (Data.JHMoralScoreRecord moral in Data.JHMoralScore.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    if (!morals.ContainsKey(moral.RefStudentID))
            //        morals.Add(moral.RefStudentID, new List<JHSchool.Data.JHMoralScoreRecord>());
            //    morals[moral.RefStudentID].Add(moral);
            //}
            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }

            //// 取得學生目前班級年級
            //Dictionary<string, int> studGrYearDic = new Dictionary<string, int>();
            //foreach (JHSchool.Data.JHStudentRecord stud in JHSchool.Data.JHStudent.SelectByIDs(list.AsKeyList()))
            //{
            //    if (stud.Class != null)
            //        if (stud.Class.GradeYear.HasValue)
            //            studGrYearDic.Add(stud.ID, stud.Class.GradeYear.Value);
            //}

            //bool checkInsShi = false;

            //// 取得學生學期歷程
            //Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord> studHisRecDic = new Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord>();
            //foreach (JHSchool.Data.JHSemesterHistoryRecord rec in JHSchool.Data.JHSemesterHistory.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    checkInsShi = true;
            //    K12.Data.SemesterHistoryItem shi = new K12.Data.SemesterHistoryItem();
            //    shi.SchoolYear = UIConfig._UserSetSHSchoolYear;
            //    shi.Semester = UIConfig._UserSetSHSemester;
            //    if (studGrYearDic.ContainsKey(rec.RefStudentID))
            //        shi.GradeYear = studGrYearDic[rec.RefStudentID];

            //    foreach (K12.Data.SemesterHistoryItem shiItem in rec.SemesterHistoryItems)
            //        if (shiItem.SchoolYear == shi.SchoolYear && shiItem.Semester == shi.Semester)
            //            checkInsShi = false;
            //    if (checkInsShi)
            //        rec.SemesterHistoryItems.Add(shi);

            //    studHisRecDic.Add(rec.RefStudentID, rec);
            //}

            // 獎懲明細統計
            TempData.tmpStudentDemeritAmountAllDict.Clear();

            foreach (StudentRecord student in list)
            {
                passList.Add(student.ID, true);

                Dictionary <SemesterInfo, int> gyMapping = new Dictionary <SemesterInfo, int>();
                if (UIConfig._StudentSHistoryRecDict.ContainsKey(student.ID))
                {
                    foreach (K12.Data.SemesterHistoryItem shi in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                    {
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = shi.SchoolYear;
                        info.Semester   = shi.Semester;
                        if (!gyMapping.ContainsKey(info))
                        {
                            gyMapping.Add(info, shi.GradeYear);
                        }
                        else
                        {
                            FISCA.Presentation.Controls.MsgBox.Show("學生:" + UIConfig._StudentSHistoryRecDict[student.ID].Student.Name + " 學期歷程重覆");
                        }
                    }
                }

                //foreach (SemesterHistoryRecord record in student.GetSemesterHistories())
                //{
                //    SemesterInfo info = new SemesterInfo();
                //    info.SchoolYear = record.SchoolYear;
                //    info.Semester = record.Semester;
                //    if (!gyMapping.ContainsKey(info))
                //        gyMapping.Add(info, record.GradeYear);
                //}

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }
                Dictionary <SemesterInfo, DisTestABC> counter = new Dictionary <SemesterInfo, DisTestABC>();
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;
                    if (!counter.ContainsKey(info))
                    {
                        counter.Add(info, new DisTestABC());
                    }

                    string scStr = info.SchoolYear + "學年度第" + info.Semester + "學期";
                    if (!TempData.tmpStudentDemeritAmountAllDict.ContainsKey(student.ID))
                    {
                        TempData.tmpStudentDemeritAmountAllDict.Add(student.ID, new Dictionary <string, Dictionary <string, int> >());
                    }

                    if (!TempData.tmpStudentDemeritAmountAllDict[student.ID].ContainsKey(scStr))
                    {
                        Dictionary <string, int> value = new Dictionary <string, int>();
                        value.Add("大功", 0);
                        value.Add("小功", 0);
                        value.Add("嘉獎", 0);
                        value.Add("大過", 0);
                        value.Add("小過", 0);
                        value.Add("警告", 0);

                        TempData.tmpStudentDemeritAmountAllDict[student.ID].Add(scStr, value);
                    }

                    TempData.tmpStudentDemeritAmountAllDict[student.ID][scStr]["大功"] += record.MeritA;
                    TempData.tmpStudentDemeritAmountAllDict[student.ID][scStr]["小功"] += record.MeritB;
                    TempData.tmpStudentDemeritAmountAllDict[student.ID][scStr]["嘉獎"] += record.MeritC;
                    TempData.tmpStudentDemeritAmountAllDict[student.ID][scStr]["大過"] += record.DemeritA;
                    TempData.tmpStudentDemeritAmountAllDict[student.ID][scStr]["小過"] += record.DemeritB;
                    TempData.tmpStudentDemeritAmountAllDict[student.ID][scStr]["警告"] += record.DemeritC;

                    decimal total_merit   = _meritConverter.BtoC(_meritConverter.AtoB(record.MeritA) + record.MeritB) + record.MeritC;
                    decimal total_demerit = _demeritConverter.BtoC(_demeritConverter.AtoB(record.DemeritA) + record.DemeritB) + record.DemeritC;

                    //獎懲加總
                    counter[info].Merit   = total_merit;
                    counter[info].Demerit = total_demerit;
                }

                List <ResultDetail> resultList = new List <ResultDetail>();

                decimal merit      = 0;
                decimal demerit    = 0;
                decimal demeritINT = 0;

                //存放懲戒詳細數量
                Dictionary <string, int> ABC = new Dictionary <string, int>();
                ABC.Add("大過", 0);
                ABC.Add("小過", 0);
                ABC.Add("警告", 0);

                //加總總懲戒及各項懲戒
                foreach (SemesterInfo info in counter.Keys)
                {
                    merit   += counter[info].Merit;
                    demerit += counter[info].Demerit;
                }

                if (_balance)
                {//功過相抵
                    demerit -= merit;
                    if (demerit > 0)
                    {
                        Dictionary <string, int> dic = _demeritConverter.Change(demerit);
                        ABC["大過"] += dic["大過"];
                        ABC["小過"] += dic["小過"];
                        ABC["警告"] += dic["警告"];
                    }
                    demeritINT = _demeritConverter.BtoA(_demeritConverter.CtoB(demerit));
                }
                else
                {
                    if (demerit > 0)
                    {
                        Dictionary <string, int> dic = _demeritConverter.Change(demerit);
                        ABC["大過"] += dic["大過"];
                        ABC["小過"] += dic["小過"];
                        ABC["警告"] += dic["警告"];
                    }
                    demeritINT = _demeritConverter.BtoA(_demeritConverter.CtoB(demerit));
                }

                if (demeritINT >= _amount)
                {
                    ResultDetail rd = new ResultDetail(student.ID, "0", "0");
                    rd.AddMessage("懲戒表現不符合畢業規範");
                    string str = "";
                    //取得懲戒詳細數量
                    foreach (KeyValuePair <string, int> kvp in ABC)
                    {
                        str += kvp.Key + kvp.Value;
                    }
                    //2017/12/19,羿均根據高雄小組會議[09-11][02] 所做之修改
                    rd.AddDetail("懲戒表現不符合畢業規範(說明:所有學期之獎懲累計,經功過相抵換算後相當於" + str + ",已滿三大過)");
                    resultList.Add(rd);
                }

                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
        /// <summary>
        /// Parses the Json string and returns the complete academic history of the user. On failure, the method returns null.
        /// </summary>
        /// <param name="jsonString"></param>
        /// <returns></returns>
        public static AcademicHistory TryParseGrades(string jsonString)
        {
            try
            {
                AcademicHistory academicHistory = null;
                JsonObject rootObject = JsonObject.Parse(jsonString);

                // Adding complete list of raw grades
                JsonArray gradesArray = rootObject.GetNamedArray("grades");
                academicHistory = new AcademicHistory(gradesArray.Count);
                foreach (JsonValue gradeValue in gradesArray)
                    academicHistory._grades.Add(GetGradeInfo(gradeValue));

                // Adding semester-wise grades and gpa
                var groupedGrades = academicHistory.Grades.GroupBy<GradeInfo, string>((GradeInfo gradeInfo) => { return gradeInfo.Id; });
                JsonArray semesterWiseArray = rootObject.GetNamedArray("semester_wise");
                var semInfoList = groupedGrades.Join<IGrouping<string, GradeInfo>, IJsonValue, string, SemesterInfo>(
                                            semesterWiseArray,
                                            (group) => { return group.Key; },
                                            (semValue) => { return semValue.GetObject().GetNamedString("exam_held"); },
                                            (IGrouping<string, GradeInfo> group, IJsonValue value) =>
                                            {
                                                JsonObject semesterInfoObject = value.GetObject();
                                                SemesterInfo semesterInfo = new SemesterInfo(group.ToList<GradeInfo>());
                                                semesterInfo.CreditsEarned = (ushort)semesterInfoObject.GetNamedNumber("credits");
                                                semesterInfo.Gpa = semesterInfoObject.GetNamedNumber("gpa");
                                                return semesterInfo;
                                            });
                foreach(var semInfo in semInfoList)
                    academicHistory._semesterGroupedGrades.Add(semInfo);
                academicHistory._semesterGroupedGrades.Sort();

                // Adding summary data
                academicHistory.Cgpa = rootObject.GetNamedNumber("cgpa");
                academicHistory.CreditsRegistered = (ushort)rootObject.GetNamedNumber("credits_registered");
                academicHistory.CreditsEarned = (ushort)rootObject.GetNamedNumber("credits_earned");
                academicHistory.LastRefreshed = GetRefreshUTC(rootObject.GetNamedString("grades_refreshed"));

                return academicHistory;
            }
            catch
            {
                return null;
            }
        }
Exemplo n.º 23
0
        private void PrefillItems(List <JHCourseRecord> courses)
        {
            List <int> schoolYearList = new List <int>();

            cboSchoolYear.Items.Clear();
            cboSemester.Items.Clear();

            _items.Clear();

            SemesterInfo last = new SemesterInfo();

            foreach (JHCourseRecord course in courses)
            {
                SemesterInfo sems = new SemesterInfo();
                if (course.SchoolYear.HasValue)
                {
                    sems.SchoolYear = course.SchoolYear.Value;
                }
                else
                {
                    sems.SchoolYear = 0;
                }

                if (course.Semester.HasValue)
                {
                    sems.Semester = course.Semester.Value;
                }
                else
                {
                    sems.Semester = 0;
                }

                ListViewItem item = new ListViewItem(new string[] { "" + sems.SchoolYear, "" + sems.Semester, course.Name, course.Subject });
                item.Tag = course;

                if (!_items.ContainsKey(sems))
                {
                    _items.Add(sems, new List <ListViewItem>());
                }
                _items[sems].Add(item);

                if (!schoolYearList.Contains(sems.SchoolYear))
                {
                    schoolYearList.Add(sems.SchoolYear);
                }

                if (sems > last)
                {
                    last = sems;
                }
            }

            schoolYearList.Sort();
            cboSchoolYear.SuspendLayout();
            cboSemester.SuspendLayout();

            foreach (int sy in schoolYearList)
            {
                cboSchoolYear.Items.Add(sy);
            }
            cboSemester.Items.Add(1);
            cboSemester.Items.Add(2);

            cboSchoolYear.SelectedItem = last.SchoolYear;
            cboSemester.SelectedItem   = last.Semester;

            cboSchoolYear.ResumeLayout();
            cboSemester.ResumeLayout();
        }
Exemplo n.º 24
0
        public Dictionary <string, bool> Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            list.SyncSemesterHistoryCache();
            Dictionary <string, List <Data.JHMoralScoreRecord> > morals = new Dictionary <string, List <JHSchool.Data.JHMoralScoreRecord> >();

            foreach (Data.JHMoralScoreRecord moral in Data.JHMoralScore.SelectByStudentIDs(list.AsKeyList()))
            {
                if (!morals.ContainsKey(moral.RefStudentID))
                {
                    morals.Add(moral.RefStudentID, new List <JHSchool.Data.JHMoralScoreRecord>());
                }
                morals[moral.RefStudentID].Add(moral);
            }

            //// 取得學生目前班級年級
            //Dictionary<string, int> studGrYearDic = new Dictionary<string, int>();
            //foreach (JHSchool.Data.JHStudentRecord stud in JHSchool.Data.JHStudent.SelectByIDs(list.AsKeyList()))
            //{
            //    if (stud.Class != null)
            //        if (stud.Class.GradeYear.HasValue)
            //            studGrYearDic.Add(stud.ID, stud.Class.GradeYear.Value);
            //}

            //bool checkInsShi = false;

            //// 取得學生學期歷程
            //Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord> studHisRecDic = new Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord>();
            //foreach (JHSchool.Data.JHSemesterHistoryRecord rec in JHSchool.Data.JHSemesterHistory.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    checkInsShi = true;
            //    K12.Data.SemesterHistoryItem shi = new K12.Data.SemesterHistoryItem();
            //    shi.SchoolYear = UIConfig._UserSetSHSchoolYear;
            //    shi.Semester = UIConfig._UserSetSHSemester;
            //    if (studGrYearDic.ContainsKey(rec.RefStudentID))
            //        shi.GradeYear = studGrYearDic[rec.RefStudentID];

            //    foreach (K12.Data.SemesterHistoryItem shiItem in rec.SemesterHistoryItems)
            //        if (shiItem.SchoolYear == shi.SchoolYear && shiItem.Semester == shi.Semester)
            //            checkInsShi = false;
            //    if (checkInsShi)
            //        rec.SemesterHistoryItems.Add(shi);

            //    studHisRecDic.Add(rec.RefStudentID, rec);
            //}

            foreach (StudentRecord student in list)
            {
                passList.Add(student.ID, true);

                Dictionary <SemesterInfo, int> gyMapping = new Dictionary <SemesterInfo, int>();
                if (UIConfig._StudentSHistoryRecDict.ContainsKey(student.ID))
                {
                    foreach (K12.Data.SemesterHistoryItem shi in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                    {
                        SemesterInfo info = new SemesterInfo();
                        info.SchoolYear = shi.SchoolYear;
                        info.Semester   = shi.Semester;
                        if (!gyMapping.ContainsKey(info))
                        {
                            gyMapping.Add(info, shi.GradeYear);
                        }
                        else
                        {
                            FISCA.Presentation.Controls.MsgBox.Show("學生:" + UIConfig._StudentSHistoryRecDict[student.ID].Student.Name + " 學期歷程重覆");
                        }
                    }
                }

                //foreach (SemesterHistoryRecord record in student.GetSemesterHistories())
                //{
                //    SemesterInfo info = new SemesterInfo();
                //    info.SchoolYear = record.SchoolYear;
                //    info.Semester = record.Semester;
                //    if (!gyMapping.ContainsKey(info))
                //        gyMapping.Add(info, record.GradeYear);
                //}

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }

                Dictionary <SemesterInfo, int>  counter       = new Dictionary <SemesterInfo, int>();
                Dictionary <SemesterInfo, bool> semsHasRecord = new Dictionary <SemesterInfo, bool>();
                foreach (SemesterInfo info in gyMapping.Keys)
                {
                    if (gyMapping.ContainsKey(info) &&
                        !((gyMapping[info] == 3 || gyMapping[info] == 9) && info.Semester == 2))
                    {
                        continue;
                    }

                    if (!counter.ContainsKey(info))
                    {
                        counter.Add(info, 0);
                        semsHasRecord.Add(info, false);
                    }
                }

                foreach (Data.JHMoralScoreRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;

                    if (gyMapping.ContainsKey(info) &&
                        !((gyMapping[info] == 3 || gyMapping[info] == 9) && info.Semester == 2))
                    {
                        continue;
                    }

                    foreach (XmlElement itemElement in record.TextScore.SelectNodes("DailyBehavior/Item"))
                    {
                        //<Item Degree="" Index="" Name="有禮貌"/>
                        string name   = itemElement.GetAttribute("Name");
                        int    degree = _DescToDegree.GetDegree(itemElement.GetAttribute("Degree"));

                        if (counter.ContainsKey(info))
                        {
                            //若回傳值是最小整數代表有誤
                            if (degree == int.MinValue)
                            {
                                continue;
                            }

                            if (degree <= _degree)
                            {
                                counter[info]++;
                            }
                            semsHasRecord[info] = true;
                        }
                    }
                }

                List <ResultDetail> resultList = new List <ResultDetail>();
                foreach (SemesterInfo info in counter.Keys)
                {
                    if (!gyMapping.ContainsKey(info))
                    {
                        continue;
                    }
                    if (counter[info] >= _amount)
                    {
                        ResultDetail rd = new ResultDetail(student.ID, "" + gyMapping[info], "" + info.Semester);
                        rd.AddMessage("日常行為不符合畢業規範");
                        rd.AddDetail("日常行為不符合畢業規範(累計" + counter[info] + "項)");
                        resultList.Add(rd);
                    }
                    else if (semsHasRecord[info] == false)
                    {
                        ResultDetail rd = new ResultDetail(student.ID, "" + gyMapping[info], "" + info.Semester);
                        rd.AddMessage("日常行為表現資料缺漏");
                        rd.AddDetail("日常行為表現資料缺漏");
                        resultList.Add(rd);
                    }
                }

                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
Exemplo n.º 25
0
        Dictionary <string, bool> IEvaluative.Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();

            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            //// 取得學生目前班級年級
            //Dictionary<string, int> studGrYearDic = new Dictionary<string, int>();
            //foreach (JHSchool.Data.JHStudentRecord stud in JHSchool.Data.JHStudent.SelectByIDs(list.AsKeyList()))
            //{
            //    if (stud.Class != null)
            //        if (stud.Class.GradeYear.HasValue)
            //            studGrYearDic.Add(stud.ID, stud.Class.GradeYear.Value);
            //}

            //bool checkInsShi = false;

            //// 取得學生學期歷程
            //Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord> studentHistories = new Dictionary<string, JHSchool.Data.JHSemesterHistoryRecord>();
            //foreach (JHSchool.Data.JHSemesterHistoryRecord rec in JHSchool.Data.JHSemesterHistory.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    checkInsShi = true;
            //    K12.Data.SemesterHistoryItem shi = new K12.Data.SemesterHistoryItem();
            //    shi.SchoolYear = UIConfig._UserSetSHSchoolYear;
            //    shi.Semester = UIConfig._UserSetSHSemester;
            //    if (studGrYearDic.ContainsKey(rec.RefStudentID))
            //        shi.GradeYear = studGrYearDic[rec.RefStudentID];

            //    foreach (K12.Data.SemesterHistoryItem shiItem in rec.SemesterHistoryItems)
            //        if (shiItem.SchoolYear == shi.SchoolYear && shiItem.Semester == shi.Semester)
            //            checkInsShi = false;
            //    if (checkInsShi)
            //        rec.SemesterHistoryItems.Add(shi);

            //    studentHistories.Add(rec.RefStudentID, rec);
            //}


            //Dictionary<string, List<Data.JHMoralScoreRecord>> morals = new Dictionary<string, List<JHSchool.Data.JHMoralScoreRecord>>();
            //foreach (Data.JHMoralScoreRecord moral in Data.JHMoralScore.SelectByStudentIDs(list.AsKeyList()))
            //{
            //    if (!morals.ContainsKey(moral.RefStudentID))
            //        morals.Add(moral.RefStudentID, new List<JHSchool.Data.JHMoralScoreRecord>());
            //    morals[moral.RefStudentID].Add(moral);
            //}
            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }

            foreach (StudentRecord student in list)
            {
                passList.Add(student.ID, true);

                Dictionary <SemesterInfo, int>     gyMapping        = new Dictionary <SemesterInfo, int>();
                Dictionary <SemesterInfo, decimal> schoolDayMapping = new Dictionary <SemesterInfo, decimal>();
                foreach (K12.Data.SemesterHistoryItem item in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = item.SchoolYear;
                    info.Semester   = item.Semester;
                    if (!gyMapping.ContainsKey(info))
                    {
                        gyMapping.Add(info, item.GradeYear);

                        if (item.SchoolDayCount.HasValue)
                        {
                            decimal num = (decimal)item.SchoolDayCount.Value;

                            //設定臨界值
                            decimal count = 0;

                            count += num * _dayPeriod;
                            //foreach (string type in _SelectedType)
                            //{
                            //    count += num * _periodMapping[type] * _typeWeight[type];
                            //}
                            count = count * _amount / 100;
                            schoolDayMapping.Add(info, count);

                            //num *= _dayPeriod;
                            //num = num * _amount / 100;
                            //schoolDayMapping.Add(info, num);
                        }
                    }
                }

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }
                Dictionary <SemesterInfo, decimal> counter = new Dictionary <SemesterInfo, decimal>();
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;

                    if (gyMapping.ContainsKey(info) &&
                        !((gyMapping[info] == 3 || gyMapping[info] == 9) && info.Semester == 2))
                    {
                        continue;
                    }

                    //foreach (XmlElement itemElement in record.Summary.SelectNodes("AttendanceStatistics/Absence"))
                    foreach (AbsenceCountRecord acRecord in record.AbsenceCounts)
                    {
                        //string name = itemElement.GetAttribute("Name");
                        //string periodType = itemElement.GetAttribute("PeriodType");

                        if (!_types.ContainsKey(acRecord.PeriodType + ":" + acRecord.Name))
                        {
                            continue;
                        }

                        //decimal count;
                        //if (!decimal.TryParse(itemElement.GetAttribute("Count"), out count))
                        //    count = 0;
                        //else
                        //    count *= _types[periodType + ":" + name];

                        if (!counter.ContainsKey(info))
                        {
                            counter.Add(info, 0);
                        }
                        counter[info] += acRecord.Count * _types[acRecord.PeriodType + ":" + acRecord.Name];
                    }
                }

                List <ResultDetail> resultList = new List <ResultDetail>();
                foreach (SemesterInfo info in counter.Keys)
                {
                    if (!gyMapping.ContainsKey(info))
                    {
                        continue;
                    }
                    if (!schoolDayMapping.ContainsKey(info))
                    {
                        continue;
                    }
                    if (counter[info] > schoolDayMapping[info])
                    {
                        ResultDetail rd = new ResultDetail(student.ID, "" + gyMapping[info], "" + info.Semester);
                        rd.AddMessage("上課天數不足");
                        rd.AddDetail("上課天數不足(累計" + counter[info] + "節)");
                        resultList.Add(rd);
                    }
                }

                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }
Exemplo n.º 26
0
        Dictionary <string, bool> IEvaluative.Evaluate(IEnumerable <StudentRecord> list)
        {
            _result.Clear();
            TempData.tmpStudentAbsenceAmountAllDict.Clear();
            Dictionary <string, bool> passList = new Dictionary <string, bool>();

            Dictionary <string, List <AutoSummaryRecord> > morals = new Dictionary <string, List <AutoSummaryRecord> >();

            foreach (AutoSummaryRecord record in AutoSummary.Select(list.AsKeyList(), null))
            {
                if (!morals.ContainsKey(record.RefStudentID))
                {
                    morals.Add(record.RefStudentID, new List <AutoSummaryRecord>());
                }
                morals[record.RefStudentID].Add(record);
            }

            foreach (StudentRecord student in list)
            {
                //核准假別的累積次數須歸零
                _AvoidDic.Clear();

                foreach (string key in _AvoidList)
                {
                    if (!_AvoidDic.ContainsKey(key))
                    {
                        _AvoidDic.Add(key, 0);
                    }
                }

                passList.Add(student.ID, true);

                Dictionary <SemesterInfo, int>     gyMapping        = new Dictionary <SemesterInfo, int>();
                Dictionary <SemesterInfo, decimal> schoolDayMapping = new Dictionary <SemesterInfo, decimal>();
                foreach (K12.Data.SemesterHistoryItem item in UIConfig._StudentSHistoryRecDict[student.ID].SemesterHistoryItems)
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = item.SchoolYear;
                    info.Semester   = item.Semester;
                    if (!gyMapping.ContainsKey(info))
                    {
                        gyMapping.Add(info, item.GradeYear);

                        if (item.SchoolDayCount.HasValue)
                        {
                            decimal num = (decimal)item.SchoolDayCount.Value;

                            //設定臨界值
                            decimal newNum = 0;
                            newNum += num * _dayPeriod;
                            //foreach (string type in _periodMapping.Keys)
                            //{
                            //    newNum += num * _periodMapping[type];
                            //}

                            schoolDayMapping.Add(info, newNum);
                        }
                    }
                }

                if (!morals.ContainsKey(student.ID))
                {
                    continue;
                }
                Dictionary <SemesterInfo, decimal> counter = new Dictionary <SemesterInfo, decimal>();
                foreach (AutoSummaryRecord record in morals[student.ID])
                {
                    SemesterInfo info = new SemesterInfo();
                    info.SchoolYear = record.SchoolYear;
                    info.Semester   = record.Semester;

                    foreach (AbsenceCountRecord acRecord in record.AbsenceCounts)
                    {
                        //加總各項核定假別
                        if (_AvoidDic.ContainsKey(acRecord.Name))
                        {
                            _AvoidDic[acRecord.Name] += acRecord.Count;
                        }

                        if (!_types.ContainsKey(acRecord.PeriodType + ":" + acRecord.Name))
                        {
                            continue;
                        }

                        if (!counter.ContainsKey(info))
                        {
                            counter.Add(info, 0);
                        }
                        counter[info] += acRecord.Count * _types[acRecord.PeriodType + ":" + acRecord.Name];

                        // 累積缺曠明細
                        if (!TempData.tmpStudentAbsenceAmountAllDict.ContainsKey(student.ID))
                        {
                            TempData.tmpStudentAbsenceAmountAllDict.Add(student.ID, new Dictionary <string, Dictionary <string, int> >());
                        }

                        string scStr = info.SchoolYear + "學年度第" + info.Semester + "學期";

                        if (!TempData.tmpStudentAbsenceAmountAllDict[student.ID].ContainsKey(scStr))
                        {
                            TempData.tmpStudentAbsenceAmountAllDict[student.ID].Add(scStr, new Dictionary <string, int>());
                        }

                        string strType = acRecord.PeriodType + ":" + acRecord.Name;

                        if (!TempData.tmpStudentAbsenceAmountAllDict[student.ID][scStr].ContainsKey(strType))
                        {
                            TempData.tmpStudentAbsenceAmountAllDict[student.ID][scStr].Add(strType, 0);
                        }

                        TempData.tmpStudentAbsenceAmountAllDict[student.ID][scStr][strType] += acRecord.Count;
                    }
                }

                List <ResultDetail> resultList = new List <ResultDetail>();
                decimal             count      = 0;
                decimal             schoolDay  = 0;

                foreach (SemesterInfo info in counter.Keys)
                {
                    count += counter[info];
                }

                foreach (KeyValuePair <SemesterInfo, decimal> kvp in schoolDayMapping)
                {
                    schoolDay += kvp.Value;
                }

                //循環要扣除的假別數
                foreach (string elem in _AvoidDic.Keys)
                {
                    schoolDay -= _AvoidDic[elem];
                }

                //總節數乘上設定比例
                if (schoolDay < 0)
                {
                    schoolDay = 0;
                }
                schoolDay *= _amount / 100;

                if (count > schoolDay)
                {
                    ResultDetail rd = new ResultDetail(student.ID, "0", "0");
                    rd.AddMessage("上課天數不足");
                    rd.AddDetail("上課天數不足(累計" + count + "節)");
                    resultList.Add(rd);
                }

                if (resultList.Count > 0)
                {
                    _result.Add(student.ID, resultList);
                    passList[student.ID] = false;
                }
            }

            return(passList);
        }