Example #1
0
        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)));
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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());
        }