def _create_booking(self, fares, passengers, parameters, response_specs): """Creates the relevant silverraw objects and sends a create booking request to the silvercore api. Args: fares (FareTotal[]): An array of fares chosen to book. passengers (Passenger[]): An array of passengers that will be present on each booking. parameters (CREATE_BOOKING_PARAMS[]): Array of parameters to pass the create booking request (NOT SUPPORTED YET). response_specs (CREATE_BOOKING_SPECS[]): Array of specs for the response from the SilverCore API. Returns: silverraw.createBookingResponse. Returns a createBookingResponse object:: """ cb = silverbook.createBookingRecordRequest() # Obtaining the context cb.context = self._get_xml_context() # TODO: Add support for parameters cb.parameters = b() cb.parameters.priceAcceptance = b() cb.parameters.priceAcceptance.acceptAny = True # TODO: Add support for response_spec # if len(response_specs): # cb.responseSpec = b() # for r in response_specs: # getattr(cb.responseSpec, r) = True # Adding passengers cb.passengers = b() for idx1, passenger in enumerate(passengers): cb.passengers.passenger.append(b()) p = cb.passengers.passenger[idx1] p.passengerID = passenger.id p.nameFirst = passenger.first_name p.nameLast = passenger.last_name p.ageAtTimeOfTravel = 40 p.contactInformation = b() # Adding all contact information available for passenger for contact in passenger.contact_info: p.contactInformation.contact.append(b( contactType=contact.type.value, contactMedium=contact.medium.value, contactInfo=contact.info)) # Adding point to point prices cb.prices = b() for idx2, fare in enumerate(fares): cb.prices.pointToPointPrice.append(b()) pr = cb.prices.pointToPointPrice[idx2] pr.priceID = fare.id pr.totalPrice = b(fare.price, currency=fare.currency) pr.holdExpiration = fare.expiration pr.legReferences = b() for leg in fare.legs: pr.legReferences.legSolutionIDRef.append(b(leg.id)) # Add all ticketable fares pr.ticketableFares = b() for idx5, ticketable in enumerate(fare.ticketable_fares): pr.ticketableFares.ticketableFare.append(b()) tf = pr.ticketableFares.ticketableFare[idx5] tf.totalPrice = b(ticketable.price, currency=ticketable.currency) # Adding all price breakdown tf.prices = b() for price in ticketable.prices: tf.prices.price.append(b(price.price, type=price.type, currency=price.currency)) # Adding passenger references tf.passengerReferences = b() for idx6, p_ref in enumerate(ticketable.passenger_references): tf.passengerReferences.passengerReference.append(b()) r = tf.passengerReferences.passengerReference[idx6] r.passengerIDRef = p_ref.passenger.id r.passengerTypeCode = p_ref.class_type.value # Adding fare codes r.fareCodes = b() for id7, farecode in enumerate(p_ref.fare_codes): r.fareCodes.fareCode.append(b()) fc = r.fareCodes.fareCode[id7] fc.code = farecode.code fc.serviceClass = farecode.service_class fc.travelSegmentIDRef = farecode.travel_segment_id fc.cabinClass = farecode.cabin_class fc.fareDisplayName = farecode.fare_display_name # Adding all legs for trip cb.legSolutions = b() for idx3, leg in enumerate(fare.legs): cb.legSolutions.legSolution.append(b()) l = cb.legSolutions.legSolution[idx3] l.legSolutionID = leg.id # Adding all travel segments for each leg l.travelSegments = b() for idx4, segment in enumerate(leg.travel_segments): l.travelSegments.travelSegment.append(b()) ts = l.travelSegments.travelSegment[idx4] ts.sequence = segment.sequence ts.travelSegmentID = segment.id ts.type = segment.type ts.originTravelPoint = b(segment.origin, type=segment.origin_type) ts.destinationTravelPoint = b(segment.destination, type=segment.destination_type) ts.departureDateTime = segment.departure ts.arrivalDateTime = segment.arrival ts.designator = segment.designator ts.marketingCarrier = segment.marketing_carrier ts.operatingCarrier = segment.operating_carrier ts.equipmentType = b(segment.equipment_type_str, code=segment.equipment_type) # Send create booking request response = self._silver_send( "book_client", "CreateBookingRecord", "createBookingRecordRequest", cb) return response
def _create_booking_from_response(self, legs, fares, passengers, parameters=[], response_specs=[]): """Creates a silverraw request to send to SilverCore API with form the legs and fares given from the previous faresearch query, and passengers given. Args: legs (silverraw.Leg[]): An array of SilverRaw Leg objects chosen to book. fares (silverraw.Fare[]): An array of SilverRaw Fare objects chosen to book. passengers (Passenger[]): An array of passengers that will be present on each booking. parameters (CREATE_BOOKING_PARAMS[]): Array of parameters to pass the create booking request (NOT SUPPORTED YET). response_specs (CREATE_BOOKING_SPECS[]): Array of specs for the response from the SilverCore API (NOT SUPPORTED YET). Returns: silverraw.createBookingResponse. Returns a createBookingResponse object:: """ cb = silverbook.createBookingRecordRequest() # Obtaining the context cb.context = self._get_xml_context() # TODO: Add support for parameters cb.parameters = b() cb.parameters.priceAcceptance = b() cb.parameters.priceAcceptance.acceptAny = True # Adding point to point prices cb.prices = b() cb.prices.pointToPointPrice.extend(fares) # Adding all legs for trip cb.legSolutions = b() cb.legSolutions.legSolution.extend(legs) # Adding passengers cb.passengers = b() for idx1, passenger in enumerate(passengers): cb.passengers.passenger.append(b()) p = cb.passengers.passenger[idx1] p.passengerID = passenger.id p.nameFirst = passenger.first_name p.nameLast = passenger.last_name p.ageAtTimeOfTravel = 40 p.contactInformation = b() # Adding all contact information available for passenger for contact in passenger.contact_info: p.contactInformation.contact.append(b( contactType=contact.type.value, contactMedium=contact.medium.value, contactInfo=contact.info)) # Send create booking request response = self._silver_send( "book_client", "CreateBookingRecord", "createBookingRecordRequest", cb) return response