Example #1
0
        // GET: api/ChartSet/5
        public ChartDataContainer Get(long id, DateTime startDate, DateTime endDate)
        {
            ChartDataContainer chartDataContainer = new ChartDataContainer();

            chartDataContainer.ChartSets = new List <ChartSet>();

            ChartSet chartSet = null;
            ExerciseRecordsController exerciseRecordsController = new ExerciseRecordsController();
            var exerciseRecordsData = exerciseRecordsController.GetExerciseRecords().Where(er => er.Date >= startDate && er.Date <= endDate && er.Exercise.Set.UserId.ToLower().CompareTo(this.user.Id.ToLower()) == 0 && er.Exercise.SetId == id);
            var setsData            = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).Select(o => o.Exercise.Set);

            // We do these steps to narrow down the calculations to actual existing data based on submitted dates
            var monthsInSetsData = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).DistinctBy(m => m.Date.Month).Select(ms => ms.Date.Month);
            var weeksInSetsData  = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).DistinctBy(m => m.Date.WeekOfDate()).Select(ms => ms.Date.WeekOfDate());


            //#######################################################################
            // Start Building the chart data by going through each found set
            //#######################################################################
            foreach (var set in setsData)
            {
                chartSet = ChartsHelper.PopulateChartSet(set, monthsInSetsData, weeksInSetsData, startDate, endDate);
            }

            chartDataContainer.ChartSets.Add(chartSet);
            //#######################################################################

            return(chartDataContainer);
        }
Example #2
0
        public static ChartSet PopulateChartSet(Set set, IEnumerable <int> monthsInSetsData, IEnumerable <int> weeksInSetsData, DateTime startDate, DateTime endDate)
        {
            ChartSet chartSet = new ChartSet();

            chartSet.Name = set.Name;
            chartSet.Id   = set.Id;
            //#######################################################################
            // Start Building the set month statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by month regardless of the year the month belongs to)
            //#######################################################################
            chartSet.ChartSetMonthsData = new List <ChartSetMonthData>();
            foreach (var month in monthsInSetsData)
            {
                chartSet.ChartSetMonthsData.Add(new ChartSetMonthData
                {
                    ActivityCount = set.Exercises.Where(o => o.ExerciseRecords.Any(m => m.Date.Month == month)).Count(),
                    StartDate     = DateTime.Now.StartOfMonth(month),
                    EndDate       = DateTime.Now.EndOfMonth(month),
                    MonthNumber   = month
                });
            }
            //chartSet.ChartSetMonthsData.OrderBy(o => o.MonthNumber);
            //#######################################################################

            //#######################################################################
            // Start Building the set weeks statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by week regardless of the year the week belongs to)
            //#######################################################################
            chartSet.ChartSetWeeksData = new List <ChartSetWeekData>();
            foreach (var week in weeksInSetsData)
            {
                //var er = set.Exercises.Select(o => o.ExerciseRecords.Where(m => m.Date.WeekOfDate() == week && m.Date >= startDate && m.Date <= endDate)).ElementAtOrDefault(0);
                var er = set.Exercises.Select(o => o.ExerciseRecords.FirstOrDefault(m => m.Date.WeekOfDate() == week)).ElementAtOrDefault(0);

                chartSet.ChartSetWeeksData.Add(new ChartSetWeekData
                {
                    ActivityCount = set.Exercises.Where(o => o.ExerciseRecords.Any(m => m.Date.WeekOfDate() == week)).Count(),
                    StartDate     = DateTimeExtensions.StartOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week),
                    EndDate       = DateTimeExtensions.EndOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week),
                    WeekNumber    = week
                });
            }
            //chartSet.ChartSetWeeksData.OrderBy(o => o.WeekNumber);
            chartSet.TotalActivityCount = chartSet.ChartSetMonthsData.Sum(ac => ac.ActivityCount);
            //#######################################################################

            //#######################################################################
            // Start creating chart data for excercises
            //#######################################################################
            chartSet.ChartSetExercises = new List <ChartExercise>();

            foreach (var exercise in set.Exercises)
            {
                ChartExercise chartExercise = ChartsHelper.PopulateChartExercise(exercise, monthsInSetsData, weeksInSetsData, startDate, endDate);
                // Final step is to add the loaded exercise data into the corresponding set that is to be returned to the client
                chartSet.ChartSetExercises.Add(chartExercise);
            }
            //#######################################################################

            // Final step is to add the loaded set data that is to be returned to the client
            return(chartSet);
        }
Example #3
0
        // GET: api/ChartSet
        public ChartDataContainer Get(DateTime startDate, DateTime endDate)
        {
            ChartDataContainer chartDataContainer = new ChartDataContainer();

            chartDataContainer.ChartSets = new List <ChartSet>();

            ExerciseRecordsController exerciseRecordsController = new ExerciseRecordsController();
            var exerciseRecordsData = exerciseRecordsController.GetExerciseRecords().Where(er => er.Date >= startDate && er.Date <= endDate);
            var setsData            = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).Select(o => o.Exercise.Set);

            // We do these steps to narrow down the calculations to actual existing data based on submitted dates
            var monthsInSetsData = exerciseRecordsData.DistinctBy(m => m.Date.Month).Select(ms => ms.Date.Month).OrderBy(o => o);
            var weeksInSetsData  = exerciseRecordsData.DistinctBy(m => m.Date.WeekOfDate()).Select(ms => ms.Date.WeekOfDate()).OrderBy(o => o);

            chartDataContainer.MonthsInSets = new Dictionary <int, String>();
            foreach (var month in monthsInSetsData)
            {
                chartDataContainer.MonthsInSets.Add(month, new DateTime(DateTime.Now.Year, month, 1).ToString("MMMM", CultureInfo.InvariantCulture));
            }

            chartDataContainer.WeeksInSets = new Dictionary <int, String>();
            foreach (var week in weeksInSetsData)
            {
                chartDataContainer.WeeksInSets.Add(week, week.ToString());
            }

            //#######################################################################
            // Start Building the chart data by going through each found set
            //#######################################################################
            foreach (var set in setsData)
            {
                ChartSet chartSet = ChartsHelper.PopulateChartSet(set, monthsInSetsData, weeksInSetsData, startDate, endDate);
                // Final step is to add the loaded set data that is to be returned to the client
                chartDataContainer.ChartSets.Add(chartSet);
            }
            //#######################################################################

            return(chartDataContainer);
        }
Example #4
0
        public static ChartExercise PopulateChartExercise(Exercise exercise, IEnumerable <int> monthsInSetsData, IEnumerable <int> weeksInSetsData, DateTime startDate, DateTime endDate)
        {
            ChartExercise chartExercise = new ChartExercise();

            chartExercise.Id     = exercise.Id;
            chartExercise.Name   = exercise.Name;
            chartExercise.Target = (float)exercise.Target;
            //#######################################################################
            // Start Building the exercise month statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by month regardless of the year the month belongs to)
            //#######################################################################
            chartExercise.ChartMonthsData = new List <ChartExerciseMonthData>();

            foreach (var month in monthsInSetsData)
            {
                chartExercise.ChartMonthsData.Add(new ChartExerciseMonthData
                {
                    ActivityCount      = exercise.ExerciseRecords.Where(m => m.Date.Month == month).Count(),
                    StartDate          = DateTime.Now.StartOfMonth(month),
                    EndDate            = DateTime.Now.EndOfMonth(month),
                    MonthRecordAverage = new Func <double>(() => {
                        double averageRecord          = 0;
                        var exerciseRecordByDateRange = exercise.ExerciseRecords.Where(m => m.Date.Month == month);
                        if (exerciseRecordByDateRange.Count() > 0)
                        {
                            averageRecord = exerciseRecordByDateRange.Average(a => a.Record);
                        }

                        return(averageRecord);
                    })(),
                    MonthNumber = month
                });
            }
            //chartExercise.ChartMonthsData.OrderBy(o => o.MonthNumber);
            //#######################################################################

            //#######################################################################
            // Start Building the exercise weeks statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by week regardless of the year the week belongs to)
            //#######################################################################
            chartExercise.ChartWeeksData = new List <ChartExerciseWeekData>();
            foreach (var week in weeksInSetsData)
            {
                var er = exercise.ExerciseRecords.FirstOrDefault(m => m.Date.WeekOfDate() == week);

                chartExercise.ChartWeeksData.Add(new ChartExerciseWeekData
                {
                    ActivityCount     = exercise.ExerciseRecords.Where(m => m.Date.WeekOfDate() == week).Count(),
                    StartDate         = DateTimeExtensions.StartOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week),
                    EndDate           = DateTimeExtensions.EndOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week),
                    WeekRecordAverage = new Func <double>(() => {
                        double averageRecord          = 0;
                        var exerciseRecordByDateRange = exercise.ExerciseRecords.Where(m => m.Date.WeekOfDate() == week);
                        if (exerciseRecordByDateRange.Count() > 0)
                        {
                            averageRecord = exerciseRecordByDateRange.Average(a => a.Record);
                        }

                        return(averageRecord);
                    })(),
                    WeekNumber = week
                });
            }
            //chartExercise.ChartWeeksData.OrderBy(o => o.WeekNumber);
            chartExercise.TotalActivityCount = chartExercise.ChartMonthsData.Sum(ac => ac.ActivityCount);
            chartExercise.TotalRecordAverage = new Func <double>(() => {
                double averageRecord          = 0;
                var exerciseRecordByDateRange = exercise.ExerciseRecords.Where(m => m.Date >= startDate && m.Date <= endDate);
                if (exerciseRecordByDateRange.Count() > 0)
                {
                    averageRecord = exerciseRecordByDateRange.Average(a => a.Record);
                }

                return(averageRecord);
            })();
            //#######################################################################
            // Start creating chart data for excercises
            //#######################################################################
            chartExercise.ChartExerciseRecords = new List <ChartExerciseRecord>();
            foreach (var exerciseRecord in exercise.ExerciseRecords.Where(m => m.Date >= startDate && m.Date <= endDate))
            {
                ChartExerciseRecord chartExerciseRecord = ChartsHelper.PopulateChartExerciseRecord(exerciseRecord, monthsInSetsData, weeksInSetsData, startDate, endDate);
                chartExercise.ChartExerciseRecords.Add(chartExerciseRecord);
            }
            //chartExercise.ChartExerciseRecords.OrderBy(o => o.Date);
            //#######################################################################
            return(chartExercise);
        }