public static IEnumerable <T> FillMissingDays <T>(this List <T> data, DateBreakdown dateBreakdown, TimeMatrixFilters filters) where T : ChartDataItem, new() { var startDate = DateTime.Now; var endDate = DateTime.Now; if (dateBreakdown == DateBreakdown.ByMonth) { endDate = DateTime.Today.LastDayOfMonth(); startDate = endDate.AddMonths(-3).AddDays(1); } else { endDate = DateTime.Today.LastDayOfWeek(); startDate = endDate.AddDays(-20); } startDate = filters.StartDate ?? startDate; //endDate = filters.EndDate?? endDate; for (var day = startDate; day <= endDate; day = day.AddDays(1)) { if (data.All(x => x.Date.Date != day.Date)) { data.Add(new T { Date = day, Dummy = true }); } } return(data.Where(x => x.Date <= endDate && x.Date >= startDate)); }
Dictionary <string, string> GetDateRange <T>(DateBreakdown dateBreakdown, Dictionary <string, Dictionary <string, List <T> > > data) where T : ChartDataItem { var range = new Dictionary <string, string>(); if (dateBreakdown == DateBreakdown.ByMonth) { range.TryAdd("m0", "This Month"); range.TryAdd("m1", "1 Month ago"); for (var x = 2; x < data.Keys.ToList().Count(); x++) { range.TryAdd($"m{x}", $"{x} Months ago"); } } else { range.TryAdd("w0", "This Week"); range.TryAdd("w1", "1 Week ago"); for (var x = 2; x < data.Keys.ToList().Count(); x++) { range.TryAdd($"w{x}", $"{x} Weeks ago"); } } return(range); }
public static Dictionary <string, Dictionary <string, List <T> > > SecondLevelGrouping <T>(this IEnumerable <IGrouping <string, T> > topLevelGroup, DateBreakdown dateBreakdown) where T : ChartDataItem { CultureInfo culture = System.Threading.Thread.CurrentThread.CurrentCulture; var returnValue = topLevelGroup.ToDictionary(g => g.Key, g => g.OrderBy(x => x.Date).GroupBy(weeklyDataItem => weeklyDataItem.Date.DayOfYear). ToDictionary(j => dateBreakdown == DateBreakdown.ByWeek ? culture.DateTimeFormat.GetAbbreviatedDayName(j.First().Date.DayOfWeek) + "_" + j.First().Date.Day : $"d{j.First().Date.Day}", j => j.Where(q => q.Dummy != true).ToList() )); return(returnValue); }
public static IEnumerable <IGrouping <string, T> > TopLevelGrouping <T>(this IEnumerable <T> dailyData, DateBreakdown dateBreakdown) where T : ChartDataItem { var currentWeek = WeekNumberSince2019(DateTime.Now); var currenMonth = DateTime.Today.Month; return(dateBreakdown == DateBreakdown.ByWeek ? dailyData.OrderByDescending(x => x.Date).GroupBy(matrix => $"w{currentWeek - WeekNumberSince2019(matrix.Date)}") : dailyData.OrderByDescending(x => x.Date).GroupBy(matrix => $"m{currenMonth - matrix.Date.Month}")); }