示例#1
0
        public async Task <Booking> CreateBooking(RequestBooking requestBooking)
        {
            var bookingDate = requestBooking.DateBooked.Date;

            if (await bookingRepository.IsAvailable(bookingDate, requestBooking.TimeSlot, requestBooking.ServiceType))
            {
                try
                {
                    var booking = new Booking
                    {
                        ServiceType    = requestBooking.ServiceType,
                        DateBooked     = bookingDate,
                        TimeSlot       = requestBooking.TimeSlot,
                        CustomerEmail  = requestBooking.CustomerEmail,
                        CustomerMobile = requestBooking.CustomerMobile,
                        CustomerName   = requestBooking.CustomerName,
                        Comment        = requestBooking.Comment
                    };
                    await bookingRepository.CreateSync(booking);

                    var message = new StringBuilder();
                    message.Append(string.Format(@"Requested Service: {0}<br/>", requestBooking.ServiceType));
                    message.Append(string.Format(@"Date and Time: {0} {1}:00<br/>", requestBooking.DateBooked.ToString("d MMM yyyy"), requestBooking.TimeSlot));
                    message.Append(string.Format(@"Phone: {0}<br/>", booking.CustomerMobile));
                    message.Append(string.Format(@"Email: {0}<br/>", booking.CustomerEmail));
                    message.Append(string.Format(@"Other details/comments: {0}<br/>", booking.Comment));

                    var to = new List <string>();
                    to.Add("*****@*****.**");
                    //to.Add("*****@*****.**");

                    var emailNotification = new EmailNotification
                    {
                        From    = "*****@*****.**",
                        To      = to,
                        Subject = "A booking request has been made",
                        Message = message.ToString(),
                        IsHtml  = true,
                        Status  = 1
                    };

                    var isPool = await emailNotificationRepository.CreateSync(emailNotification);

                    return(booking);
                }
                catch (Exception ex)
                {
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                    {
                        Content      = new StringContent("Error occured."),
                        ReasonPhrase = ex.Message
                    });
                }
            }
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
            {
                Content      = new StringContent("The time slot specifed is already booked."),
                ReasonPhrase = "Please select other time slot or service."
            });
        }
        public void SearchAvailableRides_ShouldWork()
        {
            User SampleUser = UserTestingData.GetSampleUser();

            RideDetails SampleRideDetails = BookingTestingData.GetSampleRideDetails();

            List <OfferRide> SampleListOfOffers = RideOfferTestingData.GetSampleRideOffersList();

            List <Place> SampleListOfPlaces = PlacesTestingData.GetSamplePlacesList();

            RequestBooking SampleBookingRequest = BookingTestingData.GetSampleBookingRequest();

            using (var mock = AutoMock.GetStrict())
            {
                var TestService = mock.Create <BookingService>();

                mock.Mock <IRepositoryManager <Place> >().Setup(x => x.GetAll()).Returns(SampleListOfPlaces);

                mock.Mock <IMapper>().Setup(x => x.Map <OfferRide, RideDetails>(SampleListOfOffers[0])).Returns(SampleRideDetails).Verifiable();

                mock.Mock <IRepositoryManager <User> >().Setup(x => x.Get(22)).Returns(SampleUser).Verifiable();

                mock.Mock <IRepositoryManager <OfferRide> >().Setup(x => x.GetAll()).Returns(SampleListOfOffers).Verifiable();

                TestService.SearchAvailableRides(SampleBookingRequest, 44);

                mock.Mock <IRepositoryManager <Place> >().Verify(x => x.GetAll(), Times.Exactly(2));

                mock.Mock <IRepositoryManager <User> >().Verify(x => x.Get(22), Times.Exactly(1));
            }
        }
示例#3
0
        public List <RideDetails> SearchAvailableRides(RequestBooking rideBooking, long userId)
        {
            List <RideDetails> Rides = new List <RideDetails>();

            List <OfferRide> TotalRides = _rideOffersRepository.GetAll().ToList();

            TotalRides.ForEach(e => e.Route = _placeRepository.GetAll().Where(r => r.RideOfferId == e.RideOfferId).ToList());

            List <OfferRide> AvailableRides = TotalRides
                                              .Where(r => r.Route.Exists(e => e.AreaName == rideBooking.StartPoint) &&
                                                     r.Route.Exists(e => e.AreaName == rideBooking.Destination) && r.HostId != userId && (
                                                         r.Route.FindIndex(e => e.AreaName == rideBooking.StartPoint) < r.Route.FindIndex(e => e.AreaName == rideBooking.Destination)) &&
                                                     r.Time == rideBooking.Time && r.AvailableSeats >= rideBooking.Seats &&
                                                     (DateTime.Compare(r.RideOfferedDate, rideBooking.RideBookingDate) == 0))
                                              .ToList();

            foreach (OfferRide ride in AvailableRides)
            {
                string[] Startpoint  = ride.Route[0].AreaName.Split(',');
                string[] Destination = ride.Route[ride.Route.Count - 1].AreaName.Split(',');

                RideDetails rideDetails = _mapper.Map <OfferRide, RideDetails>(ride);
                rideDetails.Name            = _userRepository.Get(ride.HostId).Name;
                rideDetails.StartPoint      = Startpoint[0];
                rideDetails.Destination     = Destination[0];
                rideDetails.RideBookingDate = ride.RideOfferedDate.ToString("dd/MM/yyyy");
                rideDetails.RideFair        = GetPrice(rideBooking.StartPoint, rideBooking.Destination);
                rideDetails.Seats           = ride.AvailableSeats;

                Rides.Add(rideDetails);
            }
            return(Rides);
        }
示例#4
0
 public RequestBookingDTO MapToRequestBookingDTO(RequestBooking requestBooking)
 {
     return(new RequestBookingDTO
     {
         Date = requestBooking.Date,
         id = requestBooking.id,
         Id_Status = requestBooking.Id_Status,
         is_Personal_Car_Available = requestBooking.is_Personal_Car_Available,
         Reason = requestBooking.Reason,
         CreateBy = (int)requestBooking.CreateBy
     });
 }
        public RequestBooking GetSampleBookingRequest()
        {
            RequestBooking booking = new RequestBooking()
            {
                StartPoint      = "Ashoknagar",
                Destination     = "Venkampet",
                RideBookingDate = DateTime.Now.Date,
                Seats           = 2,
                Time            = "3am-6am"
            };

            return(booking);
        }
示例#6
0
        public List <RideDetails> SearchAvailableRides([FromRoute] long userId, [FromQuery] string startPoint, [FromQuery] string destination, [FromQuery] int seats, [FromQuery] DateTime rideBookingDate, [FromQuery] string time)
        {
            RequestBooking booking = new RequestBooking()
            {
                StartPoint      = startPoint,
                Destination     = destination,
                Seats           = seats,
                RideBookingDate = rideBookingDate,
                Time            = time
            };

            return(_bookingService.SearchAvailableRides(booking, userId));
        }
        public async Task <IActionResult> Add(RequestBooking booking)
        {
            var isExistsRequest = await _unitOfWork.RequestBooking.FindRequestBookingByPhone(booking.Phone);

            if (isExistsRequest != null)
            {
                return(BadRequest("Your request is pendingn or limit end"));
            }
            booking.IsRead = false;
            booking.IsRead = false;
            await _unitOfWork.RequestBooking.Add(booking);

            var result = await _unitOfWork.CompleteAsync();

            if (result == 0)
            {
                return(BadRequest());
            }

            return(Ok());
        }
示例#8
0
        public async Task <IActionResult> PostAsync([FromBody] RequestBooking bookingRequest)
        {
            await _mediator.Send(bookingRequest);

            return(Ok());
        }
示例#9
0
 public async Task Add(RequestBooking requestBooking)
 {
     await _context.RequestBookings.AddAsync(requestBooking);
 }