コード例 #1
0
        //map tbo rooms rsp to general res

        public static HotelSearchRoom MapTboRoomRspTogenrl(HotelRoomAvailabilityResponse response, string SID)
        {
            if (response.HotelRooms == null)
            {
                return(null);
            }
            //get ADT CHD NO
            SearchRepo manager = new SearchRepo();
            var        rooms   = manager.GetADTCHDNoBySid(SID);

            CurrencyManager   currencyManager           = new CurrencyManager();
            SalesRulesManager ServiceChargeManager      = new SalesRulesManager();
            SalesRulesManager CancellationChargeManager = new SalesRulesManager();
            var BaseCur = ConfigurationSettings.AppSettings["BaseCur"];

            double ProviderExcahngeRate = currencyManager.GetCurrencyConversion(response.HotelRooms[0].RoomRate.Currency, BaseCur, SID);

            double ExcahngeRate = currencyManager.GetCurrencyConversion(BaseCur, response.HotelRooms[0].RoomRate.Currency, SID);

            AppliedSalesRule AppliedCancellationMarkup = CancellationChargeManager.ApplySalesRules("Markup");

            //
            //options for booking
            List <OptionsForBooking> options = new List <OptionsForBooking>();

            foreach (var item in response.OptionsForBooking.RoomCombination)
            {
                options.Add(new OptionsForBooking
                {
                    RoomIndex = item.RoomIndex
                });
            }
            List <RoomResult> roomResults = new List <RoomResult>();

            foreach (var item in response.HotelRooms.ToList())
            {
                //supplements
                List <Hotels.Common.Models.RoomResult.Supplement> supplements = new List <Hotels.Common.Models.RoomResult.Supplement>();
                if (item.Supplements != null)
                {
                    foreach (var sup in item.Supplements)
                    {
                        supplements.Add(new Hotels.Common.Models.RoomResult.Supplement
                        {
                            Price          = sup.Price,
                            SuppChargeType = sup.SuppChargeType.ToString(),
                            SuppID         = sup.SuppID,
                            SuppIsSelected = sup.SuppIsMandatory,
                            Cur            = sup.CurrencyCode,
                        });
                    }
                }

                List <CancellationRule> cancellationRules = new List <CancellationRule>();
                foreach (var cancel in item.CancelPolicies.CancelPolicy)
                {
                    double costToSave = 0;
                    string Cur        = "";
                    //Enum.TryParse(cancel.ChargeType.ToString(), out CancellationChargeTypeForHotel Type);

                    if (cancel.ChargeType == CancellationChargeTypeForHotel.Percentage)
                    {
                        costToSave = (double)cancel.CancellationCharge;
                        Cur        = "%";
                    }
                    else
                    {
                        Cur        = "KWD";
                        costToSave = (double)cancel.CancellationCharge * ProviderExcahngeRate; //Math.Round((double)cancel.CancellationCharge * ProviderExcahngeRate, 3);
                    }
                    cancellationRules.Add(new CancellationRule
                    {
                        Price    = costToSave,
                        Curency  = Cur,
                        FromDate = cancel.FromDate,
                        ToDate   = cancel.ToDate,
                        //Cost = (double)cancel.CancellationCharge,
                        Cost       = (double)cancel.CancellationCharge,
                        ChargeType = cancel.ChargeType.ToString(),
                    });
                }
                //foreach (var PaxNo in rooms)
                //{

                roomResults.Add(new RoomResult
                {
                    RoomIndex = item.RoomIndex,
                    RoomType  = item.RoomTypeName + "   " + item?.RoomPromtion,
                    //RoomCode = item.RoomIndex,
                    RoomCode      = item.RoomTypeCode,
                    RoomReference = item.RatePlanCode,
                    //Adult = rooms.FirstOrDefault(ad=>ad.roomNo == item.RoomIndex).adultNo ?? default(int),
                    //Child = rooms.FirstOrDefault(ad => ad.roomNo == item.RoomIndex).childernNo ?? default(int),
                    // RatePerNight = ((double)item.RoomRate.TotalFare * ProviderExcahngeRate ) * ExcahngeRate,

                    //TotalSellPrice = Math.Round(((double)item.RoomRate.TotalFare * ProviderExcahngeRate) * ExcahngeRate, 3),

                    //tax
                    rateType = item.RoomRate.RoomTax.ToString(),
                    //base
                    rateClass = item.RoomRate.RoomFare.ToString(),
                    //RatePerNight = (double)item.RoomRate.DayRates[0].BaseFare,
                    CostPrice = (double)item.RoomRate.TotalFare,
                    Tax       = item.RoomRate.RoomTax,
                    RoomMeal  = item.MealType,
                    //sell curency   kwd
                    Curency           = BaseCur,
                    TotalSellPrice    = Math.Round((double)item.RoomRate.TotalFare * ProviderExcahngeRate, 3),
                    Supplements       = supplements,
                    cancellationRules = cancellationRules,
                    Images            = item?.RoomAdditionalInfo?.ImageURLs.ToList(),
                    Amenities         = item.Amenities,
                    Inclusion         = item.Inclusion
                });
                //}
            }
            HotelSearchRoom hotelSearchRoom = new HotelSearchRoom();
            int             PkageNO         = 0;

            foreach (var item in options)
            {
                PkageNO++;
                SearchRoomData roomresult = new SearchRoomData();
                roomresult = null;
                SeparatedRoom srts = new SeparatedRoom();
                for (int i = 0; i < item.RoomIndex.Count(); i++)
                {
                    var resultsR = roomResults.Where(res => res.RoomIndex == item.RoomIndex[i]).FirstOrDefault();
                    resultsR.PackageNO = PkageNO;
                    srts.RoomResults.Add(resultsR);
                }
                hotelSearchRoom.rooms.Add(srts);
            }

            SeparatedRoom separatedRoom = new SeparatedRoom
            {
                OptionsForBookings = options,
                RoomResults        = roomResults
            };

            var singles = roomResults.GroupBy(n => n.RoomCode).ToList()
                          //.Where(g => g.Count() == 1)
                          .Select(g => g.First()).ToList();

            hotelSearchRoom.Packages = singles;
            return(hotelSearchRoom);
        }