Пример #1
0
        public ActionResult AutoCalcCalories(string date, int?route, double?distance)
        {
            WeightData weight = null;

            if (HttpContext.HasValidUserAccount(dataCache) && date != null)
            {
                var userAccount = HttpContext.UserAccount(dataCache);

                DateTime onDate;
                if (!DateTime.TryParseExact(date, "ddd, d MMM yyyy HH':'mm':'ss 'UTC'", null, DateTimeStyles.AssumeUniversal, out onDate))
                {
                    onDate = DateTime.UtcNow;
                }

                weight = ProfileModel.DefaultWeightData();
                var userPref = ((object)userAccount).UserPrefs().Latest(onDate);
                if (userPref != null)
                {
                    weight.Units = userPref.WeightUnits;
                    switch (weight.Units)
                    {
                    case "kg":
                        weight.Kg = userPref.Weight;
                        break;

                    case "lbs":
                    case "st":
                        weight.Lbs   = userPref.Weight;
                        weight.Units = "lbs";
                        break;
                    }
                    weight.UpdateFromUnits();
                    if (userPref.WeightUnits == "st")
                    {
                        weight.Units = "st";
                    }
                }
            }

            if (weight == null || weight.UnitWeight == 0 || (!route.HasValue && !distance.HasValue))
            {
                return(Json(new { Result = false }));
            }

            Distance actualDistance = null;

            if (route.HasValue && route.Value > 0)
            {
                var dbRoute = MassiveDB.Current.FindRoute(route.Value);
                if (dbRoute != null)
                {
                    actualDistance = new Distance((double)dbRoute.Distance, (DistanceUnits)dbRoute.DistanceUnits).ConvertTo(HttpContext.UserDistanceUnits(dataCache));
                }
            }

            if (distance.HasValue && distance.Value > 0)
            {
                actualDistance = new Distance(distance.Value, HttpContext.UserDistanceUnits(dataCache));
            }

            if (actualDistance == null)
            {
                return(Json(new { Result = false }));
            }

            return(Json(new { Result = true, Calories = caloriesCalc.Calculate(actualDistance, weight) }));
        }