public bool AddViaPoint(ViaPoint viaPoint)
        {
            string            query      = "insert into ViaPoint(Id,RideId,Name,[Index],Distance) values(@Id,@RideId,@Name,@Index,@Distance)";
            DynamicParameters parameters = new DynamicParameters();
            string            viaPointId = Guid.NewGuid().ToString();

            parameters.Add("Id", viaPointId);
            parameters.Add("RideId", viaPoint.RideId);
            parameters.Add("Name", viaPoint.Name.ToLower());
            parameters.Add("Index", viaPoint.Index);
            parameters.Add("Distance", viaPoint.Distance);
            ExtensionObject extensionObject = new ExtensionObject()
            {
                Query            = query,
                ConnectionString = connectionString
            };

            if (extensionObject.AddOrUpdateItem <ViaPoint>(parameters))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #2
0
 public void UpdateAvailableSeat(ViaPoint city, int updatedSeats)
 {
     using (var db = new CarPoolContext())
     {
         ViaPoint City = db.Cities.Where(c => c.Id == city.Id).Single();
         City.SeatAvailable = updatedSeats;
         db.SaveChanges();
     }
 }
Пример #3
0
        public void CreateRide([FromBody] RideVM ride, [FromQuery] string userId)
        {
            int[] res = new int[2];
            Ride  newRide;

            newRide = _mapper.Map <Ride>(ride);

            string From, To;

            if (ride.Route.ViaPoints != null)
            {
                for (int i = 0; i < ride.Route.ViaPoints.Count; i++)
                {
                    ViaPoint viaPoint = new ViaPoint();
                    if (i == 0)
                    {
                        From = ride.Route.Source;
                    }
                    else
                    {
                        From = ride.Route.ViaPoints[i - 1].Location;
                        viaPoint.Distance = newRide.Route.ViaPoints[i - 1].Distance;
                        viaPoint.Duration = newRide.Route.ViaPoints[i - 1].Duration;
                    }
                    To  = ride.Route.ViaPoints[i].Location;
                    res = GetDetails(From, To);
                    viaPoint.Distance += res[0] / 1000;
                    viaPoint.Duration += TimeSpan.FromSeconds(res[1]);
                    viaPoint.Location  = ride.Route.ViaPoints[i].Location;
                    newRide.Route.ViaPoints.Add(viaPoint);
                }
                From             = ride.Route.ViaPoints.Last().Location;
                newRide.Distance = newRide.Route.ViaPoints.Last().Distance;
//                newRide.EndDateTime +=  newRide.Route.ViaPoints.Last().Duration;
            }
            else
            {
                From = ride.Route.Source;
            }
            res = GetDetails(From, ride.Route.Destination);
            newRide.Distance += res[0] / 1000;
//            newRide.EndDateTime += TimeSpan.FromSeconds(res[1]);
            newRide.ProviderId = userId;
            _rideService.CreateRide(newRide);
        }
Пример #4
0
        public int GetAvailableSeatAtSource(Booking booking)
        {
            List <ViaPoint> cities          = _viaPointData.GetAllViaPointsByBookedRideId(booking.RideId);
            ViaPoint        SourceCity      = cities.Where(c => c.CityName == booking.Source).Single();
            ViaPoint        DestinationCity = cities.Where(c => c.CityName == booking.Destination).Single();
            int             seat            = 10;

            foreach (ViaPoint city in cities)
            {
                if (city.Id >= SourceCity.Id && city.Id < DestinationCity.Id)
                {
                    if (seat >= city.SeatAvailable)
                    {
                        seat = city.SeatAvailable;
                    }
                }
            }
            return(seat);
        }
Пример #5
0
        public List <Ride> GetRideByRoute(string source, string destination)
        {
            List <Ride> AvailableRide = new List <Ride>();
            ViaPoint    Source        = null;
            List <Ride> Rides         = _rideData.GetAllRides();

            foreach (ViaPoint city in _viaPointData.GetAllViaPoints())
            {
                if (city.CityName == source)
                {
                    Source = city;
                }

                if (city.CityName == destination && Source != null && city.RideID == Source.RideID && city.Id > Source.Id)
                {
                    AvailableRide.Add(Rides.Where(r => r.Id == Source.RideID).SingleOrDefault());
                }
            }
            return(AvailableRide);
        }
Пример #6
0
        public void CreateRide()
        {
            Ride     ride = new Ride();
            ViaPoint cities;

            activeUser = UserUI.activeUser;
            User user = userService.GetProfile(activeUser);

            if (user.Car.TotalSeats > 0)
            {
                ride.Id = "R" + activeUser.Substring(0, 3) + DateTime.Now.Hour + DateTime.Now.Minute;
                GeoService geoService = new GeoService();
                string     city;
                Console.Clear();
                ride.ViaPoints = new List <ViaPoint>();

                do
                {
                    Console.WriteLine("Enter Available Seat");
                    ride.AvailableSeats = Int32.Parse(Console.ReadLine().DigitValidator());

                    if (ride.AvailableSeats > user.Car.TotalSeats)
                    {
                        Console.WriteLine("\nValue exceeds your's car capacity\n");
                    }
                } while (ride.AvailableSeats > user.Car.TotalSeats);

                do
                {
                    cities = new ViaPoint();

                    Console.WriteLine("Enter Source city");
                    city = Console.ReadLine().NotEmptyValidator().NameValidator();

                    if (geoService.IsCityAvailable(city))
                    {
                        cities.CityName      = city;
                        cities.RideID        = ride.Id;
                        cities.SeatAvailable = ride.AvailableSeats;
                        ride.ViaPoints.Add(cities);
                    }
                } while (!geoService.IsCityAvailable(city));

                string Response;
                do
                {
                    Console.WriteLine("Add via points? (Y/N)");
                    Response = Console.ReadLine().NotEmptyValidator().YesNOValidator();
                    if (Response == "N")
                    {
                        break;
                    }
                    do
                    {
                        cities = new ViaPoint();
                        Console.WriteLine("\nEnter ViaPoint city");
                        city = Console.ReadLine().NotEmptyValidator().NameValidator();
                        if (geoService.IsCityAvailable(city))
                        {
                            cities.CityName      = city;
                            cities.RideID        = ride.Id;
                            cities.SeatAvailable = ride.AvailableSeats;
                            ride.ViaPoints.Add(cities);
                        }
                    } while (!geoService.IsCityAvailable(city));
                } while (Response == "Y" || Response != "N");

                do
                {
                    cities = new ViaPoint();
                    Console.WriteLine("Enter Destination city");
                    city = Console.ReadLine().NotEmptyValidator().NameValidator();
                    if (geoService.IsCityAvailable(city))
                    {
                        cities.CityName      = city;
                        cities.RideID        = ride.Id;
                        cities.SeatAvailable = ride.AvailableSeats;
                        ride.ViaPoints.Add(cities);
                    }
                } while (!geoService.IsCityAvailable(city));

                Console.WriteLine("\nEnter Start Date and Time { mm/dd/yyyy hh/mm/ss AM/PM}");
                ride.StartTime = DateTime.Parse(Console.ReadLine());

                Console.WriteLine("Enter Price per km");
                ride.PricePerKm = double.Parse(Console.ReadLine().NotEmptyValidator());



                ride.UserId = activeUser;
                if (rideService.CreateRide(ride))
                {
                    Console.WriteLine("Added Successfully");
                    Console.WriteLine("Press any key to go back");
                    Console.ReadKey();
                }
            }
            else
            {
                Console.WriteLine("You dont have a car"); Console.ReadKey();
            }
            Program.UserChoices();
        }
        static void Menu(User user)
        {
            //int choice;
            Choice choice;
            string pickUp;
            string drop;
            float  amount;

            do
            {
                Console.WriteLine("\nPlease enter your Choice\n" +
                                  "1.Offer ride\n" +
                                  "2.Book a Car\n" +
                                  "3.View Offered Rides and Approve Requests\n" +
                                  "4.View Bookings\n" +
                                  "5.Add Amount to Wallet\n" +
                                  "6.View Balance\n" +
                                  "7.Add a Car\n" +
                                  "8.Logout");
                choice = Enum.Parse <Choice>(Reader.ReadInt(1, 8).ToString());
                switch (choice)
                {
                case Choice.OfferRide:
                    Ride ride = new Ride();
                    if (userService.HasVehicle(user.Id))
                    {
                        if (user.Age < 18)
                        {
                            Console.WriteLine("Sorry,Minors can't offer a ride");
                        }
                        else
                        {
                            ride.ProviderId = user.Id;
                            Console.WriteLine("Please enter the date and time (dd/mm/yyyy hh:mm) of your journey ");
                            ride.StartDateTime = Reader.ReadDateTime();
                            Console.WriteLine("Please enter the starting place of your journey");
                            ride.Route.Source = Reader.ReadString().ToLower();
                            Console.WriteLine("Please enter the destination of your journey");
                            ride.Route.Destination = Reader.ReadString().ToLower();
                            Console.WriteLine("Please enter the distance in KM");
                            ride.Distance            = Reader.ReadFloat();
                            ride.EndDateTime         = ride.StartDateTime + rideService.CalculateTime(ride.Distance);
                            ride.Route.TotalDistance = ride.Distance;
                            if (rideService.FindOfferedRides(user.Id).Any(_ => (_.StartDateTime <= ride.StartDateTime && ride.StartDateTime < _.EndDateTime) || (_.StartDateTime < ride.EndDateTime && _.EndDateTime > ride.EndDateTime)))
                            {
                                Console.WriteLine("Sorry,You can't Offer two rides simultaneously");
                                break;
                            }
                            do
                            {
                                Console.WriteLine("Please enter Y to add a stop Over point,N otherwise");
                                bool isWilling = Reader.ReadBool();
                                if (isWilling)
                                {
                                    ViaPoint viaPoint = new ViaPoint();
                                    Console.WriteLine("Please enter the Address");
                                    viaPoint.Location = Reader.ReadString().ToLower();
                                    Console.WriteLine("Please enter the distance from " + ride.Route.Source);
                                    viaPoint.Distance = Reader.ReadFloat(0, ride.Distance);
                                    ride.Route.ViaPoints.Add(viaPoint);
                                }
                                else
                                {
                                    break;
                                }
                            } while (true);
                            Console.WriteLine("Please enter the cost per unit distance");
                            ride.UnitDistanceCost = Reader.ReadFloat();
                            ride.ProviderName     = user.Name;
                            int carIndex;
                            if (user.Vehicles.Count == 1)
                            {
                                carIndex = 0;
                            }
                            else
                            {
                                Console.WriteLine("Please select the car ");
                                foreach (var item in user.Vehicles.Select((value, index) => new { value, index }))
                                {
                                    Console.WriteLine(item.index + 1 + ". ");
                                    DisplayCarDetails(item.value);
                                }
                                carIndex = Reader.ReadInt(1, user.Vehicles.Count) - 1;
                            }
                            int numberOfSeats = user.Vehicles[carIndex].Capacity - 1;
                            Console.WriteLine("Please enter the number of seats to Offer");
                            ride.NoOfOfferedSeats = Reader.ReadInt(1, numberOfSeats);
                            ride.VehicleId        = user.Vehicles[carIndex].Number;
                            rideService.CreateRide(ride);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Please Add a car to Offer Ride");
                    }
                    break;

                case Choice.BookACar:
                    Console.WriteLine("Please enter the Starting place");
                    pickUp = Reader.ReadString().ToLower();
                    Console.WriteLine("Please enter the Destination");
                    drop = Reader.ReadString().ToLower();
                    Console.WriteLine("Please enter the date");
                    DateTime dateTime = Reader.ReadDate();
                    Console.WriteLine("Please enter the number of seats");
                    int         noOfSeats      = Reader.ReadInt();
                    List <Ride> AvailableRides = rideService.FindRides(pickUp, drop, dateTime, user.Id, noOfSeats, VehicleType.Car);
                    if (AvailableRides.Count == 0)
                    {
                        Console.WriteLine("Rides are not available");
                    }
                    else
                    {
                        foreach (var item in AvailableRides.Select((value, index) => new { value, index }))
                        {
                            Console.Write(item.index + 1 + ". ");
                            //Vehicle car = userService.FindVehicle(item.value.VehicleId, item.value.ProviderId);
                            Vehicle car = userService.FindVehicle(item.value.VehicleId);
                            DisplayAvailableRide(item.value);
                            DisplayCarDetails(car);
                            Console.WriteLine("Start Time:" + item.value.StartDateTime + rideService.CalculateTime(item.value, pickUp, drop));
                            Console.WriteLine("Cost: " + rideService.CalculateCostForRide(item.value.Id, pickUp, drop) * noOfSeats);
                        }
                        Console.WriteLine("Please enter Y to book a car,N to Go Back");
                        bool isWilling = Reader.ReadBool();
                        if (!isWilling)
                        {
                            break;
                        }
                        Console.WriteLine("Please select a ride ");
                        int   rideIndex     = Reader.ReadInt(1, AvailableRides.Count) - 1;
                        Ride  availableRide = AvailableRides[rideIndex];
                        float cost          = rideService.CalculateCostForRide(availableRide.Id, pickUp, drop) * noOfSeats;
                        if (userService.IsBalanceAvailable(cost, user.Id))
                        {
                            rideService.RequestRide(user.Id, availableRide.Id, pickUp, drop, noOfSeats);
                            Console.WriteLine("The Ride is Requested Successfully\n" +
                                              "Please wait for the approval");
                        }
                        else
                        {
                            Console.WriteLine("Sorry,Your Balance is not Sufficient");
                        }
                    }
                    break;

                case Choice.ViewOfferedRidesAndApproveRequests:
                    List <Ride> offeredRides = rideService.FindOfferedRides(user.Id);
                    if (offeredRides.Count == 0)
                    {
                        Console.WriteLine("Whoops,No rides are offered");
                    }
                    else
                    {
                        foreach (var item in offeredRides.Select((value, index) => new { value, index }))
                        {
                            Console.Write(item.index + 1 + ". ");
                            DisplayRide(item.value);
                            if (item.value.IsRideCompleted)
                            {
                                Console.WriteLine("The Ride is Completed");
                            }
                            else
                            {
                                Console.WriteLine("The Ride is not Completed");
                            }
                            Console.WriteLine("car number: " + item.value.VehicleId);
                        }
                        Console.WriteLine("Please select the ride to view Requests");
                        int  rideIndex   = Reader.ReadInt(1, offeredRides.Count) - 1;
                        Ride offeredRide = offeredRides[rideIndex];
                        ViewResponses(offeredRide);
                        if (offeredRide.IsRideCompleted)
                        {
                            break;
                        }
                        while (offeredRide.Requests.Count != 0)
                        {
                            ViewRequests(offeredRide);
                            Console.WriteLine("Please enter Y to Accept or Reject Request,N otherwise");
                            bool isWilling = Reader.ReadBool();
                            if (!isWilling)
                            {
                                break;
                            }
                            Console.WriteLine("Please select Request to Accept or Reject");
                            int    requestIndex = Reader.ReadInt(1, offeredRide.Requests.Count) - 1;
                            string riderId      = offeredRide.Requests[requestIndex].RiderId;
                            Console.WriteLine("Please enter Y to Approve Request,N to Reject");
                            bool isApprove = Reader.ReadBool();
                            if (isApprove)
                            {
                                amount = rideService.CalculateCostForRide(offeredRide.Id, offeredRide.Requests[requestIndex].PickUp, offeredRide.Requests[requestIndex].Drop);
                                User rider = userService.FindUser(riderId);
                                if (userService.IsBalanceAvailable(amount, rider.Id))
                                {
                                    if (rideService.ApproveRequest(offeredRide.Id, offeredRide.Requests[requestIndex].RequestId, isApprove))
                                    {
                                        userService.PayBill(user.Id, rider.Id, amount);
                                        Console.WriteLine("The request is Accepted Successfully");
                                    }
                                    else
                                    {
                                        Console.WriteLine("The Request can't be Accepted");
                                    }
                                }
                            }
                            else
                            if (rideService.ApproveRequest(offeredRide.Id, offeredRide.Requests[requestIndex].RequestId, isApprove))
                            {
                                Console.WriteLine("The request is Rejected ");
                            }
                        }
                    }
                    break;

                case Choice.ViewBookings:
                    ViewBookings(user.Id);
                    break;

                case Choice.AddAmountToWallet:
                    Console.WriteLine("Please enter the amount");
                    amount = Reader.ReadFloat();
                    userService.AddAmount(amount, user.Id);
                    break;

                case Choice.ViewBalance:
                    float balance = userService.GetBalance(user.Id);
                    Console.WriteLine("The Available Balance is " + balance);
                    break;

                case Choice.AddACar:
                    Console.WriteLine("Please select the type of vehicle" +
                                      "1.Car,2.Bike");
                    VehicleType type = Reader.ReadVehicleType();
                    userService.AddVehicle(user.Id, NewVehicle(type));
                    break;

                case Choice.Logout:
                    break;
                }
            } while (choice != Choice.Logout);
        }
 public bool AddViaPoint([FromBody] ViaPoint viaPoint)
 {
     return(viaPointService.AddViaPoint(viaPoint));
 }