示例#1
0
        /// <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);
        }