/// <summary>
        /// 
        /// </summary>
        private void VerifyRequest()
        {
            Segment segment = new Segment();
            DateTime arrivalDT = new DateTime();
            int routeIndex = 0, segmentIndex = 0, legIndex = 0;
            if (Request.Form["r2r_resp"] != null)
            {
                segment = JsonConvert.DeserializeObject<Segment>(Request.Form["r2r_resp"]);//JsonConvert.DeserializeObject<Segment>(GetMockJson());
            }
            if (Request.Form["arrdate"] != null)
            {
                arrivalDT = DateTime.ParseExact(Request.Form["arrdate"], "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture);
            }
            if (Request.Form["segmentIndex"] != null)
            {
                segmentIndex = int.Parse(Request.Form["segmentIndex"]);
            }

            if (Request.Form["routeIndex"] != null)
            {
                routeIndex = int.Parse(Request.Form["routeIndex"]);
            }

            if (Request.Form["legIndex"] != null)
            {
                legIndex = int.Parse(Request.Form["legIndex"]);
            }

            RequestData rd = new RequestData();
            rd.nextArrDate = arrivalDT.ToString("yyyy-MM-dd HH:mm");
            rd.segment = segment;
            rd.segmentIndex = segmentIndex;
            rd.routeIndex = routeIndex;
            rd.legIndex = legIndex;

            litJsonRq.Text = JsonConvert.SerializeObject(rd);
        }
Esempio n. 2
0
 /// <summary>
 ///     Gets the weekly frequency (in minutes) of the segment. <see cref="CalcFrequency"/>
 /// </summary>
 /// <param name="segment">
 ///     Door2DoorCore.Types.Door2DoorResponse.Segment.
 /// </param>
 /// <returns>
 ///     int WeeklyFrequency
 /// </returns>
 private int GetWeeklyFrequency(Segment segment)
 {
     int weeklyFrequency = 0;
     if (segment.Itineraries != null && segment.Kind != "flight")
     {
         if (segment.Itineraries[0].Legs != null && segment.Itineraries[0].Legs.Length > 0)
         {
             if (segment.Itineraries[0].Legs[0].Hops != null)
             {
                 weeklyFrequency = segment.Itineraries[0].Legs[0].Hops.Sum(e => e.Frequency);
             }
         }
     }
     return weeklyFrequency;
 }
Esempio n. 3
0
        /// <summary>
        ///     Gets the total frequency (in minutes) of the segment
        /// </summary>
        /// <param name="segment">
        ///     Door2DoorCore.Types.Door2DoorResponse.Segment.
        /// </param>
        /// <returns>
        ///     Nullable TimeSpan indicating the total frequency. ('null' if the segment does not have a frequency attribute)
        /// </returns>
        private TimeSpan? GetSegmentFrequency(Segment segment)
        {
            TimeSpan? freq = null;
            int horasTotal = 0;
            if (segment != null && segment.Itineraries != null && segment.Kind != "flight")
                for (int i = 0; i < segment.Itineraries.Length; i++)
                    if (segment.Itineraries[i].Legs != null)
                        for (int j = 0; j < segment.Itineraries[i].Legs.Length; j++)
                            if (segment.Itineraries[i].Legs[j].Hops != null)
                                horasTotal += segment.Itineraries[i].Legs[j].Hops.Sum(e => e.Frequency);

            if (horasTotal > 0)
                freq = CalcFrequency(horasTotal);

            return freq;
        }
Esempio n. 4
0
        /// <summary>
        ///     Finds the Itinerary that arrives at the latest time.
        /// </summary>
        /// <param name="segment">
        ///     The current <see cref="Door2DoorCore.Types.Door2DoorResponse.Segment"/>.
        /// </param>
        /// <returns>
        ///     Leg (Itinerary)
        /// </returns>
        private Leg FindLatestItinerary(ref Segment segment)
        {
            Leg latestItinerary = null;
            for (int i = 0; i < segment.Itineraries.Length; i++)
            {
                Leg itinerary = segment.Itineraries[i].Legs[0];
                segment.Itineraries[i].ValidForSchedule = true;

                //hora de chegada do ultimo voo da opcao atual
                string[] tTime = itinerary.Hops[itinerary.Hops.Length - 1].TTime.Split(':');

                // horario do itinerario atual
                TimeSpan itineraryDate = new TimeSpan(int.Parse(tTime[0]), int.Parse(tTime[1]), 0);

                if (latestItinerary == null)// é o primeiro
                {
                    latestItinerary = itinerary;
                    segment.ChosenItinerary = i;
                }
                else
                {
                    string[] latestItineraryTime = latestItinerary.Hops[latestItinerary.Hops.Length - 1].TTime.Split(':');
                    TimeSpan latestItineraryDate = new TimeSpan(int.Parse(latestItineraryTime[0]), int.Parse(latestItineraryTime[1]), 0);

                    if (latestItineraryDate < itineraryDate)// achou uma opcao mais tarde
                    {
                        latestItinerary = itinerary;
                        segment.ChosenItinerary = i;
                    }
                }
            }
            return latestItinerary;
        }
Esempio n. 5
0
        /// <summary>
        ///     Builds a Itinerary <see cref="Door2DoorCore.Types.Door2DoorResponse.Itinerary"/> based on the D2DRequestChosenRoute on the request.
        /// </summary>
        /// <param name="segment">
        ///     Which segment the itinerary will be included
        /// </param>
        /// <param name="legIndex">
        ///     Whether this is the inbound(0) or outbound(1) leg of the trip
        /// </param>
        private void BuildINewtinFromChosenRoute(ref Segment segment, int legIndex)
        {
            Itinerary it = new Itinerary();
            it.Legs = new Leg[1];
            it.OuterItinerary = true;
            it.ValidForSchedule = true;
            it.Legs[0] = new Leg();
            it.Legs[0].Hops = new Hop[_req.chosenRoute[legIndex].flightSegment.flightLegs.Length];

            it.Legs[0].IndicativePrice = new IndicativePrice4();
            it.Legs[0].IndicativePrice.Price = _req.chosenRoute[legIndex].price;
            it.Legs[0].IndicativePrice.Currency = _req.chosenRoute[legIndex].currency;

            int duration = 0;
            for (int i = 0; i < _req.chosenRoute[legIndex].flightSegment.flightLegs.Length; i++)
            {
                Hop hop = new Hop();
                hop.SCode = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].origin;
                hop.TCode = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].destination;

                hop.STime = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].departureDate.ToString("HH:mm");
                hop.TTime = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].arrivalDate.ToString("HH:mm");

                hop.Flight = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].number;
                hop.Airline = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].marketingAirline;
                hop.Duration = _req.chosenRoute[legIndex].flightSegment.flightLegs[i].duration;

                hop.DayChange = (_req.chosenRoute[legIndex].flightSegment.flightLegs[i].arrivalDate - _req.chosenRoute[legIndex].flightSegment.flightLegs[i].departureDate).Days;

                duration += _req.chosenRoute[legIndex].flightSegment.flightLegs[i].duration;

                it.Legs[0].Hops[i] = hop;
            }
            segment.Duration = duration;

            Itinerary[] its = segment.Itineraries;
            Array.Resize(ref its, segment.Itineraries.Length + 1);
            segment.Itineraries = its;
            segment.Itineraries[segment.Itineraries.Length - 1] = it;
            segment.ChosenItinerary = segment.Itineraries.Length - 1;
        }
Esempio n. 6
0
        /// <summary>
        ///     <para>Sometimes Rome2Rio API calculates lonk walking segments.</para>
        ///     <para>When a situation like this is identified, the 'walk' segment is transformed into a 'taxi' segment.</para>
        ///     <para>This is intended to be transitory, as they stated that this behavior will be fixed, but we never know.</para>
        ///     <para><seealso cref="Door2DoorCore.Door2DoorBase._maxWalkingMinutes"/></para>
        /// </summary>
        /// <param name="segment">
        /// Segment to be transformed
        /// </param>
        private void WalkIntoTaxiTransformation(ref Segment segment)
        {
            segment.Kind = "car";
            segment.Vehicle = "taxi";

            if (segment.IndicativePrice == null)
            {
                segment.IndicativePrice = new IndicativePrice2();
            }

            segment.IndicativePrice.Currency = "BRL";
            // cada minuto andando corresponde à R$0,371428571428 de taxi(abstraia, abstraia)
            segment.IndicativePrice.Price = Math.Round(segment.Duration * 0.371428571428M, 0);
            // cada minuto andando equivale(abstraia, veja bem) à 0.142857142857 minutos em um taxi
            segment.Duration =  Convert.ToInt32(Math.Ceiling(decimal.Parse(segment.Duration.ToString()) * 0.142857142857M));
        }