private ICollection <CalendarSpan> BuildDaily()
        {
            var result = new List <CalendarSpan>();

            foreach (var weekGroup in _columns.GroupBy(x => new { x.Year, x.Week }).OrderBy(x => x.Key.Year).ThenBy(x => x.Key.Week))
            {
                var weekNumber = weekGroup.Key.Week;
                var start      = weekGroup.First();
                var end        = weekGroup.Last();

                var week = new CalendarSpan
                {
                    Year      = start.Year,
                    Month     = start.Month + 1,
                    Week      = weekNumber,
                    StartDate = start.StartDate,
                    EndDate   = end.StartDate,
                    Name      = $"{weekNumber} W"
                };
                week.Spans = BuildDays(week);

                result.Add(week);
            }

            //CalendarSpan currentWeek = null;
            //var previousWeek = 1;

            //foreach (var column in _columns.OrderBy(x => x.Index))
            //{
            //    if (currentWeek == null)
            //    {
            //        currentWeek = new CalendarSpan
            //        {
            //            Year = column.Year,
            //            Month = column.Month,
            //            Week = column.Week,
            //            StartDate = column.StartDate,
            //            Name = $"{column.Week} W"
            //        };
            //        previousWeek = column.Week;
            //    }

            //    if (column.Week == previousWeek)
            //    {
            //        continue;
            //    }

            //    currentWeek.EndDate = column.StartDate;
            //    currentWeek.Spans = BuildDays(currentWeek);

            //    result.Add(currentWeek);
            //}

            return(result);
        }
Exemple #2
0
        private List <CalendarSpan> BuildBroadcastWeeks(DateTime startDate, DateTime endDate)
        {
            var result = new List <CalendarSpan>();

            var currentWeekLabel = _customWeekLabel;

            if (_weekLabel == WeekLabel.CalendarWeek)
            {
                var startOfYear = new DateTime(startDate.Year, 1, 1);
                while (startOfYear.DayOfWeek != DayOfWeek.Monday)
                {
                    startOfYear = startOfYear.AddDays(-1);
                }

                var startOfCurrentWeek = startDate;
                while (startOfYear.DayOfWeek != DayOfWeek.Monday)
                {
                    startOfCurrentWeek = startOfCurrentWeek.AddDays(-1);
                }

                currentWeekLabel = (int)(startOfCurrentWeek - startOfYear).TotalDays / 7 + 1;
            }

            var previousStartDate = startDate;

            for (var currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(1))
            {
                if (currentDate.DayOfWeek != DayOfWeek.Sunday)
                {
                    continue;
                }

                var week = new CalendarSpan
                {
                    Year      = currentDate.Year,
                    Month     = currentDate.Month,
                    Week      = currentWeekLabel,
                    StartDate = previousStartDate,
                    EndDate   = currentDate,
                    Name      = $"{currentWeekLabel} W"
                };
                week.Spans = BuildDays(week);

                result.Add(week);

                currentWeekLabel++;
                previousStartDate = currentDate.AddDays(1);
            }

            return(result);
        }
Exemple #3
0
        private List <CalendarSpan> BuildStandardWeeks(DateTime startDate, DateTime endDate)
        {
            var result = new List <CalendarSpan>();

            var currentWeekLabel = _customWeekLabel;

            if (_weekLabel == WeekLabel.CalendarWeek)
            {
                var calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
                currentWeekLabel = calendar.GetWeekOfYear(startDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
            }

            var previousStartDate = startDate;

            for (var currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(1))
            {
                if (currentDate.DayOfWeek != DayOfWeek.Saturday)
                {
                    continue;
                }

                var week = new CalendarSpan
                {
                    Year      = currentDate.Year,
                    Month     = currentDate.Month,
                    Week      = currentWeekLabel,
                    StartDate = previousStartDate,
                    EndDate   = currentDate,
                    Name      = $"{currentWeekLabel} W"
                };
                week.Spans = BuildDays(week);

                result.Add(week);

                currentWeekLabel++;
                previousStartDate = currentDate.AddDays(1);
            }

            return(result);
        }
        private ICollection <CalendarSpan> BuildWeekly()
        {
            var result = new List <CalendarSpan>();

            foreach (var column in _columns.OrderBy(x => x.Index))
            {
                var week = new CalendarSpan
                {
                    Year      = column.Year,
                    Month     = column.Month + 1,
                    Week      = column.Week,
                    StartDate = column.StartDate,
                    EndDate   = column.EndDate.AddDays(-1),
                    Name      = $"{column.Week} W"
                };
                week.Spans = BuildDays(week);

                result.Add(week);
            }

            return(result);
        }
Exemple #5
0
        private List <CalendarSpan> BuildDays(CalendarSpan week)
        {
            var result = new List <CalendarSpan>();

            var currentDate = week.StartDate;

            do
            {
                result.Add(new CalendarSpan
                {
                    Year      = week.Year,
                    Month     = week.Month,
                    Week      = week.Week,
                    StartDate = currentDate,
                    EndDate   = currentDate,
                    Day       = currentDate.Day,
                    Name      = currentDate.Day.ToString()
                });

                currentDate = currentDate.AddDays(1);
            } while (currentDate <= week.EndDate);

            return(result);
        }
Exemple #6
0
        private List <CalendarSpan> BuildWeeks(DateTime startDate, DateTime endDate)
        {
            var result = new List <CalendarSpan>();

            var currentWeekLabel = _customWeekLabel;

            if (_weekLabel == WeekLabel.CalendarWeek)
            {
                if (_calendarType == CustomPeriodsType.Broadcast)
                {
                    var defaultBroadcast = _calendarStructures.First(x => x.Id == BROADCAST_CALENDAR_ID);
                    var currentYear      = defaultBroadcast.Items
                                           .FirstOrDefault(x => startDate >= x.StartDate &&
                                                           startDate <= x.EndDate);

                    var startOfYear = currentYear?.StartDate ?? startDate;

                    var startOfCurrentWeek = startDate;
                    while (startOfCurrentWeek.DayOfWeek != DayOfWeek.Monday)
                    {
                        startOfCurrentWeek = startOfCurrentWeek.AddDays(-1);
                    }

                    currentWeekLabel = (int)(startOfCurrentWeek - startOfYear).TotalDays / 7 + 1;
                }
                else
                {
                    var calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
                    currentWeekLabel = calendar.GetWeekOfYear(startDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
                }
                //var calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
                //currentWeekLabel = calendar.GetWeekOfYear(startDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
            }

            if (_weekLabel == WeekLabel.CalendarWeek)
            {
                var previousStartDate = startDate;
                for (var currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(1))
                {
                    //var endOfWeek = _calendarType == CustomPeriodsType.Broadcast
                    //                    ? DayOfWeek.Sunday
                    //                    : DayOfWeek.Saturday;

                    if (currentDate.DayOfWeek != DayOfWeek.Sunday && currentDate != endDate)
                    {
                        continue;
                    }

                    var week = new CalendarSpan
                    {
                        Year      = currentDate.Year,
                        Month     = currentDate.Month,
                        Week      = currentWeekLabel,
                        StartDate = previousStartDate,
                        EndDate   = currentDate,
                        Name      = $"{currentWeekLabel} W"
                    };
                    week.Spans = BuildDays(week);

                    result.Add(week);

                    currentWeekLabel++;
                    previousStartDate = currentDate.AddDays(1);
                }
            }
            else
            {
                for (var currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(7))
                {
                    var currentEndDate = currentDate.AddDays(6);
                    currentEndDate = currentEndDate > endDate ? endDate : currentEndDate;

                    var week = new CalendarSpan
                    {
                        Year      = currentDate.Year,
                        Month     = currentDate.Month,
                        Week      = currentWeekLabel,
                        StartDate = currentDate,
                        EndDate   = currentEndDate,
                        Name      = $"{currentWeekLabel} W"
                    };
                    week.Spans = BuildDays(week);
                    result.Add(week);

                    currentWeekLabel++;
                }
            }

            return(result);
        }