// PUT api/<controller>/5 public void Put(long id, [FromBody] EditRouteInfo model) { var route = DB.Routes.FirstOrDefault(x => !x.IsSoftDeleted && x.Id == id); if (route != null) { // Route Completed ? switch (Helpers.RouteHelpers.Categorize(route.DepartureTime, route.ArrivalTime)) { case BusRouteState.Used: case BusRouteState.Active: if (model.DepartureTime != null || model.ArrivalTime != null || model.From != null || model.Destination != null || model.FromLat != null || model.FromLng != null || model.DestinationLat != null || model.DestinationLng != null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Cannot modify the route in its current state!")); } break; } ObjectMapper.CopyPropertiesTo(model, route, ObjectMapper.UpdateFlag.DeferUpdateOnNull); DB.SaveChanges(); } }
public CreateRouteActivity() : base(Resource.Layout.create_route_layout) { OnLoaded += delegate { AllowBackNavigation(); var intent = Intent; departureTimeSelector = FindViewById <DateTimeSelector>(Resource.Id.depature_date_picker); arrivalTimeSelector = FindViewById <DateTimeSelector>(Resource.Id.arrival_date_picker); if (intent.HasExtra("route")) { routeInfo = JsonConvert.DeserializeObject <RouteInfo>(intent.GetStringExtra("route")); departureTimeSelector.Date = routeInfo.DepartureTime; arrivalTimeSelector.Date = routeInfo.ArrivalTime; } bus = JsonConvert.DeserializeObject <BusInfo>(intent.GetStringExtra("bus")); // Are we editing the route var isEdit = intent.GetBooleanExtra("edit", false); var btnSubmit = FindViewById <Button>(Resource.Id.btn_submit); btnSubmit.Text = isEdit ? "Save Changes" : "Add Route"; SupportActionBar.Title = isEdit ? "Edit Route" : "Add Route"; var handler = new InputHandler(); handler.SetBindings(new InputBinding[] { new InputBinding("From", Resource.Id.tb_from, true) { OnBind = (view) => ((TextInputLayout)view).EditText.Text = routeInfo?.From }, new InputBinding("Destination", Resource.Id.tb_destination, true) { OnBind = (view) => ((TextInputLayout)view).EditText.Text = routeInfo?.Destination }, new InputBinding("Cost", Resource.Id.tb_cost, true, min: 1, max: 999999, compare: null) { OnBind = (view) => ((TextInputLayout)view).EditText.Text = routeInfo?.Cost.ToString() }, }, FindViewById <ViewGroup>(global::Android.Resource.Id.Content)); bool ValidateInputs() { if (handler.ValidateInputs(true).Count != 0) { return(false); } // Validate departure and arrival dates if (departureTimeSelector.Date == null) { Toast.MakeText(this, "Please select departure time!", ToastLength.Short).Show(); return(false); } if (arrivalTimeSelector.Date == null) { Toast.MakeText(this, "Please select arrival time!", ToastLength.Short).Show(); return(false); } if (departureTimeSelector.Date >= arrivalTimeSelector.Date) { Toast.MakeText(this, "Departure time cannot be greater or the same as the arrival time!", ToastLength.Short).Show(); return(false); } return(true); } btnSubmit.Click += async(s, e) => { if (ValidateInputs()) { var proxy = ProxyFactory.GetProxyInstace(); var formInputs = handler.GetInputs(); if (isEdit) { // Update var editRoute = new EditRouteInfo(); if (routeInfo.From != formInputs["From"]) { editRoute.From = formInputs["From"]; } if (routeInfo.Destination != formInputs["Destination"]) { editRoute.Destination = formInputs["Destination"]; } if (double.TryParse(formInputs["Cost"], out var cost) && routeInfo.Cost != cost) { editRoute.Cost = cost; } if (departureTimeSelector.Date != routeInfo.DepartureTime) { editRoute.DepartureTime = departureTimeSelector.Date; } if (arrivalTimeSelector.Date != routeInfo.ArrivalTime) { editRoute.ArrivalTime = arrivalTimeSelector.Date; } if (editRoute.AnyUpdate()) { var response = await proxy.ExecuteAsync(API.Endpoints.RoutesEndpoints.UpdateRoute(routeInfo.Id, editRoute)); if (response.Successful) { var bundle = new Intent(); bundle.PutExtra("action", "edit"); SetResult(Result.Ok, bundle); Finish(); } else { Toast.MakeText(this, response.GetErrorDescription(), ToastLength.Short).Show(); } } } else { // Add new route var response = await proxy.ExecuteAsync(API.Endpoints.RoutesEndpoints.CreateRoute(bus.Id, new CreateRouteInfo() { From = formInputs["From"], Destination = formInputs["Destination"], Cost = double.Parse(formInputs["Cost"]), DepartureTime = departureTimeSelector.Date.Value, ArrivalTime = arrivalTimeSelector.Date.Value, Comments = "" })); if (response.Successful) { var bundle = new Intent(); bundle.PutExtra("action", "create"); SetResult(Result.Ok, bundle); Finish(); } else { Toast.MakeText(this, response.GetErrorDescription(), ToastLength.Short).Show(); } } } }; }; }
public static IEndpoint UpdateRoute(long id, EditRouteInfo routeInfo) => new ApiEndpoint($"{BaseUri}/{id}", HttpMethod.Put, routeInfo);