public ActionResult Edit(NewRunData newRunData) { if (!ModelState.IsValid || (!newRunData.Distance.HasValue && !newRunData.Route.HasValue) || !newRunData.RunLogId.HasValue) { return(Json(new { Completed = false, Reason = "Please provide a valid route/distance and time." })); } if (!HttpContext.HasValidUserAccount()) { return(Json(new { Completed = false, Reason = "Please create an account." })); } logger.LogInformation("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.Value as dynamic; if (!deletedJson.Completed) { return(Json(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); }
public Task BindModelAsync(ModelBindingContext bindingContext) { DateTime?date = null; DateTime parsedDate; Trace.TraceInformation("Parsing date: {0}", bindingContext.GetString("date")); if (DateTime.TryParseExact(bindingContext.GetString("date"), "ddd, d MMM yyyy HH':'mm':'ss 'UTC'", null, DateTimeStyles.AssumeUniversal, out parsedDate)) { date = parsedDate.ToUniversalTime(); } else if (DateTime.TryParseExact(bindingContext.GetString("date"), "ddd, d MMM yyyy HH':'mm':'ss 'GMT'", null, DateTimeStyles.AssumeUniversal, out parsedDate)) { date = parsedDate; } var model = new NewRunData { RunLogId = bindingContext.GetLong("runLogId"), Date = date, Distance = bindingContext.GetDouble("distance"), Route = bindingContext.GetLong("route"), Time = bindingContext.GetString("time"), Comment = bindingContext.GetString("comment").MaxLength(1000) }; if ((model.Route ?? 0) == -2) { model.NewRoute = new RouteData { Distance = bindingContext.GetDouble("distance") ?? 0.0, Name = bindingContext.GetString("newRouteName"), Notes = bindingContext.GetString("newRouteNotes"), Points = bindingContext.GetString("newRoutePoints"), Public = bindingContext.GetBool("newRoutePublic") } } ; bindingContext.Result = ModelBindingResult.Success(model); return(Task.CompletedTask); } }
public ActionResult Add(NewRunData newRunData) { return(AddRunLogEvent(newRunData).Item1); }
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(new { Completed = false, Reason = "Please provide a valid route/distance and time." }), (object)null)); } if (!HttpContext.HasValidUserAccount(dataCache)) { return(Tuple.Create(new JsonResult(new { Completed = false, Reason = "Please create an account." }), (object)null)); } logger.LogInformation("Creating run event for date {0}, route {1}, distance {2}, time {3}", newRunData.Date, newRunData.Route, newRunData.Distance, newRunData.Time); var userUnits = HttpContext.UserDistanceUnits(dataCache); 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) { return(Tuple.Create(new JsonResult(new { Completed = false, Reason = "Cannot find selected route, please choose another route and try again." }), (object)null)); } distance = new Distance((double)route.Distance, (DistanceUnits)route.DistanceUnits); } else if (routeId == -1) { // manual distance...distance shoud be > 0 if (distance.BaseDistance <= 0) { return(Tuple.Create(new JsonResult(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(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(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(new { Completed = false, Reason = "Please add some points to the new route by double-clicking the map." }), (object)null)); } route = MassiveDB.Current.CreateRoute(HttpContext.UserAccount(dataCache), newRunData.NewRoute.Name, newRunData.NewRoute.Notes ?? "", distance, (newRunData.NewRoute.Public ?? false) ? Route.PublicRoute : Route.PrivateRoute, newRunData.NewRoute.Points); } else { return(Tuple.Create(new JsonResult(new { Completed = false, Reason = "Please select or create a route for your run and try again." }), (object)null)); } } var runLogEvent = MassiveDB.Current.CreateRunLogEvent(HttpContext.UserAccount(dataCache), newRunData.Date.Value, distance, route, newRunData.NormalizedTime, newRunData.Comment); var model = new RunLogViewModel(HttpContext, runLogEvent, dataCache); return(Tuple.Create(new JsonResult(model.RunLogModels.Single().RunLogEventToJson()), (object)runLogEvent)); }