private static IEnumerable<int> GenerateFlightAvailability(TempSeason season, DateTime departure, Dictionary<DateTime, bool> availableDatesReturn) { foreach (var duration in season.Durations) { var returnDate = departure.AddDays(duration); if (availableDatesReturn.IsAvailable(returnDate, 0.9)) { yield return duration; } } }
// per city public static Dictionary<DateTime, TempAvailability> GenerateFlightAvailabilities(IEnumerable<TempSeason> highSeasons) { var availableDatesDeparture = new Dictionary<DateTime, bool>(); var availableDatesReturn = new Dictionary<DateTime, bool>(); var availabilities = new Dictionary<DateTime, TempAvailability>(); foreach (var season in highSeasons) { foreach (var departure in season.Dates) { if (availableDatesDeparture.IsAvailable(departure, 0.9)) { var durations = GenerateFlightAvailability(season, departure, availableDatesReturn).ToList(); if (durations.Count > 0) { TempAvailability availability; if (!availabilities.TryGetValue(departure, out availability)) { availabilities.Add(departure, availability = new TempAvailability { DepartureDate = departure }); } availability.DurationDays.UnionWith(durations); } } } } return availabilities; }