public IActionResult EndRide(FinishRideBindingModel model) { try { #region Validation if (!ModelState.IsValid) { return(BadRequest(ModelState)); } #endregion Trip ride = _bORide.GetTripByIdWithDriverAndUser(model.RideId); if (ride == null) { return(Ok(new CustomResponse <Error> { Message = Global.ResponseMessages.BadRequest, StatusCode = StatusCodes.Status400BadRequest, Result = new Error { ErrorMessage = "Invalid Ride" } })); } if (!_bORide.EndRide(model)) { return(Ok(new CustomResponse <Error> { Message = Global.ResponseMessages.Conflict, StatusCode = StatusCodes.Status409Conflict, Result = new Error { ErrorMessage = Global.ResponseMessages.GenerateInvalid("Failed to rate ride") } })); } Notification notification = new Notification { Title = "KORSA", Text = "Rider has ended your ride.", Entity_Id = ride.Id, User_Id = ride.PrimaryUser_Id.Value, Type = (int)PushNotificationType.RideCompleted }; _bORide.SendPushToUser(ride.PrimaryUser_Id.Value, ride.Driver_Id.Value, notification, (PushNotificationType)notification.Type, key: AppSettingsProvider.FCMServerKeyUserApp);//Sends Push To Ride User TripDTO tripDTO = Mapper.Map <Trip, TripDTO>(ride); return(Ok(new CustomResponse <TripDTO> { Message = Global.ResponseMessages.Success, StatusCode = StatusCodes.Status200OK, Result = tripDTO })); } catch (Exception ex) { return(StatusCode(Error.LogError(ex))); } }
public bool EndRide(FinishRideBindingModel model) { try { Trip ride = _dbContext.Trips.Include(x => x.Driver) .Include(s => s.PrimaryUser) .FirstOrDefault(x => x.Id == model.RideId); ride.EndTime = DateTime.UtcNow; ride.Status = TripStatus.Completed; ride.Fare = ride.EstimatedFare; if (ride.PrimaryUser.UseCreditFirst) { if (ride.EstimatedFare <= ride.PrimaryUser.Wallet) { ride.PrimaryUser.Wallet -= ride.EstimatedFare; ride.WalletDeduction = ride.EstimatedFare; } else { ride.WalletDeduction = ride.PrimaryUser.Wallet; ride.PrimaryUser.Wallet = 0; } } ride.Driver.RidesCount++; ride.Driver.TotalMileage += model.DistanceTravelled; ride.Driver.Wallet += ride.WalletDeduction; ride.PrimaryUser.RidesCount++; ride.PrimaryUser.DistanceTravelled += model.DistanceTravelled; ride.EndTime = DateTime.UtcNow; _dbContext.Trips.Update(ride); _dbContext.SaveChanges(); return(true); } catch (Exception ex) { throw ex; } }
public IHttpActionResult FinishRide(FinishRideBindingModel model) { if (model == null) { throw new ArgumentNullException(nameof(model)); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var user = unitOfWork.AppUsers.FirstOrDefault(u => u.Email == User.Identity.Name && u.Deleted == false); if (user == null) { return(BadRequest()); } if (user.Id == model.FinishRide.AppUserID) { return(BadRequest()); } Ride ride = unitOfWork.Rides.FirstOrDefault(r => r.Id == model.FinishRide.Id); if (ride == null) { return(BadRequest("No ride found")); } //If ride was successfull if (model.IsGood) { if (model.DStreetName == "" || model.DNumber.ToString() == "" || model.DTown == "" || model.DAreaCode.ToString() == "" || model.Price.ToString() == "") { return(BadRequest()); } Address destination = new Address() { StreetName = model.DStreetName, Number = model.DNumber, Town = model.DTown, AreaCode = model.DAreaCode, Deleted = false }; try { unitOfWork.Addresses.Add(destination); } catch (Exception e) { return(BadRequest()); } Location desLocation = new Location() { XPos = 0, YPos = 0, Address = destination, AddressID = destination.Id, Deleted = false }; try { unitOfWork.Locations.Add(desLocation); } catch (Exception e) { return(BadRequest()); } ride.DestinationLocation = desLocation; ride.DestinationLocationID = desLocation.Id; ride.Status = Status.Successfull; ride.Price = model.Price; try { unitOfWork.Rides.Update(ride); } catch (Exception e) { return(BadRequest()); } user.DriverFree = true; user.DriverLocation = desLocation; user.DriverLocationId = desLocation.Id; try { unitOfWork.AppUsers.Update(user); } catch (Exception e) { return(BadRequest()); } unitOfWork.Complete(); } else //if ride failed { if (model.Content == "") { return(BadRequest()); } ride.Status = Status.Failed; try { unitOfWork.Rides.Update(ride); } catch (Exception e) { return(BadRequest()); } user.DriverFree = true; try { unitOfWork.AppUsers.Update(user); } catch (Exception e) { return(BadRequest()); } Comment driverComment = new Comment() { Content = model.Content, Username = user.Username, AppUser = user, AppUserID = user.Id, Ride = ride, RideID = ride.Id, DateCreated = DateTime.Now, Rating = 0, Deleted = false }; try { unitOfWork.Comments.Add(driverComment); } catch (Exception e) { return(BadRequest()); } unitOfWork.Complete(); ///OVde negde duplira podatke u bazi, u ovom trenutku, u to sam sigurna, RESI TO! //unitOfWork.Complete(); } return(Ok()); }