/// <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); }
public IViewComponentResult Invoke(CurrentDayCalStatsViewModel cdcs) { return(View(cdcs)); }