예제 #1
0
파일: silver.py 프로젝트: HackTrain/silver
    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
예제 #2
0
파일: silver.py 프로젝트: HackTrain/silver
    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