public async Task <IActionResult> GetAvailableRooms(int guests, string checkIn, string checkOut)
        {
            Log.Information("Controller method starting: [BookingController] GetAvailableRooms");
            try
            {
                var roomAvailability = new RoomAvailabilityRequest
                {
                    Guests       = guests,
                    CheckInDate  = DateTime.Parse(checkIn),
                    CheckOutDate = DateTime.Parse(checkOut)
                };
                var result = await _bookingService.GetAvailableRoomTypesAsync(roomAvailability);

                if (!result.Success)
                {
                    return(BadRequest());
                }

                return(Ok(result.Entity));
            }
            catch
            {
                return(BadRequest());
            }
        }
Example #2
0
 public void SetBookingRequest(RoomAvailabilityRequest availabilityRequest)
 {
     BookingRequest.CheckInDate  = availabilityRequest.CheckInDate;
     BookingRequest.CheckOutDate = availabilityRequest.CheckOutDate;
     BookingRequest.Guests       = availabilityRequest.Guests;
     NotifyStateChanged();
 }
Example #3
0
        public ProxyResult <RoomAvailabilityResponse> GetRoomAvailability(RoomAvailabilityRequest req)
        {
            var operationResult = _vleisureApiRequest.GetRoomAvailability(req);


            return(operationResult.ToProxyResult());
        }
Example #4
0
 public void Flush()
 {
     Rooms                        = null;
     ConfirmedBooking             = null;
     PickedRoom                   = null;
     BookingRequest               = new BookingRequest();
     AvailabilityRequest          = new RoomAvailabilityRequest();
     BookingRequest.BookingNumber = "<placeholder>";
 }
Example #5
0
        public IQueryable <int> GetUnavailableRoomIds(RoomAvailabilityRequest request)
        {
            Log.Information("BookingRepository processing request for GetUnavailableRoomIds {@Request}", request);
            var ids = ctx.Bookings
                      .Where(e => !(request.CheckOutDate.Date <= e.CheckInDate.Date || request.CheckInDate.Date >= e.CheckOutDate.Date) && e.Room != null && !e.IsCanceled) // request in 6 out 7
                      .Include(e => e.Room)                                                                                                                                 // blocking in 5 out 6
                      .Select(e => e.Room.Id);

            return(ids);
        }
        public override RoomAvailabilityResponse GetRoomAvailability(RoomAvailabilityRequest roomAvailabilityRequest)
        {
            string           path             = PathFor("HotelRoomAvailabilityResponse.json");
            string           content          = Regex.Replace(File.ReadAllText(path), "");
            JsonDeserializer jsonDeserializer = new JsonDeserializer()
            {
                RootElement = "HotelRoomAvailabilityResponse"
            };
            RoomAvailabilityResponse hotelRoomAvailabilityResponse = jsonDeserializer.Deserialize <RoomAvailabilityResponse>(new RestResponse()
            {
                Content = content
            });

            return(hotelRoomAvailabilityResponse);
        }
Example #7
0
        public OperationResult <RoomAvailabilityResponse> GetRoomAvailability(RoomAvailabilityRequest request)
        {
            var client      = new RestClient("https://hotels-dev.mekongleisuretravel.com/ihs/v2/roomavail");
            var restRequest = InitRestRequest(request);
            var response    = client.Execute(restRequest);

            if (response.IsSuccessful)
            {
                if (response.ContentType.Contains("application/json"))
                {
                    var roomAvailabilityResponse = _javaScriptScriptSerializer.Deserialize <RoomAvailabilityResponse>(response.Content);
                    return(new OperationResult <RoomAvailabilityResponse>(roomAvailabilityResponse));
                }
            }

            return(new OperationResult <RoomAvailabilityResponse>(OperationResult.OperationStatus.GeneralError, response.ErrorMessage.ToString()));
        }
Example #8
0
 public void SetAvailabilityRequest(RoomAvailabilityRequest availabilityRequest)
 {
     AvailabilityRequest = availabilityRequest;
     NotifyStateChanged();
 }
Example #9
0
        public async Task <ServiceResponse <List <RoomInfo> > > GetAvailableRoomTypesAsync(RoomAvailabilityRequest request)
        {
            Log.Information("BookingService processing request for GetAvailableRoomTypes {@request}", request);

            if (request.CheckInDate.Date < DateTime.Now.Date)
            {
                return(new ServiceResponse <List <RoomInfo> >("Check in date cannot be set earlier than today."));
            }
            if (request.CheckOutDate.Date <= DateTime.Now.Date)
            {
                return(new ServiceResponse <List <RoomInfo> >("Check out date cannot be set earlier than today."));
            }
            if (request.CheckInDate.Date >= request.CheckOutDate.Date)
            {
                return(new ServiceResponse <List <RoomInfo> >("Check out date cannot occur before or same date as Check in date."));
            }

            var unavailablequery = repo.GetUnavailableRoomIds(request);
            var roomTypes        = await repo.GetAvailableRooms(unavailablequery)
                                   .Select(s => new { Beds = s.Beds, DoubleBeds = s.DoubleBeds })
                                   .Distinct()
                                   .ToArrayAsync();

            List <RoomInfo> roomtypes = new List <RoomInfo>(); // map the objects

            foreach (var roomtype in roomTypes)
            {
                roomtypes.Add(new RoomInfo {
                    Beds = roomtype.Beds, DoubleBeds = roomtype.DoubleBeds
                });
            }

            return(new ServiceResponse <List <RoomInfo> >(roomtypes));
        }
 public abstract RoomAvailabilityResponse GetRoomAvailability(RoomAvailabilityRequest roomAvailabilityRequest);
        /**
         * http://api.ean.com/ean‑services/rs/hotel/v3/avail?minorRev=[current minorRev #]
         * &cid=55505
         * &apiKey=[xxx-yourOwnKey-xxx]
         * &customerUserAgent=[xxx]
         * &customerIpAddress=[xxx]
         * &customerSessionId=[xxx]
         * &locale=en_US
         * &currencyCode=USD
         * &hotelId=109496
         * &arrivalDate=08/03/2012
         * &departureDate=08/04/2012
         * &includeDetails=true
         * &room1=2
         * &options=HOTEL_DETAILS
         */

        public override RoomAvailabilityResponse GetRoomAvailability(RoomAvailabilityRequest roomAvailabilityRequest)
        {
            Require.Argument("roomAvailabilityRequest", roomAvailabilityRequest);

            RestRequest request = new RestRequest();

            request.Resource = "avail";
            request.Method   = Method.GET;

            request.RootElement = "HotelRoomAvailabilityResponse";
            //required parameters
            request.AddParameter("hotelId", roomAvailabilityRequest.HotelId);
            request.AddParameter("arrivalDate", roomAvailabilityRequest.ArrivalDate.ToShortDateString());
            request.AddParameter("departureDate", roomAvailabilityRequest.DepartureDate.ToShortDateString());

            if (roomAvailabilityRequest.RoomGroup != null)
            {
                for (int i = 0; i < roomAvailabilityRequest.NumberOfBedrooms; i++)
                {
                    var parameter = new Parameter();
                    parameter.Value = roomAvailabilityRequest.RoomGroup[i].NumberOfAdults + (roomAvailabilityRequest.RoomGroup[i].ChildAges == null ? string.Empty : ("," + String.Join(",", roomAvailabilityRequest.RoomGroup[i].ChildAges.Take(roomAvailabilityRequest.RoomGroup[i].NumberOfChildren).ToArray())));
                    parameter.Type  = ParameterType.GetOrPost;
                    parameter.Name  = "room" + (roomAvailabilityRequest.RoomGroup.IndexOf(roomAvailabilityRequest.RoomGroup[i]) + 1);
                    request.AddParameter(parameter);
                }
            }

            //optional parameters
            if (roomAvailabilityRequest.NumberOfBedrooms.HasValue)
            {
                request.AddParameter("numberOfBedrooms", roomAvailabilityRequest.NumberOfBedrooms.Value);
            }

            if (roomAvailabilityRequest.SupplierType.HasValue)
            {
                request.AddParameter("supplierType", roomAvailabilityRequest.SupplierType.Value.ToString());
            }

            if (!String.IsNullOrWhiteSpace(roomAvailabilityRequest.RateKey))
            {
                request.AddParameter("rateKey", roomAvailabilityRequest.RateKey);
            }

            if (!String.IsNullOrWhiteSpace(roomAvailabilityRequest.RoomTypeCode))
            {
                request.AddParameter("roomTypeCode", roomAvailabilityRequest.RoomTypeCode);
            }

            if (!String.IsNullOrWhiteSpace(roomAvailabilityRequest.RateCode))
            {
                request.AddParameter("rateCode", roomAvailabilityRequest.RateCode);
            }

            request.AddParameter("includeDetails", roomAvailabilityRequest.IncludeDetails);
            request.AddParameter("includeRoomImages", roomAvailabilityRequest.IncludeRoomImages);
            request.AddParameter("includeHotelFeeBreakdown", roomAvailabilityRequest.IncludeHotelFeeBreakdown);

            if (roomAvailabilityRequest.Options.Any())
            {
                request.AddParameter("options", String.Join(",", roomAvailabilityRequest.Options));
            }

            return(Execute <RoomAvailabilityResponse>(request));
        }