private async Task <LowFareSearchRsp> SubmitAirLowFareSearchAsync(FlightSearchRQ request, JourneyType journeyType) { AirLowFareSearchPortTypeClient client; var binding = GenerateBasicHttpBinding(); try { var endpoint = new EndpointAddress("https://apac.universal-api.pp.travelport.com/B2BGateway/connect/uAPI/AirService"); client = new AirLowFareSearchPortTypeClient(binding, endpoint); var httpHeaders = Helper.ReturnHttpHeader(); client.Endpoint.EndpointBehaviors.Add(new HttpHeadersEndpointBehavior(httpHeaders)); var req = ConvertToLowFareSearchReq(request, journeyType); _LogService.LogInfo($"uAPI/LowFareSearchReq_{journeyType}", req); var response = await client.serviceAsync(null, req); _LogService.LogInfo($"uAPI/LowFareSearchRsp_{journeyType}", response); return(response.LowFareSearchRsp); } catch (Exception ex) { _LogService.LogException(ex, $"uAPI.AirService.SubmitAirLowFareSearchAsync_{journeyType}"); return(null); } finally { client = null; binding = null; } }
public async Task <FlightSearchRS> AirLowFareSearchAsync(FlightSearchRQ request) { Task <FlightSearchRS> rs = RetrieveAirLowFareSearch(request); Task <FlightSearchRS> ow = null; if (request.Segments.Count > 1 || request.Airlines?.Count == 0) { request.Segments = new List <SegmentRQ> { request.Segments.First() }; ow = RetrieveAirLowFareSearch(request); } FlightSearchRS response = await rs; if (request.Segments.Count == 1 || (request.Airlines?.Count ?? 0) > 0) { response.Airlines = GetAirlines(response); } else { FlightSearchRS owResponse = await ow; response.Airlines = ((owResponse?.PricedItins?.Count ?? 0) > 0) ? GetAirlines(owResponse) : GetAirlines(response); } return(response); }
private async Task <FlightSearchRS> RetrieveAirLowFareSearch(FlightSearchRQ request) { string sRequest = "AirLowFare_" + JsonConvert.SerializeObject(request); FlightSearchRS cacheSearchRS; if (!_cache.TryGetValue(sRequest, out cacheSearchRS)) { // Key not in cache, so get data from Sabre cacheSearchRS = await _AirService.AirLowFareSearchAsync(request); if (cacheSearchRS == null) { cacheSearchRS = new FlightSearchRS { PricedItins = new List <PricedItin>() }; } else { var cacheEntryOptions = new MemoryCacheEntryOptions() // Keep in cache for this time, reset time if accessed. .SetAbsoluteExpiration(TimeSpan.FromHours(1)); // Save data in cache. _cache.Set(sRequest, cacheSearchRS, cacheEntryOptions); } } return(cacheSearchRS); }
public FlightSearchRS Search(FlightSearchRQ FlightSearchObj) { try { var SearchString = "flight-offers?originLocationCode=" + FlightSearchObj.OriginLocationCode.IataCode + "&destinationLocationCode=" + FlightSearchObj.DestinationLocationCode.IataCode + "&departureDate=" + FlightSearchObj.OriginLocationCode.DepartureDate.ToString("yyyy-MM-dd") + "&returnDate=" + FlightSearchObj.DestinationLocationCode.ReturnDate.ToString("yyyy-MM-dd") + "&adults=" + FlightSearchObj.Pax.Adult + "&nonStop=" + FlightSearchObj.NonStop.ToString().ToLower() + "&max=250"; FlightSearchRS FlightOffersSearchRS = JsonConvert.DeserializeObject <FlightSearchRS>((string)SupplierConnectorSVCaller.AmadeusGetCall(SearchString, "/v2/shopping/")); return(FlightOffersSearchRS); } catch (Exception ErrorMessage) { Logger.LogError("return null with exeception", ErrorMessage); return(null); } }
public async Task <FlightSearchRS> AirLowFareSearchAsync(FlightSearchRQ request) { _LogService = new LogService(); try { _LogService.LogInfo($"FlightSearchRQ", request); LowFareSearchRsp departAndReturnResult = null; LowFareSearchRsp departOnlyResult = null; LowFareSearchRsp returnOnlyResult = null; Task <LowFareSearchRsp> departAndReturnTask = null; Task <LowFareSearchRsp> returnOnlyTask = null; if (request.Segments.Count == 2) { //Depart and Return Flight departAndReturnTask = SubmitAirLowFareSearchAsync(request, JourneyType.DepartAndReturn); //Return Only Flight returnOnlyTask = SubmitAirLowFareSearchAsync(request, JourneyType.ReturnOnly); } //Depart Only Flight Task <LowFareSearchRsp> departOnlyTask = SubmitAirLowFareSearchAsync(request, JourneyType.DepartOnly); departOnlyResult = await departOnlyTask; if (request.Segments.Count == 2) { departAndReturnResult = await departAndReturnTask; returnOnlyResult = await returnOnlyTask; } var response = ConvertToFlightSearchRS(departAndReturnResult); _LogService.LogInfo($"FlightSearchRS", response); return(response); } catch (Exception ex) { _LogService.LogException(ex, "uAPI.AirService.AirLowFareSearchAsyc"); throw; } }
public async Task <FlightSearchRS> AirLowFareSearchAsync(FlightSearchRQ request) { try { string result = await _SabreConnector.SendRequestAsync("/v3.2.0/shop/flights?mode=live&limit=200&offset=1&enabletagging=true", JsonConvert.SerializeObject(ConvertToAirLowFareSearchRQ(request), Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, DateFormatString = "yyyy-MM-ddTHH:mm:ss" }), true); AirLowFareSearchRS rs = JsonConvert.DeserializeObject <AirLowFareSearchRS>(result); return(ConvertToSearchRS(rs)); } catch { return(null); } }
public FlightSearchRS Search(FlightSearchRQ FlightSearchObj) { try { switch (FlightSearchObj.Service) { case "FlightOfferSearchGet": FlightSearchRS FlightSearchRespose = FlightSearchRPCaller.Search(FlightSearchObj); return(FlightSearchRespose); default: break; } Logger.LogError("return null "); return(null); } catch (Exception ErrorMessage) { Logger.LogError("return null with exeception", ErrorMessage); return(null); } }
private LowFareSearchReq ConvertToLowFareSearchReq(FlightSearchRQ request, JourneyType journeyType) { if (request.Segments.Count == 0) { throw new ApplicationException("Segment is required"); } //Segments IEnumerable <SearchAirLeg> SearchAirLegs = new List <SearchAirLeg>(); switch (journeyType) { case JourneyType.DepartAndReturn: if (request.Segments.Count == 1) { throw new ApplicationException("2 segment is request to generate Depart and Return journey"); } SearchAirLegs = request.Segments.OrderBy(s => s.Departure).Select(s => GenerateSearchAirLeg(s.Origin, true, s.Destination, true, s.Departure)); break; case JourneyType.DepartOnly: SearchAirLegs = request.Segments.OrderBy(s => s.Departure).Take(1).Select(s => GenerateSearchAirLeg(s.Origin, true, s.Destination, true, s.Departure)); break; case JourneyType.ReturnOnly: if (request.Segments.Count == 1) { throw new ApplicationException("2 segment is request to generate Return Only journey"); } SearchAirLegs = request.Segments.OrderBy(s => s.Departure).Skip(1).Take(1).Select(s => GenerateSearchAirLeg(s.Origin, true, s.Destination, true, s.Departure)); break; } AirSearchModifiers airSearchModifiers = new AirSearchModifiers { PreferredProviders = new Provider[] { new Provider { Code = "1G" } } }; AirPricingModifiers airPricingModifiers = new AirPricingModifiers { ETicketabilitySpecified = true, ETicketability = typeEticketability.Required, FaresIndicatorSpecified = true, FaresIndicator = typeFaresIndicator.AllFares, }; //Passengers var SearchPassengers = new List <SearchPassenger>(); request.Ptcs.ForEach(p => { for (int i = 1; i <= p.Quantity; i++) { SearchPassengers.Add(new SearchPassenger { Code = p.Code == "CNN" ? "CHD" : p.Code, Age = p.Code == "CNN" ? "8" : null, }); } }); LowFareSearchReq req = new LowFareSearchReq { BillingPointOfSaleInfo = new kestrel.AirService.BillingPointOfSaleInfo { OriginApplication = "uAPI" }, TargetBranch = "P7073862", MaxNumberOfExpertSolutions = "50", SolutionResult = false, Items = SearchAirLegs.ToArray(), AirSearchModifiers = airSearchModifiers, AirPricingModifiers = airPricingModifiers, SearchPassenger = SearchPassengers.ToArray(), ReturnUpsellFare = true }; return(req); }
public JsonResult Search(FlightSearchRQ FlightSearchRQ) { return(Json(IFlightOfferSVCaller.Search(FlightSearchRQ))); }
public async Task <FlightSearchRS> Post([FromBody] FlightSearchRQ request) { return(await _AirService.AirLowFareSearchAsync(request)); }
private AirLowFareSearchRQ ConvertToAirLowFareSearchRQ(FlightSearchRQ request) { if (request.Airlines == null) { request.Airlines = new List <string>(); } AirLowFareSearchRQ rq = new AirLowFareSearchRQ(); int segmentIndex = 1; rq.OTA_AirLowFareSearchRQ = new OTA_Airlowfaresearchrq { AvailableFlightsOnly = request.AvailableFlightsOnly, DirectFlightsOnly = request.DirectFlightsOnly, Target = "Production", POS = new POS { Source = new Source[] { new Source { PseudoCityCode = "F9CE", RequestorID = new Requestorid { Type = "1", ID = "1", CompanyName = new Companyname() } } } }, OriginDestinationInformation = request.Segments.Select(s => new Origindestinationinformation { RPH = (segmentIndex++).ToString(), DepartureDateTime = s.Departure, OriginLocation = new Originlocation { LocationCode = s.Origin }, DestinationLocation = new Destinationlocation { LocationCode = s.Destination } }).ToArray(), TravelerInfoSummary = new Travelerinfosummary { SeatsRequested = new int[] { 1 }, AirTravelerAvail = new Airtraveleravail[] { new Airtraveleravail { PassengerTypeQuantity = request.Ptcs.Select(p => new TravelConnect.Models.Requests.Passengertypequantity { Code = p.Code, Quantity = p.Quantity, Changeable = false } ).ToArray() } }, //PriceRequestInformation = new Pricerequestinformation //{ // CurrencyCode = "THB", //// NegotiatedFaresOnly = true, //} }, TravelPreferences = new Travelpreferences { CabinPref = new Cabinpref[] { new Cabinpref { Cabin = "Y", PreferLevel = "Preferred" } }, VendorPref = request.Airlines.Select(air => new Vendorpref { Code = air.ToUpper(), PreferLevel = "Preferred" }).ToArray() //VendorPref = new Vendorpref[] //{ // new Vendorpref // { // Code = "AF", // PreferLevel = "Preferred" // } //} }, TPA_Extensions = new TravelConnect.Models.Requests.TPA_Extensions2 { IntelliSellTransaction = new Intelliselltransaction { RequestType = new Requesttype { Name = "200ITINS" } } } }; return(rq); }