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; } }
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; }
public int GetGradeYear(int schoolYear, int semester) { SemesterInfo info = new SemesterInfo(); info.SchoolYear = schoolYear; info.Semester = semester; return(GetGradeYear(info)); }
public bool GradeYearExist(int schoolYear, int semester) { SemesterInfo info = new SemesterInfo(); info.SchoolYear = schoolYear; info.Semester = semester; return(GradeYearExist(info)); }
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)); }
public bool GradeYearExist(SemesterInfo semesterInfo) { if (_gradeYears.ContainsKey(semesterInfo)) { return(true); } else { return(false); } }
// 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()); } }
public int GetGradeYear(SemesterInfo semesterInfo) { if (_gradeYears.ContainsKey(semesterInfo)) { return(_gradeYears[semesterInfo]); } else { return(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)); } }
/// <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); } }
//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); } } }
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)); } }
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); }
/// <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); }
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); }
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("匯入完成"); }; }
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); } }
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 ) ); }
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; } }
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(); }
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); }
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); }
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); }