public static ValidatingPaymentModel GetVaildationModel(CheckAvailabilityResult result, string Curr, string SID)
        {
            ValidatingPaymentModel paymentModel    = new ValidatingPaymentModel();
            CurrencyManager        currencyManager = new CurrencyManager();
            var BaseCur = ConfigurationSettings.AppSettings["BaseCur"];

            double ExcahngeRate = currencyManager.GetCurrencyConversion(BaseCur, Curr, SID);

            if (result.Status == 0)
            {
                paymentModel.Status  = 0;
                paymentModel.Message = "No Price Change";
            }
            else if (result.Status == 1)
            {
                paymentModel.Status  = 1;
                paymentModel.Message = "Price Change";
            }
            else
            {
                paymentModel.Status = 2;
                return(paymentModel);
            }
            //foreach (var item in result.Result)
            //{
            //    paymentModel.PaymentFareDetails.FareAmount += (decimal)item.TotalSellPrice ;//(decimal)(item.TotalSellPrice/ ExcahngeRate);

            //}
            paymentModel.PaymentFareDetails.FareAmount  = (decimal)result.TotalCost + (decimal).02;
            paymentModel.PaymentFareDetails.TotalAmount = (decimal)result.TotalCost + (decimal).02;

            paymentModel.PaymentFareDetails.ExchangeRate = (decimal)ExcahngeRate;
            return(paymentModel);
        }
        public static CheckAvailabilityResult GetCheckAvailabilityResult(Hotels.Common.Models.AvailabilityReq availability, string curr, string src)
        {
            CheckAvailabilityResult availabilityResult = new CheckAvailabilityResult();

            availabilityResult = AvailabilityManager.checkAvailabilityManager(availability, curr, src);

            return(availabilityResult);
        }
 public static void SaveResponseToDB(CheckAvailabilityResult res, double newCost, AvailabilityReq req, string currency, string src)
 {
     try
     {
         using (HotelBookingDBEntities db = new HotelBookingDBEntities())
         {
             AvailabilityRe availabilityRes = new AvailabilityRe();
             availabilityRes.TotalsellPrice = res.TotalCost;
             availabilityRes.NewTotalcost   = newCost;
             availabilityRes.OldTotalcost   = req.TotalCost;
             availabilityRes.BookingNum     = req.BookingNum;
             availabilityRes.PID            = req.PID;
             availabilityRes.SellCurrency   = currency;
             availabilityRes.Sid            = req.Sid;
             availabilityRes.Status         = res.Status;
             availabilityRes.hotelCode      = req.HotelCode;
             db.AvailabilityRes.Add(availabilityRes);
             foreach (var item in res.Result)
             {
                 availabilityRoomRe roomRes = new availabilityRoomRe();
                 roomRes.BookingNum = req.BookingNum;
                 roomRes.Pid        = req.PID;
                 roomRes.Sid        = req.Sid;
                 roomRes.RoomRef    = item.RoomCode;
                 roomRes.Cost       = item.CostPrice;
                 roomRes.Courrency  = currency;
                 roomRes.roomId     = item.RoomIndex;
                 roomRes.SellPrice  = item.TotalSellPrice;
                 if (src == "policy")
                 {
                     foreach (var cancel in item.cancellationRules)
                     {
                         CancelPolicy policy = new CancelPolicy();
                         policy.Cost = (decimal)cancel.Cost;
                         //if (req.PID == "4")
                         //{
                         //policy.Currency = "EUR";
                         policy.Currency = currency;
                         // }
                         //else if (req.PID == "2")
                         //{
                         //policy.Currency = "USD";
                         // }
                         policy.FromDate         = DateTime.Parse(cancel.FromDate);
                         policy.HotelCode        = req.HotelCode;
                         policy.ProviderCurrency = currency;
                         policy.ProviderID       = req.PID;
                         policy.RoomCode         = item.RoomIndex;
                         policy.SellPrice        = (decimal)cancel.Price;
                         policy.Sid = req.Sid;
                         if (cancel.ToDate != null)
                         {
                             policy.ToDate = DateTime.Parse(cancel.ToDate);
                         }
                         db.CancelPolicies.Add(policy);
                     }
                 }
                 db.availabilityRoomRes.Add(roomRes);
             }
             if (res.Status != 0)
             {
                 var bookingData = db.HotelsBookings.FirstOrDefault(a => a.SessionId == req.Sid && a.Booking_No == req.BookingNum);
                 if (bookingData != null)
                 {
                     bookingData.Sell_Price = res.TotalCost;
                 }
             }
             db.SaveChanges();
         }
     }
     catch (Exception ex)
     {
         LoggingHelper.WriteToFile("AvailabilityController/Errors/", "CheckAvailabilityRepo" + "SaveResponseToDB" + req.Sid, ex.InnerException?.Message, ex.Message + ex.StackTrace);
     }
 }
Beispiel #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="availability"></param>
        /// <param name="Curr">user selected curency</param>
        /// <param name="src"></param>
        /// <returns></returns>
        public static CheckAvailabilityResult checkAvailabilityManager(Hotels.Common.Models.AvailabilityReq availability, string Curr, string src)
        {
            CheckAvailabilityResult availabilityResult = new CheckAvailabilityResult();

            //try
            //{
            CurrencyManager currencyManager = new CurrencyManager();

            SalesRulesManager CancellationChargeManager = new SalesRulesManager();

            CheckAvailabilityRepo.SaveRequestToDB(availability);
            double TotalCost            = 0;
            double ProviderExcahngeRate = 0;
            double newcost    = 0;
            var    SearchData = SearchRepo.GetSearchDataBySession(availability.Sid);
            int    duration   = SearchData.duration ?? default(int);//Convert.ToInt32((SearchData.dateTo - SearchData.dateFrom).Value.TotalDays);
            var    BaseCur    = ConfigurationSettings.AppSettings["BaseCur"];

            if (SearchData != null)
            {
                availabilityResult = GetRoomsFromProviders(availability, Convert.ToDateTime(SearchData.dateFrom).ToString("yyyy-MM-dd"), duration.ToString());
                if (availabilityResult == null)
                {
                    return(null);
                }
                if (availability.PID == "5")
                {
                    ProviderExcahngeRate = currencyManager.GetCurrencyConversion(Curr, BaseCur, availability.Sid);
                }
                if (availability.PID == "4")
                {
                    // get Hotel Beds provider Curency
                    var HotelBedsCur = ConfigurationSettings.AppSettings["HotelBedsCurency"];
                    ProviderExcahngeRate = currencyManager.GetCurrencyConversion(HotelBedsCur, BaseCur, availability.Sid);
                    ////ProviderExcahngeRate = currencyManager.GetCurrencyConversion("EUR", BaseCur);availabilityResult.ProviderCur
                }
                else if (availability.PID == "2")
                {
                    ProviderExcahngeRate = currencyManager.GetCurrencyConversion(availabilityResult.ProviderCur, BaseCur, availability.Sid);
                    ////providerexcahngerate = currencymanager.getcurrencyconversion("usd", basecur, availability.sid);
                }
                if (Curr == null)
                {
                    Curr = SearchData.currency;
                }
                double ExcahngeRate = currencyManager.GetCurrencyConversion(BaseCur, Curr, availability.Sid);
                double MarkUpRate   = currencyManager.GetCurrencyConversion(BaseCur, SearchData.currency, availability.Sid);
                var    roomsRules   = AvailabiltyRooms.getRoomsRules(availability.HotelCode, availability.Sid, availability.PID);
                if (roomsRules == null)
                {
                    return(null);
                }

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

                for (int i = 0; i < availabilityResult.Result.Count; i++)
                {
                    var roomData = roomsRules.FirstOrDefault(a => a.RoomCode == availabilityResult.Result[i].RoomIndex.ToString());
                    availabilityResult.Result[i].RatePerNight   = ((availabilityResult.Result[i].CostPrice * ProviderExcahngeRate / duration) + (roomData.MarkupVal.Value / MarkUpRate) - (roomData.DiscountVal.Value / MarkUpRate)) * ExcahngeRate;
                    availabilityResult.Result[i].TotalSellPrice = Math.Round(availabilityResult.Result[i].RatePerNight * duration, 3);
                    TotalCost += availabilityResult.Result[i].CostPrice;
                    foreach (var item in availabilityResult.Result[i].cancellationRules) ////
                    {
                        item.Price = Math.Round(((item.Cost * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3);
                        item.CanellationRuleText = SearchData.language.ToLower() == "en" ? Math.Round(((item.Cost * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3) + " " + SearchData.currency + " of the booking amount " + item.FromDate : item.FromDate + " TO " + "" + SearchData.currency + Math.Round(((item.Cost * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3);
                    }
                }
                newcost = availability.TotalCost;

                //availabilityResult.TotalCost = TotalCost;
            }
            CheckAvailabilityRepo.SaveResponseToDB(availabilityResult, newcost, availability, SearchData.currency, src);
            return(availabilityResult);
            //}
            //catch (Exception ex)
            //{
            //    LoggingHelper.WriteToFile("AvailabilityController/Errors/", "AvailabilityController" + "providerManagement" + availability.Sid, ex.InnerException?.Message, ex.Message + ex.StackTrace);

            //    return null;
            //}
        }
Beispiel #5
0
        public static CheckAvailabilityResult GetRoomsFromProviders(Common.Models.AvailabilityReq roomsReq, String ArrivalDate, string dur)
        {
            //try
            //{
            CheckAvailabilityResult results = new CheckAvailabilityResult();

            results.TotalCost = 0;

            #region redo
            //if (roomsReq.PID == "4")
            //{
            //    HotelBedsIntegration.Models.Availability.AvailabilityReq req = new HotelBedsIntegration.Models.Availability.AvailabilityReq();
            //    req.rooms = new List<RoomReq>();
            //    req.upselling = "True";
            //    foreach (var item in roomsReq.Rooms.Select(a => a.RoomRef).ToList())
            //    {
            //        RoomReq roomReq = new RoomReq();
            //        roomReq.rateKey = item;

            //        req.rooms.Add(roomReq);
            //    }
            //    var availabilityRes = HotelBedsIntegration.Controller.CheckAvailability.checkAvailability(req, roomsReq.Sid);
            //    //MG
            //    results.ProviderCur = availabilityRes.Result.currency;

            //    if (availabilityRes.Result.rooms != null)
            //    {
            //        if (roomsReq.TotalCost == double.Parse(availabilityRes.Result.totalNet) || roomsReq.TotalCost > double.Parse(availabilityRes.Result.totalNet))
            //        {
            //            results.Status = 0;
            //            results.TotalCost = roomsReq.TotalCost;
            //        }
            //        else
            //        {
            //            results.Status = 1;
            //            results.TotalCost = double.Parse(availabilityRes.Result.totalNet);
            //        }
            //        foreach (var item in availabilityRes.Result.rooms)
            //        {
            //            for (int i = 0; i < item.rates.Count; i++)
            //            {
            //                RoomResult roomResult = new RoomResult();

            //                roomResult.CostPrice = double.Parse(item.rates[i].net);
            //                var room = roomsReq.Rooms.Where(a => a.RoomRef == item.rates[i].rateKey).OrderBy(a => a.RoomId).ToList();/////////get specific roomid
            //                if (room.Count > 1)
            //                {
            //                    if (results.Result.FirstOrDefault(x => x.RoomCode == item.rates[i].rateKey) == null)
            //                    {
            //                        roomResult.RoomIndex = room[0].RoomId;
            //                    }
            //                    else
            //                    {
            //                        roomResult.RoomIndex = room[results.Result.Where(x => x.RoomCode == item.rates[i].rateKey).ToList().Count].RoomId;
            //                    }
            //                }
            //                else
            //                {
            //                    roomResult.RoomIndex = room[0].RoomId;
            //                }
            //                roomResult.RoomCode = item.rates[i].rateKey;
            //                if (results.Status == 0)
            //                {
            //                    roomResult.CostPrice = roomsReq.Rooms.FirstOrDefault(v => v.RoomRef == item.rates[i].rateKey).Cost;
            //                }
            //                else
            //                {
            //                    roomResult.CostPrice = double.Parse(item.rates[i].net);
            //                }
            //                // roomResult.TotalSellPrice = double.Parse(r.net);

            //                foreach (var Cancel in item.rates[i].cancellationPolicies)
            //                {
            //                    roomResult.cancellationRules.Add(new CancellationRule
            //                    {
            //                        Cost = double.Parse(Cancel.amount),
            //                        FromDate = Cancel.from.ToLongDateString(),
            //                        ToDate = null,
            //                        CanellationRuleText = null
            //                    });

            //                }
            //                results.Result.Add(roomResult);
            //            }
            //        }

            //    }
            //    else
            //    {
            //        results.Status = 2;
            //    }
            //}
            //else if (roomsReq.PID == "2")
            //{
            //    // get hotelproperty and arrival and duration   // get search rooms result from db
            //    HotelManager hotelManager = new HotelManager();
            //    var hotelsData = hotelManager.GetHotelDataForTsAvailability(roomsReq);
            //    if (hotelsData != null)
            //    {
            //        foreach (var item in hotelsData.roomResults)
            //        {
            //            // call ts  and map it with db and ..or new obj
            //            var roomsResults = new List<SearchRoomResult>();
            //            roomsResults.Add(item);
            //            var availReq = AvailabiltyManager.prepareAvailabilityObj(roomsResults, hotelsData.HodelData.ProviderHotelCode, ArrivalDate, dur);

            //            var availRes = IntegrationTotalStay.Controller.CheckAvailability.GetTSAvailability(availReq, roomsReq.Sid);
            //            if (availRes != null)
            //            {
            //                RoomResult roomResult = new RoomResult();
            //                roomResult.Adult = item.Adults.Value;
            //                roomResult.Child = item.Childern.Value;

            //                roomResult.RoomIndex = int.Parse(item.RoomCode);
            //                roomResult.RoomReference = availRes.PreBookingToken;
            //                if (availRes.TotalPrice == item.costPrice.Value.ToString() || double.Parse(availRes.TotalPrice) < item.costPrice.Value)
            //                {
            //                    results.Status = 0;
            //                    roomResult.CostPrice = item.costPrice.Value;
            //                }
            //                else
            //                {
            //                    results.Status = 1;
            //                    roomResult.CostPrice = double.Parse(availRes.TotalPrice);
            //                }
            //                // handel cancel policy

            //                foreach (var cancel in availRes.Cancellations.Cancellation)
            //                {
            //                    CancellationRule cancellation = new CancellationRule();
            //                    DateTime dateFrom = Convert.ToDateTime(cancel.StartDate);
            //                    cancellation.FromDate = dateFrom.ToString("MMMM dd, yyyy");
            //                    cancellation.ToDate = cancel.EndDate;
            //                    cancellation.Cost = double.Parse(cancel.Penalty);
            //                    roomResult.cancellationRules.Add(cancellation);
            //                }

            //                // roomResult.RoomCode=
            //                results.Result.Add(roomResult);
            //                results.TotalCost += double.Parse(availRes.TotalPrice);
            //            }
            //            else
            //            {
            //                results.Status = 2;
            //            }
            //        }
            //    }
            //    else
            //    {
            //        return null;
            //    }

            //}
            ////else if (PID == "3")
            //{
            //    var SearchData = SearchRepo.GetSearchDataBySession(Sid);
            //    DateTime CheckInDate = SearchData.dateFrom.Value; //searchData.DateFrom;

            //    var SMRRuslt = SMCLSValidation.ValidationQuote(Rooms[0], Sid);
            //    results.TotalCost = double.Parse(SMRRuslt.Result.price.net.ToString());
            //    if (SMRRuslt.Result != null)
            //    {
            //        if (Cost == double.Parse(SMRRuslt.Result.price.net.ToString()))
            //        {
            //            results.Status = 0;
            //        }
            //        else
            //        {
            //            results.Status = 1;
            //        }
            //        foreach (var item in Rooms)
            //        {
            //            RoomResult SMroomResult = new RoomResult();
            //            SMroomResult.RoomCode = SMRRuslt.Result.optionRefId;
            //            foreach (var c in SMRRuslt.Result.cancelPolicy.cancelPenalties)
            //            {
            //                SMroomResult.cancellationRules.Add(new CancellationRule
            //                {

            //                    Cost = double.Parse(c.value.ToString()),
            //                    FromDate = CheckInDate.AddHours(-c.hoursBefore.Value).ToString("dd MMM yyyy")
            //                    // Cost = Math.Round(((a.value.Value * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3),
            //                    //CanellationRuleText = searchData.Lang.ToLower() == "en" ? Math.Round(((a.value.Value * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3) + "" + searchData.Currency + " To " + CheckInDate.AddHours(-a.hoursBefore.Value).ToString("dd MMM yyyy") : CheckInDate.AddHours(-a.hoursBefore.Value).ToString("dd MMM yyyy") + " إلى " + "" + searchData.Currency + Math.Round(((a.value.Value * ProviderExcahngeRate) + AppliedCancellationMarkup.Value) * ExcahngeRate, 3)


            //                });
            //            }
            //            results.Result.Add(SMroomResult);
            //        }
            //    }
            //    else
            //    {
            //        results.Status = 2;
            //    }
            //}
            #endregion
            if (roomsReq.PID == "5")
            {
                // get hotelproperty and arrival and duration   // get search rooms result from db
                HotelManager hotelManager = new HotelManager();
                //FOr  TBO
                var hotelsData = hotelManager.GetHotelDataForTsAvailability(roomsReq);
                if (hotelsData != null)
                {
                    //TBO
                    SearchDBEntities searchDB   = new SearchDBEntities();
                    string           TBOSession = searchDB.ProviderSessions.FirstOrDefault(ps => ps.SearchId == roomsReq.Sid).PSession;                                                 //Select(s => s.PSession).ToString();
                    int ResIndex = int.Parse(searchDB.SearchHotelResults.FirstOrDefault(hotl => hotl.sID == roomsReq.Sid && hotl.HotelCode == roomsReq.HotelCode).ResIndex.ToString()); //Select(indx => indx.ResIndex).ToString();

                    //get room indexes to send in pricing req
                    List <int> indexs = new List <int>();

                    foreach (var indx in roomsReq.Rooms)
                    {
                        indexs.Add(indx.RoomId);
                    }
                    //TBO.WSDL.hotelServiceRef.AvailabilityAndPricingRequest req = new TBO.WSDL.hotelServiceRef.AvailabilityAndPricingRequest
                    //{
                    //    SessionId = TBOSession,
                    //    ResultIndex = ResIndex,
                    //    OptionsForBooking = new TBO.WSDL.hotelServiceRef.BookingOptions
                    //    {
                    //        RoomCombination = new TBO.WSDL.hotelServiceRef.RoomCombination[]
                    //        {
                    //                    new TBO.WSDL.hotelServiceRef.RoomCombination{RoomIndex = indexs.ToArray()}
                    //        }
                    //    }
                    //};
                    //var availRes = AvailablityPricingService.PricingService(req, roomsReq.Sid);
                    //if (availRes != null)
                    //{
                    var             BaseCur         = ConfigurationSettings.AppSettings["BaseCur"];
                    CurrencyManager currencyManager = new CurrencyManager();
                    //double ProviderExcahngeRate = currencyManager.GetCurrencyConversion("USD", BaseCur, req.SessionId);

                    RoomResult roomResult = new RoomResult();
                    //roomResult.HotelNorms = availRes.HotelCancellationPolicies?.HotelNorms;
                    //if (availRes?.PriceVerification?.PriceChanged == false)
                    //{
                    results.Status = 0;
                    foreach (var item in hotelsData.roomResults)
                    {
                        roomResult.TotalSellPrice = (double)item.SellPrice; //Math.Round((double)item.SellPrice * ProviderExcahngeRate, 3);
                        roomResult.CostPrice      = item.SellPrice ?? default(double);
                        results.TotalCost        += (double)item.SellPrice; //Math.Round((double)item.SellPrice * ProviderExcahngeRate, 3);
                        roomResult.Adult          = item.Adults.Value;
                        roomResult.Child          = item.Childern.Value;

                        roomResult.RoomIndex = int.Parse(item.RoomCode);
                        results.Result.Add(roomResult);
                    }

                    //}
                    //else
                    //{

                    //    results.Status = 1;
                    //    foreach (var item in availRes?.PriceVerification.HotelRooms)
                    //    {
                    //        roomResult.TotalSellPrice = Math.Round((double)item.RoomRate.TotalFare * ProviderExcahngeRate, 3);
                    //        roomResult.CostPrice = (double)item.RoomRate.TotalFare;
                    //        results.TotalCost += roomResult.TotalSellPrice; //Math.Round((double)item.RoomRate.TotalFare * ProviderExcahngeRate, 3);
                    //        roomResult.RoomIndex = item.RoomIndex;
                    //        results.Result.Add(roomResult);
                    //        // update price in search db
                    //        //CheckAvailabilityRepo repo = new CheckAvailabilityRepo();
                    //        //repo.UpdateTBORoomsPrice(availRes?.PriceVerification.HotelRooms);
                    //        //update tbo new rooms prices
                    //        var Newroom = searchDB.SearchRoomResults.FirstOrDefault(room => room.sID == req.SessionId && room.RoomCode == item.RoomIndex.ToString());
                    //        Newroom.costPrice = (double)item.RoomRate.TotalFare;
                    //        Newroom.rateClass = item.RoomRate.RoomFare.ToString();
                    //        Newroom.rateType = item.RoomRate.RoomTax.ToString();
                    //        Newroom.SellPrice = roomResult.TotalSellPrice;

                    //        searchDB.SaveChanges();

                    //    }
                }
                //handel cancel policy
                //foreach (var cancel in availRes.HotelCancellationPolicies?.CancelPolicies?.CancelPolicy)
                //{
                //    CancellationRule cancellation = new CancellationRule();
                //    //DateTime dateFrom = Convert.ToDateTime(cancel.FromDate);
                //    cancellation.FromDate = cancel.FromDate;// dateFrom.ToString("MMMM dd, yyyy");
                //    cancellation.ToDate = cancel.ToDate;
                //    cancellation.Cost = (double)cancel.CancellationCharge;
                //    cancellation.ChargeType = cancel.ChargeType.ToString();
                //    roomResult.cancellationRules.Add(cancellation);
                //}
                //var countroom = 0;
                //foreach (var item in hotelsData.roomResults)
                //{
                //    countroom++;
                //    // call ts  and map it with db and ..or new obj
                //    // var roomsResults = new List<SearchRoomResult>();
                //    // roomsResults.Add(item);
                //    roomResult.Adult = item.Adults.Value;
                //    roomResult.Child = item.Childern.Value;

                //    roomResult.RoomIndex = int.Parse(item.RoomCode);
                //roomResult.RoomReference = availRes.PreBookingToken;
                //results = new CheckAvailabilityResult();

                //if (availRes?.PriceVerification?.PriceChanged == false)
                //{
                //    //results.Status = 0;
                //    roomResult.CostPrice = item.costPrice.Value;
                //    results.TotalCost += item.costPrice.Value;

                //}
                //else
                //{
                //    // results.Status = 1;

                //    roomResult.CostPrice = (double)availRes.PriceVerification.HotelRooms[countroom].RoomRate.TotalFare;
                //    results.TotalCost += (double)availRes.PriceVerification.HotelRooms[countroom].RoomRate.TotalFare;

                //}

                //}    //end foreach

                // roomResult.RoomCode=
                //results.Result.Add(roomResult);
                //}
                //else
                //{
                //    results.Status = 2;
                //}
            }
            else
            {
                return(null);
            }
            return(results);
        }