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));
        }
Beispiel #2
0
        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}"));
        }