// 新版會依照 使用者點選的評分項目 直接顯示對應的分數項目
        public ESLScoreInputForm(string targetCourseName, ESLTemplate eslTemplate, Dictionary <string, List <ESLScore> > scoreDict, string targetTermName, string targetSubjectName, string targetAssessmentName, List <K12.Data.SCAttendRecord> scaList)
        {
            InitializeComponent();

            _targetCourseName     = targetCourseName;
            _targetTermName       = targetTermName;
            _targetSubjectName    = targetSubjectName;
            _targetAssessmentName = targetAssessmentName;

            _eslTemplate = eslTemplate;

            // 對出 目前的 評量的 分數類型
            _targetScoreType = _eslTemplate.TermList.Find(t => t.Name == _targetTermName).SubjectList.Find(s => s.Name == _targetSubjectName).AssessmentList.Find(a => a.Name == _targetAssessmentName).Type;

            // 對出 目前的 指標型分數 可以用的 指標
            _targetIndicatorList = _eslTemplate.TermList.Find(t => t.Name == _targetTermName).SubjectList.Find(s => s.Name == _targetSubjectName).AssessmentList.Find(a => a.Name == _targetAssessmentName).IndicatorsList;

            // 對出 目前的 評語型分數 可以輸入的字數上限
            _commentLimit = _eslTemplate.TermList.Find(t => t.Name == _targetTermName).SubjectList.Find(s => s.Name == _targetSubjectName).AssessmentList.Find(a => a.Name == _targetAssessmentName).InputLimit;

            _scoreDict = scoreDict;

            _scaList = scaList;

            labelX1.Text = _targetCourseName + " / " + _targetSubjectName + " / " + _targetAssessmentName; // 課程名稱 / 科目名稱 / 評量名稱

            // 不同的分數型態 有不同的表頭
            switch (_targetScoreType)
            {
            case "Score":
                ColScore.HeaderText = "分數";
                break;

            case "Indicator":
                ColScore.HeaderText = "指標";
                break;

            case "Comment":
                ColScore.HeaderText = "評語";
                break;

            default:
                ColScore.HeaderText = "分數";
                break;
            }

            // 填入分數
            FillScore();
        }
Exemple #2
0
        private void GetESLTemplate()
        {
            picLoading.Visible = true;

            string courseIDs = string.Join(",", _CourseIDList);

            #region 取得ESL 課程資料
            // 2018/06/12 抓取課程且其有ESL 樣板設定規則的,才做後續整理,  在table exam_template 欄位 description 不為空代表其為ESL 的樣板
            string query = @"
                    SELECT 
                        course.id AS courseID
                        ,course.course_name
                        ,exam_template.description 
                        ,exam_template.id AS templateID
                        ,exam_template.name AS templateName
                    FROM course 
                    LEFT JOIN  exam_template ON course.ref_exam_template_id =exam_template.id  
                    WHERE course.id IN( " + courseIDs + ") AND  exam_template.description IS NOT NULL  ";

            QueryHelper qh = new QueryHelper();
            DataTable   dt = qh.Select(query);

            _CourseIDList.Clear(); // 清空

            //整理目前的ESL 課程資料
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    ESLCourse record = new ESLCourse();

                    _CourseIDList.Add("" + dr["courseID"]); // 加入真正的 是ESL 課程ID

                    if (!_ESLCourseIDExamTermIDDict.ContainsKey("" + dr["courseID"]))
                    {
                        _ESLCourseIDExamTermIDDict.Add("" + dr["courseID"], "" + dr["templateID"]);
                    }

                    if (!_ESLTemplateDict.ContainsKey("" + dr["templateID"]))
                    {
                        ESLTemplate template = new ESLTemplate();

                        template.ID = "" + dr["templateID"];
                        template.ESLTemplateName = "" + dr["templateName"];
                        template.Description     = "" + dr["description"];

                        _ESLTemplateDict.Add("" + dr["templateID"], template);
                    }


                    // 建立課程名稱對照
                    if (!_ESLCourseIDNameDict.ContainsKey("" + dr["courseID"]))
                    {
                        _ESLCourseIDNameDict.Add("" + dr["courseID"], "" + dr["course_name"]);
                    }
                }
            }
            #endregion

            #region 解析ESL 課程 計算規則
            // 解析計算規則
            foreach (string templateID in _ESLTemplateDict.Keys)
            {
                string   xmlStr  = "<root>" + _ESLTemplateDict[templateID].Description + "</root>";
                XElement elmRoot = XElement.Parse(xmlStr);

                //解析讀下來的 descriptiony 資料
                if (elmRoot != null)
                {
                    if (elmRoot.Element("ESLTemplate") != null)
                    {
                        foreach (XElement ele_term in elmRoot.Element("ESLTemplate").Elements("Term"))
                        {
                            Term t = new Term();

                            t.Name           = ele_term.Attribute("Name").Value;
                            t.Weight         = ele_term.Attribute("Weight").Value;
                            t.InputStartTime = ele_term.Attribute("InputStartTime").Value;
                            t.InputEndTime   = ele_term.Attribute("InputEndTime").Value;
                            t.Ref_exam_id    = ele_term.Attribute("Ref_exam_id").Value;

                            t.SubjectList = new List <Subject>();

                            foreach (XElement ele_subject in ele_term.Elements("Subject"))
                            {
                                Subject s = new Subject();

                                s.Name   = ele_subject.Attribute("Name").Value;
                                s.Weight = ele_subject.Attribute("Weight").Value;

                                s.AssessmentList = new List <Assessment>();

                                foreach (XElement ele_assessment in ele_subject.Elements("Assessment"))
                                {
                                    Assessment a = new Assessment();

                                    a.Name                  = ele_assessment.Attribute("Name").Value;
                                    a.Weight                = ele_assessment.Attribute("Weight").Value;
                                    a.TeacherSequence       = ele_assessment.Attribute("TeacherSequence").Value;
                                    a.Type                  = ele_assessment.Attribute("Type").Value;
                                    a.AllowCustomAssessment = ele_assessment.Attribute("AllowCustomAssessment").Value;

                                    if (a.Type == "Comment") // 假如是 評語類別,多讀一項 輸入限制屬性
                                    {
                                        a.InputLimit = ele_assessment.Attribute("InputLimit").Value;
                                    }

                                    a.IndicatorsList = new List <Indicators>();

                                    if (ele_assessment.Element("Indicators") != null)
                                    {
                                        foreach (XElement ele_Indicator in ele_assessment.Element("Indicators").Elements("Indicator"))
                                        {
                                            Indicators i = new Indicators();

                                            i.Name        = ele_Indicator.Attribute("Name").Value;
                                            i.Description = ele_Indicator.Attribute("Description").Value;

                                            a.IndicatorsList.Add(i);
                                        }
                                    }
                                    s.AssessmentList.Add(a);
                                }
                                t.SubjectList.Add(s);
                            }



                            _ESLTemplateDict[templateID].TermList.Add(t);
                        }
                    }
                }
            }
            #endregion


            #region 取得學生修課資料

            _scaList = K12.Data.SCAttend.SelectByCourseIDs(_CourseIDList);

            #endregion
        }
Exemple #3
0
            //每一次 傳一筆 Course 有的 subjectDict 進來,還有目前 template ,targetTermName
            public CourseDataGridViewRow(string courseName, Dictionary <string, List <ESLScore> > subjectDict, ESLTemplate ESLTemplateDict, string targetTermName)
            {
                _is_finish = true;

                // 數出 個項目的 輸入情況
                foreach (Term term in ESLTemplateDict.TermList)
                {
                    if (term.Name == targetTermName)
                    {
                        foreach (Subject subject in term.SubjectList)
                        {
                            foreach (Assessment assessment in subject.AssessmentList)
                            {
                                foreach (string subjectName in subjectDict.Keys)
                                {
                                    if (subject.Name == subjectName)
                                    {
                                        foreach (ESLScore scoreItem in subjectDict[subjectName])
                                        {
                                            if (assessment.Name == scoreItem.Assessment)
                                            {
                                                //有值 才加分子 ,且不能為空字串(web 前端成績輸入會存到如此資料,恩正說,此狀況視為沒有輸入)
                                                if (scoreItem.HasValue && scoreItem.Value != "")
                                                {
                                                    // 子項目 分子
                                                    if (!assessmentCountDict.ContainsKey(subject.Name + "_" + assessment.Name))
                                                    {
                                                        assessmentCountDict.Add(subject.Name + "_" + assessment.Name, 1);
                                                    }
                                                    else
                                                    {
                                                        assessmentCountDict[subject.Name + "_" + assessment.Name]++;
                                                    }
                                                }
                                                else
                                                {
                                                    // 子項目 分子
                                                    if (!assessmentCountDict.ContainsKey(subject.Name + "_" + assessment.Name))
                                                    {
                                                        assessmentCountDict.Add(subject.Name + "_" + assessment.Name, 0);
                                                    }
                                                }

                                                // 子項目 分母
                                                if (!assessmentTotalCountDict.ContainsKey(subject.Name + "_" + assessment.Name))
                                                {
                                                    assessmentTotalCountDict.Add(subject.Name + "_" + assessment.Name, 1);
                                                }
                                                else
                                                {
                                                    assessmentTotalCountDict[subject.Name + "_" + assessment.Name]++;
                                                }

                                                // 子項目 老師名稱
                                                if (!assessmentTeacherNametDict.ContainsKey(subject.Name + "_" + assessment.Name))
                                                {
                                                    assessmentTeacherNametDict.Add(subject.Name + "_" + assessment.Name, scoreItem.RefTeacherName);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                // 依目前 所選樣板、試別 對出 與表頭 相應的內容

                DataGridViewCell courseNameCell = new DataGridViewTextBoxCell();

                courseNameCell.Value = courseName;
                this.Cells.Add(courseNameCell);

                // 數出總項目 未填寫完畢項目
                foreach (Term term in ESLTemplateDict.TermList)
                {
                    if (term.Name == targetTermName)
                    {
                        int total      = 0;
                        int scoreCount = 0;


                        foreach (Subject subject in term.SubjectList)
                        {
                            foreach (Assessment assessment in subject.AssessmentList)
                            {
                                total++;

                                int assessmentTotal      = assessmentTotalCountDict[subject.Name + "_" + assessment.Name];
                                int assessmentScoreCount = assessmentCountDict[subject.Name + "_" + assessment.Name];

                                // 子項目 總數 等於 有分數 的數量,就是 完成
                                if (assessmentTotal == assessmentScoreCount)
                                {
                                    scoreCount++;
                                }
                            }
                        }

                        string ScoreField = string.Format("{0}/{1}", scoreCount, total);

                        // 填總項目 已完成 數量

                        DataGridViewCell cell = new DataGridViewTextBoxCell();
                        cell.Value = ScoreField;

                        DataGridViewCellStyle style = new DataGridViewCellStyle();
                        style.ForeColor = (total == scoreCount) ? Color.Black : Color.Red;
                        cell.Style      = style;

                        this.Cells.Add(cell);
                    }
                }

                // 子項目 每一個學生分數的填寫 狀態
                foreach (Term term in ESLTemplateDict.TermList)
                {
                    if (term.Name == targetTermName)
                    {
                        foreach (Subject subject in term.SubjectList)
                        {
                            foreach (Assessment assessment in subject.AssessmentList)
                            {
                                int    total      = assessmentTotalCountDict[subject.Name + "_" + assessment.Name];
                                int    scoreCount = assessmentCountDict[subject.Name + "_" + assessment.Name];
                                string ScoreField = string.Format(Format, scoreCount, total, assessmentTeacherNametDict[subject.Name + "_" + assessment.Name]);

                                if (total != scoreCount)
                                {
                                    _is_finish = false;
                                }

                                DataGridViewCell cell = new DataGridViewTextBoxCell();
                                cell.Value = ScoreField;

                                DataGridViewCellStyle style = new DataGridViewCellStyle();
                                style.ForeColor = (total == scoreCount) ? Color.Black : Color.Red;
                                cell.Style      = style;
                                cell.Tag        = assessment.Name;

                                this.Cells.Add(cell);
                            }
                        }
                    }
                }
            }
Exemple #4
0
        public ESLTransferScoreInputForm(string targetScAttendID)
        {
            InitializeComponent();

            _targetScAttendID = targetScAttendID;

            #region 取得學生修課資料

            _scAttendRecord = K12.Data.SCAttend.SelectByID(_targetScAttendID);

            #endregion

            #region 取得ESL 課程資料

            _targetCourseID = _scAttendRecord.RefCourseID;

            _targetCourseName = _scAttendRecord.Course.Name;

            _targetTemplateID = _scAttendRecord.Course.RefAssessmentSetupID;

            string query = @"
                    SELECT 
                        course.id AS courseID
                        ,course.course_name
                        ,exam_template.description 
                        ,exam_template.id AS templateID
                        ,exam_template.name AS templateName
                    FROM course 
                    LEFT JOIN  exam_template ON course.ref_exam_template_id =exam_template.id  
                    WHERE course.id IN( " + _targetCourseID + ") AND  exam_template.description IS NOT NULL  ";

            QueryHelper qh = new QueryHelper();
            DataTable   dt = qh.Select(query);

            _CourseIDList.Clear(); // 清空

            //整理目前的ESL 課程資料
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    ESLCourse record = new ESLCourse();

                    _CourseIDList.Add("" + dr["courseID"]); // 加入真正的 是ESL 課程ID

                    if (!_ESLCourseIDExamTermIDDict.ContainsKey("" + dr["courseID"]))
                    {
                        _ESLCourseIDExamTermIDDict.Add("" + dr["courseID"], "" + dr["templateID"]);
                    }

                    if (!_ESLTemplateDict.ContainsKey("" + dr["templateID"]))
                    {
                        ESLTemplate template = new ESLTemplate();

                        template.ID = "" + dr["templateID"];
                        template.ESLTemplateName = "" + dr["templateName"];
                        template.Description     = "" + dr["description"];

                        _ESLTemplateDict.Add("" + dr["templateID"], template);
                    }


                    // 建立課程名稱對照
                    if (!_ESLCourseIDNameDict.ContainsKey("" + dr["courseID"]))
                    {
                        _ESLCourseIDNameDict.Add("" + dr["courseID"], "" + dr["course_name"]);
                    }
                }
            }
            #endregion

            #region 解析ESL 課程 計算規則
            // 解析計算規則
            foreach (string templateID in _ESLTemplateDict.Keys)
            {
                string   xmlStr  = "<root>" + _ESLTemplateDict[templateID].Description + "</root>";
                XElement elmRoot = XElement.Parse(xmlStr);

                //解析讀下來的 descriptiony 資料
                if (elmRoot != null)
                {
                    if (elmRoot.Element("ESLTemplate") != null)
                    {
                        foreach (XElement ele_term in elmRoot.Element("ESLTemplate").Elements("Term"))
                        {
                            Term t = new Term();

                            t.Name           = ele_term.Attribute("Name").Value;
                            t.Weight         = ele_term.Attribute("Weight").Value;
                            t.InputStartTime = ele_term.Attribute("InputStartTime").Value;
                            t.InputEndTime   = ele_term.Attribute("InputEndTime").Value;
                            t.Ref_exam_id    = ele_term.Attribute("Ref_exam_id").Value;

                            t.SubjectList = new List <Subject>();

                            foreach (XElement ele_subject in ele_term.Elements("Subject"))
                            {
                                Subject s = new Subject();

                                s.Name   = ele_subject.Attribute("Name").Value;
                                s.Weight = ele_subject.Attribute("Weight").Value;

                                s.AssessmentList = new List <Assessment>();

                                foreach (XElement ele_assessment in ele_subject.Elements("Assessment"))
                                {
                                    Assessment a = new Assessment();

                                    a.Name                  = ele_assessment.Attribute("Name").Value;
                                    a.Weight                = ele_assessment.Attribute("Weight").Value;
                                    a.TeacherSequence       = ele_assessment.Attribute("TeacherSequence").Value;
                                    a.Type                  = ele_assessment.Attribute("Type").Value;
                                    a.AllowCustomAssessment = ele_assessment.Attribute("AllowCustomAssessment").Value;

                                    if (a.Type == "Comment") // 假如是 評語類別,多讀一項 輸入限制屬性
                                    {
                                        a.InputLimit = ele_assessment.Attribute("InputLimit").Value;
                                    }

                                    a.IndicatorsList = new List <Indicators>();

                                    if (ele_assessment.Element("Indicators") != null)
                                    {
                                        foreach (XElement ele_Indicator in ele_assessment.Element("Indicators").Elements("Indicator"))
                                        {
                                            Indicators i = new Indicators();

                                            i.Name        = ele_Indicator.Attribute("Name").Value;
                                            i.Description = ele_Indicator.Attribute("Description").Value;

                                            a.IndicatorsList.Add(i);
                                        }
                                    }
                                    s.AssessmentList.Add(a);
                                }
                                t.SubjectList.Add(s);
                            }



                            _ESLTemplateDict[templateID].TermList.Add(t);
                        }
                    }
                }
            }
            #endregion


            _eslTemplate = _ESLTemplateDict[_ESLCourseIDExamTermIDDict[_targetCourseID]];

            //_scoreDict = scoreDict;

            labelX1.Text = _targetCourseName;

            // 填 試別
            FillcboExam();

            // 填入分數
            //FillScore();
        }