/// <summary> /// Calculate departure and arrival dates of a valid itinerary /// </summary> /// <param name="itinerary"> /// Itinerary /// </param> /// <param name="arrivalDateNextStop"> /// Arrival date for the next itinerary /// </param> /// <returns> /// Arrival and Departure dates /// </returns> private ItineraryDates CalcItineraryArrivalDates(Leg itinerary, DateTime arrivalDateNextStop) { ItineraryDates itinerarySchedule = new ItineraryDates(); // hora de partida do primeiro voo da opcao atual string[] sTime = itinerary.Hops[0].STime.Split(':'); //hora de chegada do ultimo voo da opcao atual string[] tTime = itinerary.Hops[itinerary.Hops.Length - 1].TTime.Split(':'); int arrDayChange = 0; DateTime tempArrivalDate = new DateTime(arrivalDateNextStop.Year, arrivalDateNextStop.Month, arrivalDateNextStop.Day, int.Parse(tTime[0]), int.Parse(tTime[1]), 0); if (tempArrivalDate >= arrivalDateNextStop)//tem que ser no dia anterior { arrDayChange = 1; } int depDayChange = arrDayChange; for (int j = 0; j < itinerary.Hops.Length; j++) { if (itinerary.Hops[j].DayChange.HasValue) { depDayChange += itinerary.Hops[j].DayChange.Value; } } tempArrivalDate = tempArrivalDate.AddDays(-arrDayChange); itinerarySchedule.arrivalDateTime = tempArrivalDate; itinerarySchedule.departureDateTime = new DateTime(arrivalDateNextStop.Year, arrivalDateNextStop.Month, arrivalDateNextStop.Day, int.Parse(sTime[0]), int.Parse(sTime[1]), 0).AddDays(-depDayChange); return itinerarySchedule; }
/// <summary> /// Tries to Match the given Itinerary to the desired Arrival Date at the destination. /// Return an empty object if the itinerary does not match. /// </summary> /// <param name="itinerary"> /// Itinerary desired to be matched /// </param> /// <param name="arrivalDateNextStop"> /// DateTime to match /// </param> /// <returns> /// <see cref="Door2DoorCore.Types.Door2DoorResponse"/> indicating Arrival and Departure dates. Both 'null' if not valid. /// </returns> private ItineraryDates MatchflightToSchedule(Leg itinerary, DateTime arrivalDateNextStop) { ItineraryDates flightOption = new ItineraryDates(); // hora de partida do primeiro voo da opcao atual string[] sTime = itinerary.Hops[0].STime.Split(':'); //hora de chegada do ultimo voo da opcao atual string[] tTime = itinerary.Hops[itinerary.Hops.Length - 1].TTime.Split(':'); DateTime tempArrivalDate = new DateTime(arrivalDateNextStop.Year, arrivalDateNextStop.Month, arrivalDateNextStop.Day, int.Parse(tTime[0]), int.Parse(tTime[1]), 0); if (tempArrivalDate <= arrivalDateNextStop) { //Achou um voo que chega antes do proximo segmento da viagem int dayChange = 0; for (int i = 0; i < itinerary.Hops.Length; i++) { if (itinerary.Hops[i].DayChange.HasValue) { dayChange += itinerary.Hops[i].DayChange.Value; } } DateTime departureDate = new DateTime(arrivalDateNextStop.Year, arrivalDateNextStop.Month, arrivalDateNextStop.Day, int.Parse(sTime[0]), int.Parse(sTime[1]), 0).AddDays(-dayChange); flightOption.departureDateTime = departureDate; flightOption.arrivalDateTime = tempArrivalDate; } return flightOption; }