Esempio n. 1
0
        public ScheduleBoard GenerateScheduleBoard(Guid scheduleId)
        {
            Logger.Debug($"Start generating schedule board: {scheduleId}");

            if (scheduleId == null || scheduleId == Guid.Empty)
            {
                Logger.Error($"ScheduleId is empty.");
                throw new ArgumentNullException("scheduleId");
            }

            Schedule.Models.SchedulingTable schedule = this.UnitOfWork.SchedulingTableRepository.GetById(scheduleId);

            if (schedule == null)
            {
                Logger.Error($"Schedule ({scheduleId}) does not exist.");
                throw new InvalidOperationException($"Schedule ({scheduleId}) does not exist.");
            }

            Guid semesterId = schedule.SemesterId;

            if (semesterId == null || semesterId == Guid.Empty)
            {
                Logger.Error($"Schedule ({scheduleId}) does not content SemesterId.");
                throw new InvalidOperationException($"Schedule ({scheduleId}) does not content SemesterId.");
            }

            ScheduleBoard board = new ScheduleBoard();

            board.Id = scheduleId;

            Logger.Debug($"Start calculating schedule-board for semester: {semesterId}");

            // Get Class Groups
            List <ClassGroup> classGroups = this.UnitOfWork.ClassGroupRepository.GetSemesterClassGroups(semesterId).ToList();

            Logger.Debug($"Found {classGroups.Count} class-groups");

            var mapper = config.CreateMapper();

            List <ClassGroupSchedule> cgs = mapper.Map <List <ClassGroup>, List <ClassGroupSchedule> >(classGroups);

            Logger.Debug($"Start calculating schedule for {cgs.Count} class-group.");

            foreach (ClassGroupSchedule cg in cgs)
            {
                Logger.Debug($"Calculating group: {cg.Name}");
                board.ClassGroups.Add(cg);
                this.CalculateClassGroupSchedule(cg);
                this.CalculateSchedule(cg, board);
                Logger.Debug($"Complete calculating group: {cg.Name}");
            }

            this.UnitOfWork.SaveChanges();

            Logger.Debug($"Complete calculating semester: {semesterId}");

            return(board);
        }
Esempio n. 2
0
        public ScheduleStageInfo CalculateSemesterScheduleBoard(Guid semesterId)
        {
            Schedule.Models.SchedulingTable scheduleTable = this.UnitOfWork.SchedulingTableRepository.GetSemesterDefaultSchedule(semesterId);

            Guid scheduleId = Guid.Empty;

            if (scheduleTable == null)
            {
                scheduleTable = this.UnitOfWork.SchedulingTableRepository.CreateSchedule(semesterId);
                this.UnitOfWork.SaveChanges();
            }

            scheduleId = scheduleTable.Id;

            this.UnitOfWork.SchedulingTableRepository.ChangedValidated(scheduleId);
            Logger.Debug($"Changed status of schedule to VALIDATED: {scheduleId}");
            this.UnitOfWork.SaveChanges();

            this.UnitOfWork.SchedulingTableRepository.ChangeGeneratingStarted(scheduleId);
            Logger.Debug($"Changed status of schedule to GENERATING: {scheduleId}");
            this.UnitOfWork.SaveChanges();

            this.ClearScheduleBoard(scheduleId);
            Logger.Debug($"Cleared/Reset schedule-board: {scheduleId}");

            ScheduleBoard board = this.GenerateScheduleBoard(scheduleId);

            this.SaveScheduleBoard(board);

            this.UnitOfWork.SchedulingTableRepository.ChangeGeneratingCompleted(scheduleId);
            Logger.Debug($"Changed status of schedule to GENERATED: {scheduleId}");

            this.UnitOfWork.SaveChanges();

            SchedulingTable schedule = this.UnitOfWork.SchedulingTableRepository.GetById(scheduleId);

            ScheduleStageInfo scheduleStageInfo = Mapper.Map <Schedule.Models.SchedulingTable, Schedule.Models.ScheduleStageInfo>(schedule);

            return(scheduleStageInfo);
        }
Esempio n. 3
0
        public ClassScheduleBoard LoadClassScheduleBoard(Guid scheduleId)
        {
            Logger.Debug($"Start loading class schedule-board: {scheduleId}");

            if (scheduleId == null || scheduleId == Guid.Empty)
            {
                Logger.Error($"ScheduleId is empty.");
                throw new ArgumentNullException("scheduleId");
            }

            Schedule.Models.SchedulingTable schedule = this.UnitOfWork.SchedulingTableRepository.GetById(scheduleId);

            if (schedule == null)
            {
                Logger.Error($"Schedule ({scheduleId}) does not exist.");
                throw new InvalidOperationException($"Schedule ({scheduleId}) does not exist.");
            }

            Guid semesterId = schedule.SemesterId;

            if (semesterId == null || semesterId == Guid.Empty)
            {
                Logger.Error($"Schedule ({scheduleId}) does not content SemesterId.");
                throw new InvalidOperationException($"Schedule ({scheduleId}) does not content SemesterId.");
            }

            ClassScheduleBoard board = new ClassScheduleBoard();

            board.Id           = scheduleId;
            board.WorkingDays  = (int)Commons.Constants.DAY_OF_WEEK;
            board.ShiftPerDay  = 2;
            board.SlotPerShift = 5;

            Logger.Debug($"Start loading schedule-board for semester: {semesterId}");

            // Get Class Groups
            List <ClassGroup> classGroups = this.UnitOfWork.ClassGroupRepository.GetSemesterClassGroups(semesterId).ToList();

            Logger.Debug($"Found {classGroups.Count} class-groups");

            var mapper = config.CreateMapper();

            List <ClassGroupSchedule> cgs = mapper.Map <List <ClassGroup>, List <ClassGroupSchedule> >(classGroups);

            foreach (ClassGroupSchedule cg in cgs)
            {
                Logger.Debug($"Loading group: {cg.Name}");
                board.ClassGroups.Add(cg);

                foreach (ClassRoomSchedule cr in cg.ClassRooms)
                {
                    Timetable tt = this.UnitOfWork.ClassTimetableRepository.GetTimetable(board.Id, cr.Id);
                    if (tt != null)
                    {
                        TimetableModel ttm = mapper.Map <Timetable, TimetableModel>(tt);

                        cr.Timetable = ttm;
                        cr.Timetable.TimeTableMatrix = ttm.GenerateTimeTableMatrix();
                    }

                    List <ClassCourse> courses = this.UnitOfWork.ClassCourseRepository.GetCoursesByClassRoom(cr.Id).ToList();
                    cr.Courses = mapper.Map <List <ClassCourse>, List <ClassCourseSchedule> >(courses);
                }

                Logger.Debug($"Complete loading group: {cg.Name}");
            }

            Logger.Debug($"Complete loading semester: {semesterId}");

            return(board);
        }
Esempio n. 4
0
        public TeacherSchedule LoadTeacherScheduleBoard(Guid scheduleId)
        {
            Logger.Debug($"Start loading teacher schedule-board: {scheduleId}");

            if (scheduleId == null || scheduleId == Guid.Empty)
            {
                Logger.Error($"ScheduleId is empty.");
                throw new ArgumentNullException("scheduleId");
            }

            Schedule.Models.SchedulingTable schedule = this.UnitOfWork.SchedulingTableRepository.GetById(scheduleId);

            if (schedule == null)
            {
                Logger.Error($"Schedule ({scheduleId}) does not exist.");
                throw new InvalidOperationException($"Schedule ({scheduleId}) does not exist.");
            }

            Guid semesterId = schedule.SemesterId;

            if (semesterId == null || semesterId == Guid.Empty)
            {
                Logger.Error($"Schedule ({scheduleId}) does not content SemesterId.");
                throw new InvalidOperationException($"Schedule ({scheduleId}) does not content SemesterId.");
            }

            TeacherSchedule board = new TeacherSchedule();

            board.Id           = scheduleId;
            board.WorkingDays  = (int)Commons.Constants.DAY_OF_WEEK;
            board.ShiftPerDay  = 2;
            board.SlotPerShift = 5;

            Logger.Debug($"Start loading teacher schedule-board for semester: {semesterId}");

            // Get Class Groups
            List <Teacher> teachers = this.UnitOfWork.TeacherRepository.GetSemesterTeacher(semesterId).ToList();

            Logger.Debug($"Found {teachers.Count} teachers");

            var mapper = config.CreateMapper();

            List <StoneCastle.Scheduler.Models.TeacherScheduleModel> teacherModels = mapper.Map <List <Teacher>, List <StoneCastle.Scheduler.Models.TeacherScheduleModel> >(teachers);

            foreach (StoneCastle.Scheduler.Models.TeacherScheduleModel teacher in teacherModels)
            {
                Logger.Debug($"Loading teacher: {teacher.Account.Profile.FullName}");
                board.Teachers.Add(teacher);

                Timetable tt = this.UnitOfWork.TeacherRepository.GetTeacherTimetable(teacher.Id, scheduleId);

                teacher.Timetable = mapper.Map <Timetable, TimetableModel>(tt);

                teacher.Timetable.TimeTableMatrix2 = teacher.Timetable.GenerateTimeTableMatrix2();

                Logger.Debug($"Complete loading teacher schedule: {teacher.Account.Profile.FullName}");
            }

            Logger.Debug($"Complete loading teacher schedule for semester: {semesterId}");

            return(board);
        }
Esempio n. 5
0
        public void SaveScheduleBoard(ScheduleBoard scheduleBoard)
        {
            if (scheduleBoard == null)
            {
                Logger.Error($"scheduleBoard is empty.");
                throw new ArgumentNullException("scheduleBoard");
            }

            Logger.Debug($"Start saving schedule board: {scheduleBoard.Id}");

            Schedule.Models.SchedulingTable schedule = this.UnitOfWork.SchedulingTableRepository.GetById(scheduleBoard.Id);

            if (schedule == null)
            {
                Logger.Error($"Schedule ({scheduleBoard.Id}) does not exist.");
                throw new InvalidOperationException($"Schedule ({scheduleBoard.Id}) does not exist.");
            }

            var mapper = config.CreateMapper();

            foreach (ClassGroupSchedule cg in scheduleBoard.ClassGroups)
            {
                foreach (ClassRoomSchedule crs in cg.ClassRooms)
                {
                    Timetable tt = new Timetable()
                    {
                        Id           = Guid.NewGuid(),
                        Name         = crs.Name,
                        ShiftPerDay  = crs.Timetable.ShiftPerDay,
                        SlotPerShift = crs.Timetable.SlotPerShift,
                    };

                    this.UnitOfWork.ClassTimetableRepository.Create(scheduleBoard.Id, crs.Id, tt);

                    for (int i = 0; i < crs.Timetable.ShiftPerDay * crs.Timetable.SlotPerShift; i++)
                    {
                        for (int j = 0; j < Commons.Constants.DAY_OF_WEEK; j++)
                        {
                            CourseSectionSchedule cs = crs.Timetable.TimeTableMatrix[i, j];

                            if (cs != null && (cs.Id != null && cs.Id != Guid.Empty) && (cs.ClassCourse != null && (cs.ClassCourse.Id != null && cs.ClassCourse.Id != Guid.Empty)))
                            {// Added
                                //CourseSection courseSection = mapper.Map<CourseSectionSchedule, CourseSection>(cs);
                                CourseSection courseSection = new CourseSection();
                                courseSection.Day           = (DayOfWeek)j;
                                courseSection.Id            = Guid.NewGuid();
                                courseSection.TimetableId   = tt.Id;
                                courseSection.ClassCourseId = cs.ClassCourse.Id;
                                courseSection.Stage         = cs.Stage;
                                courseSection.Shift         = cs.Shift;
                                courseSection.Slot          = cs.Slot;

                                this.UnitOfWork.CourseSectionRepository.Insert(courseSection);
                            }
                        }
                    }
                }
            }

            this.UnitOfWork.SaveChanges();

            Logger.Debug($"Complete saving schedule board: {scheduleBoard.Id}");
        }