//returns the percent of free gate slots for the airport public double getFreeSlotsPercent(Airline airline) { double numberOfSlots = (22 - 6) * 4 * 7; //from 06.00 to 22.00 each quarter each day (7 days a week) double usedSlots = AirportHelpers.GetOccupiedSlotTimes(this.Airport, airline).Count; double percent = ((numberOfSlots - usedSlots) / numberOfSlots) * 100; return(percent); }
//creates the panel for a route for a day private Border createRoutePanel(DayOfWeek day) { int hourFactor = 1; Border brdDay = new Border(); brdDay.BorderThickness = new Thickness(1, 1, 1, 1); brdDay.BorderBrush = Brushes.Black; Canvas cnvFlights = new Canvas(); cnvFlights.Width = 24 * 60 / hourFactor; cnvFlights.Height = 20; brdDay.Child = cnvFlights; List <RouteTimeTableEntry> entries = this.Airliner.Routes.SelectMany(r => r.TimeTable.Entries.FindAll(e => e.Airliner == this.Airliner && e.Day == day)).ToList(); //&& e.Time.Hours<12)).ToList(); entries.AddRange(this.Entries.Keys.SelectMany(r => this.Entries[r].FindAll(e => e.Day == day))); entries.RemoveAll(e => this.EntriesToDelete.Keys.SelectMany(r => this.EntriesToDelete[r]).ToList().Find(te => te == e) == e); foreach (RouteTimeTableEntry e in entries) { double maxTime = new TimeSpan(24, 0, 0).Subtract(e.Time).TotalMinutes; TimeSpan flightTime = e.TimeTable.Route.getFlightTime(this.Airliner.Airliner.Type); ContentControl ccFlight = new ContentControl(); ccFlight.ContentTemplate = this.Resources["FlightItem"] as DataTemplate; ccFlight.Content = new KeyValuePair <double, RouteTimeTableEntry>(Math.Min(flightTime.TotalMinutes / hourFactor, maxTime / hourFactor), e); int hours = e.Time.Hours; Canvas.SetLeft(ccFlight, 60 * hours / hourFactor + e.Time.Minutes / hourFactor); cnvFlights.Children.Add(ccFlight); } List <RouteTimeTableEntry> dayBeforeEntries = this.Airliner.Routes.SelectMany(r => r.TimeTable.Entries.FindAll(e => e.Airliner == this.Airliner && (e.Day == day - 1 || ((int)day) == 0 && ((int)e.Day) == 6))).ToList(); dayBeforeEntries.AddRange(this.Entries.Keys.SelectMany(r => this.Entries[r].FindAll(e => e.Day == day - 1 || ((int)day) == 0 && ((int)e.Day) == 6))); dayBeforeEntries.RemoveAll(e => this.EntriesToDelete.Keys.SelectMany(r => this.EntriesToDelete[r]).ToList().Find(te => te == e) == e); foreach (RouteTimeTableEntry e in dayBeforeEntries) { TimeSpan flightTime = e.TimeTable.Route.getFlightTime(this.Airliner.Airliner.Type); TimeSpan endTime = e.Time.Add(flightTime); if (endTime.Days == 1) { ContentControl ccFlight = new ContentControl(); ccFlight.ContentTemplate = this.Resources["FlightItem"] as DataTemplate; ccFlight.Content = new KeyValuePair <double, RouteTimeTableEntry>(endTime.Subtract(new TimeSpan(1, 0, 0, 0)).TotalMinutes / hourFactor, e); Canvas.SetLeft(ccFlight, 0); cnvFlights.Children.Add(ccFlight); } } if (this.SelectedRoute != null) { var occupiedSlots1 = AirportHelpers.GetOccupiedSlotTimes(this.SelectedRoute.Destination1, this.Airliner.Airliner.Airline).Where(s => s.Days == (int)day); var occupiedSlots2 = AirportHelpers.GetOccupiedSlotTimes(this.SelectedRoute.Destination2, this.Airliner.Airliner.Airline).Where(s => s.Days == (int)day); int slotLenght = 15; foreach (TimeSpan occupiedSlot in occupiedSlots1) { ContentControl ccOccupied = new ContentControl(); ccOccupied.ContentTemplate = this.Resources["OccupiedItem"] as DataTemplate; ccOccupied.Content = slotLenght / hourFactor; Canvas.SetLeft(ccOccupied, 60 * occupiedSlot.Hours / hourFactor + occupiedSlot.Minutes / hourFactor); cnvFlights.Children.Add(ccOccupied); } foreach (TimeSpan occupiedSlot in occupiedSlots2) { ContentControl ccOccupied = new ContentControl(); ccOccupied.ContentTemplate = this.Resources["OccupiedItem"] as DataTemplate; ccOccupied.Content = slotLenght / hourFactor; Canvas.SetLeft(ccOccupied, 60 * occupiedSlot.Hours / hourFactor + occupiedSlot.Minutes / hourFactor); cnvFlights.Children.Add(ccOccupied); } } return(brdDay); }