public Verarbeitungsschritt TransferiereSchrittInHistorie(Produktionseinrichtung bearbeitetIn)
        {
            // packe erstes element aus rezept in historie
            Verarbeitungsschritt schritt = _Rezept[0];
            Tuple <Verarbeitungsschritt, string> historienEintrag = new Tuple <Verarbeitungsschritt, string>(_Rezept[0], bearbeitetIn.GetName());

            _Historie.Add(historienEintrag);
            // entferne aus rezept
            _Rezept.RemoveAt(0);
            return(schritt);
        }
        public int GetBearbeitungsdauerFuerSchritt(Verarbeitungsschritt schritt)
        {
            int dauer = 0;

            foreach (Tuple <Verarbeitungsschritt, int> tuple in _ListeAusfuehrbarerVerarbeitungsschritte)
            {
                if (tuple.Item1 == schritt)
                {
                    dauer = tuple.Item2;
                }
            }
            return(dauer);
        }
        public void TeilEntgegennehmen(Teil t)
        {
            //  if (BerechneStatus() == Status.EMPFANGSBEREIT) {
            _aktuellesTeil = t;
            // setze belegt bis
            Verarbeitungsschritt naechsterSchritt = _aktuellesTeil.TransferiereSchrittInHistorie(this);
            int dauer = GetBearbeitungsdauerFuerSchritt(naechsterSchritt);

            _BelegtBis = DateTime.Now.AddSeconds(dauer / 4.0);
            //  } else {
            //      Console.WriteLine("!! " + _Name + " belegt. Teil kann nicht angenommen werden.");
            //  }
        }
        /// <summary>
        /// Findet irgendwas.
        /// </summary>
        /// <returns> Schnellste empfangsbereite Fertigungsinsel. null wenn es keine Schnellste gibt.</returns>
        private Fertigungsinsel GetSchnellsteFertigungsinsel()
        {
            // aktueller schritt
            Verarbeitungsschritt naechsterSchritt = _AktuellesTeil.GetNaechsterSchritt();

            // suche nach allen EMPFANGSBEREITen Fertigungsinseln
            List <Fertigungsinsel> empfangsbereiteFertigungsinseln = new List <Fertigungsinsel>();

            foreach (Produktionseinrichtung p in _Produktionseinrichtungen)
            {
                if ((p.BerechneStatus() == Status.EMPFANGSBEREIT) && (p is Fertigungsinsel))
                {
                    empfangsbereiteFertigungsinseln.Add((Fertigungsinsel)p);
                }
            }
            // suche nach geringster fertigungsdauer für aktuellen verarbeitungsschritt
            int geringsteDauer = 9999;

            foreach (Fertigungsinsel f in empfangsbereiteFertigungsinseln)
            {
                foreach (Tuple <Verarbeitungsschritt, int> schritt in f.GetAusfuehrbareVerarbeitungsschritteUndDauer())
                {
                    if (schritt.Item1 == naechsterSchritt)
                    {
                        if (schritt.Item2 < geringsteDauer)
                        {
                            geringsteDauer = schritt.Item2;
                        }
                    }
                }
            }

            // suche nach fertigungsinsel mit geringster fertigungsdauer für aktuellen verarbeitungsschritt
            foreach (Fertigungsinsel f in empfangsbereiteFertigungsinseln)
            {
                foreach (Tuple <Verarbeitungsschritt, int> schritt in f.GetAusfuehrbareVerarbeitungsschritteUndDauer())
                {
                    if (schritt.Item1 == naechsterSchritt && schritt.Item2 == geringsteDauer)
                    {
                        return(f);
                    }
                }
            }
            return(null);
        }