public void GetUsingClass() { var usingClass = (from uc in DataProvider.Ins.DB.USINGCLASSes join cl in DataProvider.Ins.DB.CLASSes on uc.ClassID equals cl.ClassID join rm in DataProvider.Ins.DB.ROOMs on uc.RoomID equals rm.RoomID where DbFunctions.AddDays(_startDate, (uc.Day_ + 6) % 7) >= uc.StartDate && // Satisfy the start and end date of class DbFunctions.AddDays(_startDate, (uc.Day_ + 6) % 7) <= uc.EndDate && // Satisfy the start and end date of class (DbFunctions.DiffDays(DbFunctions.AddDays(_startDate, (uc.Day_ + 6) % 7), cl.StartDate) / 7) % uc.RepeatCycle == 0 // satisfied the repeat cycle select new { uc, cl, rm } ).ToList(); foreach (var ins in usingClass) { if (!IsExistRoom(ins.rm)) { var listPeriod = (from period in DataProvider.Ins.DB.PERIOD_TIMERANGE where period.PeriodID != -1 select period).ToList(); foreach (var period in listPeriod) { RoomTableRow roomTableRow = new RoomTableRow(); roomTableRow.room = ins.rm; roomTableRow.period = period; listRoomTableRow.Add(roomTableRow); } } // for each using, we split it into multiple period row var listPeriodTimeRange = Utilities.Utils.GetListPeriodTimeRange(ins.uc.StartPeriod, ins.uc.Duration); foreach (var periodTimeRange in listPeriodTimeRange) { if (IsExistRoomRow(ins.rm, periodTimeRange)) { var roomTableRow = listRoomTableRow.First((x) => { return(x.room.RoomID == ins.rm.RoomID && x.period.PeriodID == periodTimeRange.PeriodID); }); roomTableRow.usings[ins.uc.Day_] = ins.uc; } else { RoomTableRow roomTableRow = new RoomTableRow(); roomTableRow.room = ins.rm; roomTableRow.period = periodTimeRange; roomTableRow.usings[ins.uc.Day_] = ins.uc; listRoomTableRow.Add(roomTableRow); } } } }
public void GetUsingEvent() { var usingEvent = (from ev in DataProvider.Ins.DB.USINGEVENTs join cl in DataProvider.Ins.DB.EVENT_ on ev.EventID equals cl.EventID join rm in DataProvider.Ins.DB.ROOMs on ev.RoomID equals rm.RoomID where ev.Date_ >= startDate && // Satisfy the start and end date of choosen week ev.Date_ <= endDate // Satisfy the start and end date of choosen week select new { ev, cl, rm } ).ToList(); foreach (var ins in usingEvent) { if (!IsExistRoom(ins.rm)) { var listPeriod = (from period in DataProvider.Ins.DB.PERIOD_TIMERANGE where period.PeriodID != -1 select period).ToList(); foreach (var period in listPeriod) { RoomTableRow roomTableRow = new RoomTableRow(); roomTableRow.room = ins.rm; roomTableRow.period = period; listRoomTableRow.Add(roomTableRow); } } // for each using, we split it into multiple period row var listPeriodTimeRange = Utilities.Utils.GetListPeriodTimeRange(ins.ev.StartPeriod, ins.ev.Duration); foreach (var periodTimeRange in listPeriodTimeRange) { if (IsExistRoomRow(ins.rm, periodTimeRange)) { var roomTableRow = listRoomTableRow.First((x) => { return(x.room.RoomID == ins.rm.RoomID && x.period.PeriodID == periodTimeRange.PeriodID); }); roomTableRow.usings[(int)ins.ev.Date_.DayOfWeek] = ins.ev; } else { RoomTableRow roomTableRow = new RoomTableRow(); roomTableRow.room = ins.rm; roomTableRow.period = periodTimeRange; roomTableRow.usings[(int)ins.ev.Date_.DayOfWeek] = ins.ev; listRoomTableRow.Add(roomTableRow); } } } }