Exemplo n.º 1
0
        public async Task <IEnumerable <ItineraryObject> > GetObjectsList(string origin,
                                                                          string destination,
                                                                          string outboundDate,
                                                                          string inboundDate,
                                                                          string amountOfPassengers,
                                                                          string travelClass,
                                                                          string currency)
        {
            origin      = GetIata(origin);
            destination = GetIata(destination);
            var rootObj = await GetData(origin, destination, outboundDate, inboundDate, amountOfPassengers, travelClass, currency);

            if (rootObj == null)
            {
                return(null);
            }
            var rootObjCount = rootObj.results.Count;
            var outboundLegs = new List <IndividualFlightOutbound>();
            var inboundLegs  = new List <IndividualFlightInbound>();

            itineraries.Clear();
            for (int i = 0; i < rootObjCount; i++)
            {
                outboundLegs.Clear();
                inboundLegs.Clear();
                var flightsCountOutbound = rootObj.results[i].itineraries[0].outbound.flights.Count;
                var getFlightsOutbound   = rootObj.results[i].itineraries[0].outbound.flights;

                for (int u = 0; getFlightsOutbound.Count > u; u++)
                {
                    var indOutbound = getFlightsOutbound[u];

                    outboundLegs.Add(
                        new IndividualFlightOutbound()
                    {
                        originInd         = indOutbound.origin.airport,
                        destinationInd    = indOutbound.destination.airport,
                        travel_class      = indOutbound.booking_info.travel_class,
                        flight_number     = indOutbound.flight_number,
                        booking_code      = indOutbound.booking_info.booking_code,
                        aircraft          = indOutbound.aircraft,
                        arrives_at        = indOutbound.arrives_at,
                        departs_at        = indOutbound.departs_at,
                        seats_remaining   = indOutbound.booking_info.seats_remaining,
                        marketing_airline = indOutbound.marketing_airline,
                        operating_airline = indOutbound.operating_airline,
                        orderPos          = u,
                        terminalOrg       = indOutbound.origin.terminal,
                        terminalDes       = indOutbound.destination.terminal,
                        duration          = _tzService.GetDuration(indOutbound.origin.airport, indOutbound.destination.airport,
                                                                   indOutbound.departs_at.Split("T")[0] + " " + indOutbound.departs_at.Split("T")[1], indOutbound.arrives_at.Split("T")[0] + " " + indOutbound.arrives_at.Split("T")[1])
                    });
                }


                if (inboundDate != null)
                {
                    var flightsCountInbound = rootObj.results[i].itineraries[0].inbound.flights.Count;
                    var getFlightsInbound   = rootObj.results[i].itineraries[0].inbound.flights;


                    for (var c = 0; getFlightsInbound.Count > c; c++)
                    {
                        var indInbound = getFlightsInbound[c];

                        inboundLegs.Add(
                            new IndividualFlightInbound()
                        {
                            originInd         = indInbound.origin.airport,
                            destinationInd    = indInbound.destination.airport,
                            travel_class      = indInbound.booking_info.travel_class,
                            flight_number     = indInbound.flight_number,
                            booking_code      = indInbound.booking_info.booking_code,
                            aircraft          = indInbound.aircraft,
                            arrives_at        = indInbound.arrives_at,
                            departs_at        = indInbound.departs_at,
                            seats_remaining   = indInbound.booking_info.seats_remaining,
                            marketing_airline = indInbound.marketing_airline,
                            operating_airline = indInbound.operating_airline,
                            orderPos          = c,
                            terminalOrg       = indInbound.origin.terminal,
                            terminalDes       = indInbound.destination.terminal,
                            duration          = _tzService.GetDuration(indInbound.origin.airport, indInbound.destination.airport,
                                                                       indInbound.departs_at.Split("T")[0] + " " + indInbound.departs_at.Split("T")[1], indInbound.arrives_at.Split("T")[0] + " " + indInbound.arrives_at.Split("T")[1])
                        });
                    }



                    itineraries.Add(
                        new ItineraryObject()
                    {
                        Id = Guid.NewGuid().ToString(),
                        AmountOfPassengers        = Int32.Parse(amountOfPassengers),
                        originAirportOutbound     = getFlightsOutbound[0].origin.airport,
                        originAirportInbound      = getFlightsInbound[0].origin.airport,
                        departureTimeOutbound     = getFlightsOutbound[0].departs_at,
                        departureTimeInbound      = getFlightsInbound[0].departs_at,
                        arrivalAirportOutbound    = getFlightsOutbound[flightsCountOutbound - 1].destination.airport,
                        arrivalAirportInbound     = getFlightsInbound[flightsCountInbound - 1].destination.airport,
                        arrivalTimeOutbound       = getFlightsOutbound[getFlightsOutbound.Count - 1].arrives_at,
                        arrivalTimeInbound        = getFlightsInbound[getFlightsInbound.Count - 1].arrives_at,
                        tripDurationOutbound      = rootObj.results[i].itineraries[0].outbound.duration,
                        tripDurationInbound       = rootObj.results[i].itineraries[0].inbound.duration,
                        layoverStopAmountOutbound = (flightsCountOutbound - 1).ToString(),
                        layoverStopAmountInbound  = (flightsCountInbound - 1).ToString(),
                        layoverCitiesOutbound     = GetLayoverCitiesOutbound(rootObj, i),
                        layoverCitiesInbound      = GetLayoverCitiesInbound(rootObj, i),
                        fareClass             = getFlightsOutbound[0].booking_info.travel_class,
                        farePriceTotal        = rootObj.results[i].fare.total_price,
                        farePriceTax          = rootObj.results[i].fare.price_per_adult.tax,
                        fareCurrency          = rootObj.currency,
                        farePricePerPassenger = rootObj.results[i].fare.price_per_adult.total_fare,
                        IndFlightOutbound     = new List <IndividualFlightOutbound>(outboundLegs)
                                                .OrderBy(o => o.orderPos).ToList(),
                        IndFlightInbound = new List <IndividualFlightInbound>(inboundLegs).OrderBy(o => o.orderPos)
                                           .ToList()
                    });
                }
                else
                {
                    itineraries.Add(
                        new ItineraryObject()
                    {
                        Id = Guid.NewGuid().ToString(),
                        AmountOfPassengers        = Int32.Parse(amountOfPassengers),
                        originAirportOutbound     = getFlightsOutbound[0].origin.airport,
                        departureTimeOutbound     = getFlightsOutbound[0].departs_at,
                        arrivalAirportOutbound    = getFlightsOutbound[flightsCountOutbound - 1].destination.airport,
                        arrivalTimeOutbound       = getFlightsOutbound[getFlightsOutbound.Count - 1].arrives_at,
                        tripDurationOutbound      = rootObj.results[i].itineraries[0].outbound.duration,
                        layoverStopAmountOutbound = (flightsCountOutbound - 1).ToString(),
                        layoverCitiesOutbound     = GetLayoverCitiesOutbound(rootObj, i),
                        fareClass             = getFlightsOutbound[0].booking_info.travel_class,
                        farePriceTotal        = rootObj.results[i].fare.total_price,
                        farePriceTax          = rootObj.results[i].fare.price_per_adult.tax,
                        fareCurrency          = rootObj.currency,
                        farePricePerPassenger = rootObj.results[i].fare.price_per_adult.total_fare,
                        IndFlightOutbound     = new List <IndividualFlightOutbound>(outboundLegs)
                                                .OrderBy(o => o.orderPos).ToList()
                    });
                }
            }

            return(new FlightObjectsList(itineraries));
        }