internal static void ParseSellFlightResponse(JetModel.AirSellRQResponse sellResponse, ref AirItinerary airItinerary) { SetSecurityToken(sellResponse.Security, airItinerary); if (sellResponse == null || sellResponse.OTA_AirPriceRS == null || (sellResponse.OTA_AirPriceRS.Errors != null && sellResponse.OTA_AirPriceRS.Errors.Length > 0) || sellResponse.OTA_AirPriceRS.PricedItineraries == null || sellResponse.OTA_AirPriceRS.PricedItineraries.Length == 0 || sellResponse.OTA_AirPriceRS.PricedItineraries[0].AirItineraryPricingInfo == null || sellResponse.OTA_AirPriceRS.PricedItineraries[0].AirItineraryPricingInfo.PTC_FareBreakdowns == null || sellResponse.OTA_AirPriceRS.PricedItineraries[0].AirItineraryPricingInfo.PTC_FareBreakdowns.Length == 0) { throw new Exception("JET AirSell call failed while booking!!!"); } int adultCount = 0, infantCount = 0, childCount = 0; foreach (PassengerFare paxFare in airItinerary.AirFare.PassengerFares) { if (paxFare.PassengerType == PassengerType.Adult) adultCount = paxFare.Quantity; if (paxFare.PassengerType == PassengerType.Child) childCount = paxFare.Quantity; if (paxFare.PassengerType == PassengerType.Infant) infantCount = paxFare.Quantity; } AirFare airFare = ParsePassengerFareBreadowns( sellResponse.OTA_AirPriceRS.PricedItineraries[0].AirItineraryPricingInfo.PTC_FareBreakdowns, adultCount, childCount, infantCount, true); for (int i = 0; i < airFare.PassengerFares.Count;i++) { airFare.PassengerFares[i].CabinClass = airItinerary.AirFare.PassengerFares[0].CabinClass; airFare.PassengerFares[i].FareBasisCode = airItinerary.AirFare.PassengerFares[0].FareBasisCode; airFare.PassengerFares[i].ClassOfService = airItinerary.AirFare.PassengerFares[0].ClassOfService; } airItinerary.AirFare = airFare; }
internal static string GetPnrFromBookResponse(JetModel.OTA_AirBookRQResponse bookResponse, AirItinerary airItinerary) { SetSecurityToken(bookResponse.Security, airItinerary); if (bookResponse == null || bookResponse.OTA_AirBookRS == null || (bookResponse.OTA_AirBookRS.Errors != null && bookResponse.OTA_AirBookRS.Errors.Length > 0) || bookResponse.OTA_AirBookRS.AirReservation == null || bookResponse.OTA_AirBookRS.AirReservation.Length == 0 || bookResponse.OTA_AirBookRS.AirReservation[0].BookingReferenceID == null || bookResponse.OTA_AirBookRS.AirReservation[0].BookingReferenceID.Length == 0 || string.IsNullOrEmpty(bookResponse.OTA_AirBookRS.AirReservation[0].BookingReferenceID[0].ID)) { throw new Exception("JET AirBook call failed while adding the passenger detials!!!"); } return bookResponse.OTA_AirBookRS.AirReservation[0].BookingReferenceID[0].ID; }
internal static List<string> GetTicketNumbers(JetModel.AirTicketRQResponse ticketResponse, AirItinerary itinerary) { SetSecurityToken(ticketResponse.Security, itinerary); if (ticketResponse == null || ticketResponse.OTA_AirBookRS == null || (ticketResponse.OTA_AirBookRS.Errors != null && ticketResponse.OTA_AirBookRS.Errors.Length > 0) || ticketResponse.OTA_AirBookRS.AirReservation == null || ticketResponse.OTA_AirBookRS.AirReservation.Length == 0 || ticketResponse.OTA_AirBookRS.AirReservation[0].Ticketing == null || ticketResponse.OTA_AirBookRS.AirReservation[0].Ticketing.TicketAdvisory == null || ticketResponse.OTA_AirBookRS.AirReservation[0].Ticketing.TicketAdvisory.Length == 0 || string.IsNullOrEmpty(ticketResponse.OTA_AirBookRS.AirReservation[0].Ticketing.TicketAdvisory[0].Value)) { throw new Exception("JET AirTicket call failed after booking!!!"); } List<string> ticketNumbers = new List<string>(); foreach (JetModel.FreeTextType ticketNumber in ticketResponse.OTA_AirBookRS.AirReservation[0].Ticketing.TicketAdvisory) { ticketNumbers.Add(ticketNumber.Value); } return ticketNumbers; }
internal static List<AirItinerary> ParseSearchResponse(SupplierInfo supplierInfo, JetModel.FlightMatrixRequestResponse searchResponse, FlightSearchParams searchParams, ref string securityToken) { try { securityToken = SetSecurityToken(searchResponse.Security, null); if(searchResponse.FlightMatrixRS == null || searchResponse.FlightMatrixRS.FlightMatrices == null || searchResponse.FlightMatrixRS.FlightMatrices.Length == 0 || searchResponse.FlightMatrixRS.FlightMatrixOptions == null || searchResponse.FlightMatrixRS.FlightMatrixOptions.Length == 0) { throw new Exception("Invalid FlightMatrixRequestResponse from Jet!!!"); } List<AirItinerary> airItineraries = new List<AirItinerary>(); Dictionary<int, FlightFares> jetFlightFares = GetFlightFares(searchResponse); airItineraries = ParseFlightFares(jetFlightFares, searchParams, supplierInfo); airItineraries.ForEach(itin => itin[Constants.SecurityToken] = searchResponse.Security.BinarySecurityToken); return airItineraries; } catch (Exception ex) { Logger.LogException(ex, Source, "ParseSearchResponse", Severity.Major); return new List<AirItinerary>(); } }
private static AirFare ParsePassengerFareBreadowns(JetModel.PTCFareBreakdownType[] fareBreakdown, int adultCount, int childCount, int infantCount, bool useQuantityFromResponse) { if (fareBreakdown == null || fareBreakdown.Length == 0) return null; AirFare airFare = new AirFare(); airFare.PassengerFares = new List<PassengerFare>(); foreach (JetModel.PTCFareBreakdownType paxFbt in fareBreakdown) { if (paxFbt.PassengerFare == null) return null; PassengerFare paxFare = new PassengerFare(); paxFare.PassengerType = ParsePassengerCode(paxFbt.PassengerTypeQuantity.Code); if(useQuantityFromResponse) { paxFare.Quantity = Int32.Parse(paxFbt.PassengerTypeQuantity.Quantity); } else { if (paxFare.PassengerType == PassengerType.Adult) paxFare.Quantity = adultCount; else if (paxFare.PassengerType == PassengerType.Child) paxFare.Quantity = childCount; else if (paxFare.PassengerType == PassengerType.Infant) paxFare.Quantity = infantCount; } paxFare.BaseFare = paxFbt.PassengerFare.BaseFare.Amount; paxFare.Currency = paxFbt.PassengerFare.BaseFare.CurrencyCode; paxFare.Taxes = new List<FareComponent>(); if (paxFbt.PassengerFare.Taxes != null) { foreach (JetModel.AirTaxType tax in paxFbt.PassengerFare.Taxes) { FareComponent taxComponant = new FareComponent() { Amount = tax.Amount, Type = tax.TaxCode }; paxFare.Taxes.Add(taxComponant); } } if (paxFbt.FareBasisCodes != null) { foreach (string code in paxFbt.FareBasisCodes) { paxFare.FareBasisCode = (!string.IsNullOrEmpty(paxFare.FareBasisCode) ? paxFare.FareBasisCode + "," : string.Empty) + code; } } if (paxFbt.FareInfo != null) { foreach (JetModel.FareReference info in paxFbt.FareInfo[0].FareReference) { paxFare.ClassOfService = (!string.IsNullOrEmpty(paxFare.ClassOfService) ? paxFare.ClassOfService + "," : string.Empty) + info.ResBookDesigCode; paxFare.CabinClass = (!string.IsNullOrEmpty(paxFare.CabinClass) ? paxFare.CabinClass + "," : string.Empty) + info.Value; } } airFare.PassengerFares.Add(paxFare); } return airFare; }
private static Flight ParseFlightSegment(JetModel.BookFlightSegmentType flightSegment) { if (flightSegment == null) return null; Flight flight = new Flight(); flight.Index = Int32.Parse(flightSegment.RPH); if (flightSegment.OperatingAirline != null) { flight.AirlineCode = flightSegment.OperatingAirline.Code; flight.AirlineName = GetAirlineName(flightSegment.OperatingAirline.CompanyShortName); flight.FlightNumber = flightSegment.OperatingAirline.FlightNumber; } flight.ArrivalDateTime = flightSegment.ArrivalDateTime; flight.DepartureDateTime = flightSegment.DepartureDateTime; flight.FromAirportCode = flightSegment.DepartureAirport.LocationCode; flight.ToAirportCode = flightSegment.ArrivalAirport.LocationCode; flight.DurationInMinutes = Convert.ToInt32(((flight.ArrivalDateTime - flight.DepartureDateTime).TotalMinutes)); flight.MarketingAirlineCode = flightSegment.MarketingAirline == null ? null : flightSegment.MarketingAirline.Code; flight.LegNumber = 0; flight.Stops = int.Parse(flightSegment.StopQuantity); flight.FlightAvails = ParseAvailability(flightSegment.BookingClassAvails); //flight.Aircraft //flight.LayoverAirportCode //flight.LayoverCity //flight.ToCity return flight; }
private static List<Flight> ParseFlightMatrixRow(JetModel.FlightMatrixRow flightMatrixRow) { if (flightMatrixRow.OriginDestinationOptionType == null || flightMatrixRow.OriginDestinationOptionType.Length == 0) return null; List<Flight> flights = new List<Flight>(); foreach (JetModel.BookFlightSegmentType flightSegment in flightMatrixRow.OriginDestinationOptionType) { if (flightSegment == null) continue; Flight flight = new Flight(); flight.Index = Int32.Parse(flightSegment.RPH); if (flightSegment.OperatingAirline != null) { flight.AirlineCode = flightSegment.OperatingAirline.Code; flight.AirlineName = GetAirlineName(flightSegment.OperatingAirline.CompanyShortName); flight.FlightNumber = flightSegment.OperatingAirline.FlightNumber; } flight.ArrivalDateTime = flightSegment.ArrivalDateTime; flight.DepartureDateTime = flightSegment.DepartureDateTime; flight.FromAirportCode = flightSegment.DepartureAirport.LocationCode; flight.ToAirportCode = flightSegment.ArrivalAirport.LocationCode; flight.DurationInMinutes = Convert.ToInt32(((flight.ArrivalDateTime - flight.DepartureDateTime).TotalMinutes)); flight.MarketingAirlineCode = flightSegment.MarketingAirline == null ? null : flightSegment.MarketingAirline.Code; flight.LegNumber = 0; flight.Stops = int.Parse(flightSegment.StopQuantity); flight.FlightAvails = ParseAvailability(flightSegment.BookingClassAvails); //flight.Aircraft Flight previousFlight = flights.Find(x => string.Equals(x.ToAirportCode, flight.FromAirportCode)); if(previousFlight != null) { flight.LayoverAirportCode = previousFlight.ToAirportCode; flight.LayoverMinutes = Convert.ToInt32((flight.DepartureDateTime - previousFlight.ArrivalDateTime).TotalMinutes); //flight.LayoverCity } //flight.ToCity flights.Add(flight); } return flights; }
private static List<Availability> ParseAvailability(JetModel.BookingClassAvail[] bookingClassAvail) { if (bookingClassAvail == null || bookingClassAvail.Length == 0) return null; List<Availability> flightAvails = new List<Availability>(); foreach (JetModel.BookingClassAvail classAvail in bookingClassAvail) { if (classAvail == null) continue; Availability availability = new Availability() { ClassOfService = classAvail.ResBookDesigCode, QuantityAvailable = int.Parse(classAvail.ResBookDesigQuantity), }; flightAvails.Add(availability); } return flightAvails; }
private static Dictionary<int, FlightFares> GetFlightFares(JetModel.FlightMatrixRequestResponse searchResponse) { Dictionary<int, FlightFares> flightFares = new Dictionary<int, FlightFares>(); foreach (JetModel.FlightMatrixRow flightMatrixRow in searchResponse.FlightMatrixRS.FlightMatrices[0].FlightMatrixRows) { try { FlightFares flightFare = new FlightFares() { MatrixRow = flightMatrixRow }; flightFare.MatrixRowOptions = new Dictionary<int, JetModel.FlightMatrixOption>(); if (flightMatrixRow.FlightMatrixCells != null && flightMatrixRow.FlightMatrixCells.Length > 0) { foreach (JetModel.FlightMatrixCell flightMatrixCell in flightMatrixRow.FlightMatrixCells) { if (flightMatrixCell.Status == JetModel.FlightMatrixCellStatus.Priced) { flightFare.MatrixRowOptions[flightMatrixCell.FamilyRPH] = null; } } } else { continue; } if (flightFare.MatrixRowOptions.Count > 0) flightFares[int.Parse(flightMatrixRow.RPH)] = flightFare; } catch (Exception ex) { Logger.LogException(ex, Source, "GetFlightFares", Severity.Major); } } //Assign fares to flights. foreach (JetModel.FlightMatrixOption flightMatrixOption in searchResponse.FlightMatrixRS.FlightMatrixOptions) { foreach (JetModel.FlightMatrixIndex ffIndex in flightMatrixOption.FlightMatrixIndices) { if (flightFares.ContainsKey(ffIndex.FlightOB)) { if (flightFares[ffIndex.FlightOB].MatrixRowOptions.ContainsKey(ffIndex.FamilyOB)) { flightFares[ffIndex.FlightOB].MatrixRowOptions[ffIndex.FamilyOB] = flightMatrixOption; } } } } return flightFares; }
internal static string SetSecurityToken(JetModel.Security securityInfo, AirItinerary itinerary) { if(securityInfo == null || string.IsNullOrEmpty(securityInfo.BinarySecurityToken)) throw new Exception("Invalid security information received from JET."); if( itinerary != null ) itinerary[Constants.SecurityToken] = securityInfo.BinarySecurityToken; return securityInfo.BinarySecurityToken; }