public UserBodyIndex AutoCalculateIndexes(UserBodyIndex userBodyIndex, AppUser user)
        {
            // Calculate Units
            userBodyIndex.WeightLb = userBodyIndex.WeightKg * CommonConstants.ExchangeUnits.KilogramsToPounds;
            userBodyIndex.BellyIn  = userBodyIndex.BellyCm / CommonConstants.ExchangeUnits.InchesToCentimeters;

            // Calculate the IDI WPRO BMI index by having Weight (kg) and Height (m)
            userBodyIndex.IdiWproBmi = BodyIndexCalculation.GetIdiWproBmi(userBodyIndex.WeightKg, userBodyIndex.HeightCm / 100);

            // Calculate BodyFat by having Gender, Belly (inch) and Weight (lb)
            userBodyIndex.BodyFat = BodyIndexCalculation.GetBodyFat(user.Gender, userBodyIndex.BellyIn, userBodyIndex.WeightLb);

            // Calculate LBM by having WeightKg, BodyFat
            userBodyIndex.Lbm = BodyIndexCalculation.GetLbm(userBodyIndex.WeightKg, userBodyIndex.BodyFat);

            // Calculate BMR by having LBM
            userBodyIndex.Bmr = BodyIndexCalculation.GetBmr(userBodyIndex.Lbm);

            // Calculate TDEE after get the latest UserDesire of User
            decimal multiple   = 0;
            var     userDesire = _userDesireRepository.FindAll(x => x.UserId == user.Id).OrderByDescending(x => x.StartDate).FirstOrDefault();

            multiple = userDesire != null?decimal.Parse(_commonCategoryRepository.FindSingle(x => x.GroupCode == CommonConstants.GroupCode.PracticeIntensive && x.Code == userDesire.PracticeIntensive).Description) : 1;

            userBodyIndex.Tdee = userBodyIndex.Bmr * multiple;

            return(userBodyIndex);
        }
        public async Task <IActionResult> SaveBodyIndex(UserBodyIndex userBodyIndex)
        {
            bool   result      = true;
            string message     = string.Empty;
            var    loggedEmail = User.GetSpecificClaim("Email");
            var    customer    = await _userManager.FindByIdAsync(userBodyIndex.UserId.ToString());

            if (ModelState.IsValid)
            {
                userBodyIndex.UserModified = loggedEmail;

                if (userBodyIndex.Id == 0)
                {
                    userBodyIndex.UserCreated = loggedEmail;
                    _userBodyIndexService.Add(userBodyIndex, customer, out result, out message);
                }
                else
                {
                    _userBodyIndexService.UpdateChangedProperties(userBodyIndex, customer, out result, out message);
                }

                return(new OkObjectResult(new GenericResult(result, message)));
            }
            else
            {
                List <string> listErrors  = ModelState.Values.SelectMany(v => v.Errors).Select(x => x.ErrorMessage).ToList();
                string        errorString = String.Join("\n", listErrors.ToArray());
                return(new OkObjectResult(new GenericResult(false, errorString)));
            }
        }
 public void UpdateChangedProperties(UserBodyIndex userBodyIndex, AppUser user, out bool result, out string message)
 {
     userBodyIndex = AutoCalculateIndexes(userBodyIndex, user);
     _userBodyIndexRepository.UpdateChangedProperties(userBodyIndex.Id, userBodyIndex, out result, out message);
     if (result)
     {
         SaveChanges();
     }
     else
     {
         Dispose();
     }
 }