예제 #1
0
        /// <summary>
        /// Remove Minimum Stay Through restriction
        /// </summary>
        /// <param name="roomType">Room type</param>
        /// <param name="ratePlanId">Rate plan</param>
        /// <returns>AvailStatusMessageType</returns>
        private AvailStatusMessageType ResetRestrictionThroughRates(int roomType, int ratePlanId, AvailabilityStatusType status = AvailabilityStatusType.Open)
        {
            var availStatusMessageType = new AvailStatusMessageType();

            DateTime startDate = DateTime.Now.Date;
            DateTime endDate = startDate.AddYears(inventoryYearsCount);

            availStatusMessageType.StatusApplicationControl = new StatusApplicationControlType
            {
                InvTypeCode = roomType.ToString(),
                RatePlanCode = ratePlanId.ToString(),
                Start = startDate.Date.ToString(Formats.UNIVERSAL_SHORT_DATE),
                End = endDate.ToString(Formats.UNIVERSAL_SHORT_DATE),
            };

            availStatusMessageType.LengthsOfStay = new LengthsOfStayType()
            {
                ArrivalDateBased = false,
                ArrivalDateBasedSpecified = true
            };

            availStatusMessageType.LengthsOfStay.LengthOfStay = new LengthsOfStayTypeLengthOfStay[1];
            availStatusMessageType.LengthsOfStay.LengthOfStay[0] = new LengthsOfStayTypeLengthOfStay
            {
                MinMaxMessageType =
                    LengthsOfStayTypeLengthOfStayMinMaxMessageType
                    .SetMinLOS,
                MinMaxMessageTypeSpecified = true,
                Time = "1",

            };

            availStatusMessageType.RestrictionStatus = new AvailStatusMessageTypeRestrictionStatus
            {
                Status = status,
                StatusSpecified = true
            };

            return availStatusMessageType;
        }
예제 #2
0
        /// <summary>
        /// Send a rate restriction for a rate plan
        /// </summary>
        /// <param name="businessShortname">Business short name</param>
        /// <param name="roomTypeId">Room type id</param>
        /// <param name="ratePlanId">Rate plan id</param>
        /// <param name="status">Availability status</param>
        /// <param name="startDate">Start date</param>
        /// <param name="endDate">End date</param>
        /// <returns>True if it is a success</returns>
        public bool SendRatesRestrictionUpdate(string businessShortname, int roomTypeId, int ratePlanId, AvailabilityStatusType status = AvailabilityStatusType.Open, DateTime? startDate = null, DateTime? endDate = null)
        {
            var hotelAvailNotifRq = new OTA_HotelAvailNotifRQ();

            var hotelAvailNotifRQAvailStatusMessages = new OTA_HotelAvailNotifRQAvailStatusMessages();

            hotelAvailNotifRq.AvailStatusMessages = hotelAvailNotifRQAvailStatusMessages;

            hotelAvailNotifRQAvailStatusMessages.HotelCode = businessShortname;
            
            List<AvailStatusMessageType> availStatusMessages = null;

            if (status != AvailabilityStatusType.Close)
            {
                availStatusMessages = GetRateRestrictions(businessShortname, roomTypeId, ratePlanId, status, startDate, endDate);
            }
            else
            {
                availStatusMessages = new List<AvailStatusMessageType>
                                          {
                                              GetCloseRestrictionRates(roomTypeId, ratePlanId, startDate, endDate)
                                          };
            }

            if (availStatusMessages != null)
            {

                hotelAvailNotifRQAvailStatusMessages.AvailStatusMessage = availStatusMessages.ToArray();

                SetLocatorId(hotelAvailNotifRq);

                PPCGateway.Publish(hotelAvailNotifRq);
            }

            return true;
        }
예제 #3
0
        /// <summary>
        /// Assign and return rates for a Daily Rate
        /// </summary>
        /// <param name="dailyRate">End Date</param>
        /// <returns>RatesRestrictionsDateRangeEntry object</returns>
        private AvailStatusMessageType GetRestrictionRates(RateCache dailyRate, AvailabilityStatusType status = AvailabilityStatusType.Open)
        {
            if (dailyRate.MinStay == 0)
            {
                Logger.LogError("Minimum booking duration is invalid. It is set as 0 for room type id {0}, date {1} ", null, null, dailyRate.ProductId, dailyRate.Date);
            }

            var availStatusMessageType = new AvailStatusMessageType();


            availStatusMessageType.StatusApplicationControl = new StatusApplicationControlType
            {
                InvTypeCode = dailyRate.RoomTypeId.ToString(),
                RatePlanCode = dailyRate.RatePlanId.ToString(),
                Start = dailyRate.Date.ToString(Formats.UNIVERSAL_SHORT_DATE),
                End = dailyRate.Date.ToString(Formats.UNIVERSAL_SHORT_DATE),
            };
            availStatusMessageType.RestrictionStatus = new AvailStatusMessageTypeRestrictionStatus
            {
                Status = status,
                StatusSpecified = true
            };

            availStatusMessageType.LengthsOfStay = new LengthsOfStayType()
            {
                    ArrivalDateBased = true,
                    ArrivalDateBasedSpecified = true
            };
            availStatusMessageType.LengthsOfStay.LengthOfStay = new LengthsOfStayTypeLengthOfStay[1];
            availStatusMessageType.LengthsOfStay.LengthOfStay[0] = new LengthsOfStayTypeLengthOfStay
            {
                MinMaxMessageType =
                    LengthsOfStayTypeLengthOfStayMinMaxMessageType
                    .SetMinLOS,
                MinMaxMessageTypeSpecified = true,
                Time = dailyRate.MinStay.ToString(),
                
            };

            return availStatusMessageType;
        }
예제 #4
0
        /// <summary>
        /// Get rates restriction from RateCacheList
        /// </summary>
        /// <param name="dailyRateCacheList">Daily Rate List</param>
        /// <returns>AvailStatusMessageType list</returns>
        private IEnumerable<AvailStatusMessageType> GetRateRestrictionsFromRateCacheList(ICollection<RateCache> dailyRateCacheList, AvailabilityStatusType status = AvailabilityStatusType.Open)
        {
            if (dailyRateCacheList == null || dailyRateCacheList.Count == 0)
            {
                return null;
            }

            var startDate = DateTime.UtcNow.Date;

            var availStatusMessages = new List<AvailStatusMessageType>();

            foreach (var dailyRate in dailyRateCacheList)
            {
                if (dailyRate.Date >= startDate.Date)
                {
                    var restrictionRate = GetRestrictionRates(dailyRate, status);

                    var lastRestrictionRate = availStatusMessages.LastOrDefault();

                    if (CompareAvailStatus(restrictionRate, lastRestrictionRate))
                    {
                        lastRestrictionRate.StatusApplicationControl.End = restrictionRate.StatusApplicationControl.End;
                    }
                    else
                    {
                        availStatusMessages.Add(restrictionRate);
                    }
                }
            }

            //Add restriction on arrival Message
            var restrictionOnArrivalStatusMessages = GetRestrictionOnArrivalStatusMessages(availStatusMessages);

            availStatusMessages.AddRange(restrictionOnArrivalStatusMessages);

            return availStatusMessages;
        }
예제 #5
0
        /// <summary>
        /// Get Rate restrictions for a business
        /// </summary>
        /// <param name="businessId">Business Id</param>
        /// <param name="status">AvailabilityStatusType</param>
        /// <returns>List of Avail Status</returns>
        private List<AvailStatusMessageType> GetRateRestrictions(long businessId,  AvailabilityStatusType status = AvailabilityStatusType.Open)
        {
            var roomsType = roomTypeManager.GetAllActiveWithRatePlansForBusiness(businessId, RatePlanTypeEnum.Unknown);

            var availStatusMessages = new List<AvailStatusMessageType>();

            foreach (var roomType in roomsType)
            {
                var ratesByRoomType = rateCacheManager.GetAllByRoomTypeAndRatePlanId(businessId, roomType.Id, int.Parse(roomType.Code), RatePlanTypeEnum.Unknown);

                var restrictionMinimumStayThrough = ResetRestrictionThroughRates(roomType.Id, int.Parse(roomType.Code), status);

                availStatusMessages.Add(restrictionMinimumStayThrough);

                availStatusMessages.AddRange(GetRateRestrictionsFromRateCacheList(ratesByRoomType, status));
            }

            return availStatusMessages;
        }
예제 #6
0
        /// <summary>
        /// Get rate restrictions for a rate plan
        /// </summary>
        /// <param name="businessShortName">business short name</param>
        /// <param name="roomTypeId">Room Type Id</param>
        /// <param name="ratePlanId">Rate Plan Id</param>
        /// <returns>List of Avail Status</returns>
        private List<AvailStatusMessageType> GetRateRestrictions(string businessShortName, int roomTypeId, int ratePlanId, AvailabilityStatusType status = AvailabilityStatusType.Open, DateTime? startDate = null, DateTime? endDate = null)
        {
            var ratesByRoomType = new List<RateCache>();
            if (startDate.HasValue && endDate.HasValue)
            {
                ratesByRoomType = rateCacheManager.GetRatesByRoomTypeIdRatePlanIdAndDateRange(businessShortName, roomTypeId, ratePlanId, startDate.Value, endDate.Value);
            }
            else
            {
                ratesByRoomType = rateCacheManager.GetAllByRoomTypeAndRatePlanId(businessShortName, roomTypeId, ratePlanId, RatePlanTypeEnum.Unknown);
            }

            var list = GetRateRestrictionsFromRateCacheList(ratesByRoomType, status);

            if (list == null)
            {
                return null;
            }
            return list.ToList();
        }
예제 #7
0
        /// <summary>
        /// Send rates restriction update for a business
        /// </summary>
        /// <param name="businessId">Busisness Id</param>
        /// <param name="businessShortname">Business short name</param>
        /// <param name="status">AvailabilityStatusType</param>
        /// <returns>True if it is a success</returns>
        public bool SendRatesRestrictionUpdate(string businessShortname, long businessId, AvailabilityStatusType status)
        {
            var hotelAvailNotifRq = new OTA_HotelAvailNotifRQ();

            var hotelAvailNotifRQAvailStatusMessages = new OTA_HotelAvailNotifRQAvailStatusMessages();

            hotelAvailNotifRq.AvailStatusMessages = hotelAvailNotifRQAvailStatusMessages;

            hotelAvailNotifRQAvailStatusMessages.HotelCode = businessShortname;

            var availStatusMessages = GetRateRestrictions(businessId, status);

            if (availStatusMessages != null)
            {

                hotelAvailNotifRQAvailStatusMessages.AvailStatusMessage = availStatusMessages.ToArray();

                SetLocatorId(hotelAvailNotifRq);

                PPCGateway.Publish(hotelAvailNotifRq);
            }

            return true;
        }