public static Semester Last() { try { Semester item = null; using (Entities db = new Entities()) { SemesterData row = db.SemesterData .Where(x => x.DeleteDate == null) .OrderByDescending(x => x.InitialDate) .FirstOrDefault(); if (row == null) { throw new Exception("Semestre não encontrado"); } item = Convert(row); } return(item); } catch (Exception e) { string notes = string.Format("Erro: {0}", e.Message); Log.Add(Log.TYPE_ERROR, "SistemaMatricula.DAO.SemesterDAO.Last", notes); } return(null); }
//Updates the results list with the sections pertaining to the current query private void RetrieveItems() { //Clear existing results results.Clear(); //If a selection filter is active if (selectedSemester.Year != -1) { //For each section foreach (Section result in RegistrationEntities.Sections.ToList()) { //Attempt to parse the semester string SemesterData semester = ReadSemester(result.Semester); //If format is valid if (semester.Year != -1) { //If filtering condition passed if (FilterSemester(semester)) { //Add to list results.Add(result); } } } } else { //No filter active results = RegistrationEntities.Sections.ToList(); } }
//Converts the given semester string into a semester data struct //Assumed form: <type>, <year> //This may need to be changed upon integration private SemesterData ReadSemester(string semesterString) { //The result SemesterData data = new SemesterData(); //Initialize result with sentinel values data.Year = -1; data.Type = SEMESTER_TYPE.FALL; //Parse given string string[] splitResults = semesterString.Split(','); //Verify split length if (splitResults.Length != 2) { //Return error data return(data); } //Get trimmed values string typeString = splitResults[0].Trim(); string yearString = splitResults[1].Trim(); //Convert type switch (typeString.ToUpper()) { case "FALL": data.Type = SEMESTER_TYPE.FALL; break; case "WINTER": data.Type = SEMESTER_TYPE.WINTER; break; case "SUMMER": data.Type = SEMESTER_TYPE.SUMMER; break; default: //Return error data return(data); } //Convert year try { data.Year = Convert.ToInt32(yearString); } catch (Exception e) { //Return error data return(data); } //Return the properly formatted semester data return(data); }
public HistoryUtil(JHSemesterHistoryRecord historyRecord) { _sems = new SemesterDataCollection(); foreach (SemesterHistoryItem item in historyRecord.SemesterHistoryItems) { _sems.Add(new SemesterData(item.GradeYear, item.SchoolYear, item.Semester)); } _sems = _sems.GetGradeYearSemester(); SemesterData last = SemesterData.Empty; bool delete = false; foreach (SemesterData sem in _sems) { if (sem.GradeYear == 3 && sem.Semester == 2) { last = sem; delete = true; } } if (delete) { _sems.Remove(last); } }
public static Semester Find(Guid id) { try { if (id == null || Equals(id, Guid.Empty)) { throw new Exception("Parâmetro inválido"); } Semester item = null; using (Entities db = new Entities()) { SemesterData row = db.SemesterData.FirstOrDefault(x => x.IdSemester == id); if (row == null) { throw new Exception("Semestre não encontrado"); } item = Convert(row); } return(item); } catch (Exception e) { string notes = LogHelper.Notes(id, e.Message); Log.Add(Log.TYPE_ERROR, "SistemaMatricula.DAO.SemesterDAO.Find", notes); } return(null); }
public decimal?GetScore(ReportStudent student) { SemesterScore score = null; foreach (SemesterData each in student.SHistory.GetGradeYearSemester()) { SemesterData gysemester = new SemesterData(each.GradeYear, 0, each.Semester); if (gysemester == Semester) { SemesterData sd = new SemesterData(0, each.SchoolYear, each.Semester); if (student.SemestersScore.Contains(sd)) { score = student.SemestersScore[sd]; } break; } } if (score == null) { return(null); } else { return(score.LearnDomainScore); } }
public static bool Delete(Guid id) { try { if (id == null || Equals(id, Guid.Empty)) { throw new Exception("Parâmetro inválido"); } using (Entities db = new Entities()) { SemesterData row = db.SemesterData.FirstOrDefault(x => x.IdSemester == id); if (row == null) { throw new Exception("Semestre não encontrado"); } row.DeleteDate = DateTime.Now; row.DeleteBy = User.Logged.IdUser; db.SaveChanges(); } return(true); } catch (Exception e) { string notes = LogHelper.Notes(id, e.Message); Log.Add(Log.TYPE_ERROR, "SistemaMatricula.DAO.SemesterDAO.Delete", notes); } return(false); }
public static bool Update(Semester item) { try { if (item == null) { throw new Exception("Parâmetro vazio"); } using (Entities db = new Entities()) { SemesterData row = db.SemesterData.FirstOrDefault(x => x.IdSemester == item.IdSemester); if (row == null) { throw new Exception("Semestre não encontrado"); } row.InitialDate = item.InitialDate; row.Period = item.Period; db.SaveChanges(); } return(true); } catch (Exception e) { string notes = LogHelper.Notes(item, e.Message); Log.Add(Log.TYPE_ERROR, "SistemaMatricula.DAO.SemesterDAO.Update", notes); } return(false); }
public static bool Add(Semester item) { try { if (item == null) { throw new Exception("Parâmetro vazio"); } SemesterData row = new SemesterData { IdSemester = Guid.NewGuid(), Period = item.Period, InitialDate = item.InitialDate, RegisterDate = DateTime.Now, RegisterBy = User.Logged.IdUser }; using (Entities db = new Entities()) { db.SemesterData.Add(row); db.SaveChanges(); } return(true); } catch (Exception e) { string notes = LogHelper.Notes(item, e.Message); Log.Add(Log.TYPE_ERROR, "SistemaMatricula.DAO.SemesterDAO.Add", notes); } return(false); }
public bool Add(SemesterData semester, K12.Data.DomainScore domain) { if (!_scores.ContainsKey(semester)) { _scores.Add(semester, new ScoreData("" + domain.Period, "" + domain.Credit, "" + domain.Score)); return(true); } return(false); }
public bool Add(SemesterData semester, int count) { if (!_items.ContainsKey(semester)) { _items.Add(semester, 0); } _items[semester] += count; return(true); }
public bool Add(SemesterData semester, string text) { if (!_items.ContainsKey(semester)) { _items.Add(semester, text); return(true); } else { return(false); } }
/// <summary> /// 檢驗學期資訊是否存在 /// </summary> /// <param name="schoolYear">學年度</param> /// <param name="semester">學期</param> /// <returns></returns> public bool ExistBySchoolYear(int schoolYear, int semester) { foreach (var sem in _sems) { if (sem.SchoolYear == schoolYear && sem.Semester == semester) { this.SemesterData = sem; return(true); } } return(false); }
public bool Add(SemesterData semester, K12.Data.SubjectScore subject) { if (!_subjectScores.ContainsKey(subject.Subject)) { _subjectScores.Add(subject.Subject, new Dictionary <SemesterData, ScoreData>()); } if (!_subjectScores[subject.Subject].ContainsKey(semester)) { _subjectScores[subject.Subject].Add(semester, new ScoreData("" + subject.Period, "" + subject.Credit, "" + subject.Score)); return(true); } return(false); }
/// <summary> /// 取得學生服務學習時數。 /// </summary> public static void FillServiceLearning(this List <StudentExcess> students) { //資料表:K12.Service.Learning.Record if (students == null || students.Count <= 0) { return; } string sql = @"select ref_student_id, school_year, semester, sum(hours) hours from $k12.service.learning.record where ref_student_id in ({0}) and not school_year is null and not semester is null group by ref_student_id,school_year,semester order by ref_student_id, school_year, semester"; sql = string.Format(sql, students.ToPrimaryKeyStringList()); DataTable table = Utility.Q.Select(sql); //服務學期資料 Lookup //Dictionary<string, StudentExcess> StudentLookup = students.ToDictionary(x => x.StudentID); Dictionary <string, StudentExcess> StudentLookup = new Dictionary <string, StudentExcess>(); foreach (StudentExcess data in students) { if (!StudentLookup.ContainsKey(data.StudentID)) { StudentLookup.Add(data.StudentID, data); } } foreach (DataRow row in table.Rows) { string id = row["ref_student_id"] + ""; int syear = int.Parse(row["school_year"] + ""); int sems = int.Parse(row["semester"] + ""); decimal hours = decimal.Parse(row["hours"] + ""); if (!StudentLookup.ContainsKey(id)) { continue; } StudentExcess se = StudentLookup[id]; SemesterData sd = new SemesterData(0, syear, sems); se.ServiceLearning[sd] = hours; } }
public decimal?GetScore(ReportStudent student) { SemesterScore score = null; foreach (SemesterData each in student.SHistory.GetGradeYearSemester()) { //// 處理轉入生之前不列入排名 //if (student.LastEnterSchoolyear.HasValue && student.LastEnterSemester.HasValue && student.LastEnterGradeYear.HasValue) //{ // if (each.SchoolYear < student.LastEnterSchoolyear.Value) // continue; // else // { // if (each.SchoolYear == student.LastEnterSchoolyear.Value && each.Semester < student.LastEnterSemester.Value) // continue; // } //} SemesterData gysemester = new SemesterData(each.GradeYear, 0, each.Semester); if (gysemester == Semester) { SemesterData sd = new SemesterData(0, each.SchoolYear, each.Semester); if (student.SemestersScore.Contains(sd)) { score = student.SemestersScore[sd]; } break; } } if (score == null) { return(0); } else if (score.LearnDomainScore.HasValue) { return(Math.Round(score.LearnDomainScore.Value, 2, MidpointRounding.AwayFromZero)); // 小數下第3位四捨五入 } else { return(0); } }
public static void FillDomainScore(this List <StudentExcess> students) { //資料表:ischool_student_fitness if (students == null || students.Count <= 0) { return; } string sql = @"select ref_student_id,school_year,semester,score_info from sems_subj_score where ref_student_id in({0}) order by school_year, semester"; sql = string.Format(sql, students.ToPrimaryKeyStringList()); DataTable table = Utility.Q.Select(sql); // Dictionary<string, StudentExcess> StudentLookup = students.ToDictionary(x => x.StudentID); Dictionary <string, StudentExcess> StudentLookup = new Dictionary <string, StudentExcess>(); foreach (StudentExcess data in students) { if (!StudentLookup.ContainsKey(data.StudentID)) { StudentLookup.Add(data.StudentID, data); } } foreach (DataRow row in table.Rows) { string id = row["ref_student_id"] + ""; int school_year = int.Parse(row["school_year"] + ""); int semester = int.Parse(row["semester"] + ""); string score_info = row["score_info"] + ""; if (!StudentLookup.ContainsKey(id)) { continue; } StudentExcess stu = StudentLookup[id]; SemesterData sd = new SemesterData(0, school_year, semester); DomainScore ds = ParseDomainScore(score_info); stu.DomainScore[sd] = ds; } }
internal void Add(SemesterData semester, string text) { if (!_texts.ContainsKey(semester)) { _texts.Add(semester, string.Empty); } if (!string.IsNullOrEmpty(text)) { text = text.Replace('>', ':').Replace('<', ','); if (text.StartsWith(",")) { text = text.Substring(1); } _texts[semester] = text; } }
/// <summary> /// 取得學生幹部資料計數。 /// </summary> public static void FillCadre(this List <StudentExcess> students) { //資料表:K12.Service.Learning.Record if (students == null || students.Count <= 0) { return; } string sql = @"select ref_student_id,school_year,semester,count(id) as count from discipline where ref_student_id in({0}) and reason like '%[幹部]%' group by ref_student_id,school_year,semester"; sql = string.Format(sql, students.ToPrimaryKeyStringList()); DataTable table = Utility.Q.Select(sql); // Dictionary<string, StudentExcess> StudentLookup = students.ToDictionary(x => x.StudentID); Dictionary <string, StudentExcess> StudentLookup = new Dictionary <string, StudentExcess>(); foreach (StudentExcess data in students) { if (!StudentLookup.ContainsKey(data.StudentID)) { StudentLookup.Add(data.StudentID, data); } } foreach (DataRow row in table.Rows) { string id = row["ref_student_id"].ToString(); int sy = int.Parse(row["school_year"].ToString()); int ss = int.Parse(row["semester"].ToString()); int count = int.Parse(row["count"].ToString()); if (!StudentLookup.ContainsKey(id)) { continue; } StudentExcess stu = StudentLookup[id]; SemesterData sd = new SemesterData(0, sy, ss); stu.Cadre[sd] = count; } }
public static Semester Convert(SemesterData item) { if (item == null) { return(null); } return(new Semester { IdSemester = item.IdSemester, Period = item.Period, InitialDate = item.InitialDate, RegisterDate = item.RegisterDate, RegisterBy = item.RegisterBy, DeleteDate = item.DeleteDate, DeleteBy = item.DeleteBy }); }
public List <StudentScore> Valid() { List <StudentScore> noValid = new List <StudentScore>(); foreach (StudentScore student in Students) { foreach (SemesterData sems in student.SHistory.GetGradeYearSemester()) { SemesterData sd = new SemesterData(0, sems.SchoolYear, sems.Semester); if (!student.SemestersScore.Contains(sd)) //只要不包含該學期的學期成績,表示資料不完整。 { noValid.Add(student); break; } } } return(noValid); }
public async Task <List <SemesterData> > GetResult(string userId) { var allSemesters = new List <SemesterData>(); var res = await _db.StudentCourses.Include(x => x.Course) .ThenInclude(x => x.Semester) .Where(x => x.Student.Id == userId) .ToListAsync(); var grouped = res.GroupBy(x => x.Course.Semester.Id).ToList(); foreach (var courseData in grouped) { var semesterData = courseData.FirstOrDefault().Course.Semester; var data = new SemesterData(semesterData, courseData.ToList()); if (data.SemesterGPA > 0) { allSemesters.Add(data); } } return(allSemesters.OrderBy(x => x.StartsOn).ToList()); }
public IActionResult GetStudents(string id) { //var list = new List<Student>(); var list = new List <SemesterData>(); id = "1234"; using (var client = new SqlConnection("Data Source=db-mssql;Initial Catalog=s18923;Integrated Security=True")) using (var com = new SqlCommand()) { com.Connection = client; //com.CommandText = "select * from Student where indexNumber = @id"; com.CommandText = @"select s.IndexNumber, s.FirstName, s.LastName, st.Name, e.Semester, e.StartDate from Student s join Enrollment e on s.IdEnrollment = e.IdEnrollment join Studies st on e.IdStudy = st.IdStudy where s.IndexNumber = @id "; //var idParametr = new SqlParameter("id", SqlDbType.VarChar); //idParametr.Value = id; //com.Parameters.Add(idParametr); com.Parameters.AddWithValue("id", id); client.Open(); var dr = com.ExecuteReader(); while (dr.Read()) { //var st = new Student(); var sd = new SemesterData(); sd.IndexNumber = dr["IndexNumber"].ToString(); sd.FirstName = dr["FirstName"].ToString(); sd.LastName = dr["LastName"].ToString(); sd.Name = dr["Name"].ToString(); sd.StartDate = (DateTime)dr["StartDate"]; sd.Semester = (int)dr["Semester"]; list.Add(sd); } } return(Ok(list)); }
private void refreshButton_Click(object sender, EventArgs e) { //Reset error text errorLabel.Visible = false; errorLabel.Text = ""; //The new selected semester SemesterData newSelectedSemester; //Get semester type newSelectedSemester.Type = (SEMESTER_TYPE)semesterComboBox.SelectedIndex; try { //Get year newSelectedSemester.Year = Convert.ToInt32(yearTextBox.Text); //Set selected semester selectedSemester = newSelectedSemester; //If the given year is positive if (newSelectedSemester.Year > 0) { //Update results RetrieveItems(); PopulateListview(); } else { //Set error text errorLabel.Text = "Must enter a positive year."; errorLabel.Visible = true; } } catch (Exception exception) { //Set error text errorLabel.Text = "Must enter a numeric year."; errorLabel.Visible = true; } }
//Initialization private void SectionFilteringForm_Load(object sender, EventArgs e) { //Initialize listview filteredResultsListView.FullRowSelect = true; //Initialize combo box semesterComboBox.Items.Add("Fall"); semesterComboBox.Items.Add("Winter"); semesterComboBox.Items.Add("Summer"); semesterComboBox.SelectedIndex = 0; //Hide error text errorLabel.Visible = false; //Initialize collumns resultsColumns = new List <Tuple <string, int> >() { new Tuple <string, int>("Id", 50), new Tuple <string, int>("Course ID", 150), new Tuple <string, int>("Faculty ID", 150), new Tuple <string, int>("Day", 100), new Tuple <string, int>("Time", 100), new Tuple <string, int>("Semester", 200) }; //Initialize results list results = new List <Section>(); //Select the current semester selectedSemester = new SemesterData() { Year = -1, Type = SEMESTER_TYPE.FALL }; //Retrieve initial query RetrieveItems(); //Populate list view with query results PopulateListview(); }
/// <summary> /// 將重讀的處理掉,以最新學期為主。 /// </summary> /// <param name="studentId"></param> /// <returns></returns> private List <SemesterData> DistinctSemester(string studentId) { List <SemesterData> semesters = new List <SemesterData>(); //將所有學期歷程先放入 semesters 清單。 foreach (KeyValuePair <int, Dictionary <int, SemesterHistoryItem> > sy in Histories[studentId]) { int sYear = sy.Key; foreach (KeyValuePair <int, SemesterHistoryItem> ss in sy.Value) { int sSems = ss.Key; int gradeYear = ss.Value.GradeYear; semesters.Add(new SemesterData(gradeYear, sYear, sSems)); } } //去掉重讀的。 List <SemesterData> distinct = SemesterData.DistinctGradeYear(semesters.ToArray()).ToList(); return(distinct); }
/// <summary> /// 取得各領域成績 /// </summary> /// <param name="sem"></param> /// <returns></returns> public List <decimal?> GetScoreList(SemesterData sem) { if (_scores.ContainsKey(sem)) { List <decimal?> scoreList = new List <decimal?>(); foreach (string domain in Global.GetDomains()) { decimal?score = null; if (_scores[sem].Domains.ContainsKey(domain)) { DomainScore domainScore = _scores[sem].Domains[domain]; score = domainScore.Score; } scoreList.Add(score); } return(scoreList); } else { return(new List <decimal?>()); } }
public void Read() { List <JHSemesterScoreRecord> SemesterScores = ReadSemesterScore(); //將每位學生的資料清除。 foreach (StudentScore each in Students.Values) { each.SemestersScore.Clear(); } //將有資料的學生填上資料。 foreach (JHSemesterScoreRecord semsscore in SemesterScores) { if (!Students.ContainsKey(semsscore.RefStudentID)) { continue; } StudentScore student = Students[semsscore.RefStudentID]; SemesterData sd = new SemesterData(0, semsscore.SchoolYear, semsscore.Semester); student.SemestersScore.Add(sd, new SCSemsScore(semsscore)); } }
/// <summary> /// 判斷是否有該學生的學期歷程。 /// </summary> /// <param name="studentId"></param> /// <param name="schoolYear"></param> /// <param name="semester"></param> /// <returns></returns> public bool Contains(string studentId, int schoolYear, int semester) { if (Histories.ContainsKey(studentId)) { List <SemesterData> distinct = DistinctSemester(studentId); SemesterData found = distinct.Find(sd => { if (sd.SchoolYear == schoolYear && sd.Semester == semester) { return(true); } else { return(false); } }); return(found != new SemesterData()); } return(false); }
public void Add(JHSemesterScoreRecord record) { SemesterData semester = new SemesterData("" + record.SchoolYear, "" + record.Semester); //foreach (K12.Data.SubjectScore subject in record.Subjects.Values) //{ //if (!_config.ContainsKey(subject.Domain)) continue; //if (!_config[subject.Domain].Contains(subject.Subject)) continue; //else //{ // if (!_removeDomains.Contains(subject.Domain)) // _removeDomains.Add(subject.Domain); //} // if (!_domains.ContainsKey(subject.Subject)) // _domains.Add(subject.Subject, new DomainText(subject.Subject)); // DomainText text = _domains[subject.Subject]; // text.Add(semester, subject.Text); //} foreach (K12.Data.DomainScore domain in record.Domains.Values) { //if (!_config.ContainsKey(domain.Domain)) continue; //if (_removeDomains.Contains(domain.Domain)) continue; if (!_domains.ContainsKey(domain.Domain)) { _domains.Add(domain.Domain, new DomainText(domain.Domain)); } DomainText text = _domains[domain.Domain]; text.Add(semester, domain.Text); } }
public bool Add(SemesterData semester, int count) { if (!_items.ContainsKey(semester)) _items.Add(semester, 0); _items[semester] += count; return true; }
private void ProcessMoralScore(List<AutoSummaryRecord> autoSummaryList) { Dictionary<string, MoralItemRow> items = new Dictionary<string, MoralItemRow>(); //團體活動 MoralItemRow groupActivityRow = null; //公共服務 MoralItemRow publicServiceRow = null; //校內外特殊表現 MoralItemRow schoolSpecialRow = null; //具體建議 MoralItemRow recommendRow = null; #region 建立適合列印的資料結構 foreach (AutoSummaryRecord asRecord in autoSummaryList) { if (asRecord.MoralScore == null) continue; JHMoralScoreRecord record = asRecord.MoralScore; SemesterData semester = new SemesterData("" + record.SchoolYear, "" + record.Semester); XmlElement dailyBehavior = (XmlElement)record.TextScore.SelectSingleNode("DailyBehavior"); if (dailyBehavior != null) { foreach (XmlElement item in dailyBehavior.SelectNodes("Item")) { string name = item.GetAttribute("Name"); string index = item.GetAttribute("Index"); string degree = item.GetAttribute("Degree"); string[] lines = index.Split(new string[] { ";", ";" }, StringSplitOptions.RemoveEmptyEntries); if (!items.ContainsKey(name)) items.Add(name, new MoralItemRow(lines)); items[name].Add(semester, degree); } } XmlElement dailyLifeRecommend = (XmlElement)record.TextScore.SelectSingleNode("DailyLifeRecommend"); if (dailyLifeRecommend != null) { string GroupName = ""; if (Utility.MorItemDict.ContainsKey("DailyLifeRecommend")) GroupName = Utility.MorItemDict["DailyLifeRecommend"]; if (recommendRow == null) recommendRow = new MoralItemRow(new string[] { GroupName }); recommendRow.Add(semester, dailyLifeRecommend.GetAttribute("Description")); } // 團體活動 XmlElement groupActivity = (XmlElement)record.TextScore.SelectSingleNode("GroupActivity"); if (groupActivity != null) { string GroupName = ""; if (Utility.MorItemDict.ContainsKey("GroupActivity")) GroupName = Utility.MorItemDict["GroupActivity"]; if (groupActivityRow == null) groupActivityRow = new MoralItemRow(new string[] { GroupName }); string text = string.Empty; foreach (XmlElement item in groupActivity.SelectNodes("Item")) { string degree = item.GetAttribute("Degree"); string desc = item.GetAttribute("Description"); string name = item.GetAttribute("Name"); if (string.IsNullOrEmpty(degree) && string.IsNullOrEmpty(desc)) continue; string line = name + ":" + (string.IsNullOrEmpty(degree) ? "" : degree + "/") + (string.IsNullOrEmpty(desc) ? "" : desc); if (line.EndsWith("/")) line = line.Substring(0, line.Length - 1); text += line; } // 加入社團 if (_assnScoreCache.ContainsKey(record.RefStudentID)) { string sc = record.SchoolYear.ToString(); string ss = record.Semester.ToString(); foreach (AssnScore asc in _assnScoreCache[record.RefStudentID]) { if (asc.SchoolYear == sc && asc.Semester == ss) text += "社團活動:" + asc.Score + "," + asc.Effort +"/"+ asc.Text; } } groupActivityRow.Add(semester, text); } XmlElement publicService = (XmlElement)record.TextScore.SelectSingleNode("PublicService"); if (publicService != null) { string GroupName = ""; if (Utility.MorItemDict.ContainsKey("PublicService")) GroupName = Utility.MorItemDict["PublicService"]; if (publicServiceRow == null) publicServiceRow = new MoralItemRow(new string[] { GroupName }); string text = string.Empty; foreach (XmlElement item in publicService.SelectNodes("Item")) { string degree = item.GetAttribute("Degree"); string desc = item.GetAttribute("Description"); string name = item.GetAttribute("Name"); if (string.IsNullOrEmpty(degree) && string.IsNullOrEmpty(desc)) continue; string line = name + ":" + (string.IsNullOrEmpty(degree) ? "" : degree + "/") + (string.IsNullOrEmpty(desc) ? "" : desc); if (line.EndsWith("/")) line = line.Substring(0, line.Length - 1); text += line; } publicServiceRow.Add(semester, text); } XmlElement schoolSpecial = (XmlElement)record.TextScore.SelectSingleNode("SchoolSpecial"); if (schoolSpecial != null) { string GroupName = ""; if (Utility.MorItemDict.ContainsKey("SchoolSpecial")) GroupName = Utility.MorItemDict["SchoolSpecial"]; if (schoolSpecialRow == null) schoolSpecialRow = new MoralItemRow(new string[] { GroupName }); string text = string.Empty; foreach (XmlElement item in schoolSpecial.SelectNodes("Item")) { string degree = item.GetAttribute("Degree"); string desc = item.GetAttribute("Description"); string name = item.GetAttribute("Name"); if (string.IsNullOrEmpty(degree) && string.IsNullOrEmpty(desc)) continue; string line = name + ":" + (string.IsNullOrEmpty(degree) ? "" : degree + "/") + (string.IsNullOrEmpty(desc) ? "" : desc); if (line.EndsWith("/")) line = line.Substring(0, line.Length - 1); text += line; } schoolSpecialRow.Add(semester, text); } } #endregion #region 定位,產生Row _builder.MoveToMergeField("日常行為表現"); Cell currentCell = _builder.CurrentParagraph.ParentNode as Cell; Row currentRow = currentCell.ParentRow; Table table = currentRow.ParentTable; int rowCount = items.Count; int insertIndex = table.Rows.IndexOf(currentRow) + 1; for (int i = 1; i < rowCount; i++) table.Rows.Insert(insertIndex, currentRow.Clone(true)); #endregion #region 寫入日常行為表現 Cell cell = currentCell; foreach (string key in items.Keys) { WordHelper.Write(cell, key, _builder); Cell indexCell = WordHelper.GetMoveRightCell(cell, 1); WriteMoralItemRow(indexCell, items[key]); cell = WordHelper.GetMoveDownCell(cell, 1); } #endregion #region 寫入團體活動表現 _builder.MoveToMergeField("團體活動"); if (groupActivityRow != null && groupActivityRow.Items.Count > 0) { currentCell = _builder.CurrentParagraph.ParentNode as Cell; WriteMoralItemRow(currentCell, groupActivityRow); if (currentCell.Paragraphs.Count > 0) currentCell.Paragraphs[0].ParagraphFormat.Alignment = ParagraphAlignment.Center; } else (_builder.CurrentParagraph.ParentNode as Cell).ParentRow.Remove(); #endregion #region 寫入公共服務表現 _builder.MoveToMergeField("公共服務"); if (publicServiceRow != null && publicServiceRow.Items.Count > 0) { currentCell = _builder.CurrentParagraph.ParentNode as Cell; WriteMoralItemRow(currentCell, publicServiceRow); if (currentCell.Paragraphs.Count > 0) currentCell.Paragraphs[0].ParagraphFormat.Alignment = ParagraphAlignment.Center; } else (_builder.CurrentParagraph.ParentNode as Cell).ParentRow.Remove(); #endregion #region 寫入校內外特殊表現 _builder.MoveToMergeField("校內外特殊"); if (schoolSpecialRow != null && schoolSpecialRow.Items.Count > 0) { currentCell = _builder.CurrentParagraph.ParentNode as Cell; WriteMoralItemRow(currentCell, schoolSpecialRow); if (currentCell.Paragraphs.Count > 0) currentCell.Paragraphs[0].ParagraphFormat.Alignment = ParagraphAlignment.Center; } else (_builder.CurrentParagraph.ParentNode as Cell).ParentRow.Remove(); #endregion #region 寫入具體建議 _builder.MoveToMergeField("具體建議"); if (recommendRow != null && recommendRow.Items.Count > 0) { currentCell = _builder.CurrentParagraph.ParentNode as Cell; WriteMoralItemRow(currentCell, recommendRow); if (currentCell.Paragraphs.Count > 0) currentCell.Paragraphs[0].ParagraphFormat.Alignment = ParagraphAlignment.Center; } else (_builder.CurrentParagraph.ParentNode as Cell).ParentRow.Remove(); #endregion }
private void ProcessDiscipline(List<AutoSummaryRecord> autoSummaryList) { #region 定位,產生Row _builder.MoveToMergeField("獎懲"); Cell currentCell = _builder.CurrentParagraph.ParentNode as Cell; Row currentRow = currentCell.ParentRow; Table table = currentRow.ParentTable; int rowCount = 6; int insertIndex = table.Rows.IndexOf(currentRow) + 1; for (int i = 1; i < rowCount; i++) table.Rows.Insert(insertIndex, currentRow.Clone(true)); #endregion string postfix = "次數"; #region 寫入獎勵資料 Dictionary<string, ValueItemRow> items = new Dictionary<string, ValueItemRow>(); foreach (string name in new string[] { "嘉獎", "小功", "大功" }) items.Add(name + postfix, new ValueItemRow(name + postfix)); foreach (AutoSummaryRecord record in autoSummaryList) { SemesterData semester = new SemesterData("" + record.SchoolYear, "" + record.Semester); items["大功" + postfix].Add(semester, record.MeritA); items["小功" + postfix].Add(semester, record.MeritB); items["嘉獎" + postfix].Add(semester, record.MeritC); } Cell cell = currentCell; WordHelper.MergeVerticalCell(cell, 3); WordHelper.Write(cell, "獎勵", _builder); Cell itemCell = WordHelper.GetMoveRightCell(cell, 1); foreach (string type in items.Keys) { WriteValueItemRow(itemCell, items[type]); itemCell = WordHelper.GetMoveDownCell(itemCell, 1); if (itemCell == null) break; } Cell tempCell = WordHelper.GetMoveDownCell(cell, 3); if (tempCell != null) cell = tempCell; currentCell = cell; #endregion #region 寫入懲戒資料 items.Clear(); foreach (string name in new string[] { "警告", "小過", "大過" }) items.Add(name + postfix, new ValueItemRow(name + postfix)); foreach (var record in autoSummaryList) { SemesterData semester = new SemesterData("" + record.SchoolYear, "" + record.Semester); items["大過" + postfix].Add(semester, record.DemeritA); items["小過" + postfix].Add(semester, record.DemeritB); items["警告" + postfix].Add(semester, record.DemeritC); } cell = currentCell; WordHelper.MergeVerticalCell(cell, 3); WordHelper.Write(cell, "懲戒", _builder); itemCell = WordHelper.GetMoveRightCell(cell, 1); foreach (string type in items.Keys) { WriteValueItemRow(itemCell, items[type]); itemCell = WordHelper.GetMoveDownCell(itemCell, 1); if (itemCell == null) break; } tempCell = WordHelper.GetMoveDownCell(cell, 3); if (tempCell != null) cell = tempCell; #endregion }
private void ProcessAttendance(List<AutoSummaryRecord> autoSummaryList) { #region 定位,產生Row _builder.MoveToMergeField("缺曠"); Cell currentCell = _builder.CurrentParagraph.ParentNode as Cell; Row currentRow = currentCell.ParentRow; Table table = currentRow.ParentTable; if (_types.Count <= 0) { currentRow.Remove(); return; } else { int rowCount = 0; foreach (string type in _types.Keys) rowCount += _types[type].Count; int insertIndex = table.Rows.IndexOf(currentRow) + 1; for (int i = 1; i < rowCount; i++) table.Rows.Insert(insertIndex, currentRow.Clone(true)); } #endregion string postfix = "節數"; #region 寫入缺曠資料 Dictionary<string, Dictionary<string, ValueItemRow>> items = new Dictionary<string, Dictionary<string, ValueItemRow>>(); foreach (string type in _types.Keys) { if (!items.ContainsKey(type)) items.Add(type, new Dictionary<string, ValueItemRow>()); foreach (string name in _types[type]) { if (!items[type].ContainsKey(name + postfix)) items[type].Add(name + postfix, new ValueItemRow(name + postfix)); } } foreach (AutoSummaryRecord record in autoSummaryList) { SemesterData semester = new SemesterData("" + record.SchoolYear, "" + record.Semester); foreach (AbsenceCountRecord absence in record.AbsenceCounts) { if (items.ContainsKey(absence.PeriodType) && items[absence.PeriodType].ContainsKey(absence.Name + postfix)) items[absence.PeriodType][absence.Name + postfix].Add(semester, absence.Count); } } Cell cell = currentCell; foreach (string type in items.Keys) { int count = items[type].Count; WordHelper.MergeVerticalCell(cell, count); WordHelper.Write(cell, type, _builder); Cell itemCell = WordHelper.GetMoveRightCell(cell, 1); foreach (ValueItemRow row in items[type].Values) { WriteValueItemRow(itemCell, row); itemCell = WordHelper.GetMoveDownCell(itemCell, 1); if (itemCell == null) break; } Cell tempCell = WordHelper.GetMoveDownCell(cell, count); if (tempCell == null) break; cell = tempCell; } #endregion }
public bool Add(SemesterData semester, K12.Data.DomainScore domain) { if (!_scores.ContainsKey(semester)) { _scores.Add(semester, new ScoreData("" + domain.Period, "" + domain.Credit, "" + domain.Score)); return true; } return false; }
private void PrintDomainOnly(DocumentBuilder builder, ReportStudent student, Row template, Table table) { #region 列印領域 UniqueSet<RowHeader> RowIndexs = new UniqueSet<RowHeader>(); #region 列印 RowHeader foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); //如果不包含該學期成績資料,就跳過。 if (!student.SemestersScore.Contains(sysems)) continue; SemesterScore semsscore = student.SemestersScore[sysems]; //準備彈性課程的科目(要詳列出來)。 foreach (string strSubject in semsscore.Subject) { SemesterSubjectScore subject = semsscore.Subject[strSubject]; if (DetailDomain.Contains(subject.Domain)) { RowHeader header = new RowHeader(subject.Domain, strSubject); header.IsDomain = false; if (!RowIndexs.Contains(header)) RowIndexs.Add(header); } } //準備領域資料。 foreach (string strDomain in semsscore.Domain) { if (!Subj.Domains.Contains(strDomain)) continue; SemesterDomainScore domain = semsscore.Domain[strDomain]; if (!DetailDomain.Contains(strDomain)) { RowHeader header = new RowHeader(strDomain, string.Empty); header.IsDomain = true; if (!RowIndexs.Contains(header)) RowIndexs.Add(header); } } } List<RowHeader> sortedHeaders = SortHeader(RowIndexs.ToList()); //產生 Row。 List<RowHeader> indexHeaders = new List<RowHeader>(); Row current = template; int rowIndex = 0; foreach (RowHeader header in sortedHeaders) { RowHeader indexH = header; indexH.Index = rowIndex++; indexHeaders.Add(indexH); bool hasGroup = !string.IsNullOrEmpty(Subj.GetDomainGroup(header.Domain)); string groupName = Subj.GetDomainGroup(header.Domain); Row datarow = table.InsertBefore(template.Clone(true), current) as Row; if (header.IsDomain) { string domainCName = header.Domain; string domainEName = Subj.GetDomainEnglish(header.Domain); string domainString = domainCName + (string.IsNullOrEmpty(domainEName) ? "" : domainEName); if (hasGroup) { string gn = groupName; if (groupName == "語文") gn = "語文\nLanguage"; datarow.Cells[0].Write(builder, gn); datarow.Cells[1].Write(builder, domainString); } else datarow.Cells[0].Write(builder, domainString); } else { string gn = ""; //Additional Classes if (IsFlexible(header.Domain)) gn = "彈性課程\nAdditional Classes"; else gn = header.Domain; string subjCName = header.Subject; string subjEName = Subj.GetSubjectEnglish(header.Subject); string subjString = header.Subject + (string.IsNullOrEmpty(subjEName) ? "" : "\n" + subjEName); //把空白的領域當成「彈性課程」。 string domain = gn; datarow.Cells[0].Write(builder, domain); datarow.Cells[1].Write(builder, subjString); } } #endregion #region 填資料 //Row RatingRow = null; foreach (RowHeader header in indexHeaders) { SemesterDataCollection semesters = new SemesterDataCollection(); Row row = table.Rows[header.Index + DataRowOffset]; foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); semesters.Add(sysems); if (!student.SemestersScore.Contains(sysems)) continue; if (!student.HeaderList.ContainsKey(sysems)) continue; int columnIndex = student.HeaderList[sysems]; SemesterScore semsscore = student.SemestersScore[sysems]; decimal? score = null; decimal? weight = null; if (header.IsDomain) { if (semsscore.Domain.Contains(header.Domain)) { score = semsscore.Domain[header.Domain].Value; weight = semsscore.Domain[header.Domain].Weight; } } else { if (semsscore.Subject.Contains(header.Subject)) { score = semsscore.Subject[header.Subject].Value; weight = semsscore.Subject[header.Subject].Weight; } } if (!score.HasValue) continue; if (!weight.HasValue) weight = 0; if (PrintScore) row.Cells[columnIndex + 2].Write(builder, score.Value + ""); else row.Cells[columnIndex + 2].Write(builder, Util.GetDegreeEnglish(score.Value)); } } #endregion #region 合併相關欄位。 string previousCellDomain = string.Empty; foreach (RowHeader header in indexHeaders) { bool hasGroup = !string.IsNullOrEmpty(Subj.GetDomainGroup(header.Domain)); string groupName = Subj.GetDomainGroup(header.Domain); Row row = table.Rows[header.Index + DataRowOffset]; if (previousCellDomain == row.Cells[0].ToTxt()) row.Cells[0].CellFormat.VerticalMerge = CellMerge.Previous; else row.Cells[0].CellFormat.VerticalMerge = CellMerge.First; if (header.IsDomain) { if (!hasGroup) { row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; } } previousCellDomain = row.Cells[0].ToTxt(); } #endregion #endregion }
private void SetFilterSource() { foreach (MenuButton button in Panel.FilterMenu.SubItems) { button.Visible = false; } if (Selected == null) Selected = new SemesterData(int.Parse(School.DefaultSchoolYear), int.Parse(School.DefaultSemester)); foreach (SemesterData sems in Semesters) { MenuButton button = Panel.FilterMenu[string.Format("[{0}] [{1}]", sems.SchoolYear, DataItems.SemesterItem.GetSemesterByCode(sems.Semester.ToString()).Name)]; InitButton(sems, button); if (sems == Selected) button.Checked = true; } MenuButton mb = Panel.FilterMenu["其他學期"]; InitButton(SemesterData.Undefined, mb); if (SemesterData.Undefined == Selected) mb.Checked = true; if (Selected.Value == SemesterData.Undefined) Panel.FilterMenu.Text = "其他學期"; else { // 學年度與學期是否顯示中文要請示長官再修改。 Panel.FilterMenu.Text = string.Format("[{0}] [{1}]", Selected.Value.SchoolYear, DataItems.SemesterItem.GetSemesterByCode(Selected.Value.Semester.ToString()).Name); } HashSet<string> result = new HashSet<string>(); foreach (dynamic course in CacheProvider.Course) { int sy, ss; if (!int.TryParse(course.SchoolYear + "", out sy)) sy = -1; if (!int.TryParse(course.Semester + "", out ss)) ss = -1; SemesterData sd; if (sy == -1 || ss == -1) sd = SemesterData.Undefined; else sd = new SemesterData(sy, ss); if (Selected.Value == sd) result.Add(course.Id); } this.resultCourseIDs = result.ToList(); this.semesterData = Selected.Value ; Panel.SetFilteredSource(this.resultCourseIDs); }
//最好這程式有人能維護的了....... private void MailMerge_MergeField(object sender, MergeFieldEventArgs e) { //不是 Fix 開頭的合併欄位不處理。 if (!e.FieldName.ToUpper().StartsWith("Fix".ToUpper())) return; DocumentBuilder builder = new DocumentBuilder(e.Document); ReportStudent student = e.FieldValue as ReportStudent; //如果合併值不是 ReportStudent 就跳過...意思是有問題...。 if (student == null) return; builder.MoveToField(e.Field, true); e.Field.Remove(); if (e.FieldName == "Fix:年級學期") { #region 列印年級學期資訊(有點複雜)。 SemesterDataCollection semesters = student.SHistory.GetGradeYearSemester().GetSemesters(PrintSetting.PrintSemesters); Row SemesterRow = builder.CurrentParagraph.ParentNode.ParentNode.NextSibling as Row; //下一個 Row。 Paragraph originParagraph = builder.CurrentParagraph; int count = 0, offset = 1; foreach (SemesterData each in semesters) { string currentGradeyear = Util.GetGradeyearString(each.GradeYear.ToString()); //如果沒有年級,就跳過。 if (string.IsNullOrEmpty(currentGradeyear)) continue; builder.Write(currentGradeyear + "年級"); Paragraph nextPh = Util.NextCell(builder.CurrentParagraph); if (nextPh == null) break; //沒有下一個 Cell ,就不印資料了。 builder.MoveTo(nextPh); Paragraph resetParagraph = builder.CurrentParagraph; SemesterRow.Cells[count + offset].Write(builder, GetSemesterString(each)); SemesterData semester = new SemesterData(0, each.SchoolYear, each.Semester); if (!student.HeaderList.ContainsKey(semester)) student.HeaderList.AddRaw(each, count); //不要懷疑,這是對的。 builder.MoveTo(resetParagraph); count++; } builder.MoveTo(originParagraph); (originParagraph.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; Paragraph nextParagrap = originParagraph; string previousGradeyear = GetText(originParagraph); while ((nextParagrap = Util.NextCell(nextParagrap)) != null) { if (GetText(nextParagrap) == previousGradeyear && !string.IsNullOrEmpty(previousGradeyear)) { (nextParagrap.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; (nextParagrap.ParentNode as Cell).Paragraphs[0].Runs.Clear(); } else (nextParagrap.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; previousGradeyear = GetText(nextParagrap); } #endregion } else if (e.FieldName == "Fix:科目資訊") { #region 列印科目資料(爆炸複雜) Row template = builder.CurrentParagraph.ParentNode.ParentNode as Row; Table table = template.ParentNode as Table; if (PrintSetting.ListMethod == ListMethod.DomainOnly) { #region 列印領域 UniqueSet<RowHeader> RowIndexs = new UniqueSet<RowHeader>(); //Environment.OSVersion.Platform #region 列印 RowHeader foreach (SemesterData semester in student.SHistory.GetGradeYearSemester().GetSemesters(PrintSetting.PrintSemesters)) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); //如果不包含該學期成績資料,就跳過。 if (!student.SemestersScore.Contains(sysems)) continue; SemesterScore semsscore = student.SemestersScore[sysems]; ////準備彈性課程的科目(要詳列出來)。 //foreach (string strSubject in semsscore.Subject) //{ // SemesterSubjectScore subject = semsscore.Subject[strSubject]; // if (DetailDomain.Contains(subject.Domain)) // { // RefineDomain(subject); // RowHeader header = new RowHeader(subject.Domain, strSubject); // header.IsDomain = false; // if (!RowIndexs.Contains(header)) // RowIndexs.Add(header); // } //} //準備領域資料。 foreach (string strDomain in semsscore.Domain) { if (!Subj.Domains.Contains(strDomain)) continue; SemesterDomainScore domain = semsscore.Domain[strDomain]; if (!DetailDomain.Contains(strDomain)) { RowHeader header = new RowHeader(strDomain, string.Empty); header.IsDomain = true; if (!RowIndexs.Contains(header)) RowIndexs.Add(header); } } } RowHeader lheader = new RowHeader(LearningDomainName, string.Empty); RowHeader lheader1 = new RowHeader(LearningDomainNameSpcAdd, string.Empty); RowHeader lheader2 = new RowHeader(LearningDomainNameP, string.Empty); RowHeader lheader3 = new RowHeader(LearningDomainNameSpcAddP, string.Empty); RowHeader lheader4 = new RowHeader(CalcMessage, string.Empty); lheader.IsDomain = true; lheader1.IsDomain = true; lheader2.IsDomain = true; lheader3.IsDomain = true; lheader4.IsDomain = true; RowIndexs.Add(lheader); RowIndexs.Add(lheader1); RowIndexs.Add(lheader2); RowIndexs.Add(lheader3); RowIndexs.Add(lheader4); List<RowHeader> sortedHeaders = SortHeader(RowIndexs.ToList()); //產生 Row。 List<RowHeader> indexHeaders = new List<RowHeader>(); Row current = template; int rowIndex = 0; foreach (RowHeader header in sortedHeaders) { RowHeader indexH = header; indexH.Index = rowIndex++; indexHeaders.Add(indexH); bool hasGroup = !string.IsNullOrEmpty(Subj.GetDomainGroup(header.Domain)); string groupName = Subj.GetDomainGroup(header.Domain); Row datarow = table.InsertBefore(template.Clone(true), current) as Row; //if (header.Domain == LearningDomainName) //{ // string headerName = string.Empty; // if (PrintSetting.PrintRank) // headerName = "學期成績平均排名"; // if (PrintSetting.PrintRankPercentage) // headerName = "學期成績平均百分比"; // if (PrintSetting.PrintRank && PrintSetting.PrintRankPercentage) // headerName = "學期成績平均排名/百分比"; // if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) // { // Row lrow = table.InsertAfter(template.Clone(true), datarow) as Row; // lrow.Cells[0].Write(builder, headerName); // rowIndex++; // } //} //if (header.Domain == LearningDomainNameSpcAdd) //{ // string headerName = string.Empty; // if (PrintSetting.PrintRank) // headerName = "特種身分加分後之學期成績平均排名"; // if (PrintSetting.PrintRankPercentage) // headerName = "特種身分加分後之學期成績平均百分比"; // if (PrintSetting.PrintRank && PrintSetting.PrintRankPercentage) // headerName = "特種身分加分後之學期成績平均排名/百分比"; // if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) // { // Row lrow = table.InsertAfter(template.Clone(true), datarow) as Row; // lrow.Cells[0].Write(builder, headerName); // rowIndex++; // } //} if (header.IsDomain) { if (hasGroup) { datarow.Cells[0].Write(builder, groupName); datarow.Cells[1].Write(builder, header.Domain); } else { datarow.Cells[0].Write(builder, header.Domain); } } else { if (header.Domain == LearningDomainNameP) { string headerName = string.Empty; if (PrintSetting.PrintRank) headerName = "學期成績平均排名"; if (PrintSetting.PrintRankPercentage) headerName = "學期成績平均百分比"; if (PrintSetting.PrintRank && PrintSetting.PrintRankPercentage) headerName = "學期成績平均排名/百分比"; if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { Row lrow = table.InsertAfter(template.Clone(true), datarow) as Row; lrow.Cells[0].Write(builder, headerName); rowIndex++; } } if (header.Domain == LearningDomainNameSpcAddP) { string headerName = string.Empty; if (PrintSetting.PrintRank) headerName = "特種身分加分後之學期成績平均排名"; if (PrintSetting.PrintRankPercentage) headerName = "特種身分加分後之學期成績平均百分比"; if (PrintSetting.PrintRank && PrintSetting.PrintRankPercentage) headerName = "特種身分加分後之學期成績平均排名/百分比"; if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { Row lrow = table.InsertAfter(template.Clone(true), datarow) as Row; lrow = table.InsertAfter(template.Clone(true), datarow) as Row; lrow.Cells[0].Write(builder, headerName); rowIndex++; } } //把空白的領域當成「彈性課程」。 string domain = IsFlexible(header.Domain) ? "彈性課程" : header.Domain; // 修改不需要彈性課程,標頭 datarow.Cells[0].Write(builder, "^^"); datarow.Cells[1].Write(builder, "^_^"); } } #endregion #region 填資料 Row RatingRow = null; // 用在加分後 Row RatingRowAdd = null; // 是否已有年排名資料 List<DAL.UserDefData> uddList = new List<JointAdmissionModule.DAL.UserDefData>(); if (_StudRankData.ContainsKey(student.StudentID)) uddList = _StudRankData[student.StudentID]; foreach (RowHeader header in indexHeaders) { SemesterDataCollection semesters = new SemesterDataCollection(); Row row = table.Rows[header.Index + 3]; foreach (SemesterData semester in student.SHistory.GetGradeYearSemester().GetSemesters(PrintSetting.PrintSemesters)) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); semesters.Add(sysems); if (!student.SemestersScore.Contains(sysems)) continue; if (!student.HeaderList.ContainsKey(sysems)) continue; int columnIndex = student.HeaderList[sysems]; SemesterScore semsscore = student.SemestersScore[sysems]; decimal? score = null; decimal? weight = null; if (header.IsDomain) { if (semsscore.Domain.Contains(header.Domain)) { score = semsscore.Domain[header.Domain].Value; weight = semsscore.Domain[header.Domain].Weight; } } else { // 這段在顯示彈性課程成績,先註。 //if (semsscore.Subject.Contains(header.Subject)) //{ // score = semsscore.Subject[header.Subject].Value; // weight = semsscore.Subject[header.Subject].Weight; //} } if (header.Domain == LearningDomainName) { score = semsscore.LearnDomainScore; row.Cells[columnIndex * 3 + 2].CellFormat.FitText = false; row.Cells[columnIndex * 3 + 2].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[columnIndex * 3 + 3].CellFormat.HorizontalMerge = CellMerge.Previous; if (!score.HasValue) continue; row.Cells[columnIndex * 3 + 2].Write(builder, ((double)score) + ""); row.Cells[columnIndex * 3 + 4].Write(builder, (Util.GetDegree(score.Value))); if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { RatingRow = row.NextSibling as Row; RatingRow = RatingRow.NextSibling as Row; } } else if (header.Domain == LearningDomainNameSpcAdd) { // 加分後填入值 score = semsscore.LearnDomainScore; row.Cells[columnIndex * 3 + 2].CellFormat.FitText = false; row.Cells[columnIndex * 3 + 2].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[columnIndex * 3 + 3].CellFormat.HorizontalMerge = CellMerge.Previous; if (!score.HasValue) continue; // 處理加分 decimal sc = score.Value; if (student.AddWeight.HasValue) sc = Math.Round(sc * student.AddWeight.Value, 2,MidpointRounding.AwayFromZero); ; // 一般生填空白 if (string.IsNullOrEmpty(student.SpcStudTypeName)) { row.Cells[columnIndex * 3 + 2].Write(builder, ""); row.Cells[columnIndex * 3 + 4].Write(builder, ""); } else { // 特種身 row.Cells[columnIndex * 3 + 2].Write(builder, sc + ""); row.Cells[columnIndex * 3 + 4].Write(builder, (Util.GetDegree(sc))); } if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { if (RatingRow != null) { RatingRowAdd = RatingRow.NextSibling as Row; } } } else { if (!score.HasValue) continue; if (!weight.HasValue) weight = 0; row.Cells[columnIndex * 3 + 2].Write(builder, ((double)weight) + ""); row.Cells[columnIndex * 3 + 3].Write(builder, ((double)score) + ""); row.Cells[columnIndex * 3 + 4].Write(builder, (Util.GetDegree(score.Value))); } } //算平均... decimal? avgScore = null; if (header.IsDomain) { if (header.Domain == LearningDomainName) { avgScore = student.SemestersScore.AvgLearningDomainScore(semesters); if (!avgScore.HasValue) continue; if (student.CalculationRule == null) avgScore = Math.Round(avgScore.Value, 2, MidpointRounding.AwayFromZero); else avgScore = student.CalculationRule.ParseLearnDomainScore(avgScore.Value); } else { avgScore = student.SemestersScore.AvgDomainScore(semesters, header.Domain); if (!avgScore.HasValue) continue; if (student.CalculationRule == null) avgScore = Math.Round(avgScore.Value, 2, MidpointRounding.AwayFromZero); else avgScore = student.CalculationRule.ParseDomainScore(avgScore.Value); } } else { // 這段在處理彈性課程平均,先註。 //avgScore = student.SemestersScore.AvgSubjectScore(semesters, header.Subject); //if (!avgScore.HasValue) continue; //if (student.CalculationRule == null) // avgScore = Math.Round(avgScore.Value, 2, MidpointRounding.AwayFromZero); //else // avgScore = student.CalculationRule.ParseSubjectScore(avgScore.Value); } if (avgScore.HasValue) { row.Cells[20].Write(builder, (double)avgScore + ""); row.Cells[21].Write(builder, Util.GetDegree(avgScore.Value)); //decimal scAddScore = 0; //// 特種身分 //if (student.AddWeight.HasValue) //{ // Row RowSp = row.NextSibling as Row; // scAddScore = student.AddWeight.Value * avgScore.Value; // RowSp.Cells[20].Write(builder, (double)scAddScore + ""); // RowSp.Cells[21].Write(builder, Util.GetDegree(scAddScore)); //} } } // 處理特種分身平均顯示 decimal scAddScore = 0; // 特種身分 int rrIdx = 0; foreach(RowHeader rh in indexHeaders) { if (rh.Domain == LearningDomainNameSpcAdd) { rrIdx = rh.Index + 3; break; } } if (student.AddWeight.HasValue && rrIdx >0) { // 顯示平均 if (student.Places.NS("年排名").Contains("學習領域")) { scAddScore = Math.Round(student.Places.NS("年排名")["學習領域"].Score * student.AddWeight.Value,2,MidpointRounding.AwayFromZero); table.Rows[rrIdx].Cells[20].Write(builder, (double)scAddScore + ""); table.Rows[rrIdx].Cells[21].Write(builder, Util.GetDegree(scAddScore)); } } // 處理年排名與百分比 if (RatingRow != null) { PlaceCollection places = student.Places.NS("年排名"); foreach (SemesterData semsIndex in student.HeaderList.Keys) { SemesterData raw = student.HeaderList.GetSRaw(semsIndex); if (raw == SemesterData.Empty) continue; string placeKey = SLearningDomainParser.GetSemesterString(raw); Cell datacell = RatingRow.Cells[student.HeaderList[semsIndex] * 3 + 2]; bool UseRatingRank = true; // 處理已有年排名(在UDT有存資料) if (uddList.Count > 0 && student.LastEnterSemester.HasValue) { foreach (DAL.UserDefData udd in uddList) { if (udd.SchoolYear == semsIndex.SchoolYear && udd.Semester == semsIndex.Semester) { datacell.Write(builder, GetPlaceString2(udd.GradeRank, udd.GradeRankPercent)); UseRatingRank = false; } } } // 判斷轉入生 if (student.LastEnterGradeYear.HasValue && student.LastEnterSchoolyear.HasValue) { if (semsIndex.SchoolYear <= student.LastEnterSchoolyear.Value) { bool clear = true; // 當有資料 foreach (DAL.UserDefData udd in (from data in uddList where data.SchoolYear== semsIndex.SchoolYear && data.Semester== semsIndex.Semester select data)) clear = false; if (clear) { // 和異動同年同學期不動 if (semsIndex.SchoolYear == student.LastEnterSchoolyear && semsIndex.Semester == student.LastEnterSemester) clear = false; } if (clear) { // 當同一學年第2學期,如果維持不清空 if (semsIndex.SchoolYear == student.LastEnterSchoolyear.Value && semsIndex.Semester == 2) clear = false; } if (clear) { datacell.Write(builder, ""); UseRatingRank = false; } } if (uddList.Count == 0) { if (semsIndex.SchoolYear <= student.LastEnterSchoolyear.Value) { if (semsIndex.SchoolYear < student.LastEnterSchoolyear.Value) { datacell.Write(builder, ""); UseRatingRank = false; } else if (semsIndex.SchoolYear == student.LastEnterSchoolyear.Value && semsIndex.Semester < student.LastEnterSemester) { datacell.Write(builder, ""); UseRatingRank = false; } } } } // 使用即時運算排名與百分比 if(UseRatingRank) if (places.Contains(placeKey)) datacell.Write(builder, GetPlaceString(places, placeKey)); } // 顯示平均 if (places.Contains("學習領域")) RatingRow.Cells[20].Write(builder, GetPlaceString(places, "學習領域")); } int? LevelAdd=null,PercentageAdd=null; // 處理年排名與百分比(加分後) if (RatingRowAdd != null) { PlaceCollection places = student.Places.NS("年排名"); foreach (SemesterData semsIndex in student.HeaderList.Keys) { SemesterData raw = student.HeaderList.GetSRaw(semsIndex); if (raw == SemesterData.Empty) continue; string placeKey = SLearningDomainParser.GetSemesterString(raw); //if (!places.Contains(placeKey)) // continue; Cell datacell = RatingRowAdd.Cells[student.HeaderList[semsIndex] * 3 + 2]; // 如果是一般生直接填空白 if (string.IsNullOrEmpty(student.SpcStudTypeName)) { datacell.Write(builder, ""); continue; } int Level=1,Percentage=1; // 處理加分後 if (places.Contains(placeKey)) { if (student.AddWeight.HasValue) { List<Place> PList = new List<Place>(); decimal sc = places[placeKey].Score * student.AddWeight.Value; if (DAL.DALTransfer.StudRankScoreDict.ContainsKey(student.GradeYear)) { if (DAL.DALTransfer.StudRankScoreDict[student.GradeYear].ContainsKey(placeKey)) { PList = (from data in DAL.DALTransfer.StudRankScoreDict[student.GradeYear][placeKey] where data.Place.Score >= sc orderby data.Place.Score ascending select data.Place).ToList(); if (PList.Count > 0) { PList.OrderBy(x => x.Score); Level = PList[0].Level; Percentage = PList[0].Percentage; } else { Level = 1; Percentage = 1; } } } } } bool UseRatingRank = true; // 處理已有年排名(UDT) if (uddList.Count > 0 && student.LastEnterSemester.HasValue) { foreach (DAL.UserDefData udd in uddList) { if (udd.SchoolYear == semsIndex.SchoolYear && udd.Semester == semsIndex.Semester) { datacell.Write(builder, GetPlaceString2(udd.GradeRankAdd, udd.GradeRankPercentAdd)); UseRatingRank = false; } } } // 判斷轉入生 if (student.LastEnterGradeYear.HasValue && student.LastEnterSchoolyear.HasValue) { if (semsIndex.SchoolYear <= student.LastEnterSchoolyear.Value) { bool clear = true; // 當有資料 foreach (DAL.UserDefData udd in (from data in uddList where data.SchoolYear == semsIndex.SchoolYear && data.Semester == semsIndex.Semester select data)) clear = false; if (clear) { // 和異動同年同學期不動 if (semsIndex.SchoolYear == student.LastEnterSchoolyear && semsIndex.Semester == student.LastEnterSemester) clear = false; } if (clear) { // 當同一學年第2學期,如果維持不清空 if (semsIndex.SchoolYear == student.LastEnterSchoolyear.Value && semsIndex.Semester == 2) clear = false; } if (clear) { datacell.Write(builder, ""); UseRatingRank = false; } } if (uddList.Count == 0) { if (semsIndex.SchoolYear <= student.LastEnterSchoolyear.Value) { if (semsIndex.SchoolYear < student.LastEnterSchoolyear.Value) { datacell.Write(builder, ""); UseRatingRank = false; } else if (semsIndex.SchoolYear == student.LastEnterSchoolyear.Value && semsIndex.Semester < student.LastEnterSemester) { datacell.Write(builder, ""); UseRatingRank = false; } } } } //// 使用即時運算排名與百分比 if (UseRatingRank) { if (places.Contains(placeKey)) { if (student.AddWeight.HasValue) datacell.Write(builder, GetPlaceString2(Level, Percentage)); else datacell.Write(builder, GetPlaceString(places, placeKey)); } } //// 每學期加分後 //if (places.Contains(placeKey)) // datacell.Write(builder, "^_^"); } //這是加分後平均 //if (places.Contains(LearningDomainNameSpcAddP)) // RatingRowAdd.Cells[20].Write(builder, GetPlaceString(places, LearningDomainNameSpcAddP)); // 加分後 if (student.AddWeight.HasValue) { decimal sc1=0; PercentageAdd = null; LevelAdd = null; List<Place> PList = new List<Place>(); if(places.Contains("學習領域")) sc1 = places["學習領域"].Score * student.AddWeight.Value; if (DAL.DALTransfer.StudRankScoreDict.ContainsKey(student.GradeYear)) { if (DAL.DALTransfer.StudRankScoreDict[student.GradeYear].ContainsKey("學期總平均")) { PList = (from data in DAL.DALTransfer.StudRankScoreDict[student.GradeYear]["學期總平均"] where data.Place.Score >= sc1 orderby data.Place.Score ascending select data.Place).ToList(); if (PList.Count > 0) { PList.OrderBy(x => x.Score); LevelAdd = PList[0].Level; PercentageAdd = PList[0].Percentage; } else { LevelAdd = 1; PercentageAdd = 1; } } if(LevelAdd.HasValue && PercentageAdd.HasValue ) RatingRowAdd.Cells[20].Write(builder, GetPlaceString2(LevelAdd.Value, PercentageAdd.Value)); } } } // 樂學計分方式 if(RatingRowAdd !=null ) { //string str = "單一學期學習領域成績計分=100-(名次百分比)×100+1"; Row RowStr = RatingRowAdd.NextSibling as Row; //RowStr.Cells[2].Write(builder, str); PlaceCollection places = student.Places.NS("年排名"); foreach (SemesterData semsIndex in student.HeaderList.Keys) { SemesterData raw = student.HeaderList.GetSRaw(semsIndex); if (raw == SemesterData.Empty) continue; string placeKey = SLearningDomainParser.GetSemesterString(raw); Cell datacell = RowStr.Cells[student.HeaderList[semsIndex] * 3 + 2]; bool UseRatingRank = true; // 處理已有年排名(在UDT有存資料) if (uddList.Count > 0 && student.LastEnterSemester.HasValue) { foreach (DAL.UserDefData udd in uddList) { if (udd.SchoolYear == semsIndex.SchoolYear && udd.Semester == semsIndex.Semester) { if(student.AddWeight.HasValue ) datacell.Write(builder, GetPlaceString3(udd.GradeRankPercentAdd)); else datacell.Write(builder, GetPlaceString3(udd.GradeRankPercent)); UseRatingRank = false; } } } // 判斷轉入生 if (student.LastEnterGradeYear.HasValue && student.LastEnterSchoolyear.HasValue ) { if (semsIndex.SchoolYear <= student.LastEnterSchoolyear.Value) { bool clear = true; // 當有資料 foreach (DAL.UserDefData udd in (from data in uddList where data.SchoolYear == semsIndex.SchoolYear && data.Semester == semsIndex.Semester select data)) clear = false; if (clear) { // 和異動同年同學期不動 if (semsIndex.SchoolYear == student.LastEnterSchoolyear && semsIndex.Semester == student.LastEnterSemester) clear = false; } if (clear) { // 當同一學年第2學期,如果維持不清空 if (semsIndex.SchoolYear == student.LastEnterSchoolyear.Value && semsIndex.Semester == 2) clear = false; } if (clear) { datacell.Write(builder, ""); UseRatingRank = false; } } if (uddList.Count == 0) { if (semsIndex.SchoolYear <= student.LastEnterSchoolyear.Value) { if (semsIndex.SchoolYear < student.LastEnterSchoolyear.Value) { datacell.Write(builder, ""); UseRatingRank = false; } else if (semsIndex.SchoolYear == student.LastEnterSchoolyear.Value && semsIndex.Semester < student.LastEnterSemester) { datacell.Write(builder, ""); UseRatingRank = false; } } } } if (UseRatingRank) { // 處理樂學計算 if (student.AddWeight.HasValue == false) if (places.Contains(placeKey)) datacell.Write(builder, GetPlaceString3(places[placeKey].Percentage)); int Level = 1, Percentage = 1; // 處理加分後 if (places.Contains(placeKey)) { if (student.AddWeight.HasValue) { List<Place> PList = new List<Place>(); decimal sc = places[placeKey].Score * student.AddWeight.Value; if (DAL.DALTransfer.StudRankScoreDict.ContainsKey(student.GradeYear)) { if (DAL.DALTransfer.StudRankScoreDict[student.GradeYear].ContainsKey(placeKey)) { PList = (from data in DAL.DALTransfer.StudRankScoreDict[student.GradeYear][placeKey] where data.Place.Score >= sc orderby data.Place.Score ascending select data.Place).ToList(); if (PList.Count > 0) { PList.OrderBy(x => x.Score); Level = PList[0].Level; Percentage = PList[0].Percentage; } else { Level = 1; Percentage = 1; } } } datacell.Write(builder, GetPlaceString3(Percentage)); } } } } //// 顯示平均 //Place p; //if (places.Contains("學習領域")) //{ //if (student.AddWeight.HasValue) //{ // if(PercentageAdd.HasValue ) // RowStr.Cells[20].Write(builder, GetPlaceString3(PercentageAdd.Value)); //} //else //{ // p = places["學習領域"]; // RowStr.Cells[20].Write(builder, GetPlaceString3(p.Percentage)); // //} //} } #endregion #region 合併相關欄位。 string previousCellDomain = string.Empty; foreach (RowHeader header in indexHeaders) { bool hasGroup = !string.IsNullOrEmpty(Subj.GetDomainGroup(header.Domain)); string groupName = Subj.GetDomainGroup(header.Domain); Row row = table.Rows[header.Index + 3]; if (previousCellDomain == row.Cells[0].ToTxt()) row.Cells[0].CellFormat.VerticalMerge = CellMerge.Previous; else row.Cells[0].CellFormat.VerticalMerge = CellMerge.First; if (header.IsDomain) { if (header.Domain == LearningDomainName) { #region 學習領域 // 這段在處理 header row.Cells[0].CellFormat.FitText = false; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; #endregion } else if (header.Domain == LearningDomainNameSpcAdd) { #region 學習領域(加分後) row.Cells[0].CellFormat.FitText = false; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; #endregion } else if (header.Domain == LearningDomainNameP) { // 學成成績排名與百分比 row.Cells[0].CellFormat.FitText = false; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { //Row lrow = row.NextSibling as Row; Row lrow = row; lrow.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; lrow.Cells[0].CellFormat.FitText = false; lrow.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; Paragraph mp = lrow.Cells[2].Paragraphs[0]; for (int i = 0; i < (3 * 6); i++) { if (i % 3 == 0) { (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; (mp.ParentNode as Cell).CellFormat.FitText = false; } else (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; mp = Util.NextCell(mp as Paragraph); } (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; mp = Util.NextCell(mp as Paragraph); (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; } } else if (header.Domain == LearningDomainNameSpcAddP) { // 學習成績排名與百分比(加分後) row.Cells[0].CellFormat.FitText = false; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { //Row lrow = row.NextSibling as Row; Row lrow = row; lrow.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; lrow.Cells[0].CellFormat.FitText = false; lrow.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; Paragraph mp = lrow.Cells[2].Paragraphs[0]; for (int i = 0; i < (3 * 6); i++) { if (i % 3 == 0) { (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; (mp.ParentNode as Cell).CellFormat.FitText = false; } else (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; mp = Util.NextCell(mp as Paragraph); } (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; mp = Util.NextCell(mp as Paragraph); (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; } } else if (header.Domain==CalcMessage) { // 文字字串 row.Cells[0].CellFormat.FitText = false; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; Row lrow = row; lrow.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; lrow.Cells[0].CellFormat.FitText = false; lrow.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; Paragraph mp = lrow.Cells[2].Paragraphs[0]; for (int i = 0; i < (3 * 6); i++) { // if (i % 18 == 0) if (i % 3 == 0) { (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; (mp.ParentNode as Cell).CellFormat.FitText = false; } else (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; mp = Util.NextCell(mp as Paragraph); } (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; mp = Util.NextCell(mp as Paragraph); (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; } else { if (!hasGroup) { row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; } } } previousCellDomain = row.Cells[0].ToTxt(); } #endregion #endregion } else if (PrintSetting.ListMethod == ListMethod.SubjectOnly) { #region 列印科目 UniqueSet<RowHeader> RowIndexs = new UniqueSet<RowHeader>(); foreach (SemesterData semester in student.SHistory.GetGradeYearSemester().GetSemesters(PrintSetting.PrintSemesters)) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); if (!student.SemestersScore.Contains(sysems)) continue; SemesterScore semsscore = student.SemestersScore[sysems]; foreach (string strSubject in semsscore.Subject) { SemesterSubjectScore subject = semsscore.Subject[strSubject]; RowHeader header; if (IsFlexible(subject.Domain)) header = new RowHeader("彈性課程", strSubject); else header = new RowHeader(subject.Domain, strSubject); header.IsDomain = false; if (!RowIndexs.Contains(header)) RowIndexs.Add(header); } } RowHeader lheader = new RowHeader(LearningDomainName, string.Empty); lheader.IsDomain = true; //RowIndexs.Add(lheader); //List<RowHeader> sortedHeaders = SortHeader(RowIndexs.ToList()); List<RowHeader> sortedHeaders = RowIndexs.ToList(); sortedHeaders.Sort(delegate(RowHeader x, RowHeader y) { Subj xx = new JHSchool.Evaluation.Subject(x.Subject, x.Domain); Subj yy = new JHSchool.Evaluation.Subject(y.Subject, y.Domain); return xx.CompareTo(yy); }); //sortedHeaders.Sort(Util.SortSubject); //sortedHeaders.Sort(Util.SortDomain); //把學習領域放在正確的地方。 foreach (RowHeader eachHeader in sortedHeaders.ToArray()) { if (IsFlexible(eachHeader.Domain)) { int index = sortedHeaders.IndexOf(eachHeader); sortedHeaders.Insert(index, lheader); break; } } if (sortedHeaders.IndexOf(lheader) < 0) sortedHeaders.Add(lheader); //產生 Row。 List<RowHeader> indexHeaders = new List<RowHeader>(); Row current = template; int rowIndex = 0; foreach (RowHeader header in sortedHeaders) { RowHeader indexH = header; indexH.Index = rowIndex++; indexHeaders.Add(indexH); Row datarow = table.InsertBefore(template.Clone(true), current) as Row; if (header.Domain == LearningDomainName) { string headerName = string.Empty; if (PrintSetting.PrintRank) headerName = "學習領域排名"; if (PrintSetting.PrintRankPercentage) headerName = "學習領域百分比"; if (PrintSetting.PrintRank && PrintSetting.PrintRankPercentage) headerName = "學習領域排名/百分比"; if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { Row lrow = table.InsertAfter(template.Clone(true), datarow) as Row; lrow.Cells[0].Write(builder, headerName); rowIndex++; } } if (IsFlexible(header.Domain)) { datarow.Cells[0].Write(builder, header.Domain); datarow.Cells[1].Write(builder, header.Subject); } else if (header.Domain == LearningDomainName) datarow.Cells[0].Write(builder, header.Domain); else datarow.Cells[0].Write(builder, header.Subject); } //填資料 Row RatingRow = null; foreach (RowHeader header in indexHeaders) { SemesterDataCollection semesters = new SemesterDataCollection(); Row row = table.Rows[header.Index + 3]; foreach (SemesterData semester in student.SHistory.GetGradeYearSemester().GetSemesters(PrintSetting.PrintSemesters)) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); semesters.Add(sysems); if (!student.SemestersScore.Contains(sysems)) continue; if (!student.HeaderList.ContainsKey(sysems)) continue; int columnIndex = student.HeaderList[sysems]; SemesterScore semsscore = student.SemestersScore[sysems]; decimal? score = null; decimal? weight = null; if (header.IsDomain) { if (semsscore.Domain.Contains(header.Domain)) { score = semsscore.Domain[header.Domain].Value; weight = semsscore.Domain[header.Domain].Weight; } } else { if (semsscore.Subject.Contains(header.Subject)) { score = semsscore.Subject[header.Subject].Value; weight = semsscore.Subject[header.Subject].Weight; } } if (header.Domain == LearningDomainName) { score = semsscore.LearnDomainScore; row.Cells[columnIndex * 3 + 2].CellFormat.FitText = false; row.Cells[columnIndex * 3 + 2].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[columnIndex * 3 + 3].CellFormat.HorizontalMerge = CellMerge.Previous; if (!score.HasValue) continue; row.Cells[columnIndex * 3 + 2].Write(builder, ((double)score) + ""); row.Cells[columnIndex * 3 + 4].Write(builder, (Util.GetDegree(score.Value))); if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) RatingRow = row.NextSibling as Row; } else { if (!score.HasValue) continue; if (!weight.HasValue) weight = 0; row.Cells[columnIndex * 3 + 2].Write(builder, ((double)weight) + ""); row.Cells[columnIndex * 3 + 3].Write(builder, ((double)score) + ""); row.Cells[columnIndex * 3 + 4].Write(builder, (Util.GetDegree(score.Value))); } } //算平均... decimal? avgScore = null; if (header.IsDomain) { if (header.Domain == LearningDomainName) { avgScore = student.SemestersScore.AvgLearningDomainScore(semesters); if (!avgScore.HasValue) continue; if (student.CalculationRule == null) avgScore = Math.Round(avgScore.Value, 2, MidpointRounding.AwayFromZero); else avgScore = student.CalculationRule.ParseLearnDomainScore(avgScore.Value); } else { avgScore = student.SemestersScore.AvgDomainScore(semesters, header.Domain); if (!avgScore.HasValue) continue; if (student.CalculationRule == null) avgScore = Math.Round(avgScore.Value, 2, MidpointRounding.AwayFromZero); else avgScore = student.CalculationRule.ParseDomainScore(avgScore.Value); } } else { avgScore = student.SemestersScore.AvgSubjectScore(semesters, header.Subject); if (!avgScore.HasValue) continue; if (student.CalculationRule == null) avgScore = Math.Round(avgScore.Value, 2, MidpointRounding.AwayFromZero); else avgScore = student.CalculationRule.ParseSubjectScore(avgScore.Value); } row.Cells[20].Write(builder, (double)avgScore + ""); row.Cells[21].Write(builder, Util.GetDegree(avgScore.Value)); } if (RatingRow != null) { PlaceCollection places = student.Places.NS("年排名"); foreach (SemesterData semsIndex in student.HeaderList.Keys) { SemesterData raw = student.HeaderList.GetSRaw(semsIndex); if (raw == SemesterData.Empty) continue; string placeKey = SLearningDomainParser.GetSemesterString(raw); Cell datacell = RatingRow.Cells[student.HeaderList[semsIndex] * 3 + 2]; if (places.Contains(placeKey)) datacell.Write(builder, GetPlaceString(places, placeKey)); } if (places.Contains(LearningDomainName)) RatingRow.Cells[20].Write(builder, GetPlaceString(places, LearningDomainName)); } //合併相關欄位。 string previousCellDomain = string.Empty; foreach (RowHeader header in indexHeaders) { Row row = table.Rows[header.Index + 3]; if (header.IsDomain) { if (header.Domain == LearningDomainName) { row.Cells[0].CellFormat.FitText = false; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; if (PrintSetting.PrintRank || PrintSetting.PrintRankPercentage) { Row lrow = row.NextSibling as Row; lrow.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; lrow.Cells[0].CellFormat.FitText = false; lrow.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; Paragraph mp = lrow.Cells[2].Paragraphs[0]; for (int i = 0; i < (3 * 6); i++) { if (i % 3 == 0) { (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; (mp.ParentNode as Cell).CellFormat.FitText = false; } else (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; mp = Util.NextCell(mp as Paragraph); } (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.First; mp = Util.NextCell(mp as Paragraph); (mp.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; } } } else if (IsFlexible(header.Domain)) { if (previousCellDomain == header.Domain) row.Cells[0].CellFormat.VerticalMerge = CellMerge.Previous; else row.Cells[0].CellFormat.VerticalMerge = CellMerge.First; previousCellDomain = header.Domain; } else { //row.Cells[0].CellFormat.FitText = true; row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; } } #endregion } template.NextSibling.Remove(); template.Remove(); #endregion } else if (e.FieldName == "Fix:缺曠獎懲") { #region 列印獎懲資料 int Offset = 2; Row MeritA = builder.CurrentParagraph.ParentNode.ParentNode as Row; Row MeritB = MeritA.NextSibling as Row; Row MeritC = MeritB.NextSibling as Row; Row DemeritA = MeritC.NextSibling as Row; Row DemeritB = DemeritA.NextSibling as Row; Row DemeritC = DemeritB.NextSibling as Row; Row DisciplineSet = DemeritC.NextSibling as Row; Row DisciplineNormal = DisciplineSet.NextSibling as Row; foreach (SemesterData each in student.Summaries.Keys) { XmlElement summary = student.Summaries[each]; if (!student.HeaderList.ContainsKey(each)) continue; int ColumnIndex = student.HeaderList[each]; XmlElement xmlmerit = summary.SelectSingleNode("DisciplineStatistics/Merit") as XmlElement; XmlElement xmldemerit = summary.SelectSingleNode("DisciplineStatistics/Demerit") as XmlElement; if (xmlmerit != null) { if (!string.IsNullOrEmpty(GetString(xmlmerit.GetAttribute("A")))) MeritA.Cells[Offset + ColumnIndex].Write(builder, GetString(xmlmerit.GetAttribute("A"))); if (!string.IsNullOrEmpty(GetString(xmlmerit.GetAttribute("B")))) MeritB.Cells[Offset + ColumnIndex].Write(builder, GetString(xmlmerit.GetAttribute("B"))); if (!string.IsNullOrEmpty(GetString(xmlmerit.GetAttribute("C")))) MeritC.Cells[Offset + ColumnIndex].Write(builder, GetString(xmlmerit.GetAttribute("C"))); } if (xmldemerit != null) { if (!string.IsNullOrEmpty(GetString(xmldemerit.GetAttribute("A")))) DemeritA.Cells[Offset + ColumnIndex].Write(builder, GetString(xmldemerit.GetAttribute("A"))); if (!string.IsNullOrEmpty(GetString(xmldemerit.GetAttribute("B")))) DemeritB.Cells[Offset + ColumnIndex].Write(builder, GetString(xmldemerit.GetAttribute("B"))); if (!string.IsNullOrEmpty(GetString(xmldemerit.GetAttribute("C")))) DemeritC.Cells[Offset + ColumnIndex].Write(builder, GetString(xmldemerit.GetAttribute("C"))); } StringBuilder normalString = new StringBuilder(); StringBuilder setString = new StringBuilder(); foreach (XmlElement absence in summary.SelectNodes("AttendanceStatistics/Absence")) { string count = absence.GetAttribute("Count"); string periodType = absence.GetAttribute("PeriodType"); string periodName = absence.GetAttribute("Name"); if (string.IsNullOrEmpty(count)) continue; if (!PrintAbsences.ContainsKey(periodType)) continue; if (!PrintAbsences[periodType].Contains(periodName)) continue; if (periodType == "一般") { if (normalString.Length > 0) normalString.AppendLine(); normalString.Append(periodName + ":" + count); } else if (periodType == "集會") { if (setString.Length > 0) setString.AppendLine(); setString.Append(periodName + ":" + count); } } DisciplineNormal.Cells[Offset + ColumnIndex].Write(builder, normalString.ToString()); DisciplineSet.Cells[Offset + ColumnIndex].Write(builder, setString.ToString()); } #endregion } }
public void Add(JHSemesterScoreRecord record) { SemesterData semester = new SemesterData("" + record.SchoolYear, "" + record.Semester); //foreach (K12.Data.SubjectScore subject in record.Subjects.Values) //{ //if (!_config.ContainsKey(subject.Domain)) continue; //if (!_config[subject.Domain].Contains(subject.Subject)) continue; //else //{ // if (!_removeDomains.Contains(subject.Domain)) // _removeDomains.Add(subject.Domain); //} // if (!_domains.ContainsKey(subject.Subject)) // _domains.Add(subject.Subject, new DomainText(subject.Subject)); // DomainText text = _domains[subject.Subject]; // text.Add(semester, subject.Text); //} foreach (K12.Data.DomainScore domain in record.Domains.Values) { //if (!_config.ContainsKey(domain.Domain)) continue; //if (_removeDomains.Contains(domain.Domain)) continue; if (!_domains.ContainsKey(domain.Domain)) _domains.Add(domain.Domain, new DomainText(domain.Domain)); DomainText text = _domains[domain.Domain]; text.Add(semester, domain.Text); } }
private void MasterWorker_DoWork(object sender, DoWorkEventArgs e) { StudentScore.SetClassMapping(); // 取得學生類別List // List<K12.Data.StudentTagRecord> StudTagRecList = K12.Data.StudentTag.SelectByStudentIDs(StudentIDs); List<K12.Data.StudentTagRecord> StudTagRecList = K12.Data.StudentTag.SelectAll(); // 過濾不排學生ID List<string> NonStudentIDList = DAL.DALTransfer.GetNonRankStudentIDFromUDTByStudentTag(StudTagRecList, JointAdmissionModule.DAL.DALTransfer.SchoolType.高中); foreach (string id in NonStudentIDList) if (StudentIDs.Contains(id)) StudentIDs.Remove(id); List<ReportStudent> PrintStudents = StudentIDs.ToReportStudent(); if (Preference.PrintRank || Preference.PrintRankPercentage || Preference.FilterRankScope) { #region 如果要排名。 //List<ReportStudent> RatingStudents = Util.GetAllStudents(); List<ReportStudent> RatingStudents = Util.GetStudentsDef(NonStudentIDList); RatingStudents.ToSC().ReadSemesterScore(this); RatingStudents.ToSC().ReadSemesterHistory(this); List<IScoreParser<ReportStudent>> parsers = new List<IScoreParser<ReportStudent>>(); List<SLearningDomainParser> allsems = new List<SLearningDomainParser>(); parsers.Add(new LearningDomainParser(Preference.PrintSemesters)); allsems.Add(new SLearningDomainParser(1, 1)); allsems.Add(new SLearningDomainParser(1, 2)); allsems.Add(new SLearningDomainParser(2, 1)); allsems.Add(new SLearningDomainParser(2, 2)); allsems.Add(new SLearningDomainParser(3, 1)); allsems.Add(new SLearningDomainParser(3, 2)); allsems.Add(new SLearningDomainParser(7, 1)); allsems.Add(new SLearningDomainParser(7, 2)); allsems.Add(new SLearningDomainParser(8, 1)); allsems.Add(new SLearningDomainParser(8, 2)); allsems.Add(new SLearningDomainParser(9, 1)); allsems.Add(new SLearningDomainParser(9, 2)); foreach (SLearningDomainParser each in allsems) parsers.Add(each); // 將學生加入年排名 List<RatingScope<ReportStudent>> scopes = RatingStudents.ToGradeYearScopes(); foreach (RatingScope<ReportStudent> each in scopes) foreach (IScoreParser<ReportStudent> parser in parsers) each.Rank(parser, PlaceOptions.Unsequence); Dictionary<string, StudentScore> DicPrintStudents = PrintStudents.ToSC().ToDictionary(); foreach (ReportStudent each in RatingStudents) { if (DicPrintStudents.ContainsKey(each.Id)) DicPrintStudents[each.Id] = each; //each.Places["學習領域"].Percentage //each.Places["學習領域"].GetPercentage(); //each.Places["學習領域"].Score } // 整理全部學生年排名 DAL.DALTransfer.StudRankScoreDict.Clear(); // 建立Key foreach (RatingScope<ReportStudent> scope in scopes) { DAL.DALTransfer.StudRankScoreDict.Add(scope.Name, new Dictionary<string, List<JointAdmissionModule.DAL.StudRankScore>>()); DAL.DALTransfer.StudRankScoreDict[scope.Name].Add("學期總平均", new List<JointAdmissionModule.DAL.StudRankScore>()); foreach (SLearningDomainParser semsIndex in allsems) DAL.DALTransfer.StudRankScoreDict[scope.Name].Add(semsIndex.Name, new List<JointAdmissionModule.DAL.StudRankScore>()); } foreach (RatingScope<ReportStudent> scope in scopes) { // 學習領域 foreach (ReportStudent stud in (from xx in scope where xx.Places.NS("年排名").Contains("學習領域") select xx).ToList()) { DAL.StudRankScore srs = new JointAdmissionModule.DAL.StudRankScore(); srs.StudentID = stud.StudentID; srs.Place = stud.Places.NS("年排名")["學習領域"]; DAL.DALTransfer.StudRankScoreDict[scope.Name]["學期總平均"].Add(srs); } foreach (SLearningDomainParser semsIndex in allsems) { foreach (ReportStudent stud in (from xx in scope where xx.Places.NS("年排名").Contains(semsIndex.Name) select xx).ToList()) { DAL.StudRankScore srs = new JointAdmissionModule.DAL.StudRankScore(); srs.StudentID = stud.StudentID; srs.Place = stud.Places.NS("年排名")[semsIndex.Name]; DAL.DALTransfer.StudRankScoreDict[scope.Name][semsIndex.Name].Add(srs); } } } //foreach (ReportStudent stud in RatingStudents) //{ //----------------- //foreach (RatingScope<ReportStudent> scope in scopes) //{ // if (!DAL.DALTransfer.StudRankScoreDict.ContainsKey(scope.Name)) // DAL.DALTransfer.StudRankScoreDict.Add(scope.Name, new Dictionary<string, List<DAL.StudRankScore>>()); // foreach (ReportStudent stud in scope) // { // // 學期總平均 // if (stud.Places.NS("年排名").Contains("學習領域")) // { // DAL.StudRankScore srs = new JointAdmissionModule.DAL.StudRankScore(); // srs.StudentID = stud.StudentID; // srs.Place = stud.Places.NS("年排名")["學習領域"]; // if (DAL.DALTransfer.StudRankScoreDict[scope.Name].ContainsKey("學期總平均")) // { // DAL.DALTransfer.StudRankScoreDict[scope.Name]["學期總平均"].Add(srs); // } // else // { // List<DAL.StudRankScore> srsList = new List<JointAdmissionModule.DAL.StudRankScore>(); // srsList.Add(srs); // DAL.DALTransfer.StudRankScoreDict[scope.Name].Add("學期總平均", srsList); // } // } // foreach (SLearningDomainParser semsIndex in allsems) // { // if (stud.Places.NS("年排名").Contains(semsIndex.Name)) // { // DAL.StudRankScore srs = new JointAdmissionModule.DAL.StudRankScore(); // srs.StudentID = stud.StudentID; // srs.Place = stud.Places.NS("年排名")[semsIndex.Name]; // if (DAL.DALTransfer.StudRankScoreDict[scope.Name].ContainsKey(semsIndex.Name)) // { // DAL.DALTransfer.StudRankScoreDict[scope.Name][semsIndex.Name].Add(srs); // } // else // { // List<DAL.StudRankScore> srsList = new List<JointAdmissionModule.DAL.StudRankScore>(); // srsList.Add(srs); // DAL.DALTransfer.StudRankScoreDict[scope.Name].Add(semsIndex.Name, srsList); // } // } // } // } //} //------------------------------------ //} //// 排序對照年排名資料 debug 用 //for (int i = 1; i <= 9; i++) //{ // if (DAL.DALTransfer.StudRankScoreDict.ContainsKey(i.ToString())) // { // string idx = i.ToString(); // foreach (SLearningDomainParser semsIndex in allsems) // { // if (DAL.DALTransfer.StudRankScoreDict[idx].ContainsKey(semsIndex.Name)) // { // var x = from xx in DAL.DALTransfer.StudRankScoreDict[idx][semsIndex.Name] orderby xx.Place.Score descending select xx; // DAL.DALTransfer.StudRankScoreDict[idx][semsIndex.Name] = x.ToList(); // } // } // } //} Workbook wb = new Workbook(); Dictionary<string, ReportStudent> students = RatingStudents.ToDictionary(x => x.Id); int wstCot = 0; // 排序對照年排名資料 debug 用 foreach (RatingScope<ReportStudent> scope in scopes) { if (DAL.DALTransfer.StudRankScoreDict.ContainsKey(scope.Name)) { string idx = scope.Name; string AvggName = "學期總平均"; if (DAL.DALTransfer.StudRankScoreDict[idx].ContainsKey(AvggName)) { int row = 1; wb.Worksheets.Add(); wb.Worksheets[wstCot].Name = idx + AvggName; wb.Worksheets[wstCot].Cells[0, 0].PutValue("成績"); wb.Worksheets[wstCot].Cells[0, 1].PutValue("年排名"); wb.Worksheets[wstCot].Cells[0, 2].PutValue("分類"); wb.Worksheets[wstCot].Cells[0, 3].PutValue("年級"); wb.Worksheets[wstCot].Cells[0, 4].PutValue("SID"); wb.Worksheets[wstCot].Cells[0, 5].PutValue("StudCount"); foreach (JointAdmissionModule.DAL.StudRankScore xx in DAL.DALTransfer.StudRankScoreDict[idx][AvggName].OrderByDescending(x => x.Place.Score)) { wb.Worksheets[wstCot].Cells[row, 0].PutValue(xx.Place.Score); wb.Worksheets[wstCot].Cells[row, 1].PutValue(xx.Place.Percentage); wb.Worksheets[wstCot].Cells[row, 2].PutValue(AvggName); wb.Worksheets[wstCot].Cells[row, 3].PutValue(idx); wb.Worksheets[wstCot].Cells[row, 4].PutValue(xx.StudentID); wb.Worksheets[wstCot].Cells[row, 5].PutValue(xx.Place.Radix); wb.Worksheets[wstCot].Cells[row, 6].PutValue(students[xx.StudentID].GradeYear); row++; } wstCot++; } foreach (SLearningDomainParser semsIndex in allsems) { int row = 1; wb.Worksheets.Add(); wb.Worksheets[wstCot].Name = idx + semsIndex.Name.Replace(":", "-"); wb.Worksheets[wstCot].Cells[0, 0].PutValue("成績"); wb.Worksheets[wstCot].Cells[0, 1].PutValue("年排名"); wb.Worksheets[wstCot].Cells[0, 2].PutValue("分類"); wb.Worksheets[wstCot].Cells[0, 3].PutValue("年級"); wb.Worksheets[wstCot].Cells[0, 4].PutValue("SID"); wb.Worksheets[wstCot].Cells[0, 5].PutValue("StudCount"); if (DAL.DALTransfer.StudRankScoreDict[idx].ContainsKey(semsIndex.Name)) { foreach (JointAdmissionModule.DAL.StudRankScore xx in DAL.DALTransfer.StudRankScoreDict[idx][semsIndex.Name].OrderByDescending(x => x.Place.Score)) { wb.Worksheets[wstCot].Cells[row, 0].PutValue(xx.Place.Score); wb.Worksheets[wstCot].Cells[row, 1].PutValue(xx.Place.Percentage); wb.Worksheets[wstCot].Cells[row, 2].PutValue(semsIndex.Name); wb.Worksheets[wstCot].Cells[row, 3].PutValue(semsIndex.Grade); wb.Worksheets[wstCot].Cells[row, 4].PutValue(xx.StudentID); wb.Worksheets[wstCot].Cells[row, 5].PutValue(xx.Place.Radix); wb.Worksheets[wstCot].Cells[row, 6].PutValue(students[xx.StudentID].GradeYear); row++; } } wstCot++; } } } for (int i = 0; i < wb.Worksheets.Count; i++) { if (wb.Worksheets[i].Cells.MaxDataRow < 2) wb.Worksheets.RemoveAt(i); } try { wb.Save(Application.StartupPath + "\\樂學成績debug.xls", FileFormatType.Excel2003); // System.Diagnostics.Process.Start(Application.StartupPath + "\\樂學成績debug.xls"); } catch (Exception ex) { } if (Preference.FilterRankScope) { List<ReportStudent> filteredStudent = new List<ReportStudent>(); foreach (ReportStudent each in DicPrintStudents.Values.ToSS()) { //看是否有「學習領域」的年排名。 if (each.Places.NS("年排名").Contains(LearningDomainParser.PlaceName)) { Place place = each.Places.NS("年排名")[LearningDomainParser.PlaceName]; if (place.Level >= Preference.RankStart && place.Level <= Preference.RankEnd) filteredStudent.Add(each); } PrintStudents = filteredStudent; } } else PrintStudents = new List<ReportStudent>(DicPrintStudents.Values.ToSS()); #endregion } else { PrintStudents.ToSC().ReadSemesterScore(this); PrintStudents.ToSC().ReadSemesterHistory(this); } List<StudentScore> CalcStudents; if (PrintStudents.Count <= 0) { Feedback("", -1); //把 Status bar Reset... throw new ArgumentException("沒有任何學生資料可列印。"); } else { CalcStudents = PrintStudents.ToSC(); CalcStudents.ReadCalculationRule(this); //讀取成績計算規則。 #region 讀取缺曠獎懲。 //List<JHMoralScoreRecord> jhmorals = JHSchool.Data.JHMoralScore.SelectByStudentIDs(StudentIDs); List<AutoSummaryRecord> jhsummary = AutoSummary.Select(StudentIDs, null); Dictionary<string, ReportStudent> DicStudents = PrintStudents.ToDictionary(); //foreach (JHMoralScoreRecord each in jhmorals) foreach (AutoSummaryRecord each in jhsummary) { if (!DicStudents.ContainsKey(each.RefStudentID)) continue; SemesterData semester = new SemesterData(0, each.SchoolYear, each.Semester); ReportStudent student = DicStudents[each.RefStudentID]; if (!student.Summaries.ContainsKey(semester)) student.Summaries.Add(semester, each.AutoSummary); } #endregion PrintStudents.ReadUpdateRecordDate(this); e.Result = new Report(PrintStudents, Preference).Print(); Feedback("列印完成", -1); } }
internal void Add(SemesterData semester, string text) { if (!_texts.ContainsKey(semester)) _texts.Add(semester, string.Empty); if (!string.IsNullOrEmpty(text)) { text = text.Replace('>', ':').Replace('<', ','); if (text.StartsWith(",")) text = text.Substring(1); _texts[semester] = text; } }
//最好這程式有人能維護的了....... private void MailMerge_MergeField(object sender, MergeFieldEventArgs e) { //不是 Fix 開頭的合併欄位不處理。 if (!e.FieldName.ToUpper().StartsWith("Fix".ToUpper())) return; DocumentBuilder builder = new DocumentBuilder(e.Document); ReportStudent student = e.FieldValue as ReportStudent; //如果合併值不是 ReportStudent 就跳過...意思是有問題...。 if (student == null) return; builder.MoveToField(e.Field, true); e.Field.Remove(); if (e.FieldName == "Fix:科目資訊") { #region 列印年級學期資訊(有點複雜)。 SemesterDataCollection semses = student.SHistory.GetGradeYearSemester(); //Row SemesterRow = builder.CurrentParagraph.ParentNode.ParentNode.NextSibling as Row; //下一個 Row。 //Paragraph originParagraph = builder.CurrentParagraph; int count = 0;//, offset = 1; foreach (SemesterData each in semses) { //string currentGradeyear = Util.GetGradeyearString(each.GradeYear.ToString()); ////如果沒有年級,就跳過。 //if (string.IsNullOrEmpty(currentGradeyear)) continue; //builder.Write(currentGradeyear + "年級"); Paragraph nextPh = Util.NextCell(builder.CurrentParagraph); if (nextPh == null) break; //沒有下一個 Cell ,就不印資料了。 builder.MoveTo(nextPh); //Paragraph resetParagraph = builder.CurrentParagraph; //SemesterRow.Cells[count + offset].Write(builder, GetSemesterString(each)); SemesterData semester = new SemesterData(0, each.SchoolYear, each.Semester); if (!student.HeaderList.ContainsKey(semester)) student.HeaderList.AddRaw(each, count); //不要懷疑,這是對的。 //builder.MoveTo(resetParagraph); count++; } //builder.MoveTo(originParagraph); //Paragraph nextParagrap = originParagraph; //string previousGradeyear = GetText(originParagraph); //while ((nextParagrap = Util.NextCell(nextParagrap)) != null) //{ // if (GetText(nextParagrap) == previousGradeyear) // (nextParagrap.ParentNode as Cell).CellFormat.HorizontalMerge = CellMerge.Previous; // previousGradeyear = GetText(nextParagrap); //} #endregion #region 列印科目資料(爆炸複雜) Row template = builder.CurrentParagraph.ParentNode.ParentNode as Row; Table table = template.ParentNode as Table; if (PrintSetting.ListMethod == ListMethod.DomainOnly) PrintDomainOnly(builder, student, template, table); else PrintSubjectOnly(builder, student, template, table); //設定表格下方線寬。 double borderWidth = (template.NextSibling as Row).Cells[0].CellFormat.Borders.Bottom.LineWidth; foreach (Cell each in (template.PreviousSibling as Row).Cells) each.CellFormat.Borders.Bottom.LineWidth = borderWidth; template.NextSibling.Remove(); template.Remove(); #endregion } if (e.FieldName == "Fix:照片") { if (student.GraduatePhoto != null) { Shape photo = builder.InsertImage(student.GraduatePhoto); Cell cell = builder.CurrentParagraph.ParentNode as Cell; Row row = cell.ParentRow; double rectHeight = row.RowFormat.Height, rectWidth = cell.CellFormat.Width; double heightRate = (rectHeight / photo.Height); double widthRate = (rectWidth / photo.Width); double rate = 0; if (heightRate < widthRate) rate = heightRate; else rate = widthRate; photo.Width = photo.Width * rate; photo.Height = photo.Height * rate; } } }
public bool Add(SemesterData semester, string text) { if (!_items.ContainsKey(semester)) { _items.Add(semester, text); return true; } else return false; }
private void InitButton(SemesterData sems, MenuButton button) { button.Tag = sems; button.AutoCheckOnClick = true; button.AutoCollapseOnClick = true; button.Visible = true; if (InitedSet.Contains(sems)) return; button.Click += Button_Click; InitedSet.Add(sems); }
public bool Add(SemesterData semester, K12.Data.SubjectScore subject) { if (!_subjectScores.ContainsKey(subject.Subject)) _subjectScores.Add(subject.Subject, new Dictionary<SemesterData, ScoreData>()); if (!_subjectScores[subject.Subject].ContainsKey(semester)) { _subjectScores[subject.Subject].Add(semester, new ScoreData("" + subject.Period, "" + subject.Credit, "" + subject.Score)); return true; } return false; }
private void PrintSubjectOnly(DocumentBuilder builder, ReportStudent student, Row template, Table table) { #region 列印科目 UniqueSet<RowHeader> RowIndexs = new UniqueSet<RowHeader>(); #region 列印 RowHeader Dictionary<string, string> subjToDomain = new Dictionary<string, string>(); foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); if (!student.SemestersScore.Contains(sysems)) continue; SemesterScore semsscore = student.SemestersScore[sysems]; foreach (string strSubject in semsscore.Subject) { SemesterSubjectScore subject = semsscore.Subject[strSubject]; if (!subjToDomain.ContainsKey(strSubject)) subjToDomain.Add(strSubject, subject.Domain); RowHeader header = new RowHeader(subjToDomain[strSubject], strSubject); header.IsDomain = false; if (!RowIndexs.Contains(header)) RowIndexs.Add(header); } } List<RowHeader> sortedHeaders = RowIndexs.ToList(); sortedHeaders.Sort(delegate(RowHeader x, RowHeader y) { Subj xx = new JHSchool.Evaluation.Subject(x.Subject, x.Domain); Subj yy = new JHSchool.Evaluation.Subject(y.Subject, y.Domain); return xx.CompareTo(yy); }); //產生 Row。 List<RowHeader> indexHeaders = new List<RowHeader>(); Row current = template; int rowIndex = 0; foreach (RowHeader header in sortedHeaders) { RowHeader indexH = header; indexH.Index = rowIndex++; indexHeaders.Add(indexH); Row datarow = table.InsertBefore(template.Clone(true), current) as Row; string gn = ""; //Additional Classes string subjCName = header.Subject; string subjEName = Subj.GetSubjectEnglish(header.Subject); string subjString = header.Subject + (string.IsNullOrEmpty(subjEName) ? "" : " " + subjEName); datarow.Cells[0].Write(builder, subjString); //if (IsFlexible(header.Domain)) //{ // gn = "彈性課程\nAdditional Classes"; // //把空白的領域當成「彈性課程」。 // datarow.Cells[0].Write(builder, gn); // datarow.Cells[1].Write(builder, subjString); //} //else //{ //} } #endregion #region 填資料 //填資料 foreach (RowHeader header in indexHeaders) { SemesterDataCollection semesters = new SemesterDataCollection(); Row row = table.Rows[header.Index + DataRowOffset]; foreach (SemesterData semester in student.SHistory.GetGradeYearSemester()) { SemesterData sysems = new SemesterData(0, semester.SchoolYear, semester.Semester); semesters.Add(sysems); if (!student.SemestersScore.Contains(sysems)) continue; if (!student.HeaderList.ContainsKey(sysems)) continue; int columnIndex = student.HeaderList[sysems]; SemesterScore semsscore = student.SemestersScore[sysems]; decimal? score = null; decimal? weight = null; //if (header.IsDomain) //{ // if (semsscore.Domain.Contains(header.Domain)) // { // score = semsscore.Domain[header.Domain].Value; // weight = semsscore.Domain[header.Domain].Weight; // } //} //else //{ if (semsscore.Subject.Contains(header.Subject)) { score = semsscore.Subject[header.Subject].Value; weight = semsscore.Subject[header.Subject].Weight; } //} if (!score.HasValue) continue; if (!weight.HasValue) weight = 0; if (PrintScore) row.Cells[columnIndex + 2].Write(builder, score.Value + ""); else row.Cells[columnIndex + 2].Write(builder, Util.GetDegreeEnglish(score.Value)); } } #endregion #region 合併相關欄位。 string previousCellDomain = string.Empty; foreach (RowHeader header in indexHeaders) { Row row = table.Rows[header.Index + DataRowOffset]; //if (IsFlexible(header.Domain)) //{ // if (previousCellDomain == row.Cells[0].ToTxt()) // row.Cells[0].CellFormat.VerticalMerge = CellMerge.Previous; // else // row.Cells[0].CellFormat.VerticalMerge = CellMerge.First; //} //else { row.Cells[0].CellFormat.HorizontalMerge = CellMerge.First; row.Cells[1].CellFormat.HorizontalMerge = CellMerge.Previous; } previousCellDomain = row.Cells[0].ToTxt(); } #endregion #endregion }
private static string GetSemesterString(SemesterData each) { return string.Format("{0} {1}", each.SchoolYear.ToString(), each.Semester == 1 ? "上" : "下"); }