コード例 #1
0
        public ActionResult Edit(NewRunData newRunData)
        {
            if (!ModelState.IsValid || (!newRunData.Distance.HasValue && !newRunData.Route.HasValue) || !newRunData.RunLogId.HasValue)
                return new JsonResult { Data = new { Completed = false, Reason = "Please provide a valid route/distance and time." } };
            if (!ControllerContext.HasValidUserAccount())
                return new JsonResult { Data = new { Completed = false, Reason = "Please create an account." } };

            Trace.TraceInformation("Editing run event {0} for date {1}, route {2}, distance {3}, time {4}", newRunData.RunLogId, newRunData.Date, newRunData.Route, newRunData.Distance, newRunData.Time);

            var deleted = Delete(newRunData.RunLogId.Value) as JsonResult;
            var deletedJson = deleted.Data as dynamic;
            if (!deletedJson.Completed)
                return new JsonResult { Data = new { Completed = false, Reason = "You are not allowed to edit this event - please refresh and try again." } };

            var addedItem = AddRunLogEvent(newRunData);
            if (addedItem.Item2 == null)
                return addedItem.Item1;

            dynamic newRunLogEvent = addedItem.Item2;
            newRunLogEvent.ReplacesRunLogId = newRunData.RunLogId;
            MassiveDB.Current.UpdateRunLogEvent(newRunLogEvent);
            return addedItem.Item1;
        }
コード例 #2
0
        private Tuple<JsonResult, object> AddRunLogEvent(NewRunData newRunData)
        {
            if (!ModelState.IsValid || newRunData.Route.GetValueOrDefault() == 0 || (!newRunData.Distance.HasValue && !newRunData.Route.HasValue))
                return Tuple.Create(new JsonResult { Data = new { Completed = false, Reason = "Please provide a valid route/distance and time." } }, (object)null);
            if (!ControllerContext.HasValidUserAccount())
                return Tuple.Create(new JsonResult { Data = new { Completed = false, Reason = "Please create an account." } }, (object)null);

            Trace.TraceInformation("Creating run event for date {0}, route {1}, distance {2}, time {3}", newRunData.Date, newRunData.Route, newRunData.Distance, newRunData.Time);

            var userUnits = ControllerContext.UserDistanceUnits();
            dynamic route = null;
            Distance distance = new Distance(newRunData.Distance ?? 0, userUnits);
            if (newRunData.Route.HasValue)
            {
                var routeId = newRunData.Route.Value;
                if (routeId > 0)
                {
                    route = MassiveDB.Current.FindRoute(routeId);
                    if (route != null)
                        distance = new Distance(route.Distance, (DistanceUnits)route.DistanceUnits);
                }
                else if (routeId == -1)
                {
                    // manual distance...distance shoud be > 0
                    if (distance.BaseDistance <= 0)
                        return Tuple.Create(new JsonResult { Data = new { Completed = false, Reason = "Please enter a distance for your run and try again." } }, (object)null);
                }
                else if (routeId == -2)
                {
                    // new mapped route
                    if (newRunData.NewRoute == null)
                        return Tuple.Create(new JsonResult { Data = new { Completed = false, Reason = "Please map a route, add a name and then add a run log event." } }, (object)null);
                    if (string.IsNullOrWhiteSpace(newRunData.NewRoute.Name))
                        return Tuple.Create(new JsonResult { Data = new { Completed = false, Reason = "Please provide a route name." } }, (object)null);
                    if (string.IsNullOrWhiteSpace(newRunData.NewRoute.Points) || newRunData.NewRoute.Points == "[]")
                        return Tuple.Create(new JsonResult { Data = new { Completed = false, Reason = "Please add some points to the new route by double-clicking the map." } }, (object)null);
                    route = MassiveDB.Current.CreateRoute(ControllerContext.UserAccount(), newRunData.NewRoute.Name, newRunData.NewRoute.Notes ?? "", distance, (newRunData.NewRoute.Public ?? false) ? Route.PublicRoute : Route.PrivateRoute, newRunData.NewRoute.Points);
                }
            }

            var runLogEvent = MassiveDB.Current.CreateRunLogEvent(ControllerContext.UserAccount(), newRunData.Date.Value, distance, route, newRunData.NormalizedTime, newRunData.Comment);
            var model = new RunLogViewModel(ControllerContext, runLogEvent);

            return Tuple.Create(new JsonResult { Data = model.RunLogModels.Single().RunLogEventToJson() }, (object)runLogEvent);
        }
コード例 #3
0
 public ActionResult Add(NewRunData newRunData)
 {
     return AddRunLogEvent(newRunData).Item1;
 }