public frmAssignedSurvy_SingleForm(UDT.AssignedSurvey AssignedSurvey, CourseRecord Course, TeacherRecord Teacher, string CaseName)
 {
     InitializeComponent();
     this.AssignedSurvey = AssignedSurvey;
     this.Course = Course;
     this.Teacher = Teacher;
     this.CaseName = CaseName;
     Access = new AccessHelper();
     this.ErrorProvider = new ErrorProvider();
     this.Load += new EventHandler(frmAssignedSurvy_SingleForm_Load);
 }
 internal CourseRecordEditor(CourseRecord record)
 {
     Remove = false;
     Course = record;
     ID = Course.ID;
     Name = Course.Name;
     SchoolYear = Course.SchoolYear;
     Semester = Course.Semester;
     Subject = Course.Subject;
     Domain = Course.Domain;
     Period = Course.Period;
     Credit = Course.Credit;
     RefClassID = Course.RefClassID;
     RefAssessmentSetupID = Course.RefAssessmentSetupID;
     CalculationFlag = Course.CalculationFlag;
 }
Esempio n. 3
0
        private void AddAddend(StudentRecord student)
        {
            // 檢查是否要加入
            bool CheckAdd = true;

            foreach (ListViewItem lvi in lvStudents.Items)
            {
                AttendInfo ai = lvi as AttendInfo;
                // 表示學生已經加入
                if (ai.RefStudentID == student.ID)
                {
                    CheckAdd = false;
                    break;
                }
            }

            if (CheckAdd)
            {
                AttendInfo   newItem = new AttendInfo(student);
                CourseRecord info    = Course.Instance.Items[RunningID];
                //GraduationPlanSubject subject = student.GraduationPlanInfo.GetSubjectInfo(
                //    info.Subject,
                //    info.SubjectLevel
                //    );

                //if (subject.Required == "必修")
                //    newItem.IsRequired = "必";
                //if (subject.Required == "選修")
                //    newItem.IsRequired = "選";
                //newItem.RequiredBy = subject.RequiredBy;


                lvStudents.Items.Add(newItem);
                newItem.EnsureVisible();
                OnValueChanged("IsDirty", "True");
                label2.Text = lvStudents.Items.Count.ToString();
            }
        }
 /// <summary>
 /// 設定課程的第三位教師。
 /// </summary>
 /// <param name="teacher">設定成 Null 即為移除教師。</param>
 public static TCInstructRecordEditor SetThirdTeacher(this CourseRecord course, TeacherRecord teacher)
 {
     return(SetTeacher(course, teacher, "3"));
 }
        private void Students_listBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            this.errMsg_textBox.Text = "Select Student and Grade";
            Grade_comboBox.Text = "";

            Student student = students[Students_listBox.SelectedIndex];
            cr = student.GetTranscript().GetCourseRecordBySectionID(section.GetID());

            Grade_comboBox.Text = cr.GetGrade().ToString();
        }
        private void Semesters_listBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Sections_listBox.Items.Clear();
            Students_listBox.Items.Clear();
            Grades_listBox.Items.Clear();
            this.errMsg_textBox.Text = "Select Student and Grade";
            Grade_comboBox.SelectedItem = Grade_comboBox.Items[0];
            students = null; section = null; cr = null;

            Semester sem = semesters[Semesters_listBox.SelectedIndex];
            sections = University.Instance.GetSectionsByEmployeeUserIDAndSemester(employee.GetID(), sem);
            foreach (Section s in sections)
            {
                String sectionString = s.GetCourse().GetDepartment() + " ";
                sectionString += s.GetCourse().GetNumber() + " - ";
                sectionString += s.GetNumber().ToString().PadLeft(3, '0');
                Sections_listBox.Items.Add(sectionString);
            }
        }
        private void Sections_listBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Students_listBox.Items.Clear();
            Grades_listBox.Items.Clear();
            this.errMsg_textBox.Text = "Select Student and Grade";
            Grade_comboBox.SelectedItem = Grade_comboBox.Items[0];
            cr = null;

            section = sections[Sections_listBox.SelectedIndex];
            students = section.GetStudents();

            LoadStudentsAndGrades();
        }
Esempio n. 8
0
        private void item_click(object sender, EventArgs e)
        {
            ButtonItem item = sender as ButtonItem;

            _targetCourse = item.Tag as CourseRecord;
        }
 public GettingLectureTeacherEventArgs(AccessHelper accessHelper, CourseRecord course)
 {
     _AccessHelper = accessHelper;
     _Course       = course;
 }
Esempio n. 10
0
        private void LoadItems()
        {
            dgv.Rows.Clear();

            _initialized = false;

            if (Type.Equals("Exam"))
            {
                if (Category.Equals("Subject"))
                {
                    #region 讀取評量成績科目
                    List <string>            studentIDs   = _students.AsKeyList();
                    Dictionary <string, int> courseCount  = new Dictionary <string, int>();
                    Dictionary <string, int> subjectCount = new Dictionary <string, int>();
                    Dictionary <string, int> courseCredit = new Dictionary <string, int>();

                    foreach (Data.JHSCAttendRecord record in _scattends)
                    {
                        CourseRecord course = Course.Instance.Items[record.RefCourseID];

                        if ("" + course.SchoolYear != cboSchoolYear.Text)
                        {
                            continue;
                        }
                        if ("" + course.Semester != cboSemester.Text)
                        {
                            continue;
                        }

                        if (!courseCount.ContainsKey(record.RefCourseID))
                        {
                            courseCount.Add(record.RefCourseID, 0);
                        }
                        courseCount[record.RefCourseID]++;

                        if (!courseCredit.ContainsKey(course.Subject))
                        {
                            int credit;

                            courseCredit.Add(course.Subject, 1);

                            if (int.TryParse(course.Credit, out credit))
                            {
                                courseCredit[course.Subject] = credit;
                            }
                        }

                        if (!subjectCount.ContainsKey(course.Subject))
                        {
                            subjectCount.Add(course.Subject, 0);
                        }
                        subjectCount[course.Subject]++;
                    }

                    Dictionary <string, DataGridViewRow> rows = new Dictionary <string, DataGridViewRow>();
                    foreach (string course_id in courseCount.Keys)
                    {
                        CourseRecord course = Course.Instance.Items[course_id];

                        if ("" + course.SchoolYear != cboSchoolYear.Text)
                        {
                            continue;
                        }
                        if ("" + course.Semester != cboSemester.Text)
                        {
                            continue;
                        }

                        _courses.Add(course);

                        string subject = course.Subject;
                        if (!rows.ContainsKey(subject))
                        {
                            DataGridViewRow row = new DataGridViewRow();
                            row.CreateCells(dgv, false, courseCredit[subject], subject, subjectCount[subject]);
                            dgv.Rows.Add(row);
                            rows.Add(subject, row);
                        }
                    }
                    #endregion
                }
            }

            _initialized = true;
        }
Esempio n. 11
0
 public CourseTagRecordEditor(CourseRecord course, TagRecord record)
 {
     CourseTagRecord = null;
     RefEntityID     = course.ID;
     RefTagID        = record.ID;
 }
Esempio n. 12
0
        private CourseRecord GetCourseRecord(CourseRecordService courseRecordService)
        {
            if (CurrentPerson == null)
            {
                return(null);
            }

            var           rockContext   = courseRecordService.Context as RockContext;
            var           courseId      = PageParameter(PageParameterKey.CourseId).AsInteger();
            var           slug          = PageParameter(PageParameterKey.Slug);
            CourseService courseService = new CourseService(rockContext);
            var           course        = courseService.Queryable().Where(c => c.Slug == slug).FirstOrDefault();


            if (course == null)
            {
                course = courseService.Get(courseId);
            }

            if (course == null || !course.PersonCanView(CurrentPerson))
            {
                return(null);
            }

            var currentPersonAliasIds = CurrentPerson.Aliases.Select(a => a.Id).ToList();

            var courseRecord = courseRecordService.Queryable()
                               .Where(cr => cr.CourseId == course.Id)                         //this course
                               .Where(cr => currentPersonAliasIds.Contains(cr.PersonAliasId)) //for this person
                               .Where(cr => cr.CompletionDateTime == null)                    //not complete
                               .FirstOrDefault();

            if (courseRecord == null)
            {
                courseRecord = new CourseRecord
                {
                    CourseId      = course.Id,
                    PersonAliasId = CurrentPersonAliasId.Value
                };
                courseRecordService.Add(courseRecord);
                rockContext.SaveChanges();
            }

            if (course.ExternalCourseUrl.IsNotNullOrWhiteSpace())
            {
                if (PageParameter(PageParameterKey.Complete).IsNotNullOrWhiteSpace() && Request.UrlReferrer != null)
                {
                    //This course is external and it has come back to completion.
                    courseRecord.CompletionDateTime = Rock.RockDateTime.Now;
                    courseRecord.Passed             = true;
                    rockContext.SaveChanges();
                }
                else //This course is external and we must redirect!
                {
                    if (course.IsAuthorized(Rock.Security.Authorization.EDIT, CurrentPerson))
                    {
                        externalRedirectDebug = course.ExternalCourseUrl;
                        return(null);
                    }
                    else
                    {
                        Response.Redirect(course.ExternalCourseUrl, true);
                    }
                }
            }
            return(courseRecord);
        }
Esempio n. 13
0
 public static CourseRecordEditor GetEditor(this CourseRecord record)
 {
     return(new CourseRecordEditor(record));
 }
        private void CalcWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            bool error = false;

            List <StudentRecord> students    = _students;
            List <string>        student_ids = new List <string>();

            foreach (StudentRecord each in students)
            {
                student_ids.Add(each.ID);
            }
            double total = students.Count;
            double count = 0;

            #region 寫入學期歷程
            if (_studentHistoryDict != null && _studentHistoryDict.Count > 0)
            {
                try
                {
                    List <JHSchool.Data.JHSemesterHistoryRecord> list = new List <JHSchool.Data.JHSemesterHistoryRecord>();
                    int    size   = 50;
                    double count2 = 0;
                    double total2 = _studentHistoryDict.Count;
                    foreach (JHSchool.Data.JHSemesterHistoryRecord record in _studentHistoryDict.Values)
                    {
                        if (_calc_worker.CancellationPending)
                        {
                            return;
                        }

                        list.Add(record);
                        count2++;
                        if (list.Count == size)
                        {
                            JHSchool.Data.JHSemesterHistory.Update(list);
                            list.Clear();
                            _calc_worker.ReportProgress((int)(count2 * 100 / total2), "寫入學期歷程中…");
                        }
                    }
                    if (list.Count > 0)
                    {
                        JHSchool.Data.JHSemesterHistory.Update(list);
                        list.Clear();
                        _calc_worker.ReportProgress(100, "學期歷程寫入完成");
                    }
                }
                catch (Exception ex)
                {
                    MsgBox.Show("寫入學期歷程失敗。" + ex.Message);
                    e.Result = null;
                    return;
                }
            }
            #endregion

            #region 計算課程成績

            _viewer.Clear();
            _viewer.SetHeader("課程");

            _calc_worker.ReportProgress(0, "計算課程成績…");

            if (_calc_worker.CancellationPending)
            {
                return;
            }
            _raw_data = new CourseDataLoader();
            _raw_data.LoadCalculationData(this, _students, intSchoolYear.Value, intSemester.Value);

            foreach (CW.Course course in _raw_data.Courses.Values)
            {
                if (string.IsNullOrEmpty(course.ExamTemplateId) && course.ExamRequired)
                {
                    _viewer.SetMessage(course.CourseName, new List <string>(new string[] { "缺少評量設定" }));
                    error = true;
                }
            }

            if (error)
            {
                e.Result = error;
                return;
            }

            _viewer.Clear();
            if (_calc_worker.CancellationPending)
            {
                return;
            }
            CourseScoreCalculate calculate = new CourseScoreCalculate(_raw_data.Courses);
            calculate.Calculate();

            foreach (CW.Course course in _raw_data.Courses.Values)
            {
                Dictionary <string, string> examLacks       = new Dictionary <string, string>();
                Dictionary <string, int>    examScoreLacks  = new Dictionary <string, int>();
                Dictionary <string, int>    examEffortLacks = new Dictionary <string, int>();

                List <CW.SCAttend> scattends         = new List <CW.SCAttend>();
                List <CW.SCAttend> no_exam_scattends = new List <CW.SCAttend>();
                foreach (CW.SCAttend scattend in course.SCAttends.Values)
                {
                    if (student_ids.Contains(scattend.StudentIdentity))
                    {
                        if (scattend.ContainsLack)
                        {
                            scattends.Add(scattend);
                        }
                        if (scattend.NoExam)
                        {
                            no_exam_scattends.Add(scattend);
                        }
                    }
                }

                foreach (CW.SCAttend scattend in scattends)
                {
                    foreach (string exam in scattend.ScoreLack)
                    {
                        if (!examLacks.ContainsKey(exam))
                        {
                            examLacks.Add(exam, "");
                        }

                        if (!examScoreLacks.ContainsKey(exam))
                        {
                            examScoreLacks.Add(exam, 0);
                        }
                        examScoreLacks[exam]++;
                    }

                    foreach (string exam in scattend.EffortLack)
                    {
                        if (!examLacks.ContainsKey(exam))
                        {
                            examLacks.Add(exam, "");
                        }

                        if (!examEffortLacks.ContainsKey(exam))
                        {
                            examEffortLacks.Add(exam, 0);
                        }
                        examEffortLacks[exam]++;
                    }
                }

                if (scattends.Count > 0)
                {
                    List <string> msgs = new List <string>();
                    foreach (string exam in new List <string>(examLacks.Keys))
                    {
                        if (examScoreLacks.ContainsKey(exam))
                        {
                            examLacks[exam] += "有" + examScoreLacks[exam] + "位學生缺少分數評量,";
                        }
                        if (examEffortLacks.ContainsKey(exam))
                        {
                            examLacks[exam] += "有" + examEffortLacks[exam] + "位學生缺少努力程度,";
                        }
                        if (!string.IsNullOrEmpty(examLacks[exam]))
                        {
                            examLacks[exam] = examLacks[exam].Substring(0, examLacks[exam].Length - 1);
                        }

                        msgs.Add(exam + ":" + examLacks[exam]);
                    }
                    _viewer.SetMessage(course.CourseName, msgs);
                    error = true;
                }

                if (no_exam_scattends.Count > 0)
                {
                    _viewer.SetMessage(course.CourseName, new List <string>(new string[] { "沒有設定各次評量" }));
                    error = true;
                }
            }

            if (error)
            {
                e.Result = true;
                return;
            }

            if (_calc_worker.CancellationPending)
            {
                return;
            }
            CourseScoreUpdater updater = new CourseScoreUpdater(_raw_data.Courses, this, false);
            updater.UpdateToServer();
            #endregion

            #region 計算學期成績

            //List<SemesterScoreRecordEditor> editors = new List<SemesterScoreRecordEditor>();
            List <JHSemesterScoreRecord> semesterScoreRecordList = new List <JHSchool.Data.JHSemesterScoreRecord>();

            JHSchool.Evaluation.SCAttend.Instance.SyncAllBackground();

            Dictionary <string, List <JHSemesterScoreRecord> > studentSemesterScoreCache = new Dictionary <string, List <JHSchool.Data.JHSemesterScoreRecord> >();
            foreach (JHSemesterScoreRecord record in JHSemesterScore.SelectByStudentIDs(students.AsKeyList()))
            {
                if (!studentSemesterScoreCache.ContainsKey(record.RefStudentID))
                {
                    studentSemesterScoreCache.Add(record.RefStudentID, new List <JHSchool.Data.JHSemesterScoreRecord>());
                }
                studentSemesterScoreCache[record.RefStudentID].Add(record);
            }

            count = 0;
            foreach (StudentRecord each in students)
            {
                count++;

                ScoreCalcRuleRecord   old       = GetScoreCalcRuleRecord(each);
                JHScoreCalcRuleRecord dalrecord = null;
                if (old != null)
                {
                    List <JHScoreCalcRuleRecord> list = JHScoreCalcRule.SelectByIDs(new string[] { old.ID });
                    if (list.Count > 0)
                    {
                        dalrecord = list[0];
                    }
                }
                ScoreCalculator calculator = new ScoreCalculator(dalrecord);

                List <SCAttendRecord> scattends = new List <SCAttendRecord>();
                foreach (SCAttendRecord scattend in JHSchool.Evaluation.SCAttend.Instance.GetStudentAttend(each.ID))
                {
                    CourseRecord course = scattend.Course;
                    if (course.SchoolYear == intSchoolYear.Value &&
                        course.Semester == intSemester.Value &&
                        !string.IsNullOrEmpty(course.RefAssessmentSetupID) &&
                        course.CalculationFlag == "1"
                        )
                    {
                        scattends.Add(scattend);
                    }
                }

                if (scattends.Count > 0)
                {
                    List <K12.Data.SubjectScore> subjectScores = _inner_calculator.CalculateSubjectScore(scattends);
                    foreach (K12.Data.SubjectScore subject in subjectScores)
                    {
                        subject.Score = calculator.ParseSubjectScore((decimal)subject.Score);
                    }
                    List <K12.Data.DomainScore> domainScores = _inner_calculator.CalculateDomainScore(subjectScores);
                    foreach (K12.Data.DomainScore domain in domainScores)
                    {
                        domain.Score = calculator.ParseDomainScore((decimal)domain.Score);
                    }

                    List <K12.Data.DomainScore> domainListWithoutElastic = new List <K12.Data.DomainScore>();
                    bool hasElasticCourse = false;
                    foreach (K12.Data.DomainScore domain in domainScores)
                    {
                        if (domain.Domain == "彈性課程")
                        {
                            hasElasticCourse = true;
                        }
                        else
                        {
                            domainListWithoutElastic.Add(domain);
                        }
                    }

                    decimal?learnDomainScore = calculator.ParseLearnDomainScore(_inner_calculator.CalculateTotalDomainScore(domainListWithoutElastic));
                    decimal?courseLearnScore = null;
                    if (hasElasticCourse)
                    {
                        courseLearnScore = calculator.ParseLearnDomainScore(_inner_calculator.CalculateTotalDomainScore(domainScores));
                    }

                    JHSemesterScoreRecord current = null;
                    if (studentSemesterScoreCache.ContainsKey(each.ID))
                    {
                        foreach (JHSemesterScoreRecord record in studentSemesterScoreCache[each.ID])
                        {
                            if (record.SchoolYear == intSchoolYear.Value && record.Semester == intSemester.Value)
                            {
                                current = record;
                            }
                        }
                    }

                    if (current != null)
                    {
                        //editor = current.GetEditor();
                        current.Subjects = new Dictionary <string, K12.Data.SubjectScore>();
                        current.Domains  = new Dictionary <string, K12.Data.DomainScore>();
                    }
                    else
                    {
                        //current = new SemesterScoreRecordEditor(each, intSchoolYear.Value, intSemester.Value, _gradeYears[each.ID]);
                        current = new JHSchool.Data.JHSemesterScoreRecord();
                        current.RefStudentID = each.ID;
                        current.SchoolYear   = intSchoolYear.Value;
                        current.Semester     = intSemester.Value;
                    }

                    foreach (K12.Data.SubjectScore subject in subjectScores)
                    {
                        current.Subjects.Add(subject.Subject, subject);
                    }
                    foreach (K12.Data.DomainScore domain in domainScores)
                    {
                        current.Domains.Add(domain.Domain, domain);
                    }
                    current.LearnDomainScore = learnDomainScore;
                    current.CourseLearnScore = courseLearnScore;

                    //editors.Add(editor);
                    semesterScoreRecordList.Add(current);
                }

                _calc_worker.ReportProgress((int)((double)count * 100 / (double)total), "計算學期成績…");
            }

            e.Result = semesterScoreRecordList;
            #endregion
        }
Esempio n. 15
0
    /// <summary>
    /// Generate Search criteria from the keywords
    /// </summary>
    /// <returns>Search query where condition</returns>
    private string buildSearchCriteria()
    {
        CourseRecord oCourseRecord = (CourseRecord)Session[LACESConstant.SessionKeys.COURSE_RECORD_OBJ];

        string searchQuery = "";

        if (oCourseRecord.ASLANumber != "")
        {
            searchQuery += "ASLAMemberNumber LIKE '" + oCourseRecord.ASLANumber + "%'";
        }

        if (oCourseRecord.CLARBNumber != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "CLARBNumber LIKE '" + oCourseRecord.CLARBNumber + "%'";
        }
        if (oCourseRecord.CSLANumber != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "CSLANumber LIKE '" + oCourseRecord.CSLANumber + "%'";
        }
        if (oCourseRecord.FirstName != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "FirstName LIKE '" + oCourseRecord.FirstName + "%'";
        }
        if (oCourseRecord.FLNumber != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "FloridaStateNumber LIKE '" + oCourseRecord.FLNumber + "%'";
        }
        if (oCourseRecord.LastName != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "LastName LIKE '" + oCourseRecord.LastName + "%'";
        }
        if (oCourseRecord.MiddleInitial != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "MiddleInitial LIKE '" + oCourseRecord.MiddleInitial + "%'";
        }
        if (oCourseRecord.Email != "")
        {
            if (searchQuery != "")
            {
                searchQuery += " AND ";
            }
            searchQuery += "Email LIKE '" + oCourseRecord.Email + "%'";
        }

        ///For blank search
        if (searchQuery == "")
        {
            searchQuery = " 1 = 1 ";
        }

        return(searchQuery);
    }
Esempio n. 16
0
        public static void Main()
        {
            //診斷模式不要執行 UDM 更新。
            if (!RTContext.IsDiagMode)
            {
                ServerModule.AutoManaged("http://module.ischool.com.tw/module/137815/School_IBSH/udm.xml");
            }

            // 課程加入教師檢視
            Course.Instance.AddView(new TeacherCategoryView());

            //Sync UDT Table
            AccessHelper a = new AccessHelper();

            a.Select <ConductRecord>("uid is null");
            a.Select <CourseExtendRecord>("uid is null");
            a.Select <ConductSetting>("uid is null");
            a.Select <SubjectRecord>("uid is null");
            a.Select <GpaRef>("uid is null");

            #region  限註冊
            // 學生
            Catalog ribbon = RoleAclSource.Instance["學生"]["功能按鈕"];
            ribbon.Add(new RibbonFeature("JHSchool.Student.Ribbon0169", "匯出學期歷程"));
            ribbon.Add(new RibbonFeature("JHSchool.Student.Ribbon0170", "匯入學期歷程"));
            ribbon.Add(new RibbonFeature("JHSchool.Student.SubjectScoreCalculate", "計算科目成績"));
            ribbon = RoleAclSource.Instance["學生"]["資料項目"];
            ribbon.Add(new DetailItemFeature("JHSchool.Student.Detail.SemsScore", "學期成績"));

            //班級
            ribbon = RoleAclSource.Instance["班級"]["功能按鈕"];
            ribbon.Add(new RibbonFeature("JHSchool.Class.Ribbon0070", "班級開課"));
            ribbon.Add(new RibbonFeature("JHSchool.Class.Ribbon0070.HrtConductInputForm", "指標輸入"));

            // 課程
            ribbon = RoleAclSource.Instance["課程"]["功能按鈕"];
            ribbon.Add(new RibbonFeature("JHSchool.Course.Ribbon0031", "匯出課程修課學生"));
            ribbon.Add(new RibbonFeature("JHSchool.Course.Ribbon0021", "匯入課程修課學生"));
            ribbon.Add(new RibbonFeature("JHSchool.Course.Ribbon0070.CourseScoreInputForm", "成績輸入"));
            ribbon.Add(new RibbonFeature("JHSchool.Course.Ribbon0070.SubjectConductInputForm", "指標輸入"));
            ribbon.Add(new RibbonFeature("JHSchool.Course.Ribbon0070.CourseGradeEditor", "批次修改開課年級"));
            ribbon = RoleAclSource.Instance["課程"]["資料項目"];
            ribbon.Add(new DetailItemFeature("JHSchool.Course.Detail.BasicInfo", "基本資料"));
            ribbon.Add(new DetailItemFeature("JHSchool.Course.Detail.AttendStudent", "修課學生"));

            //教務作業
            ribbon = RoleAclSource.Instance["教務作業"];
            //ribbon.Add(new RibbonFeature("JHSchool.EduAdmin.Ribbon0000", "評量名稱管理"));
            ribbon.Add(new RibbonFeature("JHSchool.EduAdmin.Ribbon.SubjectManager", "科目資料管理"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.SetHoursOpeningForm", "開放時間管理"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.SubjectScoreCalculateByGradeyear", "批次計算科目成績"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.GpaRefForm", "歷屆GPA統計"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.SemsHistoryMaker", "產生學期歷程"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.CourseScoreStatusForm", "輸入狀況檢視(評量成績)"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.HRTConductStatusForm", "輸入狀況檢視(Conduct班導師)"));
            ribbon.Add(new RibbonFeature("CourseGradeB.EduAdminExtendControls.Ribbon.SubjectConductStatusForm", "輸入狀況檢視(Conduct授課老師)"));
            //ribbon.Add(new RibbonFeature("JHSchool.EduAdmin.Ribbon.ExamTemplateManager", "評分樣板設定"));

            //學務作業
            ribbon = RoleAclSource.Instance["學務作業"];
            ribbon.Add(new RibbonFeature("JHSchool.StuAdmin.Ribbon.ConductTitleManager", "指標管理"));
            #endregion

            #region 資料項目
            // 基本資料
            //Course.Instance.AddDetailBulider(new JHSchool.Legacy.ContentItemBulider<BasicInfoItem>());
            Course.Instance.AddDetailBulider(new JHSchool.Legacy.ContentItemBulider <BasicInfoItem>());

            // 修課學生
            Course.Instance.AddDetailBulider(new JHSchool.Legacy.ContentItemBulider <SCAttendItem>());

            // 學期成績
            Student.Instance.AddDetailBulider(new JHSchool.Legacy.ContentItemBulider <SemsSubjScoreItem>());

            #endregion

            #region 課程/編輯
            RibbonBarItem   rbItem = Student.Instance.RibbonBarItems["教務"];
            RibbonBarButton rbButton;
            rbItem          = Course.Instance.RibbonBarItems["編輯"];
            rbButton        = rbItem["新增"];
            rbButton.Size   = RibbonBarButton.MenuButtonSize.Large;
            rbButton.Image  = Properties.Resources.btnAddCourse;
            rbButton.Enable = User.Acl["JHSchool.Course.Ribbon0000"].Executable;
            rbButton.Click += delegate
            {
                new CourseGradeB.CourseExtendControls.Ribbon.AddCourse().ShowDialog();
            };

            rbButton        = rbItem["刪除"];
            rbButton.Size   = RibbonBarButton.MenuButtonSize.Large;
            rbButton.Image  = Properties.Resources.btnDeleteCourse;
            rbButton.Enable = User.Acl["JHSchool.Course.Ribbon0010"].Executable;
            rbButton.Click += delegate
            {
                if (Course.Instance.SelectedKeys.Count == 1)
                {
                    JHSchool.Data.JHCourseRecord record = JHSchool.Data.JHCourse.SelectByID(Course.Instance.SelectedKeys[0]);
                    //int CourseAttendCot = Course.Instance.Items[record.ID].GetAttendStudents().Count;
                    List <JHSchool.Data.JHSCAttendRecord> scattendList = JHSchool.Data.JHSCAttend.SelectByStudentIDAndCourseID(new List <string>()
                    {
                    }, new List <string>()
                    {
                        record.ID
                    });
                    int attendStudentCount = 0;
                    foreach (JHSchool.Data.JHSCAttendRecord scattend in scattendList)
                    {
                        if (scattend.Student.Status == K12.Data.StudentRecord.StudentStatus.一般)
                        {
                            attendStudentCount++;
                        }
                    }

                    if (attendStudentCount > 0)
                    {
                        MsgBox.Show(record.Name + " 有" + attendStudentCount.ToString() + "位修課學生,請先移除修課學生後再刪除課程.");
                    }
                    else
                    {
                        string msg = string.Format("確定要刪除「{0}」?", record.Name);
                        if (MsgBox.Show(msg, "刪除課程", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            #region 自動刪除非一般學生的修課記錄
                            List <JHSchool.Data.JHSCAttendRecord> deleteSCAttendList = new List <JHSchool.Data.JHSCAttendRecord>();
                            foreach (JHSchool.Data.JHSCAttendRecord scattend in scattendList)
                            {
                                JHSchool.Data.JHStudentRecord stuRecord = JHSchool.Data.JHStudent.SelectByID(scattend.RefStudentID);
                                if (stuRecord == null)
                                {
                                    continue;
                                }
                                if (stuRecord.Status != K12.Data.StudentRecord.StudentStatus.一般)
                                {
                                    deleteSCAttendList.Add(scattend);
                                }
                            }
                            List <string> studentIDs = new List <string>();
                            foreach (JHSchool.Data.JHSCAttendRecord scattend in deleteSCAttendList)
                            {
                                studentIDs.Add(scattend.RefStudentID);
                            }
                            List <JHSchool.Data.JHSCETakeRecord> sceList = JHSchool.Data.JHSCETake.SelectByStudentAndCourse(studentIDs, new List <string>()
                            {
                                record.ID
                            });
                            JHSchool.Data.JHSCETake.Delete(sceList);
                            JHSchool.Data.JHSCAttend.Delete(deleteSCAttendList);
                            #endregion

                            JHSchool.Data.JHCourse.Delete(record);

                            //刪除CourseExtendRecord
                            List <CourseExtendRecord> list = a.Select <CourseExtendRecord>("ref_course_id=" + record.ID);
                            if (list.Count > 0)
                            {
                                a.DeletedValues(list);
                            }

                            // 加這主要是重新整理
                            Course.Instance.SyncDataBackground(record.ID);
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            };

            RibbonBarButton CouItem = Course.Instance.RibbonBarItems["編輯"]["刪除"];
            Course.Instance.SelectedListChanged += delegate
            {
                // 課程刪除不能多選
                CouItem.Enable = (Course.Instance.SelectedList.Count < 2) && User.Acl["JHSchool.Course.Ribbon0010"].Executable;
            };

            //指定評分樣板
            //CouItem = Course.Instance.RibbonBarItems["指定"]["指定評分樣板"];
            //Course.Instance.SelectedListChanged += delegate
            //{
            //    CouItem.Enable = (Course.Instance.SelectedList.Count > 0);
            //};
            //CouItem.Click += delegate
            //{
            //    new CourseGradeB.CourseExtendControls.Ribbon.GiveRefExamTemplateForm(K12.Presentation.NLDPanels.Course.SelectedSource).ShowDialog();
            //};

            RibbonBarItem scores = JHSchool.Course.Instance.RibbonBarItems["教務"];
            scores["成績輸入"].Size   = RibbonBarButton.MenuButtonSize.Medium;
            scores["成績輸入"].Image  = Properties.Resources.exam_write_64;
            scores["成績輸入"].Enable = Framework.User.Acl["JHSchool.Course.Ribbon0070.CourseScoreInputForm"].Executable;
            scores["成績輸入"].Click += delegate
            {
                if (K12.Presentation.NLDPanels.Course.SelectedSource.Count == 1)
                {
                    CourseRecord courseRecord = Course.Instance.SelectedList[0];
                    //int key = int.Parse(courseRecord.ID);
                    //int value = Global.Instance.CourseExtendCatch.ContainsKey(key) ? Global.Instance.CourseExtendCatch[key] : -1;
                    //if (value == -1)
                    //     FISCA.Presentation.Controls.MsgBox.Show("課程 '" + courseRecord.Name + "' 沒有評量設定。");
                    //else
                    new CourseGradeB.CourseExtendControls.Ribbon.CourseScoreInputForm(courseRecord).ShowDialog();
                }
            };
            K12.Presentation.NLDPanels.Course.SelectedSourceChanged += delegate
            {
                scores["成績輸入"].Enable = K12.Presentation.NLDPanels.Course.SelectedSource.Count == 1 && Framework.User.Acl["JHSchool.Course.Ribbon0070.CourseScoreInputForm"].Executable;
            };

            RibbonBarItem conduct = JHSchool.Course.Instance.RibbonBarItems["教務"];
            conduct["指標輸入"].Size   = RibbonBarButton.MenuButtonSize.Medium;
            conduct["指標輸入"].Image  = Properties.Resources.exam_write_64;
            conduct["指標輸入"].Enable = Framework.User.Acl["JHSchool.Course.Ribbon0070.SubjectConductInputForm"].Executable;
            conduct["指標輸入"].Click += delegate
            {
                if (K12.Presentation.NLDPanels.Course.SelectedSource.Count == 1)
                {
                    CourseRecord courseRecord = Course.Instance.SelectedList[0];
                    new CourseGradeB.CourseExtendControls.Ribbon.SubjectConductInputForm(courseRecord).ShowDialog();
                }
            };
            K12.Presentation.NLDPanels.Course.SelectedSourceChanged += delegate
            {
                conduct["指標輸入"].Enable = K12.Presentation.NLDPanels.Course.SelectedSource.Count == 1 && Framework.User.Acl["JHSchool.Course.Ribbon0070.SubjectConductInputForm"].Executable;
            };

            RibbonBarItem editGrade = JHSchool.Course.Instance.RibbonBarItems["指定"];
            editGrade["批次修改開課年級"].Size   = RibbonBarButton.MenuButtonSize.Medium;
            editGrade["批次修改開課年級"].Image  = Properties.Resources.record_b_write_64;
            editGrade["批次修改開課年級"].Enable = Framework.User.Acl["JHSchool.Course.Ribbon0070.CourseGradeEditor"].Executable;
            editGrade["批次修改開課年級"].Click += delegate
            {
                if (K12.Presentation.NLDPanels.Course.SelectedSource.Count > 0)
                {
                    new CourseGradeB.CourseExtendControls.Ribbon.CourseGradeEditor(K12.Presentation.NLDPanels.Course.SelectedSource).ShowDialog();
                }
            };
            K12.Presentation.NLDPanels.Course.SelectedSourceChanged += delegate
            {
                editGrade["批次修改開課年級"].Enable = K12.Presentation.NLDPanels.Course.SelectedSource.Count > 0 && Framework.User.Acl["JHSchool.Course.Ribbon0070.CourseGradeEditor"].Executable;
            };

            #endregion

            #region 匯出/匯入

            RibbonBarButton rbItemExport = Student.Instance.RibbonBarItems["資料統計"]["匯出"];
            RibbonBarButton rbItemImport = Student.Instance.RibbonBarItems["資料統計"]["匯入"];

            rbItemExport["成績相關匯出"]["匯出學期歷程"].Enable = User.Acl["JHSchool.Student.Ribbon0169"].Executable;
            rbItemExport["成績相關匯出"]["匯出學期歷程"].Click += delegate
            {
                SmartSchool.API.PlugIn.Export.Exporter    exporter = new CourseGradeB.ImportExport.ExportSemesterHistory();
                CourseGradeB.ImportExport.ExportStudentV2 wizard   = new CourseGradeB.ImportExport.ExportStudentV2(exporter.Text, exporter.Image);
                exporter.InitializeExport(wizard);
                wizard.ShowDialog();
            };

            rbItemImport["成績相關匯入"]["匯入學期歷程"].Enable = User.Acl["JHSchool.Student.Ribbon0170"].Executable;
            rbItemImport["成績相關匯入"]["匯入學期歷程"].Click += delegate
            {
                SmartSchool.API.PlugIn.Import.Importer    importer = new CourseGradeB.ImportExport.ImportSemesterHistory();
                CourseGradeB.ImportExport.ImportStudentV2 wizard   = new CourseGradeB.ImportExport.ImportStudentV2(importer.Text, importer.Image);
                importer.InitializeImport(wizard);
                wizard.ShowDialog();
            };

            RibbonBarItem rbItemCourseImportExport = Course.Instance.RibbonBarItems["資料統計"];
            rbItemCourseImportExport["匯出"]["匯出課程修課學生"].Enable = User.Acl["JHSchool.Course.Ribbon0031"].Executable;
            rbItemCourseImportExport["匯出"]["匯出課程修課學生"].Click += delegate
            {
                SmartSchool.API.PlugIn.Export.Exporter           exporter = new CourseGradeB.ImportExport.Course.ExportCourseStudents("");
                CourseGradeB.ImportExport.Course.ExportStudentV2 wizard   = new CourseGradeB.ImportExport.Course.ExportStudentV2(exporter.Text, exporter.Image);
                exporter.InitializeExport(wizard);
                wizard.ShowDialog();
            };
            rbItemCourseImportExport["匯入"]["匯入課程修課學生"].Enable = User.Acl["JHSchool.Course.Ribbon0021"].Executable;
            rbItemCourseImportExport["匯入"]["匯入課程修課學生"].Click += delegate
            {
                SmartSchool.API.PlugIn.Import.Importer           importer = new CourseGradeB.ImportExport.Course.ImportCourseStudents("");
                CourseGradeB.ImportExport.Course.ImportStudentV2 wizard   = new CourseGradeB.ImportExport.Course.ImportStudentV2(importer.Text, importer.Image);
                importer.InitializeImport(wizard);
                wizard.ShowDialog();
            };

            #endregion

            #region 班級功能

            rbButton                = K12.Presentation.NLDPanels.Class.RibbonBarItems["教務"]["班級開課"];
            rbButton.Enable         = User.Acl["JHSchool.Class.Ribbon0070"].Executable;
            rbButton.Image          = Properties.Resources.organigram_refresh_64;
            rbButton["直接開課"].Click += delegate
            {
                if (Class.Instance.SelectedList.Count > 0)
                {
                    new CourseGradeB.ClassExtendControls.Ribbon.CreateCoursesDirectly();
                }
            };

            RibbonBarItem hrtConduct = JHSchool.Class.Instance.RibbonBarItems["教務"];
            hrtConduct["指標輸入"].Size   = RibbonBarButton.MenuButtonSize.Medium;
            hrtConduct["指標輸入"].Image  = Properties.Resources.exam_write_64;
            hrtConduct["指標輸入"].Enable = Framework.User.Acl["JHSchool.Class.Ribbon0070.HrtConductInputForm"].Executable;
            hrtConduct["指標輸入"].Click += delegate
            {
                if (K12.Presentation.NLDPanels.Class.SelectedSource.Count == 1)
                {
                    new CourseGradeB.ClassExtendControls.Ribbon.HrtSelectSchoolYear(K12.Presentation.NLDPanels.Class.SelectedSource[0]).ShowDialog();
                }
            };
            K12.Presentation.NLDPanels.Class.SelectedSourceChanged += delegate
            {
                hrtConduct["指標輸入"].Enable = K12.Presentation.NLDPanels.Class.SelectedSource.Count == 1 && Framework.User.Acl["JHSchool.Class.Ribbon0070.HrtConductInputForm"].Executable;
            };

            #endregion

            #region 教務作業功能
            FISCA.Presentation.RibbonBarItem eduitem1 = FISCA.Presentation.MotherForm.RibbonBarItems["教務作業", "基本設定"];
            eduitem1["對照/代碼"].Image = Properties.Resources.notepad_lock_64;
            eduitem1["對照/代碼"].Size  = FISCA.Presentation.RibbonBarButton.MenuButtonSize.Large;

            FISCA.Presentation.RibbonBarItem eduitem2 = FISCA.Presentation.MotherForm.RibbonBarItems["教務作業", "批次作業/檢視"];
            eduitem2["成績作業"].Image = Properties.Resources.calc_save_64;
            eduitem2["成績作業"].Size  = FISCA.Presentation.RibbonBarButton.MenuButtonSize.Large;

            eduitem2["成績作業"]["批次計算科目成績"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.SubjectScoreCalculateByGradeyear"].Executable;
            eduitem2["成績作業"]["批次計算科目成績"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.SubjectScoreCalculateByGradeyear().ShowDialog();
            };

            eduitem2["成績作業"]["歷屆GPA統計"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.GpaRefForm"].Executable;
            eduitem2["成績作業"]["歷屆GPA統計"].Click += delegate
            {
                new GpaRefForm().ShowDialog();
            };

            //產生學期歷程
            eduitem2["成績作業"]["產生學期歷程"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.SemsHistoryMaker"].Executable;

            eduitem2["成績作業"]["產生學期歷程"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.SemsHistoryMaker().ShowDialog();
            };

            //評量輸入狀況檢視
            eduitem2["成績作業"]["輸入狀況檢視(評量成績)"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.CourseScoreStatusForm"].Executable;

            eduitem2["成績作業"]["輸入狀況檢視(評量成績)"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.CourseScoreStatusForm().ShowDialog();
            };

            //Conduct輸入狀況檢視(班導師)
            eduitem2["成績作業"]["輸入狀況檢視(Conduct、StandardBase班導師)"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.HRTConductStatusForm"].Executable;

            eduitem2["成績作業"]["輸入狀況檢視(Conduct、StandardBase班導師)"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.HRTConductStatusForm().ShowDialog();
            };

            //Conduct輸入狀況檢視(授課老師)
            eduitem2["成績作業"]["輸入狀況檢視(Conduct、StandardBase授課老師)"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.SubjectConductStatusForm"].Executable;

            eduitem2["成績作業"]["輸入狀況檢視(Conduct、StandardBase授課老師)"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.SubjectConductStatusForm().ShowDialog();
            };

            RibbonBarItem eduitem3 = EduAdmin.Instance.RibbonBarItems["基本設定"];
            eduitem3["管理"].Size  = RibbonBarButton.MenuButtonSize.Large;
            eduitem3["管理"].Image = Properties.Resources.network_lock_64;

            //rbItem["管理"]["評量名稱管理"].Enable = User.Acl["JHSchool.EduAdmin.Ribbon0000"].Executable;
            //rbItem["管理"]["評量名稱管理"].Click += delegate
            //{
            //    new CourseGradeB.CourseExtendControls.Ribbon.ExamManager().ShowDialog();
            //};

            eduitem3["管理"]["科目資料管理"].Enable = User.Acl["JHSchool.EduAdmin.Ribbon.SubjectManager"].Executable;
            eduitem3["管理"]["科目資料管理"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.SubjectManager().ShowDialog();
            };

            eduitem3["管理"]["開放時間管理"].Enable = User.Acl["CourseGradeB.EduAdminExtendControls.Ribbon.SetHoursOpeningForm"].Executable;
            eduitem3["管理"]["開放時間管理"].Click += delegate
            {
                new CourseGradeB.EduAdminExtendControls.Ribbon.SetHoursOpeningForm().ShowDialog();
            };

            //rbItem["設定"].Image = Properties.Resources.sandglass_unlock_64;
            //rbItem["設定"].Size = RibbonBarButton.MenuButtonSize.Large;
            //rbItem["設定"]["評分樣板設定"].Enable = User.Acl["JHSchool.EduAdmin.Ribbon.ExamTemplateManager"].Executable;
            //rbItem["設定"]["評分樣板設定"].Click += delegate
            //{
            //    new CourseGradeB.EduAdminExtendControls.Ribbon.ExamTemplateManager().ShowDialog();
            //};

            #endregion

            #region 學務作業功能
            FISCA.Presentation.RibbonBarItem stuitem1 = FISCA.Presentation.MotherForm.RibbonBarItems["學務作業", "基本設定"];
            //item3["管理"].Image = Properties.Resources.network_lock_64;
            //item3["管理"].Size = FISCA.Presentation.RibbonBarButton.MenuButtonSize.Large;
            stuitem1["管理"]["指標管理"].Enable = User.Acl["JHSchool.StuAdmin.Ribbon.ConductTitleManager"].Executable;
            stuitem1["管理"]["指標管理"].Click += delegate
            {
                new CourseGradeB.StuAdminExtendControls.ConductSettingForm().ShowDialog();
            };
            #endregion

            #region 學生功能
            //註冊成績計算功能項目。
            FISCA.Presentation.RibbonBarItem student_rbitem = FISCA.Presentation.MotherForm.RibbonBarItems["學生", "教務"];
            student_rbitem["成績作業"].Size             = RibbonBarButton.MenuButtonSize.Large;
            student_rbitem["成績作業"].Image            = Properties.Resources.calc_save_64;
            student_rbitem["成績作業"]["計算科目成績"].Enable = false;
            K12.Presentation.NLDPanels.Student.SelectedSourceChanged += delegate
            {
                student_rbitem["成績作業"]["計算科目成績"].Enable = K12.Presentation.NLDPanels.Student.SelectedSource.Count > 0 && User.Acl["JHSchool.Student.SubjectScoreCalculate"].Executable;
            };

            student_rbitem["成績作業"]["計算科目成績"].Click += delegate
            {
                new CourseGradeB.StudentExtendControls.Ribbon.SubjectScoreCalculate(K12.Presentation.NLDPanels.Student.SelectedSource).ShowDialog();
            };
            #endregion

            //教師系統類別
            Tagging.Main();
            ResCourseData();
        }
Esempio n. 17
0
        private void btnRank_Click(object sender, EventArgs e)
        {
            if (!IsValid())
            {
                MsgBox.Show("輸入資料不正確,請先修正。");
                return;
            }

            _collector.Clear();
            if (Type.Equals("Exam"))
            {
                try
                {
                    #region 評量成績排名
                    if (Category.Equals("Subject"))
                    {
                        #region 科目
                        //將使用者選擇的「科目名稱、權重」集中於 subjects 集合。
                        Dictionary <string, decimal> subjects = new Dictionary <string, decimal>();
                        foreach (DataGridViewRow row in dgv.Rows)
                        {
                            string value = "" + row.Cells[chCheck.Index].Value;
                            bool   b;
                            if (bool.TryParse(value, out b) && b == true)
                            {
                                string  subject = "" + row.Cells[chCategory.Index].Value;
                                decimal period  = decimal.Parse("" + row.Cells[chPeriod.Index].Value);
                                subjects.Add(subject, period);
                            }
                        }

                        //_courses 轉換成 ID 清單,如果該課程的科目使用者並沒有選擇就過慮掉。
                        List <string> courseIDs = new List <string>();
                        foreach (CourseRecord record in _courses)
                        {
                            if (subjects.ContainsKey(record.Subject))
                            {
                                courseIDs.Add(record.ID);
                            }
                        }

                        //取得課程的特定評量成績。
                        List <Data.JHSCETakeRecord> sce_records           = Data.JHSCETake.SelectByCourseAndExam(courseIDs, (cboExam.SelectedItem as Data.JHExamRecord).ID);
                        Dictionary <string, Data.JHSCETakeRecord> dic_sce = AsDictionary(sce_records);

                        if (rbSeparate.Checked)
                        {
                            #region 分科排名
                            List <string> studentIDs           = _students.AsKeyList();
                            Dictionary <string, RankData> data = new Dictionary <string, RankData>();

                            foreach (string each in subjects.Keys)
                            {
                                data.Add(each, new RankData());
                                data[each].Name = each;
                            }

                            foreach (Data.JHSCAttendRecord record in _scattends)
                            {
                                CourseRecord course = Course.Instance.Items[record.RefCourseID];

                                if ("" + course.SchoolYear != cboSchoolYear.Text)
                                {
                                    continue;
                                }
                                if ("" + course.Semester != cboSemester.Text)
                                {
                                    continue;
                                }
                                if (!subjects.ContainsKey(course.Subject))
                                {
                                    continue;
                                }

                                RankData rankData = data[course.Subject];
                                decimal? score    = null;

                                if (dic_sce.ContainsKey(record.ID))
                                {
                                    Data.JHSCETakeRecord jr = dic_sce[record.ID];
                                    score = jr.Score;
                                }

                                if (rankData.ContainsKey(record.RefStudentID))
                                {
                                    throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", Student.Instance[record.RefStudentID].Name, course.Subject));
                                }

                                if (score.HasValue)
                                {
                                    rankData.Add(record.RefStudentID, new RankScore(score.Value, null));
                                }
                                else if (UseZero)
                                {
                                    rankData.Add(record.RefStudentID, new RankScore(0, null));
                                }
                            }

                            foreach (RankData rankData in data.Values)
                            {
                                _collector.AddRankData(rankData);
                            }

                            #endregion
                        }
                        else
                        {
                            #region 運算排名
                            List <string> studentIDs           = _students.AsKeyList();
                            Dictionary <string, RankData> data = new Dictionary <string, RankData>();

                            foreach (string each in subjects.Keys)
                            {
                                data.Add(each, new RankData());
                                data[each].Name = each;
                            }

                            foreach (Data.JHSCAttendRecord record in _scattends)
                            {
                                CourseRecord course = Course.Instance.Items[record.RefCourseID];

                                if ("" + course.SchoolYear != cboSchoolYear.Text)
                                {
                                    continue;
                                }
                                if ("" + course.Semester != cboSemester.Text)
                                {
                                    continue;
                                }
                                if (!subjects.ContainsKey(course.Subject))
                                {
                                    continue;
                                }

                                RankData rankData = data[course.Subject];
                                decimal? score    = null;

                                if (dic_sce.ContainsKey(record.ID))
                                {
                                    Data.JHSCETakeRecord jr = dic_sce[record.ID];
                                    score = jr.Score;
                                }

                                if (rankData.ContainsKey(record.RefStudentID))
                                {
                                    throw new ArgumentException(string.Format("學生「{0}」在同一學期修習「{1}」科目一次以上。", Student.Instance[record.RefStudentID].Name, course.Subject));
                                }

                                if (score.HasValue)
                                {
                                    rankData.Add(record.RefStudentID, new RankScore(score.Value, null));
                                }
                                else if (UseZero)
                                {
                                    rankData.Add(record.RefStudentID, new RankScore(0, null));
                                }
                            }

                            RankData combineData = new RankData();
                            combineData.Name = CombineRankType.ToString();
                            //<學生編號,<科目名稱,成績>>
                            Dictionary <string, Dictionary <string, decimal> > combineScore = new Dictionary <string, Dictionary <string, decimal> >();
                            decimal periodCount = 0;
                            foreach (RankData rankData in data.Values)  //每一個 rankData 是特定科目的所有成績。
                            {
                                foreach (string stuId in rankData.Keys) //id 是學生編號。
                                {
                                    if (!combineScore.ContainsKey(stuId))
                                    {
                                        combineScore.Add(stuId, new Dictionary <string, decimal>());
                                    }

                                    if (!combineScore[stuId].ContainsKey(rankData.Name)) //rankData.Name 是科目名稱。
                                    {
                                        if (CombineRankType == CombineRankType.加權平均 || CombineRankType == CombineRankType.加權總分)
                                        {
                                            combineScore[stuId].Add(rankData.Name, rankData[stuId].Score * subjects[rankData.Name]);
                                        }
                                        else
                                        {
                                            combineScore[stuId].Add(rankData.Name, rankData[stuId].Score);
                                        }
                                    }
                                }

                                //加總科目權重。
                                if (CombineRankType == CombineRankType.加權平均)
                                {
                                    periodCount += subjects[rankData.Name];
                                }
                            }
                            foreach (string id in combineScore.Keys)
                            {
                                decimal total = 0;
                                foreach (decimal score in combineScore[id].Values)
                                {
                                    total += score;
                                }

                                if (CombineRankType == CombineRankType.加權平均)
                                {
                                    total = total / periodCount;
                                }
                                else if (CombineRankType == CombineRankType.算數平均)
                                {
                                    total = total / combineScore[id].Count;
                                }

                                if (!combineData.ContainsKey(id))
                                {
                                    total = decimal.Round(total, Carry, MidpointRounding.AwayFromZero);
                                    combineData.Add(id, new RankScore(total, null));
                                }
                            }
                            combineData.Tag = data;
                            _collector.AddRankData(combineData);
                            #endregion
                        }
                        _collector.Perform();
                        _collector.Export(rbCombine.Checked, rbAllRank.Checked, txtTopRank.Text, (chkPrintByClass.Enabled) ? chkPrintByClass.Checked : false, _reportName);
                        #endregion
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Constructor
        /// 傳入一個課程。
        /// </summary>
        /// <param name="course"></param>
        public CourseScoreInputForm(CourseRecord course)
        {
            InitializeComponent();
            prlp = new PermRecLogProcess();



            _course = course;

            #region 設定小標題
            TeacherRecord first  = course.GetFirstTeacher();
            TeacherRecord second = course.GetSecondTeacher();
            TeacherRecord third  = course.GetThirdTeacher();

            StringBuilder builder = new StringBuilder("");
            if (first != null)
            {
                builder.Append(first.Name + ",");
            }
            if (second != null)
            {
                builder.Append(second.Name + ",");
            }
            if (third != null)
            {
                builder.Append(third.Name + ",");
            }

            string teachers = builder.ToString();
            if (!string.IsNullOrEmpty(teachers))
            {
                teachers = teachers.Substring(0, teachers.Length - 1);
            }

            lblCourseName.Text = course.Name + (!string.IsNullOrEmpty(teachers) ? " (" + teachers + ")" : "");
            #endregion

            #region 取得努力程度對照表
            K12.Data.Configuration.ConfigData cd = K12.Data.School.Configuration["努力程度對照表"];
            if (!string.IsNullOrEmpty(cd["xml"]))
            {
                XmlElement element = XmlHelper.LoadXml(cd["xml"]);

                foreach (XmlElement each in element.SelectNodes("Effort"))
                {
                    int     code = int.Parse(each.GetAttribute("Code"));
                    decimal score;
                    if (!decimal.TryParse(each.GetAttribute("Score"), out score))
                    {
                        score = 0;
                    }

                    if (!_effortList.ContainsKey(score))
                    {
                        _effortList.Add(score, code);
                    }
                }

                _scoreList = new List <decimal>();
                _scoreList.AddRange(_effortList.Keys);
                _scoreList.Sort(delegate(decimal a, decimal b)
                {
                    return(b.CompareTo(a));
                });
            }
            #endregion

            #region 取得文字評量代碼表
            cd = K12.Data.School.Configuration["文字描述代碼表"];
            if (!string.IsNullOrEmpty(cd["xml"]))
            {
                XmlHelper helper = new XmlHelper(XmlHelper.LoadXml(cd["xml"]));
                foreach (XmlElement item in helper.GetElements("Item"))
                {
                    string code    = item.GetAttribute("Code");
                    string content = item.GetAttribute("Content");

                    if (!_textMapping.ContainsKey(code))
                    {
                        _textMapping.Add(code, content);
                    }
                }
            }
            #endregion
        }
Esempio n. 19
0
 private static void UpdateCourseRecordFromModel(CourseRecord target, CourseRecordModel source)
 {
     target.StudentId = source.StudentId;
     target.CourseId  = source.CourseId;
     target.Score     = source.Score;
 }
Esempio n. 20
0
        public async Task <int> DeleteCourseRecordAsync(CourseRecord record)
        {
            _dataSource.CourseRecords.Remove(record);

            return(await _dataSource.SaveChangesAsync());
        }