public void ExecuteAutoCorrect(IEnumerable <string> EntityIDs)
        {
            List <JHUpdateRecordRecord> AutoCorrectRecords = K12.Data.Utility.Utility.IsNullOrEmpty(EntityIDs) ? CorrectableUpdateRecords : CorrectableUpdateRecords.Where(x => EntityIDs.Contains(x.StudentID)).ToList();

            if (MsgBox.Show("自動修正將依照檢查結果建議值進行修正總共" + AutoCorrectRecords.Count + "筆,強烈建議您務必將檢查結果匯出備份,是否進行自動修正?", "您是否要進行自動修正?", System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
            {
                try
                {
                    StringBuilder strBuilder = new StringBuilder();

                    strBuilder.AppendLine("學號,狀態,學年度,學期,異動日期,入學年月,備註,入學資格-畢業國小名稱,異動班級,異動姓名,異動身分證號,異動地址,異動學號,異動性別,異動生日,核准日期,核准文號,原核准文號");

                    Dictionary <string, StudentRecord> StudentRecordsDic = StudentRecords.ToDictionary(x => x.ID);

                    for (int i = 0; i < AutoCorrectRecords.Count; i++)
                    {
                        string StudentID = AutoCorrectRecords[i].StudentID;

                        List <string> LogValues = new List <string>();

                        LogValues.Add(StudentRecordsDic[StudentID].StudentNumber);
                        LogValues.Add(StudentRecordsDic[StudentID].StatusStr);
                        LogValues.Add(AutoCorrectRecords[i].StudentNumber);
                        LogValues.Add(K12.Data.Int.GetString(AutoCorrectRecords[i].SchoolYear));
                        LogValues.Add(K12.Data.Int.GetString(AutoCorrectRecords[i].Semester));
                        LogValues.Add(AutoCorrectRecords[i].UpdateDate);
                        LogValues.Add(AutoCorrectRecords[i].EnrollmentSchoolYear);
                        LogValues.Add(AutoCorrectRecords[i].Comment);
                        LogValues.Add(AutoCorrectRecords[i].GraduateSchool);
                        LogValues.Add(AutoCorrectRecords[i].OriginClassName);
                        LogValues.Add(AutoCorrectRecords[i].StudentName);
                        LogValues.Add(AutoCorrectRecords[i].IDNumber);
                        LogValues.Add(AutoCorrectRecords[i].OriginAddress);
                        LogValues.Add(AutoCorrectRecords[i].StudentNumber);
                        LogValues.Add(AutoCorrectRecords[i].Gender);
                        LogValues.Add(AutoCorrectRecords[i].Birthdate);
                        LogValues.Add(AutoCorrectRecords[i].ADDate);
                        LogValues.Add(AutoCorrectRecords[i].ADNumber);
                        LogValues.Add(AutoCorrectRecords[i].ADNumber.Replace("字第", ""));

                        strBuilder.AppendLine(string.Join(",", LogValues.ToArray()));
                    }

                    JHUpdateRecord.Update(AutoCorrectRecords);

                    AutoCorrectRecords.ForEach(x => CorrectableUpdateRecords.Remove(x));

                    FISCA.LogAgent.ApplicationLog.Log("資料合理性檢查.學生新生異動核准文號缺少『字號』", "補上『字號』值並更新異動記錄", strBuilder.ToString());

                    MsgBox.Show("已自動修正完成!");
                }
                catch (Exception e)
                {
                    SmartSchool.ErrorReporting.ReportingService.ReportException(e);

                    MsgBox.Show(e.Message);
                }
            }
        }
        public DataRationalityMessage Execute()
        {
            CanAutoCorrectStudentIDs.Clear();
            LogBuilder = new StringBuilder();
            LogBuilder.AppendLine("學生系統編號,身分證號,學號,班級,座號,姓名,狀態,學年度,學期,異動類別,原因及事項,異動日期,轉出後學校");

            DataRationalityMessage Message = new DataRationalityMessage();

            List <JHStudentRecord> Students = JHStudent.SelectAll().Where(x => x.Status == K12.Data.StudentRecord.StudentStatus.一般).ToList();

            List <JHUpdateRecordRecord> UpdateRecords = JHUpdateRecord.SelectByStudentIDs(Students.Select(x => x.ID)).Where(x => x.UpdateCode.Equals("4")).ToList();

            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendLine("檢查學生筆數:" + Students.Count);
            strBuilder.AppendLine("問題學生筆數:" + UpdateRecords.Count);

            if (UpdateRecords.Count > 0)
            {
                strBuilder.AppendLine("建議修正方案:");
                strBuilder.AppendLine("1.將學生加入至待處理,手動變更學生的狀態為『畢業或離校』或『刪除』。");
                strBuilder.AppendLine("2.運用本合理性檢查自動修正功能,將學生的狀態批次變更為『刪除』。");
                strBuilder.AppendLine("3.若您運用本合理性檢查自動修正功能,建議先單選1位學生進行嘗試,確認正確變更為『刪除』狀態再進行批次作業。");
            }

            var StudentUpdateRecords = UpdateRecords.Join(Students, UpdateRecord => UpdateRecord.StudentID, Student => Student.ID, (UpdateRecord, Student) =>
                                                          new
            {
                學生系統編號 = Student.ID,
                身分證號   = Student.IDNumber,
                學號     = Student.StudentNumber,
                班級     = Student.Class != null ? Student.Class.Name : string.Empty,
                座號     = K12.Data.Int.GetString(Student.SeatNo),
                姓名     = Student.Name,
                狀態     = Student.StatusStr,
                學年度    = K12.Data.Int.GetString(UpdateRecord.SchoolYear),
                學期     = K12.Data.Int.GetString(UpdateRecord.Semester),
                異動類別   = "轉出",
                原因及事項  = UpdateRecord.UpdateDescription,
                異動日期   = UpdateRecord.UpdateDate,
                轉出後學校  = UpdateRecord.ImportExportSchool,
            });

            foreach (var r in StudentUpdateRecords)
            {
                LogBuilder.AppendLine(r.學生系統編號 + "," + r.身分證號 + "," + r.學號 + "," + r.班級 + "," + r.座號 + "," + r.姓名 + "," + r.狀態 + "," + r.學年度 + "," + r.學期 + "," + r.異動類別 + "," + r.原因及事項 + "," + r.異動日期 + "," + r.轉出後學校);
            }


            Message.Data    = StudentUpdateRecords.ToList();
            Message.Message = strBuilder.ToString();

            CanAutoCorrectStudentIDs.AddRange(UpdateRecords.Select(x => x.StudentID).Distinct());

            return(Message);
        }
        private void Update(object item)
        {
            try
            {
                List <JHUpdateRecordRecord> UpdatePackage = (List <JHUpdateRecordRecord>)item;

                JHUpdateRecord.Update(UpdatePackage);
            }
            catch (Exception ex) {}
        }
Esempio n. 4
0
        public override void InitializeImport(SmartSchool.API.PlugIn.Import.ImportWizard wizard)
        {
            // 取得學生資料
            Dictionary <string, JHStudentRecord> Students = new Dictionary <string, JHStudentRecord>();

            // 取得異動資料
            Dictionary <string, List <JHUpdateRecordRecord> > UpdateRecs = new Dictionary <string, List <JHUpdateRecordRecord> >();

            wizard.PackageLimit = 3000;
            wizard.ImportableFields.AddRange("學年度", "學期", "異動學號", "異動姓名", "異動生日", "異動身分證號", "異動性別", "異動類別", "異動日期", "原因及事項", "轉入前學校", "轉出後學校", "學籍核准日期", "學籍核准文號", "核准日期", "核准文號", "備註", "新生日", "新身分證號", "新姓名", "新性別", "出生地", "異動年級", "異動地址", "異動班級", "異動座號");
            wizard.RequiredFields.AddRange("異動類別", "異動日期", "學年度", "學期");
            wizard.ValidateStart += delegate(object sender, SmartSchool.API.PlugIn.Import.ValidateStartEventArgs e)
            {
                Students.Clear();
                UpdateRecs.Clear();

                // 取得學生資料
                foreach (JHStudentRecord studRec in JHStudent.SelectByIDs(e.List))
                {
                    if (!Students.ContainsKey(studRec.ID))
                    {
                        Students.Add(studRec.ID, studRec);
                    }
                }
                foreach (string str in Students.Keys)
                {
                    List <JHUpdateRecordRecord> UpdRecList = new List <JHUpdateRecordRecord>();
                    UpdateRecs.Add(str, UpdRecList);
                }


                // 取得異動
                MultiThreadWorker <string> loader1 = new MultiThreadWorker <string>();
                loader1.MaxThreads     = 3;
                loader1.PackageSize    = 250;
                loader1.PackageWorker += delegate(object sender1, PackageWorkEventArgs <string> e1)
                {
                    foreach (JHUpdateRecordRecord UpdRec in JHUpdateRecord.SelectByStudentIDs(e.List))
                    {
                        // 非新生或畢業濾除
                        if (UpdRec.UpdateCode == "1" || UpdRec.UpdateCode == "2")
                        {
                            continue;
                        }

                        if (UpdateRecs.ContainsKey(UpdRec.StudentID))
                        {
                            UpdateRecs[UpdRec.StudentID].Add(UpdRec);
                        }
                    }
                };
                loader1.Run(e.List);
            };

            wizard.ValidateRow += delegate(object sender, SmartSchool.API.PlugIn.Import.ValidateRowEventArgs e)
            {
                int      i = 0;
                DateTime dt;
                // 檢查學生是否存在
                JHStudentRecord studRec = null;
                if (Students.ContainsKey(e.Data.ID))
                {
                    studRec = Students[e.Data.ID];
                }
                else
                {
                    e.ErrorMessage = "沒有這位學生" + e.Data.ID;
                    return;
                }

                // 驗證格式資料
                bool InputFormatPass = true;
                foreach (string field in e.SelectFields)
                {
                    string value = e.Data[field].Trim();
                    //// 驗證$無法匯入
                    //if (value.IndexOf('$') > -1)
                    //{
                    //    e.ErrorFields.Add(field, "儲存格有$無法匯入.");
                    //    break;
                    //}
                    switch (field)
                    {
                    default:
                        break;

                    case "異動類別":
                        // 對應不到時
                        if (DAL.DALTransfer2.GetUpdateRecCodeByString39(value) == "")
                        {
                            InputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入正確異動類別");
                        }
                        break;

                    case "學年度":
                        int.TryParse(value, out i);
                        if (string.IsNullOrEmpty(value) || i < 1)
                        {
                            InputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入整數");
                        }

                        break;

                    case "學期":
                        int.TryParse(value, out i);
                        if (string.IsNullOrEmpty(value) || i < 1)
                        {
                            InputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入整數");
                        }

                        if (i > 2)
                        {
                            InputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入整數,1或2");
                        }

                        break;

                    case "異動年級":
                        int.TryParse(value, out i);
                        if (string.IsNullOrEmpty(value) || i < 1)
                        {
                            InputFormatPass &= false;
                            e.WarningFields.Add(field, "請填入整數");
                        }
                        break;

                    case "異動座號":
                        int.TryParse(value, out i);
                        if (string.IsNullOrEmpty(value) || i < 1)
                        {
                            e.WarningFields.Add(field, "請填入整數");
                        }
                        break;

                    case "異動日期":
                        if (string.IsNullOrEmpty(value) || DateTime.TryParse(value, out dt) == false)
                        {
                            InputFormatPass &= false;
                            e.ErrorFields.Add(field, "必須填入日期,例如2009/1/1");
                        }
                        break;

                    case "異動生日":
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (DateTime.TryParse(value, out dt) == false)
                            {
                                InputFormatPass &= false;
                                e.ErrorFields.Add(field, "必須填入日期,例如2009/1/1");
                            }
                        }
                        break;

                    case "學籍核准日期":
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (DateTime.TryParse(value, out dt) == false)
                            {
                                InputFormatPass &= false;
                                e.ErrorFields.Add(field, "必須填入日期,例如2009/1/1");
                            }
                        }
                        break;


                    case "核准日期":
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (DateTime.TryParse(value, out dt) == false)
                            {
                                InputFormatPass &= false;
                                e.ErrorFields.Add(field, "必須填入日期,例如2009/1/1");
                            }
                        }
                        break;

                    case "異動新生日":
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (DateTime.TryParse(value, out dt) == false)
                            {
                                InputFormatPass &= false;
                                e.ErrorFields.Add(field, "必須填入日期,例如2009/1/1");
                            }
                        }
                        break;

                    case "異動新性別":
                        if (value == "男" || value == "女" || value == "")
                        {
                        }
                        else
                        {
                            e.WarningFields.Add(field, "請填入男或女");
                        }
                        break;

                    case "異動性別":
                        if (value == "男" || value == "女" || value == "")
                        {
                        }
                        else
                        {
                            e.WarningFields.Add(field, "請填入男或女");
                        }
                        break;

                    case "新生日":
                        if (!string.IsNullOrEmpty(value))
                        {
                            if (DateTime.TryParse(value, out dt) == false)
                            {
                                InputFormatPass &= false;
                                e.ErrorFields.Add(field, "必須填入日期,例如2009/1/1");
                            }
                        }
                        break;

                    case "新性別":
                        if (value == "男" || value == "女" || value == "")
                        {
                        }
                        else
                        {
                            e.WarningFields.Add(field, "請填入男或女");
                        }
                        break;
                    }
                }
            };


            wizard.ImportPackage += delegate(object sender, SmartSchool.API.PlugIn.Import.ImportPackageEventArgs e)
            {
                Dictionary <string, List <RowData> > id_Rows = new Dictionary <string, List <RowData> >();
                foreach (RowData data in e.Items)
                {
                    if (!id_Rows.ContainsKey(data.ID))
                    {
                        id_Rows.Add(data.ID, new List <RowData>());
                    }
                    id_Rows[data.ID].Add(data);
                }

                List <JHUpdateRecordRecord> InsertList = new List <JHUpdateRecordRecord>();
                List <JHUpdateRecordRecord> UpdateList = new List <JHUpdateRecordRecord>();


                foreach (string id in id_Rows.Keys)
                {
                    int      schoolYear, Semester;
                    string   GrYear = "";
                    DateTime dt;

                    foreach (RowData data in id_Rows[id])
                    {
                        if (!UpdateRecs.ContainsKey(id))
                        {
                            continue;
                        }
                        int.TryParse(data["學年度"], out schoolYear);
                        int.TryParse(data["學期"], out Semester);
                        DateTime.TryParse(data["異動日期"], out dt);
                        if (data.ContainsKey("異動年級"))
                        {
                            GrYear = data["異動年級"];
                        }

                        // 異動類別
                        string UpdateType = string.Empty;
                        if (data.ContainsKey("異動類別"))
                        {
                            UpdateType = data["異動類別"];
                        }

                        // 取得原因及事項
                        string UpdateDesc = string.Empty;
                        if (data.ContainsKey("原因及事項"))
                        {
                            UpdateDesc = data["原因及事項"];
                        }

                        //// 檢查更正學籍
                        //string checkUpdateCode09Str=string.Empty;

                        //if (data.ContainsKey("新生日"))
                        //    checkUpdateCode09Str += data["新生日"].Trim();
                        //if (data.ContainsKey("新身分證號"))
                        //    checkUpdateCode09Str += data["新身分證號"].Trim();
                        //if (data.ContainsKey("新姓名"))
                        //    checkUpdateCode09Str += data["新姓名"].Trim();
                        //if (data.ContainsKey("新性別"))
                        //    checkUpdateCode09Str += data["新性別"].Trim();


                        JHUpdateRecordRecord updateRec = null;
                        // 判斷學年度+學期+異動日期+異動類別 (如果相同有當更新,不同就新增)
                        foreach (JHUpdateRecordRecord urr in UpdateRecs[id])
                        {
                            string UpdateStr = DAL.DALTransfer2.GetUpdateRecCodeString(urr.UpdateCode);
                            if (urr.SchoolYear == schoolYear && urr.Semester == Semester && UpdateType == UpdateStr)
                            {
                                DateTime dt1;
                                DateTime.TryParse(urr.UpdateDate, out dt1);
                                if (dt == dt1)
                                {
                                    // 使用原因及事項當作Key
                                    if (UpdateDesc == urr.UpdateDescription)
                                    {
                                        updateRec = urr;
                                    }

                                    ////判斷當異動類別是更正學籍,加入(新生日、新身分證號、新姓名、新性別)判斷,四項內容只要有一個不同就當作新的一筆可匯入。
                                    //if (urr.UpdateCode == "9")
                                    //{
                                    //    string strKey = urr.NewBirthday.Trim() + urr.NewIDNumber.Trim() + urr.NewName.Trim() + urr.NewGender.Trim ();
                                    //    if (checkUpdateCode09Str == strKey)
                                    //        updateRec = urr;
                                    //}
                                    //else
                                    //    updateRec = urr;
                                }
                            }
                        }
                        bool isInsert = true;

                        if (updateRec == null)
                        {
                            updateRec           = new JHUpdateRecordRecord();
                            updateRec.StudentID = id;
                        }
                        else
                        {
                            isInsert = false;
                        }

                        bool checkData = false;

                        string Ur03School = "", Ur04School = "";

                        foreach (string field in e.ImportFields)
                        {
                            string value = data[field].Trim();
                            switch (field)
                            {
                            case "異動類別":
                                string UrCode = DAL.DALTransfer2.GetUpdateRecCodeByString39(value);
                                if (UrCode != "")
                                {
                                    updateRec.UpdateCode = UrCode;
                                }

                                break;

                            case "學年度":
                                int scYear;
                                if (int.TryParse(value, out scYear))
                                {
                                    updateRec.SchoolYear = scYear;
                                    checkData            = true;
                                }
                                break;

                            case "學期":
                                int Sems;
                                if (int.TryParse(value, out Sems))
                                {
                                    updateRec.Semester = Sems;
                                    checkData          = true;
                                }
                                break;

                            case "異動年級":
                                updateRec.GradeYear = GrYear;
                                break;

                            case "異動日期":
                                DateTime dtd;
                                if (DateTime.TryParse(value, out dtd))
                                {
                                    updateRec.UpdateDate = dtd.ToShortDateString();
                                }
                                break;

                            case "備註":
                                updateRec.Comment = value;
                                break;

                            case "學籍核准日期":
                                DateTime dtLD;
                                if (DateTime.TryParse(value, out dtLD))
                                {
                                    updateRec.LastADDate = dtLD.ToShortDateString();
                                }
                                break;

                            case "學籍核准文號":
                                updateRec.LastADNumber = value;
                                break;

                            case "異動班級":
                                updateRec.OriginClassName = value;
                                break;

                            case "異動姓名":
                                updateRec.StudentName = value;
                                break;

                            case "異動身分證號":
                                updateRec.IDNumber = value;
                                break;


                            case "異動學號":
                                updateRec.StudentNumber = value;
                                break;

                            case "異動性別":
                                if (value == "男" || value == "女" || value == "")
                                {
                                    updateRec.Gender = value;
                                }
                                break;

                            case "異動生日":
                                DateTime dtb;
                                if (DateTime.TryParse(value, out dtb))
                                {
                                    updateRec.Birthdate = dtb.ToShortDateString();
                                }
                                break;

                            case "異動座號":
                                int no;
                                if (int.TryParse(value, out no))
                                {
                                    updateRec.SeatNo = no + "";
                                }
                                break;

                            case "核准日期":
                                DateTime dtAd;
                                if (DateTime.TryParse(value, out dtAd))
                                {
                                    updateRec.ADDate = dtAd.ToShortDateString();
                                }
                                break;

                            case "核准文號":
                                updateRec.ADNumber = value;
                                break;

                            case "異動新生日":
                                DateTime dtNB;
                                if (DateTime.TryParse(value, out dtNB))
                                {
                                    updateRec.NewBirthday = dtNB.ToShortDateString();
                                }
                                break;

                            case "異動新身分證號":
                                updateRec.NewIDNumber = value;
                                break;

                            case "異動新姓名":
                                updateRec.NewName = value;
                                break;

                            case "異動新性別":
                                if (value == "男" || value == "女" || value == "")
                                {
                                    updateRec.NewGender = value;
                                }
                                break;

                            case "新生日":
                                DateTime dtNB1;
                                if (DateTime.TryParse(value, out dtNB1))
                                {
                                    updateRec.NewBirthday = dtNB1.ToShortDateString();
                                }
                                break;

                            case "新身分證號":
                                updateRec.NewIDNumber = value;
                                break;

                            case "新姓名":
                                updateRec.NewName = value;
                                break;

                            case "新性別":
                                if (value == "男" || value == "女" || value == "")
                                {
                                    updateRec.NewGender = value;
                                }
                                break;

                            case "出生地":
                                updateRec.BirthPlace = value;
                                break;

                            case "原因及事項":
                                updateRec.UpdateDescription = value;
                                break;

                            case "異動地址":
                                updateRec.OriginAddress = value;
                                break;

                            case "轉入前學校":
                                Ur03School = value;
                                break;

                            case "轉出後學校":
                                Ur04School = value;
                                break;
                            }
                        }

                        // 轉換轉出入學校
                        if (updateRec.UpdateCode == "3")
                        {
                            updateRec.ImportExportSchool = Ur03School;
                        }

                        if (updateRec.UpdateCode == "4")
                        {
                            updateRec.ImportExportSchool = Ur04School;
                        }

                        if (string.IsNullOrEmpty(updateRec.StudentID) || string.IsNullOrEmpty(updateRec.UpdateDate) || string.IsNullOrEmpty(updateRec.UpdateCode))
                        {
                            continue;
                        }
                        else
                        {
                            if (isInsert)
                            {
                                InsertList.Add(updateRec);
                            }
                            else
                            {
                                UpdateList.Add(updateRec);
                            }
                        }
                    }
                }

                try
                {
                    if (InsertList.Count > 0)
                    {
                        Insert(InsertList);
                    }

                    if (UpdateList.Count > 0)
                    {
                        Update(UpdateList);
                    }

                    JHSchool.PermRecLogProcess prlp = new JHSchool.PermRecLogProcess();
                    prlp.SaveLog("學生.匯入異動", "匯入學籍異動", "匯入學籍異動:共新增" + InsertList.Count + "筆資料,共更新:" + UpdateList.Count + "筆資料");
                    JHSchool.Student.Instance.SyncAllBackground();
                }
                catch (Exception ex) { }
            };
        }
Esempio n. 5
0
        public DataRationalityMessage Execute()
        {
            //初始化

            DataRationalityMessage Message = new DataRationalityMessage();

            CorrectableUpdateRecords.Clear();
            DisplayRecords.Clear();
            StudentRecords.Clear();

            //取得所有異動記錄,並篩選出轉入異動(異動代碼為3)以及新生異動(異動代碼為1)
            IEnumerable <JHUpdateRecordRecord> UpdateRecords = JHUpdateRecord.SelectAll().Where(x => x.UpdateCode.Equals("3") || x.UpdateCode.Equals("1"));

            //取得異動記錄對應的學生資料
            StudentRecords = Student.SelectByIDs(UpdateRecords.Select(x => x.StudentID).Distinct()).ToDictionary(x => x.ID);

            foreach (var StudentUpdateRecords in UpdateRecords.GroupBy(x => x.StudentID))
            {
                //將異動記錄排序
                List <JHUpdateRecordRecord> OrderedStudentUpdateRecords = StudentUpdateRecords.OrderBy(x => x.UpdateCode).ToList();

                //判斷只有2筆異動記錄的情況,其中1筆為『新生異動』,另外1筆為『轉入異動』
                if (OrderedStudentUpdateRecords.Count == 2 && OrderedStudentUpdateRecords[0].UpdateCode.Equals("1") && OrderedStudentUpdateRecords[1].UpdateCode.Equals("3"))
                {
                    CorrectableUpdateRecords.Add(OrderedStudentUpdateRecords[0]);

                    StudentImportNewUpdateRecordMixRATRecord DisplayRecord = new StudentImportNewUpdateRecordMixRATRecord();

                    string StudentID = OrderedStudentUpdateRecords[1].StudentID;

                    if (StudentRecords.ContainsKey(StudentID))
                    {
                        DisplayRecord.學生系統編號 = StudentRecords[StudentID].ID;
                        DisplayRecord.學號     = StudentRecords[StudentID].StudentNumber;
                        DisplayRecord.身分證號   = StudentRecords[StudentID].IDNumber;
                        DisplayRecord.班級     = StudentRecords[StudentID].Class != null ? StudentRecords[StudentID].Class.Name : string.Empty;
                        DisplayRecord.座號     = K12.Data.Int.GetString(StudentRecords[StudentID].SeatNo);
                        DisplayRecord.姓名     = StudentRecords[StudentID].Name;
                        DisplayRecord.狀態     = StudentRecords[StudentID].StatusStr;
                    }

                    DisplayRecord.異動日期  = OrderedStudentUpdateRecords[1].UpdateDate;
                    DisplayRecord.異動類別  = "轉入";
                    DisplayRecord.原因及事項 = OrderedStudentUpdateRecords[1].UpdateDescription;
                    DisplayRecord.轉入前學校 = OrderedStudentUpdateRecords[1].ImportExportSchool;
                    DisplayRecord.說明    = "該生為轉入生也有新生異動";

                    DisplayRecords.Add(DisplayRecord);
                }
            }

            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendLine("檢查筆數:" + UpdateRecords.Count());
            strBuilder.AppendLine("問題筆數:" + DisplayRecords.Count());

            if (DisplayRecords.Count > 0)
            {
                strBuilder.AppendLine("建議修正方案:");
                strBuilder.AppendLine("1.將學生加入至待處理,手動刪除學生的新生異動。");
                strBuilder.AppendLine("2.運用本合理性檢查自動修正功能,將學生的新生異動批次刪除。");
                strBuilder.AppendLine("3.若您運用本合理性檢查自動修正功能,建議先單選1位學生進行嘗試,確認正確刪除後並有存入日誌再進行批次作業。");
            }

            var OrderedDisplayRecords = from record in DisplayRecords orderby record.狀態, record.班級, K12.Data.Int.ParseAllowNull(record.座號) select record;

            Message.Data    = OrderedDisplayRecords.ToList();
            Message.Message = strBuilder.ToString();

            return(Message);
        }
        public void SetStudent(JHStudentRecord student, List <SemesterHistoryItem> semesterHistoryList)
        {
            ClearField();
            // 學期歷程
            _semesterHistoryList = semesterHistoryList;
            //ParentRecord parent = student.GetParent();
            //PhoneRecord phone = student.GetPhone();
            //AddressRecord address = student.GetAddress();

            JHParentRecord  parent  = JHParent.SelectByStudent(student);
            JHPhoneRecord   phone   = JHPhone.SelectByStudent(student);
            JHAddressRecord address = JHAddress.SelectByStudent(student);
            string          base64  = K12.Data.Photo.SelectGraduatePhoto(student.ID);

            // 畢業資訊
            JHLeaveInfoRecord GradeInfo = JHLeaveIfno.SelectByStudentID(student.ID);

            string EnrollSchoolYear = "";

            foreach (JHUpdateRecordRecord rec in JHUpdateRecord.SelectByStudentID(student.ID))
            {
                if (rec.UpdateCode == "1")
                {
                    int sc;
                    if (rec.EnrollmentSchoolYear.Length == 6)
                    {
                        int.TryParse(rec.EnrollmentSchoolYear.Substring(0, 4), out sc);
                        EnrollSchoolYear = (sc - 1911) + rec.EnrollmentSchoolYear.Substring(4, 2);
                    }
                }
            }

            _data["姓名"]     = student.Name;
            _data["性別"]     = student.Gender;
            _data["身分證號"]   = student.IDNumber;
            _data["學號"]     = student.StudentNumber;
            _data["出生日期"]   = Global.CDate(student.Birthday.HasValue ? student.Birthday.Value.ToShortDateString() : "");
            _data["國籍"]     = student.Nationality;
            _data["家長或監護人"] = (parent != null) ? parent.Custodian.Name : "";
            _data["關係"]     = (parent != null) ? parent.Custodian.Relationship : "";
            _data["行動電話"]   = (phone != null) ? phone.Cell : "";
            _data["戶籍電話"]   = (phone != null) ? phone.Permanent : "";
            _data["戶籍地址"]   = (address != null) ? address.Permanent.ToString() : "";
            _data["聯絡電話"]   = (phone != null) ? phone.Contact : "";
            _data["聯絡地址"]   = (address != null) ? address.Mailing.ToString() : "";
            _data["證書字號"]   = GradeInfo.DiplomaNumber;
            _data["入學年月"]   = EnrollSchoolYear;
            _data["照片"]     = base64;

            // 處理服務學習時數
            if (Global._SLRDict.ContainsKey(student.ID))
            {
                foreach (SemesterHistoryItem shi in _semesterHistoryList)
                {
                    string key = shi.SchoolYear + "_" + shi.Semester;
                    if (Global._SLRDict[student.ID].ContainsKey(key))
                    {
                        string val = Global._SLRDict[student.ID][key];

                        if ((shi.GradeYear == 1 || shi.GradeYear == 7) && shi.Semester == 1)
                        {
                            _data["SLR1A"] = val;
                        }

                        if ((shi.GradeYear == 1 || shi.GradeYear == 7) && shi.Semester == 2)
                        {
                            _data["SLR1B"] = val;
                        }

                        if ((shi.GradeYear == 2 || shi.GradeYear == 8) && shi.Semester == 1)
                        {
                            _data["SLR2A"] = val;
                        }

                        if ((shi.GradeYear == 2 || shi.GradeYear == 8) && shi.Semester == 2)
                        {
                            _data["SLR2B"] = val;
                        }

                        if ((shi.GradeYear == 3 || shi.GradeYear == 9) && shi.Semester == 1)
                        {
                            _data["SLR3A"] = val;
                        }

                        if ((shi.GradeYear == 3 || shi.GradeYear == 9) && shi.Semester == 2)
                        {
                            _data["SLR3B"] = val;
                        }
                    }
                }
            }
        }
        public DataRationalityMessage Execute()
        {
            RATRecords.Clear();

            DataRationalityMessage Message = new DataRationalityMessage();

            int UpdateRecordCount = 0;

            //取得學生資料及建立資料物件
            foreach (JHStudentRecord student in JHStudent.SelectAll())
            {
                if (!Dic.ContainsKey(student.ID))
                {
                    Dic.Add(student.ID, new SuperObj_new(student));
                }
            }

            foreach (JHUpdateRecordRecord each in JHUpdateRecord.SelectByStudentIDs(Dic.Keys))
            {
                if (each.UpdateCode == "3")              //轉入異動代碼為"3"
                {
                    if (Dic.ContainsKey(each.StudentID)) //包含於清單內
                    {
                        Dic.Remove(each.StudentID);      //將其移除
                        UpdateRecordCount++;
                    }
                }
            }

            //取得所有懲戒明細,並加入學生資料物件內
            foreach (JHDemeritRecord demerit in JHDemerit.SelectAll())
            {
                if (Dic.ContainsKey(demerit.RefStudentID))
                {
                    Dic[demerit.RefStudentID].DemeritList.Add(demerit);
                }
            }

            //取得(971,972,981,982)自動統計,排除目前學年度/學期
            List <SchoolYearSemester> SysList = new List <SchoolYearSemester>();

            SysList.Add(new SchoolYearSemester(97, 1));
            SysList.Add(new SchoolYearSemester(97, 2));
            SysList.Add(new SchoolYearSemester(98, 1));
            SysList.Add(new SchoolYearSemester(98, 2));
            SysList.Add(new SchoolYearSemester(99, 1));
            SysList.Add(new SchoolYearSemester(99, 2));
            List <AutoSummaryRecord> AutoSummaryList = AutoSummary.Select(Dic.Keys, SysList, SummaryType.Discipline, true);

            foreach (AutoSummaryRecord autoSummary in AutoSummaryList)
            {
                if (!Dic[autoSummary.RefStudentID].AutoSummaryDic.Contains(autoSummary))
                {
                    Dic[autoSummary.RefStudentID].AutoSummaryDic.Add(autoSummary);
                }
            }


            foreach (string each in Dic.Keys)
            {
                //if (Dic[each].IsCleadDmmerit())
                //{
                if (Dic[each].DetailAndSummary(97, 1))
                {
                    SetValue(Dic[each], 97, 1);
                }
                if (Dic[each].DetailAndSummary(97, 2))
                {
                    SetValue(Dic[each], 97, 2);
                }
                if (Dic[each].DetailAndSummary(98, 1))
                {
                    SetValue(Dic[each], 98, 1);
                }
                if (Dic[each].DetailAndSummary(98, 2))
                {
                    SetValue(Dic[each], 98, 2);
                }
                if (Dic[each].DetailAndSummary(99, 1))
                {
                    SetValue(Dic[each], 99, 1);
                }
                if (Dic[each].DetailAndSummary(99, 2))
                {
                    SetValue(Dic[each], 99, 2);
                }
                //}
            }

            //錯誤說明
            StringBuilder strBuilder = new StringBuilder();

            strBuilder.AppendLine("檢查(非明細統計)筆數:" + AutoSummaryList.Count());
            strBuilder.AppendLine("檢查(非明細統計)不為0筆數:" + RATRecords.Count);
            strBuilder.AppendLine("具有(轉入異動)記錄之學生共" + UpdateRecordCount + "名,未列入檢查範圍!");
            strBuilder.AppendLine("(非明細定義於:僅轉入生可以有值)");

            var SortedRATRecords = from RATRecord in RATRecords orderby RATRecord.班級, K12.Data.Int.ParseAllowNull(RATRecord.座號), RATRecord.學年度, RATRecord.學期 select RATRecord;

            Message.Data    = SortedRATRecords.ToList();
            Message.Message = strBuilder.ToString();

            if (RATRecords.Count == 0)
            {
                MsgBox.Show("未檢查到錯誤資料!!");
            }

            return(Message);
        }
Esempio n. 8
0
        private void btnNext_Click(object sender, EventArgs e)
        {
            _StudUpdateRecordEntity.SetUpdateDate(dtUpdateDate.Text);
            _StudUpdateRecordEntity.SetComment(txtComment.Text);
            _StudUpdateRecordEntity.SetClassName(txtClass.Text);
            _StudUpdateRecordEntity.SetName(txtName.Text);
            _StudUpdateRecordEntity.SetIDNumber(txtIDNumber.Text);
            _StudUpdateRecordEntity.SetStudentNumber(txtStudentNumber.Text);
            _StudUpdateRecordEntity.SetGender(cboGender.Text);
            _StudUpdateRecordEntity.SetBirthday(dtBirthday.Text);
            _StudUpdateRecordEntity.SetAddress(txtAddress.Text);
            _StudUpdateRecordEntity.SetImportExportSchool(txtExportSchool.Text);
            _StudUpdateRecordEntity.SetLastADDate(dtLastADDate.Text);
            _StudUpdateRecordEntity.SetLastADNumber(txtLastADNumber.Text);
            _StudUpdateRecordEntity.SetADDate(dtADDate.Text);
            _StudUpdateRecordEntity.SetADNumber(txtADNumber.Text);
            _StudUpdateRecordEntity.SetUpdateDescription(cboUpdateDescription.Text);
            int intSchoolYear, intSemester;

            int.TryParse(JHSchool.School.DefaultSchoolYear, out intSchoolYear);
            int.TryParse(JHSchool.School.DefaultSemester, out intSemester);
            _StudUpdateRecordEntity.SchoolYear = intSchoolYear;
            _StudUpdateRecordEntity.Semester   = intSemester;
            _StudUpdateRecordEntity.SetUpdateCode("3");

            // 檢查相同學年度學期異動日期
            List <JHUpdateRecordRecord> StudUpRecList = JHUpdateRecord.SelectByStudentID(_StudUpdateRecordEntity.StudentID);

            foreach (JHUpdateRecordRecord urr in StudUpRecList)
            {
                // 轉入
                if (urr.UpdateCode == "3" && urr.SchoolYear == intSchoolYear && urr.Semester == intSemester)
                {
                    DateTime dtA, dtB;
                    DateTime.TryParse(urr.UpdateDate, out dtA);
                    DateTime.TryParse(dtUpdateDate.Text, out dtB);
                    // 相同異動日期
                    if (dtA == dtB)
                    {
                        if (FISCA.Presentation.Controls.MsgBox.Show("已有一筆相同學年度、學期、異動日期的轉入異動,請問是否覆蓋?", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            JHUpdateRecord.Delete(urr);
                            _StudUpdateRecordEntity.UID = string.Empty;
                        }
                        else
                        {
                            return;
                        }
                    }
                }
            }

            // Save
            DAL.DALTransfer2.SetStudUpdateRecordEntity(_StudUpdateRecordEntity);

            // log
            JHSchool.PermRecLogProcess prlp = new JHSchool.PermRecLogProcess();
            prlp.SaveLog("學生.轉入異動", "新增轉入異動", "新增轉入異動資料,姓名:" + _StudUpdateRecordEntity.GetName() + ",學號:" + _StudUpdateRecordEntity.GetStudentNumber());

            this.Close();
        }