Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }