/// <summary>
        /// Compares user's goals with daily intake to properly display progress bars
        /// </summary>
        /// <remarks>
        /// Much of the arithmetic is conditional and based on whether or not the user has surpassed daily targets.
        /// Conditions provide for a different progress bar appearance if user has failed to meet goals.
        /// </remarks>
        /// <param name="user">The <see cref="MacroNewtUser"/> for which daily stats are being organized</param>
        /// <param name="targetTotalCal">The int daily target calories for the user</param>
        /// <param name="dct">The <see cref="DailyCalTotal"/> stats for the user on target day</param>
        /// <returns>A populated <see cref="CurrentDayCalStatsViewModel"/> object</returns>
        public CurrentDayCalStatsViewModel OrganizeCalStats(MacroNewtUser user, int targetTotalCal, DailyCalTotal dct)
        {
            if (dct == null)
            {
                dct = new DailyCalTotal();
            }

            double proteinBal = 0.2;
            double proteinTar = 0;
            double fatBal     = 0.25;
            double fatTar     = 0;
            double carbBal    = 0.55;
            double carbTar    = 0;

            var showMacros = _context.UserGoals
                             .Where(g => g.Id == user.Id)
                             .FirstOrDefault();

            if (showMacros != null)
            {
                proteinBal = ((double)showMacros.ProteinPercent / 100);
                fatBal     = ((double)showMacros.FatPercent / 100);
                carbBal    = ((double)showMacros.CarbPercent / 100);

                proteinTar = (double)targetTotalCal * proteinBal;
                fatTar     = ((double)targetTotalCal * fatBal);
                carbTar    = ((double)targetTotalCal * carbBal);
            }

            CurrentDayCalStatsViewModel cdcsvm = new CurrentDayCalStatsViewModel()
            {
                TargetCalories                    = targetTotalCal,
                CurrentDayCalories                = dct.TotalDailyCalories,
                CurrentDayCaloriesPercent         = Math.Round(((dct.TotalDailyCalories * 100) / (targetTotalCal * 1.5))),
                PercentageCaloriesConsumed        = Math.Round(dct.TotalDailyCalories * 100.0 / targetTotalCal),
                TargetProteinCalories             = Convert.ToInt32(proteinTar),
                CurrentDayProteinCalories         = dct.TotalDailyProteinCalories,
                CurrentDayProteinCaloriesPercent  = Math.Round(((dct.TotalDailyProteinCalories * 100) / (proteinTar * 1.5))),
                PercentageProteinCaloriesConsumed = Math.Round(dct.TotalDailyProteinCalories * 100.0 / proteinTar),
                TargetFatCalories                 = Convert.ToInt32(fatTar),
                CurrentDayFatCalories             = dct.TotalDailyFatCalories,
                CurrentDayFatCaloriesPercent      = Math.Round(((dct.TotalDailyFatCalories * 100) / (fatTar * 1.5))),
                PercentageFatCaloriesConsumed     = Math.Round(dct.TotalDailyFatCalories * 100.0 / fatTar),
                TargetCarbCalories                = Convert.ToInt32(carbTar),
                CurrentDayCarbCalories            = dct.TotalDailyCarbCalories,
                CurrentDayCarbCaloriesPercent     = Math.Round(((dct.TotalDailyCarbCalories * 100) / (carbTar * 1.5))),
                PercentageCarbCaloriesConsumed    = Math.Round(dct.TotalDailyCarbCalories * 100.0 / carbTar)
            };


            if (showMacros != null)
            {
                cdcsvm.ShowMacros = true;
            }

            if (dct.TotalDailyCalories > targetTotalCal)
            {
                cdcsvm.TotalCaloriesSurplusPercent        = Math.Round(((dct.TotalDailyCalories) / (double)targetTotalCal) * 100);
                cdcsvm.TotalCaloriesSurplusDisplayPercent = Math.Round(((dct.TotalDailyCalories - targetTotalCal) * 100) / ((double)targetTotalCal * 1.5));
                if (cdcsvm.TotalCaloriesSurplusDisplayPercent > 38)
                {
                    cdcsvm.TotalCaloriesSurplusDisplayPercent = 38;
                }
            }
            else
            {
                cdcsvm.CaloriesRemainingPercent = (67 - (cdcsvm.CurrentDayCaloriesPercent));
            }

            if (cdcsvm.CurrentDayProteinCalories > cdcsvm.TargetProteinCalories)
            {
                cdcsvm.TotalProteinCaloriesSurplusPercent        = Math.Round(((cdcsvm.CurrentDayProteinCalories) / (double)cdcsvm.TargetProteinCalories) * 100);
                cdcsvm.TotalProteinCaloriesSurplusDisplayPercent = Math.Round(((cdcsvm.CurrentDayProteinCalories - cdcsvm.TargetProteinCalories) * 100) / ((double)cdcsvm.TargetProteinCalories * 1.5));
                if (cdcsvm.TotalProteinCaloriesSurplusDisplayPercent > 38)
                {
                    cdcsvm.TotalProteinCaloriesSurplusDisplayPercent = 38;
                }
            }
            else
            {
                cdcsvm.CurrentDayProteinCaloriesRemainingPercent = (67 - (cdcsvm.CurrentDayProteinCaloriesPercent));
            }

            if (cdcsvm.CurrentDayFatCalories > cdcsvm.TargetFatCalories)
            {
                cdcsvm.TotalFatCaloriesSurplusPercent        = Math.Round(((cdcsvm.CurrentDayFatCalories) / (double)cdcsvm.TargetFatCalories) * 100);
                cdcsvm.TotalFatCaloriesSurplusDisplayPercent = Math.Round(((cdcsvm.CurrentDayFatCalories - cdcsvm.TargetFatCalories) * 100) / ((double)cdcsvm.TargetFatCalories * 1.5));
                if (cdcsvm.TotalFatCaloriesSurplusDisplayPercent > 38)
                {
                    cdcsvm.TotalFatCaloriesSurplusDisplayPercent = 38;
                }
            }
            else
            {
                cdcsvm.CurrentDayFatCaloriesRemainingPercent = (67 - (cdcsvm.CurrentDayFatCaloriesPercent));
            }

            if (cdcsvm.CurrentDayCarbCalories > cdcsvm.TargetCarbCalories)
            {
                cdcsvm.TotalCarbCaloriesSurplusPercent        = Math.Round(((cdcsvm.CurrentDayCarbCalories) / (double)cdcsvm.TargetCarbCalories) * 100);
                cdcsvm.TotalCarbCaloriesSurplusDisplayPercent = Math.Round(((cdcsvm.CurrentDayCarbCalories - cdcsvm.TargetCarbCalories) * 100) / ((double)cdcsvm.TargetCarbCalories * 1.5));
                if (cdcsvm.TotalCarbCaloriesSurplusDisplayPercent > 38)
                {
                    cdcsvm.TotalCarbCaloriesSurplusDisplayPercent = 38;
                }
            }
            else
            {
                cdcsvm.CurrentDayCarbCaloriesRemainingPercent = (67 - (cdcsvm.CurrentDayCarbCaloriesPercent));
            }

            return(cdcsvm);
        }
Exemple #2
0
 public IViewComponentResult Invoke(CurrentDayCalStatsViewModel cdcs)
 {
     return(View(cdcs));
 }