Пример #1
0
        //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);
        }