Skip to content

Commit e162cf8

Browse files
authored
Merge pull request Expensify#73244 from twilight2294/patch-47
2 parents 6cc60bb + 9b315c0 commit e162cf8

3 files changed

Lines changed: 478 additions & 68 deletions

File tree

src/libs/TripReservationUtils.ts

Lines changed: 70 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ function getTravelerName(traveler: ArrayValues<PnrData['pnrTravelers']>['persona
103103
name += ` ${traveler.name.given}`;
104104
}
105105

106-
return name.trim();
106+
return name?.trim();
107107
}
108108

109109
function getAddressFromLocation(
@@ -153,73 +153,75 @@ function getAirReservations(pnr: Pnr, travelers: PnrTraveler[]): Array<{reservat
153153
pnrData.travelerInfos.forEach((travelerInfo) => {
154154
travelerInfo.tickets.forEach((ticket) => {
155155
const flightCoupons = ticket.flightCoupons;
156-
flightCoupons.forEach((flightDetails, index) => {
157-
const legIdx = flightDetails.legIdx;
158-
const flightIdx = flightDetails.flightIdx;
159-
const flightObject = pnrData.legs?.at(legIdx)?.flights.at(flightIdx);
160-
161-
const airlineCode = flightObject?.marketing.airlineCode;
162-
const longAirlineName = airlineInfo.find((info) => info.airlineCode === airlineCode)?.airlineName ?? airlineCode;
163-
164-
const company = {
165-
shortName: airlineCode ?? '',
166-
phone: '',
167-
longName: longAirlineName ?? '',
168-
};
169-
170-
const origin = flightObject?.origin;
171-
const originAirport = airports.find((airport) => airport.airportCode === origin);
172-
const start = {
173-
date: flightObject?.departureDateTime?.iso8601 ?? '',
174-
timezoneOffset: '',
175-
shortName: origin,
176-
longName: originAirport?.airportName ?? origin,
177-
cityName: `${originAirport?.cityName}, ${originAirport?.stateCode}, ${originAirport?.countryName}`,
178-
};
179-
180-
const dest = flightObject?.destination;
181-
const destAirport = airports.find((airport) => airport.airportCode === dest);
182-
const end = {
183-
date: flightObject?.arrivalDateTime?.iso8601 ?? '',
184-
timezoneOffset: '',
185-
shortName: dest,
186-
longName: destAirport?.airportName ?? dest,
187-
cityName: `${destAirport?.cityName}, ${destAirport?.stateCode}, ${destAirport?.countryName}`,
188-
};
189-
190-
const route = {
191-
number: flightObject?.marketing.num ?? '',
192-
airlineCode: `${flightObject?.marketing.airlineCode}${flightObject?.marketing.num}`,
193-
class: flightObject?.cabin,
194-
};
195-
196-
const confirmations = [
197-
{
198-
name: 'Confirmation Number',
199-
value: flightObject?.vendorConfirmationNumber ?? '',
200-
},
201-
];
202-
const traveler = findTravelerInfo(travelers, travelerInfo.userId.id);
203-
const reservationObject: Reservation = {
204-
company,
205-
start,
206-
end,
207-
route,
208-
legId: legIdx,
209-
confirmations,
210-
arrivalGate: flightObject?.arrivalGate,
211-
seatNumber: getSeatByLegAndFlight(travelerInfo, legIdx, flightIdx),
212-
type: CONST.RESERVATION_TYPE.FLIGHT,
213-
duration: parseDurationToSeconds(flightObject?.duration.iso8601 ?? ''),
214-
reservationID: pnr.pnrId,
215-
travelerPersonalInfo: {
216-
name: getTravelerName(traveler),
217-
email: traveler?.email ?? '',
218-
},
219-
};
156+
flightCoupons
157+
.sort((a, b) => a.legIdx - b.legIdx)
158+
.forEach((flightDetails, index) => {
159+
const legIdx = flightDetails.legIdx;
160+
const flightIdx = flightDetails.flightIdx;
161+
const flightObject = pnrData.legs?.at(legIdx)?.flights.at(flightIdx);
162+
163+
const airlineCode = flightObject?.marketing.airlineCode;
164+
const longAirlineName = airlineInfo.find((info) => info.airlineCode === airlineCode)?.airlineName ?? airlineCode;
165+
166+
const company = {
167+
shortName: airlineCode ?? '',
168+
phone: '',
169+
longName: longAirlineName ?? '',
170+
};
171+
172+
const origin = flightObject?.origin;
173+
const originAirport = airports.find((airport) => airport.airportCode === origin);
174+
const start = {
175+
date: flightObject?.departureDateTime?.iso8601 ?? '',
176+
timezoneOffset: '',
177+
shortName: origin,
178+
longName: originAirport?.airportName ?? origin,
179+
cityName: `${originAirport?.cityName}, ${originAirport?.stateCode}, ${originAirport?.countryName}`,
180+
};
181+
182+
const dest = flightObject?.destination;
183+
const destAirport = airports.find((airport) => airport.airportCode === dest);
184+
const end = {
185+
date: flightObject?.arrivalDateTime?.iso8601 ?? '',
186+
timezoneOffset: '',
187+
shortName: dest,
188+
longName: destAirport?.airportName ?? dest,
189+
cityName: `${destAirport?.cityName}, ${destAirport?.stateCode}, ${destAirport?.countryName}`,
190+
};
191+
192+
const route = {
193+
number: flightObject?.marketing.num ?? '',
194+
airlineCode: `${flightObject?.marketing.airlineCode}${flightObject?.marketing.num}`,
195+
class: flightObject?.cabin,
196+
};
197+
198+
const confirmations = [
199+
{
200+
name: 'Confirmation Number',
201+
value: flightObject?.vendorConfirmationNumber ?? '',
202+
},
203+
];
204+
const traveler = findTravelerInfo(travelers, travelerInfo.userId.id);
205+
const reservationObject: Reservation = {
206+
company,
207+
start,
208+
end,
209+
route,
210+
legId: legIdx,
211+
confirmations,
212+
arrivalGate: flightObject?.arrivalGate,
213+
seatNumber: getSeatByLegAndFlight(travelerInfo, legIdx, flightIdx),
214+
type: CONST.RESERVATION_TYPE.FLIGHT,
215+
duration: parseDurationToSeconds(flightObject?.duration.iso8601 ?? ''),
216+
reservationID: pnr.pnrId,
217+
travelerPersonalInfo: {
218+
name: getTravelerName(traveler),
219+
email: traveler?.email ?? '',
220+
},
221+
};
220222

221-
reservationList.push({reservation: reservationObject, reservationIndex: index});
222-
});
223+
reservationList.push({reservation: reservationObject, reservationIndex: index});
224+
});
223225
});
224226
});
225227

@@ -513,5 +515,6 @@ export {
513515
getReservationDetailsFromSequence,
514516
formatAirportInfo,
515517
getPNRReservationDataFromTripReport,
518+
getAirReservations,
516519
};
517520
export type {ReservationData};

0 commit comments

Comments
 (0)