/// <summary>
        /// 取得RowIndex,科目名稱及屬性值相同視為相同群組
        /// </summary>
        /// <param name="Subjects">課程規劃科目列表</param>
        /// <param name="SubjectName"></param>
        /// <param name="Domain"></param>
        /// <param name="Entry"></param>
        /// <param name="RequiredBy"></param>
        /// <param name="Required"></param>
        /// <param name="NotIncludeInCalc"></param>
        /// <param name="NotIncludeInCredit"></param>
        /// <returns></returns>
        public static int GetRowIndex(this List <ProgramSubject> Subjects
                                      , string SubjectName
                                      , string Domain
                                      , string Entry
                                      , string RequiredBy
                                      , bool Required
                                      , bool NotIncludeInCalc
                                      , bool NotIncludeInCredit)
        {
            #region 科目名稱及屬性值相同視為相同群組
            ProgramSubject FindSubject = Subjects.Find(m =>
                                                       m.SubjectName.Equals(SubjectName) &&
                                                       m.Domain.Equals(Domain) &&
                                                       m.Entry.Equals(Entry) &&
                                                       m.RequiredBy.Equals(RequiredBy) &&
                                                       m.Required.Equals(Required) &&
                                                       m.NotIncludedInCalc.Equals(NotIncludeInCalc) &&
                                                       m.NotIncludedInCredit.Equals(NotIncludeInCredit));
            #endregion

            int RowIndex = 1;

            if (FindSubject != null)
            {
                RowIndex = FindSubject.RowIndex;
            }
            else if (Subjects.Count > 0)
            {
                RowIndex = Subjects.Max(m => m.RowIndex) + 1;
            }

            return(RowIndex);
        }
예제 #2
0
        /// <summary>
        /// 實際分批匯入
        /// </summary>
        /// <param name="Rows"></param>
        /// <returns></returns>
        public override string Import(List <IRowStream> Rows)
        {
            if (mOption.Action == ImportAction.InsertOrUpdate)
            {
                #region  找系統中已有課程規劃物件
                Dictionary <string, SHProgramPlanRecord> UpdateProgramPlans = ProgramPlanHelper
                                                                              .SelectProgramPlanByRows(Rows, mProgramPlanName)
                                                                              .ToDictionary(x => x.Name);

                Dictionary <string, SHProgramPlanRecord> NewProgramPlans = new Dictionary <string, SHProgramPlanRecord>();
                #endregion

                #region 將IRowStream轉成對應的物件
                foreach (IRowStream x in Rows)
                {
                    #region 鍵值欄位(課程規劃表名稱、科目名稱、級別)
                    string ProgramPlanName = x.GetValue(mProgramPlanName);       //課程規劃表名稱
                    string SubjectName     = x.GetValue(mSubject);               //年級
                    string GradeYear       = x.GetValue(mGradeYar);              //年級
                    string Semester        = x.GetValue(mSemester);              //年級
                    #endregion

                    #region 科目屬性
                    string Domain             = x.GetValue(mDomain);                                        //領域
                    string Entry              = x.GetValue(mEntry);                                         //分項
                    string RequiredBy         = x.GetValue(mRequiredBy).Equals("校") ? "校訂" : "部訂";          //校部訂
                    bool   Required           = x.GetValue(mRequired).Equals("必") ? true : false;           //必選修
                    bool   NotIncludeInCalc   = x.GetValue(mNotIncludeInCalc).Equals("是") ? true : false;   //不需評分
                    bool   NotIncludeInCredit = x.GetValue(mNotIncludeInCredit).Equals("是") ? true : false; //不計學分
                    #endregion

                    #region 取得課程規劃表物件,若不存在則新增
                    SHProgramPlanRecord ProgramPlanRecord = UpdateProgramPlans.ContainsKey(ProgramPlanName) ? UpdateProgramPlans[ProgramPlanName] : null;

                    if (ProgramPlanRecord == null)
                    {
                        ProgramPlanRecord = NewProgramPlans.ContainsKey(ProgramPlanName) ? NewProgramPlans[ProgramPlanName] : null;

                        if (ProgramPlanRecord == null)
                        {
                            ProgramPlanRecord      = new SHProgramPlanRecord();
                            ProgramPlanRecord.Name = ProgramPlanName;
                            NewProgramPlans.Add(ProgramPlanRecord.Name, ProgramPlanRecord);
                        }
                    }
                    #endregion

                    #region 依『科目名稱』、『年級』及『學期』尋找科目,若無則新增
                    ProgramSubject Subject = ProgramPlanRecord.Subjects
                                             .Find(v => v.SubjectName.Equals(SubjectName) &&
                                                   ("" + v.GradeYear).Equals(GradeYear) &&
                                                   ("" + v.Semester).Equals(Semester));

                    if (Subject == null)
                    {
                        Subject             = new ProgramSubject();
                        Subject.Category    = string.Empty;
                        Subject.SubjectName = SubjectName;
                        Subject.GradeYear   = K12.Data.Int.Parse(GradeYear);
                        Subject.Semester    = K12.Data.Int.Parse(Semester);
                        Subject.RowIndex    = ProgramPlanRecord.Subjects.GetRowIndex(
                            SubjectName,
                            Domain,
                            Entry,
                            RequiredBy,
                            Required,
                            NotIncludeInCalc,
                            NotIncludeInCredit);
                        ProgramPlanRecord.Subjects.Add(Subject);
                    }
                    #endregion

                    #region 將相關欄位值填入
                    if (mOption.SelectedFields.Contains(mLevel))
                    {
                        string Level    = x.GetValue(mLevel);
                        int?   intLevel = null;
                        if (!string.IsNullOrEmpty(Level))
                        {
                            intLevel = K12.Data.Int.Parse(Level);
                        }
                        Subject.Level = intLevel;

                        #region 處理StartLevel,只有考有填Level(級別)的情況
                        if (Subject.Level.HasValue)
                        {
                            List <ProgramSubject> LevelSubjects = ProgramPlanRecord.Subjects
                                                                  .FindAll(m =>
                                                                           m.SubjectName.Equals(SubjectName) &&
                                                                           m.Level != null &&
                                                                           m.Domain == Domain &&
                                                                           m.Entry == Entry &&
                                                                           m.RequiredBy == RequiredBy &&
                                                                           m.Required == Required &&
                                                                           m.NotIncludedInCalc == NotIncludeInCalc &&
                                                                           m.NotIncludedInCredit == NotIncludeInCredit
                                                                           );

                            LevelSubjects.Add(Subject);

                            #region 全部重新計算StartLevel,確保值正確
                            int StartLevel = int.MaxValue;

                            LevelSubjects.ForEach(m =>
                            {
                                if (m.Level < StartLevel)
                                {
                                    StartLevel = m.Level.Value;
                                }
                            });

                            if (StartLevel < int.MaxValue)
                            {
                                LevelSubjects.ForEach(m => m.StartLevel = StartLevel);
                            }
                            #endregion
                        }
                        #endregion
                    }

                    //組合成科目完成名稱
                    Subject.FullName            = Subject.Level.HasValue ? Subject.SubjectName + " " + GetNumber(Subject.Level.Value) : Subject.SubjectName;
                    Subject.Domain              = Domain;
                    Subject.Entry               = Entry;
                    Subject.Credit              = K12.Data.Decimal.Parse(x.GetValue(mCredit));
                    Subject.RequiredBy          = RequiredBy;
                    Subject.Required            = Required;
                    Subject.NotIncludedInCalc   = NotIncludeInCalc;
                    Subject.NotIncludedInCredit = NotIncludeInCredit;
                    #endregion
                }

                #region 實際新增或更新課程規劃表
                if (UpdateProgramPlans.Count > 0)
                {
                    int UpdateCount = SHProgramPlan.Update(UpdateProgramPlans.Values);
                }

                if (NewProgramPlans.Count > 0)
                {
                    List <string> NewProgramIDs = SHProgramPlan.Insert(NewProgramPlans.Values);
                }
                #endregion

                #endregion
            }
            else if (mOption.Action == ImportAction.Delete)
            {
            }

            return(mstrBuilder.ToString());
        }