/// <summary> /// The purpose of this method is to find avialable times for one employee in one period, /// or to find common avilable times between several employees. /// </summary> /// <param name="list">A List of CalendarEntries alreday booked meetings</param> /// <param name="eDate">DateTime representing the earliest date and time for meetings.</param> /// <param name="lDate">DateTime representing the earliest date and time for meetings.</param> private List <CalendarEntry> IntervalList(List <CalendarEntry> list, DateTime eDate, DateTime lDate) { List <CalendarEntry> newList = new List <CalendarEntry>(); while (lDate.Hour > lHour) { lDate = lDate.AddMinutes(-30); } CalendarEntry c; //just a necessasity to get it rolling if (list.Count == 0) { list.Add(new CalendarEntry { BeginMeeting = lDate, EndMeeting = lDate.AddMinutes(length) }); } for (int i = 0; i < list.Count; i++) { c = list.ElementAt(i); while (eDate.Hour > eHour) { eDate = eDate.AddMinutes(30); } while (eDate.Hour < eHour) { eDate = eDate.AddMinutes(30); } t = eDate.AddMinutes(length); //eHours & lHours are opening hours while (t <= c.BeginMeeting && t <= new DateTime(t.Year, t.Month, t.Day, lHour, 00, 00) && eDate.Hour >= eHour) { CalendarEntry newEntry = new CalendarEntry { BeginMeeting = eDate, EndMeeting = t }; while (t.Hour >= lHour) { t = t.AddMinutes(30); } while (t.Hour < eHour) { t = t.AddMinutes(60); } if (moreIDs) { if (CalendarEntry.Contains(newEntry, finalList)) { newList.Add(newEntry); } } else { newList.Add(newEntry); } t = t.AddMinutes(length); eDate = t.AddMinutes(-length); if (t > c.BeginMeeting) { eDate = c.EndMeeting.Value; t = eDate.AddMinutes(length); if (i != (list.Count - 1)) { while (t < list.ElementAt(i + 1).BeginMeeting&& t <= new DateTime(t.Year, t.Month, t.Day, lHour, 00, 00)) { newEntry = new CalendarEntry { BeginMeeting = eDate, EndMeeting = t }; //If more than one ID, then find common free times and put them in one list if (moreIDs) { if (CalendarEntry.Contains(newEntry, finalList)) { newList.Add(newEntry); } } else { newList.Add(newEntry); } eDate = t; t = eDate.AddMinutes(length); } } //for the last busy time to check if there is time before office closing hours else if (i == (list.Count - 1)) { while (t <= new DateTime(t.Year, t.Month, t.Day, lHour, 00, 00)) { newEntry = new CalendarEntry { BeginMeeting = eDate, EndMeeting = t }; //If more than one ID, then find common free times and put them in one list if (moreIDs) { if (CalendarEntry.Contains(newEntry, finalList)) { newList.Add(newEntry); } } else { newList.Add(newEntry); } eDate = t; t = eDate.AddMinutes(length); } } } } } return(newList); }