コード例 #1
0
        public HotelPackagesDetails GetHotelPackages(string pid, string sid, string hid)
        {
            HotelPackagesDetails hotelPackages = new HotelPackagesDetails();
            SearchDBEntities     searchDB      = new SearchDBEntities();
            hotelsDBEntities     hotelsDB      = new hotelsDBEntities();
            var hotelSearchData = hotelsDB.hotels.FirstOrDefault(a => a.hotelID == hid);

            var           hotelSearchpro  = hotelsDB.hotelsProviders.FirstOrDefault(a => a.hotelID == hotelSearchData.ID.ToString() && a.providerID == pid);
            var           hotelSearchDesc = hotelsDB.HotelsDescriptions.FirstOrDefault(a => a.hotelID == hid);
            var           Imgs            = hotelsDB.HotelsImages.Where(a => a.HotelID == hid).ToList();
            List <string> images          = Imgs.Select(x => x.URL).ToList();

            hotelPackages.providerHotelID = hotelSearchpro.providerHotelID;
            hotelPackages.hotelCode       = hotelSearchData.hotelID;
            hotelPackages.Address         = hotelSearchData.address;
            hotelPackages.Lng             = hotelSearchData.Lng;
            hotelPackages.Lat             = hotelSearchData.Lat;

            hotelPackages.hotelStars = int.Parse(hotelSearchData.rating);//
            hotelPackages.hotelName  = hotelSearchData.hotelName;
            hotelPackages.providerID = hotelSearchpro.providerID;
            hotelPackages.Location   = hotelSearchData.location;

            hotelPackages.hotelDescription         = hotelSearchDesc.Description1;
            hotelPackages.shortcutHotelDescription = hotelSearchDesc.Description2;
            hotelPackages.City        = hotelSearchData.cityName;
            hotelPackages.Country     = hotelSearchData.countryName;
            hotelPackages.hotelImages = images;

            var          packages    = searchDB.HotelPackages.Where(a => a.Session == sid && a.Hotelid == hid && a.Provider.ToString() == pid).ToList();
            var          Rooms       = searchDB.SearchRoomResults.Where(a => a.sID == sid && a.HotelCode == hid && a.ProviderId.ToString() == pid).ToList();
            RoomPackages roomPackage = new RoomPackages();

            foreach (var item in packages)
            {
                //    var availableCate = hotelPackages.packages.FirstOrDefault(a => a.RoomCategory == item.Category);
                if (roomPackage.RoomCategory != item.Category)
                {
                    if (roomPackage.roomPackages.Count != 0)
                    {
                        roomPackage.PackagesNo = roomPackage.roomPackages.Count;
                        hotelPackages.packages.Add(roomPackage);
                    }
                    roomPackage = new RoomPackages();
                    roomPackage.RoomCategory = item.Category;
                }


                RoomPackage roomPack = new RoomPackage();
                roomPack.No = item.PackageNum.Value;
                roomPack.PricePerAllNight = item.PricePerAllNight.Value;
                roomPack.PricePerNight    = item.PricePerNight.Value;

                var specPack = Rooms.Where(x => x.PackageNo == item.PackageNum).ToList();
                foreach (var r in specPack)
                {
                    RoomResult result = new RoomResult();
                    result.CostPrice      = r.costPrice.Value;
                    result.DiscountId     = r.DiscountId.Value;
                    result.PackageNO      = r.PackageNo.Value;
                    result.DiscountValue  = r.DiscountVal.Value;
                    result.Images         = Imgs.Where(x => x.Category.ToLower() == "hotel rooms").Select(a => a.URL).ToList();
                    result.MarkupId       = r.MarkupId.Value;
                    result.MarkupValue    = r.MarkupVal.Value;
                    result.Paxs           = r.PaxSQty.Value;
                    result.RoomCode       = r.roomType;
                    result.RoomIndex      = int.Parse(r.RoomCode);
                    result.RoomMeal       = r.meal;
                    result.RoomReference  = r.RoomReference;
                    result.RoomType       = r.RoomName;
                    result.TotalSellPrice = r.SellPrice.Value;
                    result.Adult          = r.Adults.Value;
                    result.Child          = r.Childern.Value;
                    if (r.IsRefundable.Value != null)
                    {
                        result.IsRefundable = r.IsRefundable.Value;
                    }
                    roomPack.roomResults.Add(result);
                }
                roomPackage.roomPackages.Add(roomPack);
                //hotelPackages.packages.Add(roomPackage);
            }
            if (roomPackage.roomPackages.Count != 0)
            {
                hotelPackages.packages.Add(roomPackage);
            }
            return(hotelPackages);
        }
コード例 #2
0
        public List <HotelChannelResult> MapSearchResult(List <Hotel> searchOutputs, SearchData searchData)
        {
            try
            {
                //save result
                //apply salesRules
                List <HotelChannelResult> searchResponse            = new List <HotelChannelResult>();
                CurrencyManager           currencyManager           = new CurrencyManager();
                SalesRulesManager         ServiceChargeManager      = new SalesRulesManager();
                SalesRulesManager         CancellationChargeManager = new SalesRulesManager();
                var BaseCur = ConfigurationSettings.AppSettings["BaseCur"];

                //start sales rules service charge
                ServiceChargeManager.FillSalesRules(searchData.POS, "Hotel", "Service Charge"); //1
                ServiceChargeManager.PrepareSearchCriteriaDic(searchData);                      //2
                ////
                /////cancellation charge
                CancellationChargeManager.FillSalesRules(searchData.POS, "Hotel", "Cancellation Charge");
                CancellationChargeManager.PrepareSearchCriteriaDic(searchData);
                //

                List <string>       hotelIds      = searchOutputs.Select(a => a.code.ToString()).ToList();
                HotelManager        manager       = new HotelManager();
                List <HotelDetails> HotelDataList = manager.GetChannelHotelData(hotelIds, "4");
                //  List<HotelSearchResult> results = new List<HotelSearchResult>();
                double ProviderExcahngeRate = currencyManager.GetCurrencyConversion(searchOutputs[0].currency, BaseCur, searchData.sID);
                /////double ProviderExcahngeRate = currencyManager.GetCurrencyConversion("EUR", BaseCur);
                double ExcahngeRate = currencyManager.GetCurrencyConversion(BaseCur, searchData.Currency, searchData.sID);
                /////  searchResponse.Locations = HotelDataList.GroupBy(x => x.Location).Select(x => x.FirstOrDefault()).Select(a=>a.Location).ToList();

                int duration = Convert.ToInt32((searchData.DateTo - searchData.DateFrom).TotalDays);
                {
                    DateTime CheckInDate = searchData.DateFrom;
                    for (int i = 0; i < searchOutputs.Count; i++)
                    {
                        HotelDetails       hotelData = HotelDataList.Where(a => a.ProviderHotelId == searchOutputs[i].code.ToString()).FirstOrDefault();
                        HotelChannelResult hotel     = new HotelChannelResult();
                        if (hotelData != null)
                        {
                            hotel.providerHotelCode = searchOutputs[i].code.ToString();
                            hotel.providerID        = "4";

                            hotel.providerHotelID = hotelData.ProviderHotelId;
                            hotel.hotelId         = hotelData.ID.ToString();
                            hotel.sellCurrency    = searchData.Currency;
                            //  hotel.costPrice =//Math.Round( (double.Parse(searchOutputs[i].price.net.Value.ToString()) * ProviderExcahngeRate) /duration,3);
                            hotel.costCurrency = searchOutputs[i].currency;
                            hotel.DeepLink     = "http://93.115.27.156:3030/api/WegoHotelSearch?sid=" + searchData.sID + "&hotelId=" + hotelData.HotelId + "&pid=4";
                            CancellationChargeManager.SetResultCriteria(hotelData.HotelName, int.Parse(hotelData.Rating), hotel.costPrice, "4");
                            AppliedSalesRule AppliedCancellationMarkup = CancellationChargeManager.ApplySalesRules("Markup");
                            int roomcount    = 0;
                            int Packagecount = 0;

                            for (int j = 0; j < searchOutputs[i].rooms.Count; j++)
                            {
                                if (Packagecount == 20)
                                {
                                }
                                RoomPackages            roomPackage = new RoomPackages();
                                List <ChannelRoomsRate> roomsRate   = new List <ChannelRoomsRate>();
                                roomPackage.RoomCategory = searchOutputs[i].rooms[j].name;
                                List <RoomPackage> Containers = new List <RoomPackage>();
                                for (int r = 0; r < searchData.SearchRooms.Count; r++)
                                {
                                    ChannelRoomsRate roomRate = new ChannelRoomsRate();

                                    /*  var rooms = searchOutputs[i].rooms[j].rates.GroupBy(c => new
                                     * {
                                     *    c.adults,
                                     *    c.children,
                                     * }).Select(c => c.Where(a=>a.adults== searchData.SearchRooms[r].Adult &&a.children== searchData.SearchRooms[r].Child.Count).ToList());
                                     */
                                    var rooms = searchOutputs[i].rooms[j].rates.Where(a => a.adults == searchData.SearchRooms[r].Adult && a.children == searchData.SearchRooms[r].Child.Count).GroupBy(p => p.rateKey).Select(grp => grp.FirstOrDefault()).ToList();
                                    if (rooms.Count > 0)
                                    {
                                        roomRate.RoomRates.AddRange(rooms);
                                        roomsRate.Add(roomRate);
                                    }
                                    else
                                    {
                                        var roomnames = searchOutputs[i].rooms[j].name.Split(' ');
                                        //    var key = roomnames[roomnames.Length-1];
                                        int indexToRemove = 0;
                                        roomnames = roomnames.Where((source, index) => index != indexToRemove).ToArray();
                                        var key       = string.Join(" ", roomnames);
                                        var roomstype = searchOutputs[i].rooms.Where(a => a.name.Contains(key));
                                        foreach (var item in roomstype)
                                        {
                                            var lstroom        = item.name.Split(' ');
                                            int index1ToRemove = 0;
                                            lstroom = lstroom.Where((source, index) => index != index1ToRemove).ToArray();
                                            var key1 = string.Join(" ", lstroom);
                                            if (key == key1)
                                            {
                                                var RoomsSameType = item.rates.Where(a => a.adults == searchData.SearchRooms[r].Adult && a.children == searchData.SearchRooms[r].Child.Count).GroupBy(p => p.rateKey).Select(grp => grp.FirstOrDefault()).ToList();
                                                if (RoomsSameType.Count > 0)
                                                {
                                                    roomRate.RoomRates.AddRange(RoomsSameType);
                                                    roomsRate.Add(roomRate);
                                                }
                                            }
                                        }
                                    }
                                    if (roomRate.RoomRates.Count == 0)
                                    {
                                        roomsRate = new List <ChannelRoomsRate>();
                                        break;
                                    }
                                }
                                int max = 0;
                                if (roomsRate.Count > 0)
                                {
                                    max = roomsRate.Max(r => r.RoomRates.Count);
                                }

                                for (int ra = 0; ra < max; ra++)
                                {
                                    RoomPackage Container    = new RoomPackage();
                                    double      sellPerNight = 0;
                                    double      sellPerAll   = 0;

                                    List <RoomResult> resultsPackage = new List <RoomResult>();
                                    foreach (var item in roomsRate)
                                    {
                                        int indx = ra;
                                        if (ra >= item.RoomRates.Count)
                                        {
                                            indx = item.RoomRates.Count - 1;
                                        }
                                        RoomResult room = new RoomResult();

                                        room.PackageNO = Packagecount + 1;
                                        if (item.RoomRates[indx].net == null)
                                        {
                                            continue;
                                        }
                                        room.CostPrice = Math.Round(double.Parse(item.RoomRates[indx].net), 3);

                                        ServiceChargeManager.SetResultCriteria(hotelData.HotelName, int.Parse(hotelData.Rating), room.CostPrice
                                                                               * ProviderExcahngeRate, "4");
                                        AppliedSalesRule AppliedMarkup   = ServiceChargeManager.ApplySalesRules("Markup");
                                        AppliedSalesRule AppliedDiscount = ServiceChargeManager.ApplySalesRules("Discount");

                                        //  room.IsRefundable = searchOutputs[i].rooms[j].refundable;
                                        ////******
                                        room.RatePerNight   = ((room.CostPrice * ProviderExcahngeRate / duration) + AppliedMarkup.Value - AppliedDiscount.Value) * ExcahngeRate;
                                        room.RatePerNight   = Math.Round(room.RatePerNight, 3);
                                        sellPerNight       += room.RatePerNight;
                                        room.TotalSellPrice = Math.Round(room.RatePerNight * duration, 3);
                                        sellPerAll         += room.TotalSellPrice;
                                        roomcount          += 1;
                                        room.RoomIndex      = roomcount;
                                        room.RoomReference  = item.RoomRates[indx].rateKey;
                                        /////
                                        room.RoomCode = searchOutputs[i].rooms[j].code;
                                        /////////
                                        room.RoomType = searchOutputs[i].rooms[j].name;
                                        ///////
                                        room.RoomMeal     = item.RoomRates[indx].boardName;
                                        room.Adult        = item.RoomRates[indx].adults;
                                        room.Child        = item.RoomRates[indx].children;
                                        room.IsRefundable = item.RoomRates[indx].rateClass == "NRF" ? false : true;

                                        ///////
                                        room.Paxs = item.RoomRates[indx].adults + item.RoomRates[indx].children;
                                        //***   room.Images = hotelData.Images.Where(a => a.Category.ToLower() == "hotel rooms").Select(a => a.Url).ToList();
                                        room.DiscountId    = AppliedDiscount.ID;
                                        room.MarkupId      = AppliedMarkup.ID;
                                        room.DiscountValue = AppliedDiscount.Value * ExcahngeRate;
                                        room.MarkupValue   = AppliedMarkup.Value * ExcahngeRate;

                                        room.cancellationRules = item.RoomRates[indx].cancellationPolicies == null ? new List <CancellationRule>()
                                        {
                                            new CancellationRule {
                                                Cost = 0, Price = 0, CanellationRuleText = null, FromDate = null, ToDate = null
                                            }
                                        } :
                                        item.RoomRates[indx].cancellationPolicies.Select(a => new CancellationRule
                                        {
                                            Price = Math.Round(((double.Parse(a.amount) * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3),
                                            CanellationRuleText = searchData.Lang.ToLower() == "en" ? Math.Round(((double.Parse(a.amount) * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3) + "" + searchData.Currency + " To " + a.from : a.from + " إلى " + "" + searchData.Currency + Math.Round(((double.Parse(a.amount) * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3),
                                            Cost     = Math.Round(double.Parse(a.amount)),
                                            FromDate = a.from.ToString()
                                        }).ToList();
                                        resultsPackage.Add(room);
                                    }
                                    Container.No               = Packagecount + 1;
                                    Container.PricePerNight    = sellPerNight;
                                    Container.PricePerAllNight = sellPerAll;
                                    Container.roomResults.AddRange(resultsPackage);
                                    Containers.Add(Container);
                                    Packagecount += 1;
                                }
                                roomPackage.roomPackages.AddRange(Containers);
                                hotel.packages.Add(roomPackage);
                            }
                            double MinPerNight = 0;
                            double MinperAll   = 0;
                            var    mindata     = hotel.packages[0].roomPackages.Where(a => a.PricePerAllNight == hotel.packages[0].roomPackages.Min(x => x.PricePerAllNight)).FirstOrDefault();
                            if (mindata != null)
                            {
                                MinperAll   = mindata.PricePerAllNight;
                                MinPerNight = mindata.PricePerNight;
                            }
                            foreach (var item in hotel.packages)
                            {
                                var minPackage = item.roomPackages.Where(a => a.PricePerAllNight == item.roomPackages.Min(x => x.PricePerAllNight)).FirstOrDefault();
                                if (minPackage != null)
                                {
                                    if (minPackage.PricePerAllNight < MinperAll)
                                    {
                                        MinperAll   = minPackage.PricePerAllNight;
                                        MinPerNight = minPackage.PricePerNight;
                                    }
                                }
                            }
                            // var minRoom = hotel.rooms.Where(a => a.RatePerNight == hotel.rooms.Min(x => x.RatePerNight)).FirstOrDefault();
                            if (MinperAll > 0)
                            {
                                hotel.PricePerNight = MinPerNight;
                                //   hotel.costPrice = minRoom.CostPrice;
                                hotel.PricePerAllNight = MinperAll;
                            }
                            searchResponse.Add(hotel);
                        }
                    }
                    //  searchResponse.HotelResult = results;
                    return(searchResponse);
                }
            }
            catch (Exception ex)
            {
                LoggingHelper.WriteToFile("MapSearchResultChannel/Errors/", "MapSearchResult_" + searchData.sID, ex.Message, ex.Message + " Sourse :" + ex.Source + " Stack Trace :" + ex.StackTrace);
                return(new List <HotelChannelResult>());
            }
        }