public List <ICalendarDay> GenerateWeeks(DateTime dateTime, int weeksCount) { var days = new List <ICalendarDay>(); int dayCount = _calendar.WeekTemplate.Count; for (var i = 0; i < weeksCount; i++) { for (var j = 0; j < dayCount; j++) { ICalendarDay day; DateTime calendarDate = dateTime.AddDays(j + dayCount * i); ICalendarDay dayOff = _calendar.DayOffs .FirstOrDefault(d => d.CalendarDateTime.Date == calendarDate.Date); if (dayOff != null) { day = (ICalendarDay)dayOff.Clone(); } else { var dayOfWeek = _calendar.WeekTemplate .FirstOrDefault(d => d.DayOfWeek == calendarDate.DayOfWeek); day = (ICalendarDay)dayOfWeek.Clone(); day.CalendarDateTime = calendarDate; } days.Add(day); } } return(days); }
/// <summary> /// Generate calendar days by calendar week template. /// </summary> /// <param name="calendar">The calendar.</param> /// <param name="dateTime">The date time.</param> /// <param name="weeksCount">Number of weeks to generate.</param> /// <returns> /// Calendar days. /// </returns> /// <exception cref="Exception">Unable to find day of week in week template</exception> public static IEnumerable <ICalendarDay> GenerateWeeks(this ICalendar <ICalendarDay> calendar, DateTime dateTime, int weeksCount) { int daysOffInPeriod = 0; var days = new List <ICalendarDay>(); int dayCount = calendar.WeekTemplate.Count; for (var i = 0; i < weeksCount + Math.Ceiling((decimal)daysOffInPeriod / 7); i++) { for (var j = 0; j < dayCount; j++) { ICalendarDay day; DateTime calendarDate = dateTime.AddDays(j + dayCount * i); ICalendarDay dayOff = calendar.DayOffs .FirstOrDefault(d => d.CalendarDateTime.Date == calendarDate.Date); if (dayOff != null) { day = (ICalendarDay)dayOff.Clone(); daysOffInPeriod++; } else { var dayOfWeek = calendar.WeekTemplate .FirstOrDefault(d => d.DayOfWeek == calendarDate.DayOfWeek); if (dayOfWeek == default(ICalendarDay)) { throw new Exception("Unable to find day of week in week template"); } day = (ICalendarDay)dayOfWeek.Clone(); day.CalendarDateTime = calendarDate; } days.Add(day); } } return(days); }