amadeus round-trip flight price & order Management in django project

20 Views Asked by At

This is handle_roundway_search:

def handle_roundway_search(self, form):
    form_origin: str = form.cleaned_data['departure_at']
    form_destination: str = form.cleaned_data['arrival_at']
    departure_date = form.cleaned_data['departure_date']
    return_date = form.cleaned_data['return_date']
    destination_flights = self._get_flights_from_amadeus_api(
        form,
        origin=form_origin,
        destination=form_destination,
        departure_date=departure_date,
    )
    return_flights = self._get_flights_from_amadeus_api(
        form,
        origin=form_destination,
        destination=form_origin,
        departure_date=return_date,
    )
    airline_policy = AirlinePolicy.objects.get(airline_name="default")
    
    if destination_flights.status_code == 302:
        return render(self.request, "air/flights.html", {
            "offers": [],
            "lines": [],
            "departureDate": str(form.cleaned_data['departure_date'].strftime("%d %b %y")),
            "arrivalDate": str(form.cleaned_data['return_date'].strftime("%d %b %y")),
            "form": form,
            "booking_policy": airline_policy.content   ## mayuri added
        })



    destination_offers = []
    for flight in destination_flights.data:
        flight['promo_code']  = form.cleaned_data['promo_code']
        offer = Flight(flight).construct_flights()
        offer['flight'] = flight
        destination_offers.append(offer)

    origin_offers = []
    for flight in return_flights.data:
        flight['promo_code']  = form.cleaned_data['promo_code']
        offer = Flight(flight).construct_flights()
        offer['flight'] = flight
        origin_offers.append(offer)

    sort_by = form.cleaned_data['sort_by']
    sorted_destination_offers = self._sort_offers(destination_offers, sort_by)
    sorted_origin_offers = self._sort_offers(origin_offers, sort_by)

    all_offers = self._sort_offers(sorted_destination_offers + sorted_origin_offers, sort_by)
    combined_offers = self._create_combined_offer_by_airlines(
        all_offers,
        origin_airport=form_origin.strip()[:3],
        destination_airport=form_destination.strip()[:3],
    )
    sorted_combined_offers = self._sort_offers(combined_offers, sort_by)
    lines = [form.cleaned_data['departure_at'], form.cleaned_data['arrival_at']]
    return render(self.request, "air/flights.html", {
        "offers": combined_offers,
        "lines": lines,
        "departureDate": str(form.cleaned_data['departure_date'].strftime("%d %b %y")),
        "arrivalDate": str(form.cleaned_data['return_date'].strftime("%d %b %y")),
        "form": form,
        "booking_policy": airline_policy.content   ## mayuri added
    })

this is {{offer}}

{'price': 687.1, 'duration_in_minutes': 635, 'destination_offer': {'id': '2', 'price': 452.3, 'currency': 'USD', 'traveler_count': 1, 'bookable_seats': 7, 'itineraries': [{'lines': ['DAC', 'DXB'], 'seg_first': {'airline_name': 'Fly Dubai', 'id': '97', 'departureAirport': 'DAC', 'airlineLogo': 'https://s1.apideeplink.com/images/airlines/FZ.png', 'airline': 'FZ', 'departureAt': datetime.datetime(2024, 3, 28, 8, 5), 'departureDate': '2024-03-28', 'departureHour': '08:05', 'arrivalAirport': 'DXB', 'arrivalAt': datetime.datetime(2024, 3, 28, 11, 55), 'arrivalDate': '2024-03-28', 'arrivalHour': '11:55', 'arrivalDuration': '5h 50m', 'cabin': 'economy', 'includedCheckedBags': '30kg'}, 'seg_last': {'airline_name': 'Fly Dubai', 'id': '97', 'departureAirport': 'DAC', 'airlineLogo': 'https://s1.apideeplink.com/images/airlines/FZ.png', 'airline': 'FZ', 'departureAt': datetime.datetime(2024, 3, 28, 8, 5), 'departureDate': '2024-03-28', 'departureHour': '08:05', 'arrivalAirport': 'DXB', 'arrivalAt': datetime.datetime(2024, 3, 28, 11, 55), 'arrivalDate': '2024-03-28', 'arrivalHour': '11:55', 'arrivalDuration': '5h 50m', 'cabin': 'economy', 'includedCheckedBags': '30kg'}, 'numberOfStops': 0, 'type': '1. Way', 'totalDuration': '5h 50m', 'segments': [{'id': '97', 'departureAirport': 'DAC', 'airlineLogo': 'https://s1.apideeplink.com/images/airlines/FZ.png', 'airline': 'FZ', 'airline_name': 'Fly Dubai', 'departureAt': datetime.datetime(2024, 3, 28, 8, 5), 'departureDate': '2024-03-28', 'departureHour': '08:05', 'arrivalAirport': 'DXB', 'arrivalAt': datetime.datetime(2024, 3, 28, 11, 55), 'arrivalDate': '2024-03-28', 'arrivalHour': '11:55', 'arrivalDuration': '5h 50m', 'cabin': 'economy', 'includedCheckedBags': '30kg'}], 'prices': [{'travelerType': 'ADULT', 'currency': 'USD', 'total': '452.30', 'base': '334.00'}]}], 'fareType': 'PUBLISHED', 'departureDate': '2024-03-28', 'arrivalDate': '2024-03-28', 'lines': ['DAC', 'DXB'], 'duration_in_minutes': 350, 'prices': {'currency': 'USD', 'travelerType': 'Adult', 'toal': '452.30', 'base': '334.00', 'fees': 0, 'taxes': 0}, 'fare_detail_by_segment': {'97': {'name': 'DAC - DXB', 'travelers': {'1': {'travelerType': 'Adult', 'cabin': 'Economy', 'fareBasis': 'OOLP7BD1', 'weight': 30, 'weightUnit': 'KG', 'quantity': 0}}}}, 'flight': {'type': 'flight-offer', 'id': '2', 'source': 'GDS', 'instantTicketingRequired': False, 'nonHomogeneous': False, 'oneWay': False, 'lastTicketingDate': '2024-03-28', 'lastTicketingDateTime': '2024-03-28', 'numberOfBookableSeats': 7, 'itineraries': [{'duration': 'PT5H50M', 'segments': [{'departure': {'iataCode': 'DAC', 'terminal': '1', 'at': '2024-03-28T08:05:00'}, 'arrival': {'iataCode': 'DXB', 'terminal': '2', 'at': '2024-03-28T11:55:00'}, 'carrierCode': 'FZ', 'number': '502', 'aircraft': {'code': '73H'}, 'operating': {'carrierCode': 'FZ'}, 'duration': 'PT5H50M', 'id': '97', 'numberOfStops': 0, 'blacklistedInEU': False}]}], 'price': {'currency': 'USD', 'total': '452.30', 'base': '334.00', 'fees': [{'amount': '0.00', 'type': 'SUPPLIER'}, {'amount': '0.00', 'type': 'TICKETING'}], 'grandTotal': '452.30'}, 'pricingOptions': {'fareType': ['PUBLISHED'], 'includedCheckedBagsOnly': True}, 'validatingAirlineCodes': ['FZ'], 'travelerPricings': [{'travelerId': '1', 'fareOption': 'STANDARD', 'travelerType': 'ADULT', 'price': {'currency': 'USD', 'total': '452.30', 'base': '334.00'}, 'fareDetailsBySegment': [{'segmentId': '97', 'cabin': 'ECONOMY', 'fareBasis': 'OOLP7BD1', 'brandedFare': 'ECO2', 'brandedFareLabel': 'ECO2', 'class': 'O', 'includedCheckedBags': {'weight': 30, 'weightUnit': 'KG'}}]}], 'promo_code': ''}}, 'return_offer': {'id': '1', 'price': 234.8, 'currency': 'USD', 'traveler_count': 1, 'bookable_seats': 7, 'itineraries': [{'lines': ['DXB', 'DAC'], 'seg_first': {'airline_name': 'Fly Dubai', 'id': '98', 'departureAirport': 'DXB', 'airlineLogo': 'https://s1.apideeplink.com/images/airlines/FZ.png', 'airline': 'FZ', 'departureAt': datetime.datetime(2024, 3, 30, 13, 55), 'departureDate': '2024-03-30', 'departureHour': '13:55', 'arrivalAirport': 'DAC', 'arrivalAt': datetime.datetime(2024, 3, 30, 20, 40), 'arrivalDate': '2024-03-30', 'arrivalHour': '20:40', 'arrivalDuration': '4h 45m', 'cabin': 'economy', 'includedCheckedBags': '30kg'}, 'seg_last': {'airline_name': 'Fly Dubai', 'id': '98', 'departureAirport': 'DXB', 'airlineLogo': 'https://s1.apideeplink.com/images/airlines/FZ.png', 'airline': 'FZ', 'departureAt': datetime.datetime(2024, 3, 30, 13, 55), 'departureDate': '2024-03-30', 'departureHour': '13:55', 'arrivalAirport': 'DAC', 'arrivalAt': datetime.datetime(2024, 3, 30, 20, 40), 'arrivalDate': '2024-03-30', 'arrivalHour': '20:40', 'arrivalDuration': '4h 45m', 'cabin': 'economy', 'includedCheckedBags': '30kg'}, 'numberOfStops': 0, 'type': '1. Way', 'totalDuration': '4h 45m', 'segments': [{'id': '98', 'departureAirport': 'DXB', 'airlineLogo': 'https://s1.apideeplink.com/images/airlines/FZ.png', 'airline': 'FZ', 'airline_name': 'Fly Dubai', 'departureAt': datetime.datetime(2024, 3, 30, 13, 55), 'departureDate': '2024-03-30', 'departureHour': '13:55', 'arrivalAirport': 'DAC', 'arrivalAt': datetime.datetime(2024, 3, 30, 20, 40), 'arrivalDate': '2024-03-30', 'arrivalHour': '20:40', 'arrivalDuration': '4h 45m', 'cabin': 'economy', 'includedCheckedBags': '30kg'}], 'prices': [{'travelerType': 'ADULT', 'currency': 'USD', 'total': '234.80', 'base': '161.00'}]}], 'fareType': 'PUBLISHED', 'departureDate': '2024-03-30', 'arrivalDate': '2024-03-30', 'lines': ['DXB', 'DAC'], 'duration_in_minutes': 285, 'prices': {'currency': 'USD', 'travelerType': 'Adult', 'toal': '234.80', 'base': '161.00', 'fees': 0, 'taxes': 0}, 'fare_detail_by_segment': {'98': {'name': 'DXB - DAC', 'travelers': {'1': {'travelerType': 'Adult', 'cabin': 'Economy', 'fareBasis': 'NOL7AE1', 'weight': 30, 'weightUnit': 'KG', 'quantity': 0}}}}, 'flight': {'type': 'flight-offer', 'id': '1', 'source': 'GDS', 'instantTicketingRequired': False, 'nonHomogeneous': False, 'oneWay': False, 'lastTicketingDate': '2024-03-30', 'lastTicketingDateTime': '2024-03-30', 'numberOfBookableSeats': 7, 'itineraries': [{'duration': 'PT4H45M', 'segments': [{'departure': {'iataCode': 'DXB', 'terminal': '2', 'at': '2024-03-30T13:55:00'}, 'arrival': {'iataCode': 'DAC', 'terminal': '1', 'at': '2024-03-30T20:40:00'}, 'carrierCode': 'FZ', 'number': '523', 'aircraft': {'code': '73H'}, 'duration': 'PT4H45M', 'id': '98', 'numberOfStops': 0, 'blacklistedInEU': False}]}], 'price': {'currency': 'USD', 'total': '234.80', 'base': '161.00', 'fees': [{'amount': '0.00', 'type': 'SUPPLIER'}, {'amount': '0.00', 'type': 'TICKETING'}], 'grandTotal': '234.80'}, 'pricingOptions': {'fareType': ['PUBLISHED'], 'includedCheckedBagsOnly': True}, 'validatingAirlineCodes': ['FZ'], 'travelerPricings': [{'travelerId': '1', 'fareOption': 'STANDARD', 'travelerType': 'ADULT', 'price': {'currency': 'USD', 'total': '234.80', 'base': '161.00'}, 'fareDetailsBySegment': [{'segmentId': '98', 'cabin': 'ECONOMY', 'fareBasis': 'NOL7AE1', 'brandedFare': 'ECO2', 'brandedFareLabel': 'ECO2', 'class': 'N', 'includedCheckedBags': {'weight': 30, 'weightUnit': 'KG'}}]}], 'promo_code': ''}}, 'currency': 'USD'}

this is {{offer.return_offer.flight}}

{'type': 'flight-offer', 'id': '1', 'source': 'GDS', 'instantTicketingRequired': False, 'nonHomogeneous': False, 'oneWay': False, 'lastTicketingDate': '2024-03-30', 'lastTicketingDateTime': '2024-03-30', 'numberOfBookableSeats': 7, 'itineraries': [{'duration': 'PT4H45M', 'segments': [{'departure': {'iataCode': 'DXB', 'terminal': '2', 'at': '2024-03-30T13:55:00'}, 'arrival': {'iataCode': 'DAC', 'terminal': '1', 'at': '2024-03-30T20:40:00'}, 'carrierCode': 'FZ', 'number': '523', 'aircraft': {'code': '73H'}, 'duration': 'PT4H45M', 'id': '98', 'numberOfStops': 0, 'blacklistedInEU': False}]}], 'price': {'currency': 'USD', 'total': '234.80', 'base': '161.00', 'fees': [{'amount': '0.00', 'type': 'SUPPLIER'}, {'amount': '0.00', 'type': 'TICKETING'}], 'grandTotal': '234.80'}, 'pricingOptions': {'fareType': ['PUBLISHED'], 'includedCheckedBagsOnly': True}, 'validatingAirlineCodes': ['FZ'], 'travelerPricings': [{'travelerId': '1', 'fareOption': 'STANDARD', 'travelerType': 'ADULT', 'price': {'currency': 'USD', 'total': '234.80', 'base': '161.00'}, 'fareDetailsBySegment': [{'segmentId': '98', 'cabin': 'ECONOMY', 'fareBasis': 'NOL7AE1', 'brandedFare': 'ECO2', 'brandedFareLabel': 'ECO2', 'class': 'N', 'includedCheckedBags': {'weight': 30, 'weightUnit': 'KG'}}]}], 'promo_code': ''}

all data is {{offer}}={{offer.return_offer.flight}} +{{offer.destination_offer.flight}}

i want to create flite order & get PNR. its work only when i want to create order for one way booking by {{offer.destination_offer.flight}} this data. but i want to round trip order create with {{offer}} data set. its show a 400 arror

0

There are 0 best solutions below