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); }
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); }
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); }
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); }
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); }