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