/// <summary> /// Returns true if a new reservation is created. /// </summary> public bool AddRegularFromRecurring(ReservationCollection reservations, IReservationRecurrence rr, DateTime d) { // reservations should contain cancelled reservations // first, find out the pattern type if (rr.PatternID == (int)PatternType.Weekly) { if (rr.PatternParam1 == (int)d.DayOfWeek) { if ((d >= rr.BeginDate && rr.EndDate == null) || (d >= rr.BeginDate && d <= rr.EndDate.Value)) { return(AddNewRecurringReservation(reservations, GetReservationData(rr, d))); } } } else if (rr.PatternID == (int)PatternType.Monthly) { if ((d >= rr.BeginDate && rr.EndDate == null) || (d >= rr.BeginDate && d <= rr.EndDate)) { DateTime dayOfMonth = GetDate(new DateTime(d.Year, d.Month, 1), rr.PatternParam1, (DayOfWeek)rr.PatternParam2); if (d.Date == dayOfMonth) { return(AddNewRecurringReservation(reservations, GetReservationData(rr, d))); } } } // currently only supports two types return(false); }
private ReservationData GetReservationData(IReservationRecurrence rr, DateTime d) { var processInfos = GetProcessInfos(rr.RecurrenceID); var invitees = GetInvitees(rr.RecurrenceID); var beginDateTime = new DateTime(d.Year, d.Month, d.Day, rr.BeginTime.Hour, rr.BeginTime.Minute, rr.BeginTime.Second); var duration = TimeSpan.FromMinutes(rr.Duration); return(new ReservationData(processInfos, invitees) { AccountID = rr.AccountID, ResourceID = rr.ResourceID, ClientID = rr.ClientID, ActivityID = rr.ActivityID, RecurrenceID = rr.RecurrenceID, Duration = new ReservationDuration(beginDateTime, duration), AutoEnd = rr.AutoEnd, KeepAlive = rr.KeepAlive, Notes = rr.Notes }); }