public IHttpActionResult Get(string sid, string hotel, string Pid, string rooms) { // call bll try { LoggingHelper.WriteToFile("HotelRoomsController/GetRoomsNumber/", "SearchController" + "INController" + sid, "Rooms", "Sid" + sid); var Rooms = GetRoom.GetRoomsData(sid, hotel, Pid, rooms); if (Rooms != null && Rooms.rooms.Count > 0) { #region tbo disable to not calling pricing api if (Pid == "5") { // var ActionUrlData = ConfigurationSettings.AppSettings["ActionUrl"]; // var BaseCur = ConfigurationSettings.AppSettings["BaseCur"]; //payLinkData.ActionsUrl.ValidationUrl = ActionUrlData + "/api/HotelCheckAvailability?sid=" + Sid + "&bookingnum=" + BN; SearchDBEntities searchDB = new SearchDBEntities(); RequiredBookingData requiredBooking = new RequiredBookingData(); //var data = searchDB.SearchCriterias.FirstOrDefault(a => a.sID == sid); var HRooms = searchDB.SearchRoomResults.Where(a => a.sID == sid && a.HotelCode == hotel && a.ProviderId.ToString() == Pid).ToList(); //requiredBooking.Currency = data?.currency; //requiredBooking.City = data?.cityName; var RoomsCode = rooms.Split('-'); foreach (var item in RoomsCode) { var roomdata = HRooms.FirstOrDefault(a => a.RoomCode == item); requiredBooking.rooms.Add(roomdata); } //TBO //call check availability tbo to get hotel norms and cancel policy //get room indexes to send in pricing req List <int> indexs = new List <int>(); foreach (var indx in requiredBooking.rooms) { indexs.Add(int.Parse(indx.RoomCode)); } string TBOSession = searchDB.ProviderSessions.FirstOrDefault(ps => ps.SearchId == sid).PSession; //Select(s => s.PSession).ToString(); int ResIndex = int.Parse(searchDB.SearchHotelResults.FirstOrDefault(hotl => hotl.sID == sid && hotl.HotelCode == hotel).ResIndex.ToString()); //Select(indx => indx.ResIndex).ToString(); AvailabilityAndPricingRequest req = new 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, sid); RoomResult roomResult = new RoomResult(); if (availRes != null) { if (availRes?.PriceVerification?.Status == PriceVerificationStatus.Failed || availRes?.PriceVerification?.Status == PriceVerificationStatus.NotAvailable) { return(Ok("No Result Found")); } if (availRes.HotelCancellationPolicies != null) { roomResult.HotelNorms = availRes.HotelCancellationPolicies?.HotelNorms; //handel cancel policy var BaseCur = ConfigurationSettings.AppSettings["BaseCur"]; CurrencyManager currencyManager = new CurrencyManager(); double ProviderExcahngeRate = currencyManager.GetCurrencyConversion("USD", BaseCur, sid); foreach (var cancel in availRes.HotelCancellationPolicies?.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); } CancellationRule cancellation = new CancellationRule(); cancellation.FromDate = cancel.FromDate; cancellation.ToDate = cancel.ToDate; cancellation.Cost = (double)cancel.CancellationCharge; cancellation.ChargeType = cancel.ChargeType.ToString(); cancellation.Curency = Cur; cancellation.Price = costToSave; // roomResult.cancellationRules.Add(cancellation); } if (availRes?.PriceVerification?.PriceChanged == true) { //var roomsTbo = searchDB.SearchRoomResults.Where(a => a.sID == sid && a.HotelCode == hotel && a.ProviderId.ToString() == Pid).ToList(); Rooms.Status = 1; Rooms.Message = "Price Change"; //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 Rooms obj with new price Rooms.rooms.FirstOrDefault(r => r.RoomCode == item.RoomIndex.ToString()).costPrice = (double)item.RoomRate.TotalFare; Rooms.rooms.FirstOrDefault(r => r.RoomCode == item.RoomIndex.ToString()).SellPrice = Math.Round((double)item.RoomRate.TotalFare * ProviderExcahngeRate, 3); // update price in search db // update tbo new rooms prices SearchRoomResult Newroom = new SearchRoomResult(); Newroom = searchDB.SearchRoomResults.FirstOrDefault(room => room.sID == sid && 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(); } } else { Rooms.Status = 0; Rooms.Message = "No Price Change"; } Rooms.TBoRooms.Add(roomResult); } } #endregion LoggingHelper.WriteToFile("HotelRoomsController/GetRoomsOFHotel/", "SearchController" + "OutController" + sid, "RoomsResult", JsonConvert.SerializeObject(Rooms)); return(Ok(Rooms)); } } return(Ok("No Result Found")); } catch (Exception ex) { LoggingHelper.WriteToFile("HotelRoomsController/Errors/", "SearchController" + "INController" + sid, "Exception", ex.InnerException?.Message + ex.Message + ex.StackTrace); return(BadRequest(ex.Message)); } }
public static RequiredBookingData GetRoomsData(string sid, string hotel, string Pid, string rooms) { try { SearchDBEntities searchDB = new SearchDBEntities(); RequiredBookingData requiredBooking = new RequiredBookingData(); var data = searchDB.SearchCriterias.FirstOrDefault(a => a.sID == sid); var HRooms = searchDB.SearchRoomResults.Where(a => a.sID == sid && a.HotelCode == hotel && a.ProviderId.ToString() == Pid).ToList(); requiredBooking.Currency = data?.currency; requiredBooking.City = data?.cityName; var RoomsCode = rooms.Split('-'); foreach (var item in RoomsCode) { var roomdata = HRooms.FirstOrDefault(a => a.RoomCode == item); requiredBooking.rooms.Add(roomdata); } if (Pid == "4") { hotelsDBEntities hotelsDB = new hotelsDBEntities(); var HData = hotelsDB.hotels.FirstOrDefault(d => d.hotelID == hotel); var HDesc = hotelsDB.HotelsDescriptions.FirstOrDefault(x => x.hotelID == hotel); var Hsearch = searchDB.SearchHotelResults.FirstOrDefault(x => x.HotelCode == hotel && x.sID == sid && x.ProviderID.ToString() == Pid); var Himage = hotelsDB.HotelsImages.FirstOrDefault(v => v.HotelID == hotel); requiredBooking.HotelName = HData?.hotelName; requiredBooking.Hotelstar = int.Parse(HData?.rating); requiredBooking.address = HData?.address; requiredBooking.CheckIn = data?.dateFrom.Value.ToString(); requiredBooking.Checkout = data?.dateTo.Value.ToString(); requiredBooking.City = HData?.cityName; requiredBooking.location = HData?.location; requiredBooking.HotelDesc = HDesc?.Description1; requiredBooking.providerHotelID = Hsearch?.ProviderHotelId; requiredBooking.providerID = Pid; //MG requiredBooking.Lat = HData?.Lat; requiredBooking.Lng = HData?.Lng; if (Himage != null) { requiredBooking.hotelThumb = Himage.Thum; } } else if (Pid == "5") { TBOContext hotelsDB = new TBOContext(); var HData = hotelsDB.HotelDetails.FirstOrDefault(d => d.HotelCode == hotel); var Hsearch = searchDB.SearchHotelResults.FirstOrDefault(x => x.HotelCode == hotel && x.sID == sid && x.ProviderID.ToString() == Pid); var Himage = hotelsDB.HotelImages.FirstOrDefault(v => v.HotelCode == hotel); Enum.TryParse(HData.HotelRating, out HotelStars stars); requiredBooking.HotelName = HData?.HotelName; requiredBooking.Hotelstar = (int)stars + 1; requiredBooking.address = HData?.Address; requiredBooking.CheckIn = data?.dateFrom.Value.ToString(); requiredBooking.Checkout = data?.dateTo.Value.ToString(); requiredBooking.City = HData?.CityName; requiredBooking.location = HData?.HotelLocation; requiredBooking.HotelDesc = HData.Description; requiredBooking.providerHotelID = HData?.HotelCode; requiredBooking.providerID = Pid; //MG requiredBooking.Lat = HData?.HotelLocation; requiredBooking.Lng = HData?.Map; if (Himage != null) { requiredBooking.hotelThumb = Himage.URL; } //instead of call pricing api //RoomResult roomResult = new RoomResult(); //using (HotelBookingDBEntities hotelBookingDB = new HotelBookingDBEntities()) //{ // foreach (var item in requiredBooking.rooms) // { // var cancellations = hotelBookingDB.CancelPolicies.Where(x => x.HotelCode == hotel && x.Sid == sid && x.ProviderID.ToString() == Pid /*&& x.RoomCode ==int.Parse(item.RoomCode)*/).ToList(); // //roomResult.HotelNorms = availRes.HotelCancellationPolicies?.HotelNorms; // //handel cancel policy // foreach (var cancel in cancellations) // { // CancellationRule cancellation = new CancellationRule(); // //DateTime dateFrom = Convert.ToDateTime(cancel.FromDate); // cancellation.FromDate = cancel.FromDate.ToString();// dateFrom.ToString("MMMM dd, yyyy"); // cancellation.ToDate = cancel.ToDate.ToString(); // cancellation.Cost = (double)cancel.Cost; // cancellation.ChargeType = cancel.ChargeType.ToString(); // cancellation.Curency = cancel.Currency; // roomResult.cancellationRules.Add(cancellation); // } // } // requiredBooking.TBoRooms.Add(roomResult); //} } return(requiredBooking); // requiredBooking.rooms = searchDB.SearchRoomResults.Where(a => RoomsCode.Contains(a.RoomCode) && a.sID == sid && a.HotelCode == hotel && a.ProviderId.ToString() == Pid).ToList(); } catch (Exception ex) { throw ex; } }