コード例 #1
0
        /// <summary>
        /// Change provider optin list
        /// </summary>
        /// <param name="providerId">Provider Id</param>
        /// <param name="aigSubscriberByOptinList">Subscriber List</param>
        public void ChangeProviderSubscriberOptinDetails(Guid providerId, SubscriberByOptinList aigSubscriberByOptinList)
        {
            if (!providerOptinToSubscriberList.ContainsKey(providerId))
            {
                return;
            }

            providerOptinToSubscriberList.Remove(providerId);
            providerOptinToSubscriberList.Add(providerId, aigSubscriberByOptinList);
        }
コード例 #2
0
ファイル: AIGIntegratorService.cs プロジェクト: ognjenm/egle
        /// <summary>
        /// This method will handle updates for a provider
        /// </summary>
        /// <param name="subscriberByOptinList">List of providers opted into AIG</param>
        /// <param name="providerChangeMessage">Provider change message</param>
        /// <returns>True is successful otherwise False</returns>
        private bool HandleProviderUpdate(SubscriberByOptinList subscriberByOptinList, ProviderChangeMessage providerChangeMessage)
        {
            object providerDistributionMessage;

            switch (providerChangeMessage.ChangeType)
            {
                case ChangeType.Insert:
                    if (providerChangeMessage.SubscriberId == Guid.Empty)
                    {
                        foreach (var subscriberId in subscriberByOptinList.GetSubscribers())
                        {
                            providerDistributionMessage = CreateProviderDistributionChangeMessage(subscriberId, providerChangeMessage.ProviderId, ChangeType.Insert);

                            return providerDistributionMessage != null && QueueMessage(providerDistributionMessage);
                        }
                    }
                    else
                    {
                        if (providerChangeMessage.IsAvailabilityReset)
                        {
                            providerDistributionMessage = CreateProviderAvailabilityResetMessage(providerChangeMessage.SubscriberId, providerChangeMessage.ProviderId);
                        }
                        else if (providerChangeMessage.IsProviderReset)
                        {
                            providerDistributionMessage = CreateProviderResetMessage(providerChangeMessage.SubscriberId, providerChangeMessage.ProviderId);
                        }
                        else
                        {
                            providerDistributionMessage = CreateProviderDistributionChangeMessage(providerChangeMessage.SubscriberId, providerChangeMessage.ProviderId, ChangeType.Insert);                            
                        }                        

                        return providerDistributionMessage != null && QueueMessage(providerDistributionMessage);
                    }
                    break;
                case ChangeType.Update:     // The providerChangeMessage.SubscriberId will always be empty so send a message for all subscribers
                    foreach (var subscriberId in subscriberByOptinList.GetSubscribers())
                    {
                        providerDistributionMessage = CreateProviderDistributionChangeMessage(subscriberId, providerChangeMessage.ProviderId, ChangeType.Update);

                        return providerDistributionMessage != null && QueueMessage(providerDistributionMessage);
                    }
                    break;
                case ChangeType.Delete:
                    providerDistributionMessage = CreateProviderDistributionChangeMessage(providerChangeMessage.SubscriberId, providerChangeMessage.ProviderId, ChangeType.Delete);

                    return providerDistributionMessage != null && QueueMessage(providerDistributionMessage);
            }
            return true;
        }
コード例 #3
0
ファイル: AIGIntegratorService.cs プロジェクト: ognjenm/egle
        /// <summary>
        /// This method will handle updates for a rate plan
        /// </summary>
        /// <param name="subscriberByOptinList">List of providers opted into AIG</param>
        /// <param name="rateChangeMessage">RatePlan change message</param>
        /// <returns>True is successful otherwise False</returns>
        private bool HandleRatePlanUpdate(SubscriberByOptinList subscriberByOptinList, RatePlanChangeMessage rateChangeMessage)
        {
            switch (rateChangeMessage.ChangeType)
            {
                //for an insert of a new rate plan we need to generate a new room type message with the associated room type / rate plan information
                case ChangeType.Insert:
                {
                    var provider = businessManager.GetBusinessInformationForIntegration(rateChangeMessage.ProviderId.ToLong());
                    var roomTypeRatePlan = roomTypeManager.GetByRoomTypeIdAndRatePlanId(Helper.GetRoomTypeIdFromProductGuid(rateChangeMessage.ProductTypeId), Helper.GetRatePlanIdFromProductGuid(rateChangeMessage.ProductTypeId));

                    //only handle base rate plans for now
                    if (roomTypeRatePlan.RatePlanTypeCode != RatePlanTypeEnum.Base.GetCode())
                    {
                        return true;
                    }

                    var interfaceProduct = ConvertRoomTypeToAigProduct(roomTypeRatePlan, provider.CheckinTime, provider.CheckoutTime);

                    interfaceProduct.RatesRestrictionsDateRange = ExtractRateRestrictions(provider.Id, rateChangeMessage.ProductTypeId);
                    CheckPriceRatesExists(interfaceProduct, rateChangeMessage.ProviderId);

                    //create message for each subscriber
                    if (subscriberByOptinList.GetSubscribers().Any(subscriberId => !QueueMessage(CreateProductAddRemoveMessage(interfaceProduct, subscriberId, rateChangeMessage.ProviderId))))
                    {
                        return false;
                    }
                    break;
                }
                case ChangeType.Update:
                case ChangeType.Delete:
                    {
                        var rateRestrictions = ExtractRateRestrictions(rateChangeMessage.ProviderId.ToLong(), rateChangeMessage.ProductTypeId);

                        if (rateRestrictions == null)
                        {
                            Logger.Info(String.Format("RoomType setup incomplete: No rate restrictions found for business {0} with room type {1}", rateChangeMessage.ProviderId, rateChangeMessage.ProductTypeId));
                        }
                        else
                        {
                            foreach (var subscriberId in subscriberByOptinList.GetSubscribers())
                            {
                                if (rateRestrictions.EndDate > DateTime.Now.Date)
                                {
                                    var rateRestrictionChange = CreateProductRestrictionChangeMessage(subscriberId, rateChangeMessage.ProviderId, rateChangeMessage.ProductTypeId, rateRestrictions);

                                    if (!QueueMessage(rateRestrictionChange))
                                    {
                                        return false;
                                    }
                                }
                                else
                                {
                                    Logger.Info(string.Format("The daily rates with id {0} changed was for a prior time period", Helper.GetRatePlanIdFromProductGuid(rateChangeMessage.ProductTypeId)));
                                }
                            }                            
                        }
                    }
                    break;
            }
            return true;
        }
コード例 #4
0
ファイル: AIGIntegratorService.cs プロジェクト: ognjenm/egle
        /// <summary>
        /// This method will handle updates for a room type
        /// </summary>
        /// <param name="subscriberByOptinList">List of providers opted into AIG</param>
        /// <param name="roomTypeChangeMessage">RoomType change message</param>
        /// <returns>True is successful otherwise False</returns>
        private bool HandleRoomTypeUpdate(SubscriberByOptinList subscriberByOptinList, RoomTypeChangeMessage roomTypeChangeMessage)
        {
            var businessId = roomTypeChangeMessage.ProviderId.ToLong();
            var roomTypeId = roomTypeChangeMessage.ProductTypeId.ToInt();
            var provider = businessManager.GetBusinessInformationForIntegration(businessId);
            var roomTypesByRatePlan = roomTypeManager.GetAllActiveWithRatePlansForBusinessByRoomTypeId(businessId, roomTypeId, RatePlanTypeEnum.Base);

            //Room Types not found
            if (roomTypesByRatePlan == null || roomTypesByRatePlan.Count == 0)
            {
                return true;
            }

            //Always handle a delete first
            if (roomTypeChangeMessage.ChangeType == ChangeType.Delete)
            {
                //remove the room type and rate plans from all subscribers
                foreach (var subscriberId in subscriberByOptinList.GetSubscribers())
                {
                    if (roomTypesByRatePlan.Select(roomType => CreateRemoveProductMessage(subscriberId, roomTypeChangeMessage.ProviderId, roomType.ProductId)).Any(removeProductMessage => !QueueMessage(removeProductMessage)))
                    {
                        return false;
                    }
                }

                return true;
            }

            //Insert or full update
            if (roomTypeChangeMessage.ChangeType == ChangeType.Insert || roomTypeChangeMessage.IsFullUpdate)
            {                
                foreach (var roomType in roomTypesByRatePlan)
                {
                    var interfaceProduct = ConvertRoomTypeToAigProduct(roomType, provider.CheckinTime, provider.CheckoutTime);

                    interfaceProduct.RatesRestrictionsDateRange = ExtractRateRestrictions(provider.Id, new Guid(roomType.ProductId));
                    CheckPriceRatesExists(interfaceProduct, roomTypeChangeMessage.ProviderId);

                    //create a product add message against all subscribers for room type and rate plans
                    foreach (var subscriberId in subscriberByOptinList.GetSubscribers())
                    {
                        if (!QueueMessage(CreateProductAddRemoveMessage(interfaceProduct, subscriberId, roomTypeChangeMessage.ProviderId)))
                        {
                            return false;
                        }
                    }
                }
                return true;
            }

            //Update
            if (roomTypeChangeMessage.ChangeType == ChangeType.Update)
            {
                if (roomTypeChangeMessage.IsAttributeUpdate)
                {
                    foreach (var roomType in roomTypesByRatePlan)
                    {
                        var interfaceProduct = SetAigProductAttributes(roomType, provider.CheckinTime, provider.CheckoutTime);
                        //create a attribute update against all subscribers for room type and rate plans
                        if (subscriberByOptinList.GetSubscribers().Any(subscriberId => !QueueMessage(CreateProductAttributeChangeMessage(interfaceProduct, subscriberId, roomTypeChangeMessage.ProviderId))))
                        {
                            return false;
                        }
                    }
                }
                else if (roomTypeChangeMessage.IsConfigurationUpdate)
                {
                    foreach (var roomType in roomTypesByRatePlan)
                    {
                        AIGProduct interfaceProduct = null;
                        SetAigProductConfiguration(roomType, ref interfaceProduct);

                        //create a configuration update against all subscribers for room type and rate plans
                        if (subscriberByOptinList.GetSubscribers().Any(subscriberId => !QueueMessage(CreateProductConfigurationChangeMessage(interfaceProduct, subscriberId, roomTypeChangeMessage.ProviderId))))
                        {
                            return false;
                        }
                    }
                }
                return true;
            }

            return true;
        }
コード例 #5
0
ファイル: AIGIntegratorService.cs プロジェクト: ognjenm/egle
 /// <summary>
 /// This method will handle updates for a room
 /// </summary>
 /// <param name="subscriberByOptinList">List of providers opted into AIG</param>
 /// <param name="roomChangeMessage">Room change message</param>
 /// <returns>True is successful otherwise False</returns>
 private bool HandleRoomUpdate(SubscriberByOptinList subscriberByOptinList, RoomChangeMessage roomChangeMessage)
 {
     switch (roomChangeMessage.ChangeType)
     {
         //insert, update and delete of rooms should trigger a configuration update for the associated room type
         case ChangeType.Insert:
         case ChangeType.Delete:
         case ChangeType.Update:
             {
                 var roomTypeChangeMessage = new RoomTypeChangeMessage(roomChangeMessage.ProviderId, roomChangeMessage.ProductTypeId, ChangeType.Update, RoomTypeChangeMessage.RoomTypeChangeType.Configuration);
                 return HandleRoomTypeUpdate(subscriberByOptinList, roomTypeChangeMessage);
             }
     }
     return true;
 }
コード例 #6
0
ファイル: AIGIntegratorService.cs プロジェクト: ognjenm/egle
        /// <summary>
        /// This method will call the queue handler
        /// </summary>
        /// <param name="subscriberByOptinList">Subscriber by optin price type list</param>
        /// <param name="inventoryChangeMessage">Booking update item to process</param>
        /// <returns>True is successful otherwise False</returns>
        private bool HandleInventoryUpdate(SubscriberByOptinList subscriberByOptinList, InventoryChangeMessage inventoryChangeMessage)
        {
            foreach (var subscriberId in subscriberByOptinList.GetSubscribers())
            {
                return
                    QueueMessage(CreateProductAvailabilityChangeMessage(subscriberId, inventoryChangeMessage,
                                                                        inventoryChangeMessage.ChangeType));
            }

            return true;
        }
コード例 #7
0
 /// <summary>
 /// Add provider and subscriber opt ins
 /// </summary>
 /// <param name="providerId">Provider Id</param>
 /// <param name="aigSubscriberByOptinList">Subscriber List</param>
 public void AddProviderSubscriberOptin(Guid providerId, SubscriberByOptinList aigSubscriberByOptinList)
 {
     providerOptinToSubscriberList.Add(providerId, aigSubscriberByOptinList);
 }