Пример #1
0
        // MessageBox.Show("No WeekTable Found\r\nCourse:" + SelectedCourse.Course[course].Name);
        void Find(WeekTable WT, int courseID)
        {
            if (courseID == SelectedCourse.Course.Count)//success
            {
                WeekTableList.Add(WT);
                return;
            }
            WeekTable tWT;

            for (int i = 0; i < SelectedCourse.Course[courseID].Group.Count; i++)
            {
                tWT = WT.Copy();
                if (tWT.TryAdd(courseID, i, ref SelectedCourse))
                {
                    Find(tWT, courseID + 1);
                }
            }

            //Find(WT.Copy(), courseID + 1, 0);

            //if (!WT.TryAdd(courseID, group, ref SelectedCourse))
            //  return;

            //if (SelectedCourse.Course[courseID].Group.Count < group)
            //  Find(WT.Copy(), courseID, group + 1);
        }
Пример #2
0
    private void Start()
    {
        mChooseCards = new ChoiceCard[3];

        GameEvent.Instance.SubscribeMonthEvent(ShowUpChoiceCards);

        mStartByWeekTable = GameEvent.Instance.GetWeek.GetWeekTable;

        SortCardArray(TrainCards, mDayCondition = 0);
    }
Пример #3
0
        /// <summary>
        /// 建立傳統周課表 - 一筆傳統周課表
        /// </summary>
        /// <returns></returns>
        public WeekTable CreateWeekData(string token, string circleKey, int classWeekType, string place, DateTime startDate, DateTime endDate)
        {
            var tokenService = new TokenService();
            var tokenInfo    = tokenService.GetTokenInfo(token).Result;

            if (tokenInfo == null)
            {
                return(null);
            }

            var learningCircleService = new LearningCircleService();
            var learningCircleinfo    = learningCircleService.GetDetailByOuterKey(circleKey);

            if (learningCircleinfo == null)
            {
                return(null);
            }
            var startHour        = Convert.ToInt32(startDate.ToString("HH"));
            var endHour          = Convert.ToInt32(endDate.ToString("HH"));
            var dayOfWeekService = new Utility.DayOfWeekTools();
            var week             = dayOfWeekService.ChangeToCht(startDate.DayOfWeek);

            //9點以前都是第一節,9點以後都(目前小時-7)節
            startHour = startHour <= 9 ? 1 : startHour - 7;
            endHour   = endHour <= 9 ? 1 : endHour - 7;
            var entity = new WeekTable()
            {
                ClassWeekType    = classWeekType,
                CreateUtcDate    = DateTime.UtcNow,
                Creator          = tokenInfo.MemberId,
                EndPeriod        = endHour,
                EndTime          = endDate.ToUniversalTime(),
                LearningCircleId = learningCircleinfo.Id,
                Place            = place,
                StartPeriod      = startHour,
                StartTime        = startDate.ToUniversalTime(),
                Week             = week
            };

            try
            {
                var db = _uow.DbContext;
                db.WeekTable.Add(entity);
                db.SaveChanges();
                return(entity);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Пример #4
0
        private bool[] NormalWeekTable()
        {
            var result = new bool[9];

            result.Select(r => r = false);
            if (WeekTable == "По чётным дням")
            {
                result[8] = true;
                return(result);
            }
            else if (WeekTable == "По нечётным дням")
            {
                result[7] = true;
                return(result);
            }
            else
            {
                string[] strWeekArr = WeekTable.Split(' ');
                if (strWeekArr.Contains("Пн."))
                {
                    result[0] = true;
                }
                if (strWeekArr.Contains("Вт."))
                {
                    result[1] = true;
                }
                if (strWeekArr.Contains("Ср."))
                {
                    result[2] = true;
                }
                if (strWeekArr.Contains("Чт."))
                {
                    result[3] = true;
                }
                if (strWeekArr.Contains("Пт."))
                {
                    result[4] = true;
                }
                if (strWeekArr.Contains("Сб."))
                {
                    result[5] = true;
                }
                if (strWeekArr.Contains("Вс."))
                {
                    result[6] = true;
                }
            }
            return(result);
        }
Пример #5
0
    private void Update()
    {
        WeekTable = GameEvent.Instance.GetWeek.GetWeekTable;

        if (GameEvent.Instance.GetResource.GetResourceTable.foodTable.Now <= 0 ||
            GameEvent.Instance.GetResource.GetResourceTable.leaderShipTable.Now <= 0 ||
            GameEvent.Instance.GetResource.GetResourceTable.populationTable.Now <= 0)
        {
            GameObject day = new GameObject("DaySaver", typeof(DaySaver));

            day.GetComponent <DaySaver>().DaySave(SumDay, WeekTable);

            DontDestroyOnLoad(day);

            SceneManager.LoadScene(EndingIndex);
        }
    }
Пример #6
0
        public List <WeekTable> Run(out AllCourseCls SelectedCourseOut)
        {
            SelectedCourseOut = null;
            //chec tmp req columns [Course Group   Present Day Period  Room]
            CourseC     = GroupC = PresentC = DayC = PeriodC = RoomC =
                CourseR = GroupR = PresentR = DayR = PeriodR = RoomR = ThenR = -1;
            string tmp;

            for (int i = 0; i < AllCourseTable.Columns.Count; i++)
            {
                tmp = AllCourseTable[i, 0].Value.ToString();
                if (tmp == Course)
                {
                    CourseC = i;
                }
                else if (tmp == Group)
                {
                    GroupC = i;
                }
                else if (tmp == Present)
                {
                    PresentC = i;
                }
                else if (tmp == Day)
                {
                    DayC = i;
                }
                else if (tmp == Period)
                {
                    PeriodC = i;
                }
                else if (tmp == Room)
                {
                    RoomC = i;
                }
            }
            for (int i = 0; i < AllRoles.Columns.Count; i++)
            {
                tmp = AllRoles.Columns[i].HeaderText.ToString();
                if (tmp == Then)
                {
                    ThenR = i;
                }
                else if (tmp == Course)
                {
                    CourseR = i;
                }
                else if (tmp == Group)
                {
                    GroupR = i;
                }
                else if (tmp == Present)
                {
                    PresentR = i;
                }
                else if (tmp == Day)
                {
                    DayR = i;
                }
                else if (tmp == Period)
                {
                    PeriodR = i;
                }
                else if (tmp == Room)
                {
                    RoomR = i;
                }
            }

            if (
                (CourseC == -1) || (GroupC == -1) || (PresentC == -1) || (DayC == -1) || (PeriodC == -1) || (RoomC == -1) ||
                (CourseR == -1) || (GroupR == -1) || (PresentR == -1) || (DayR == -1) || (PeriodR == -1) || (RoomR == -1) || (ThenR == -1)
                )
            {
                MessageBox.Show("Error\r\nCheack : [Course, Group, Present, Day, Period, Room]");
                return(null);
            }
            //split roles into (include/exclute)
            //DGVIncude.Rows.Clear();
            //DGVIncude.Columns.Clear();
            //DGVExclude.Rows.Clear();
            //DGVExclude.Columns.Clear();
            DGVIncude  = new DataGridView();
            DGVExclude = new DataGridView();
            DGVIncude.AllowUserToAddRows = DGVExclude.AllowUserToAddRows = false;
            bool t = AllRoles.AllowUserToAddRows;

            AllRoles.AllowUserToAddRows = false;
            for (int i = 0; i < AllRoles.Columns.Count; i++)
            {
                DGVIncude.Columns.Add(AllRoles.Columns[i].Name, AllRoles.Columns[i].HeaderText);
                DGVExclude.Columns.Add(AllRoles.Columns[i].Name, AllRoles.Columns[i].HeaderText);
            }
            for (int i = 0; i < AllRoles.Rows.Count; i++)
            {
                List <string> tmpRow = new List <string>();
                for (int k = 0; k < AllRoles.Rows[i].Cells.Count; k++)
                {
                    tmpRow.Add((AllRoles.Rows[i].Cells[k].Value ?? "").ToString());
                }
                if (AllRoles[ThenR, i].Value.ToString() == Include)
                {
                    DGVIncude.Rows.Add(tmpRow.ToArray());
                }
                else
                {
                    DGVExclude.Rows.Add(tmpRow.ToArray());
                }
            }
            AllRoles.AllowUserToAddRows = t;
            //build full table
            AllCourse = new AllCourseCls();
            for (int i = 1; i < AllCourseTable.Rows.Count; i++)//Row
            {
                Debug.WriteLine("Start: " + i);
                DataGridViewRow r = AllCourseTable.Rows[i];
                AllCourse.AddRow(r.Cells[CourseC].Value, r.Cells[GroupC].Value, r.Cells[PresentC].Value,
                                 r.Cells[DayC].Value, r.Cells[PeriodC].Value, r.Cells[RoomC].Value);
                Debug.WriteLine(" -DoneL" + i);
            }
            //delet all exc* from table
            for (int i = 0; i < DGVExclude.Rows.Count; i++)//R
            {
                string value;
                int    CourseIndex, GroupIndex;

                value = (DGVExclude.Rows[i].Cells[CourseR].Value ?? "").ToString();
                if (value != Any)
                {
                    AllCourse.IsCourseIn(value, out CourseIndex); AllCourse.Course.RemoveAt(CourseIndex);
                }

                value = (DGVExclude.Rows[i].Cells[GroupR].Value ?? "").ToString();
                if (value != Any)
                {
                    while (AllCourse.IsGroupIn(value, out CourseIndex, out GroupIndex))
                    {
                        AllCourse.Course[CourseIndex].Group.RemoveAt(GroupIndex);
                    }
                }

                value = (DGVExclude.Rows[i].Cells[PresentR].Value ?? "").ToString();
                if (value != Any)
                {
                    while (AllCourse.IsPresentIn(value, out CourseIndex, out GroupIndex))
                    {
                        AllCourse.Course[CourseIndex].Group.RemoveAt(GroupIndex);
                    }
                }

                value = (DGVExclude.Rows[i].Cells[DayR].Value ?? "").ToString();
                if (value != Any)
                {
                    while (AllCourse.IsDayIn(value, out CourseIndex, out GroupIndex))
                    {
                        AllCourse.Course[CourseIndex].Group.RemoveAt(GroupIndex);
                    }
                }

                value = (DGVExclude.Rows[i].Cells[PeriodR].Value ?? "").ToString();
                if (value != Any)
                {
                    while (AllCourse.IsPeriodIn(value, out CourseIndex, out GroupIndex))
                    {
                        AllCourse.Course[CourseIndex].Group.RemoveAt(GroupIndex);
                    }
                }
            }
            //get just inc* from table
            SelectedCourse = new AllCourseCls();
            for (int i = 0; i < DGVIncude.Rows.Count; i++)//R
            {
                string value;
                int    CourseIndex = -1;// GroupIndex = -1;

                value = (DGVIncude.Rows[i].Cells[CourseR].Value ?? "").ToString();
                if (value != Any)
                {
                    AllCourse.IsCourseIn(value, out CourseIndex); SelectedCourse.Course.Add(AllCourse.Course[CourseIndex]);
                }
            }

            //check if bosibe for here
            for (int i = 0; i < SelectedCourse.Course.Count; i++)
            {
                if (SelectedCourse.Course[i].Group.Count == 0)
                {
                    MessageBox.Show("there is no posible Programs\r\nCourse:" + SelectedCourse.Course[i].Name);
                    return(null);
                }
            }

            //sort Selected Course for group count
            SelectedCourse.SortCourses();
            //Find All Timetable
            WeekTableList = new List <WeekTable>();
            WeekTable tmpWT = new WeekTable();

            //WeekTableList.Add(new WeekTable());
            Find(tmpWT, 0);
            SelectedCourseOut = SelectedCourse;
            return(WeekTableList);
        }
Пример #7
0
 //override
 public void Initialize()
 {
     _weekTable = evt.InitWeekTable;
 }
Пример #8
0
        /// <summary>
        /// 修改周課表
        /// </summary>
        /// <param name="token"></param>
        /// <param name="circleKey"></param>
        /// <param name="place"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="weeks"></param>
        /// <returns></returns>
        public bool UpdateWeekDatas(string token, string circleKey, string place, DateTime startDate, DateTime endDate, int classWeekType, List <int> weeks)
        {
            var tokenService = new TokenService();
            var tokenInfo    = tokenService.GetTokenInfo(token).Result;

            if (tokenInfo == null)
            {
                return(false);
            }

            var learningCircleService = new LearningCircleService();
            var learningCircleinfo    = learningCircleService.GetDetailByOuterKey(circleKey);

            if (learningCircleinfo == null)
            {
                return(false);
            }

            var startHour        = Convert.ToInt32(startDate.ToString("HH"));
            var endHour          = Convert.ToInt32(endDate.ToString("HH"));
            var dayOfWeekService = new Utility.DayOfWeekTools();
            var startWeek        = startDate.DayOfWeek;

            //9點以前都是第一節,9點以後都(目前小時-7)節
            startHour = startHour <= 9 ? 1 : startHour - 7;
            endHour   = endHour <= 9 ? 1 : endHour - 7;

            try
            {
                var db = _uow.DbContext;
                //排序 周日:0 ~周六:6
                weeks = weeks.OrderBy(t => t).ToList();
                //查看week是否有錯誤資料
                var weekMax = weeks.Max(t => t);
                if (weekMax >= 7)
                {
                    return(false);
                }
                //取得資料庫目前傳統課表
                var sqlWeekTablesDatas = GetByLearningCircleId(learningCircleinfo.Id);
                //暫存作為刪除的資料
                var tempWeekTableDatas = sqlWeekTablesDatas.ToList();
                foreach (var week in weeks)
                {
                    var weekInfo = (DayOfWeek)week;
                    //踢出不要刪除的weekTable資訊
                    if (tempWeekTableDatas.Count() > 0)
                    {
                        var removeTempData = tempWeekTableDatas.FirstOrDefault(t => t.StartTime.ToLocalTime().DayOfWeek.ToString() == weekInfo.ToString());
                        if (removeTempData != null)
                        {
                            tempWeekTableDatas.Remove(removeTempData);
                        }
                    }

                    //設定開始日期
                    var _startDate = startDate;
                    var checkWeek  = week - (int)startWeek;
                    if (checkWeek < 0)
                    {
                        _startDate = startDate.AddDays(7 + checkWeek);
                    }
                    else if (checkWeek > 0)
                    {
                        _startDate = startDate.AddDays(checkWeek);
                    }

                    //找出並修改要保留的資料
                    var editDataInfo = sqlWeekTablesDatas.FirstOrDefault(t => t.StartTime.ToLocalTime().DayOfWeek.ToString() == weekInfo.ToString());
                    if (editDataInfo != null)
                    {
                        editDataInfo.Place         = place;
                        editDataInfo.StartTime     = _startDate.ToUniversalTime();
                        editDataInfo.EndTime       = endDate.ToUniversalTime();
                        editDataInfo.StartPeriod   = startHour;
                        editDataInfo.EndPeriod     = endHour;
                        editDataInfo.ClassWeekType = classWeekType;
                        continue;
                    }

                    //資料庫無該資料,需要新增
                    var entity = new WeekTable()
                    {
                        ClassWeekType    = classWeekType,
                        CreateUtcDate    = DateTime.UtcNow,
                        Creator          = tokenInfo.MemberId,
                        EndPeriod        = endHour,
                        EndTime          = endDate.ToUniversalTime(),
                        LearningCircleId = learningCircleinfo.Id,
                        Place            = place,
                        StartPeriod      = startHour,
                        StartTime        = _startDate.ToUniversalTime(),
                        Week             = dayOfWeekService.ChangeToCht(weekInfo)
                    };
                    db.WeekTable.Add(entity);
                }
                //刪除timeTable資訊
                foreach (var deleteWeek in tempWeekTableDatas)
                {
                    var timeTableInfo        = db.TimeTable.Where(t => t.Course_No == circleKey).ToList();
                    var deleteTimeTableDatas = timeTableInfo.Where(t => t.StartDate.Value.DayOfWeek.ToString() == deleteWeek.StartTime.DayOfWeek.ToString()).ToList();
                    db.TimeTable.RemoveRange(deleteTimeTableDatas);
                }
                //刪除weektable資訊
                db.WeekTable.RemoveRange(tempWeekTableDatas);
                db.SaveChanges();
                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Пример #9
0
        /// <summary>
        /// 建立多筆傳統周課表
        /// </summary>
        /// <param name="token"></param>
        /// <param name="circleKey"></param>
        /// <param name="classWeekType"></param>
        /// <param name="place"></param>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="weeks"></param>
        /// <returns></returns>
        public IEnumerable <WeekTable> CreateWeekDatas(string token, string circleKey, int classWeekType, string place, DateTime startDate, DateTime endDate, List <int> weeks)
        {
            var saveDatas = new List <WeekTable>();

            if (weeks.Count <= 0) //只新增一筆
            {
                var data = CreateWeekData(token, circleKey, classWeekType, place, startDate, endDate);
                if (data == null)
                {
                    return(null);
                }
                saveDatas.Add(data);
                return(saveDatas);
            }

            var tokenService = new TokenService();
            var tokenInfo    = tokenService.GetTokenInfo(token).Result;

            if (tokenInfo == null)
            {
                return(null);
            }

            var learningCircleService = new LearningCircleService();
            var learningCircleinfo    = learningCircleService.GetDetailByOuterKey(circleKey);

            if (learningCircleinfo == null)
            {
                return(null);
            }

            var startHour        = Convert.ToInt32(startDate.ToString("HH"));
            var endHour          = Convert.ToInt32(endDate.ToString("HH"));
            var dayOfWeekService = new Utility.DayOfWeekTools();
            var startWeek        = startDate.DayOfWeek;

            //9點以前都是第一節,9點以後都(目前小時-7)節
            startHour = startHour < 9 ? 1 : startHour - 7;
            endHour   = endHour < 9 ? 1 : endHour - 7;

            try
            {
                var db = _uow.DbContext;
                weeks = weeks.OrderBy(t => t).ToList();
                var weekMax = weeks.Max(t => t);
                if (weekMax >= 7)
                {
                    return(null);
                }

                foreach (var week in weeks)
                {
                    var weekInfo   = (DayOfWeek)week;
                    var _startDate = startDate;
                    var checkWeek  = week - (int)startWeek;
                    if (checkWeek < 0)
                    {
                        _startDate = startDate.AddDays(7 + checkWeek);
                    }
                    else if (checkWeek > 0)
                    {
                        _startDate = startDate.AddDays(checkWeek);
                    }
                    var entity = new WeekTable()
                    {
                        ClassWeekType    = classWeekType,
                        CreateUtcDate    = DateTime.UtcNow,
                        Creator          = tokenInfo.MemberId,
                        EndPeriod        = endHour,
                        EndTime          = endDate.ToUniversalTime(),
                        LearningCircleId = learningCircleinfo.Id,
                        Place            = place,
                        StartPeriod      = startHour,
                        StartTime        = _startDate.ToUniversalTime(),
                        Week             = dayOfWeekService.ChangeToCht(weekInfo)
                    };
                    saveDatas.Add(entity);
                }
                db.WeekTable.AddRange(saveDatas);
                db.SaveChanges();
                return(saveDatas);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Пример #10
0
 public void DaySave(int sumDay, WeekTable week)
 {
     mSumDay = sumDay; mWeekTable = week;
 }