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); }
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); }
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); }
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); }
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}"); }