public bool InitialisiereTeile(string pfadZuCSV)
        {
            Console.WriteLine("Einganglager: Einlesen gestartet!");
            var  lines     = File.ReadLines(pfadZuCSV);
            bool firstLine = true;

            foreach (var line in lines)
            {
                if (firstLine)
                {
                    firstLine = false; continue;
                }                             // einfach nur die Kopfzeile überspringen

                var worte = line.Split(';');  // teile zeile in worte
                //erstelle teil infos
                var seriennummer = worte[0];
                List <Verarbeitungsschritt> rezept = new List <Verarbeitungsschritt>();

                for (int i = 1; i <= 4; i++)
                {
                    if (worte[i] != "")
                    {
                        rezept.Add((Verarbeitungsschritt)Enum.Parse(typeof(Verarbeitungsschritt), worte[i]));
                    }
                }

                // erstelle objekt "Teil"
                Teil teil = new Teil(rezept, seriennummer);
                // für teil teile liste hinzu
                _BestandZubearbeiten.Add(teil);
            }
            Console.WriteLine("Einganglager: " + _BestandZubearbeiten.Count + " Teile eingelesen.");
            return(true);
        }
        private void GibHistorieAus(Teil t)
        {
            string serienNummer = t.GetSeriennummer();

            Console.Write("LagerAus: " + serienNummer + " ");
            foreach (Tuple <Verarbeitungsschritt, string> historienEintrag in t.LiefereHistorie())
            {
                Console.Write("( " + historienEintrag.Item1 + " - " + historienEintrag.Item2 + " );");
            }
            Console.Write("\n");
        }
 public Teil TeilAusgeben()
 {
     if (_BestandZubearbeiten.Count > 0)
     {
         Teil tempTeil = _BestandZubearbeiten[0];
         _BestandZubearbeiten.RemoveAt(0);
         return(tempTeil);
     }
     Console.WriteLine("!!! Einganslager: leer.");
     return(null);
 }
        public void Start()
        {
            // TODO: schaue ob alle Verarbeitungsschritte in FIs behandelt werden können

            DateTime nächsterSchritt = DateTime.Now;

            while (!IstFertig())
            {
                if (DateTime.Now >= nächsterSchritt.AddSeconds(1 / 4.0))
                {
                    nächsterSchritt = DateTime.Now;

                    Produktionseinrichtung prodEinr = GetAbholbereiteProduktionseinrichtung();
                    // wenn es eine abholbereite produktionseinrichtung gibt
                    if (prodEinr != null)
                    {
                        // hole teil
                        if (prodEinr is EingangsLager)
                        {
                            _AktuellesTeil = ((EingangsLager)prodEinr).TeilAusgeben();
                        }
                        else if (prodEinr is Fertigungsinsel)
                        {
                            _AktuellesTeil = ((Fertigungsinsel)prodEinr).TeilZurueckgeben();
                            //    _aktue
                        }
                        Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " < " + prodEinr.GetName());

                        if (_AktuellesTeil.SelbstTestTeil())
                        {
                            Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " > LagerAus");
                            FindeAusgangsLager().TeilFuerDenVersandEmpfangen(_AktuellesTeil);
                        }
                        else
                        {
                            Fertigungsinsel insel = GetSchnellsteFertigungsinsel();
                            // wenn es keine FI gibt die das teil verarbeiten kann
                            if (insel == null)
                            {
                                Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " > LagerEin");
                                findeEingangsLager().TeilZwischenlagern(_AktuellesTeil);
                            }
                            else
                            {
                                Console.WriteLine(_AktuellesTeil.GetSeriennummer() + " > " + insel.GetName());
                                insel.TeilEntgegennehmen(_AktuellesTeil);
                            }
                        }
                    }
                }
            }
            Console.WriteLine("Robbie ist fertig. " + FindeAusgangsLager().GetBestand().Count + " Teile im Ausgangslager");
        }
        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.");
            //  }
        }
        public Teil TeilZurueckgeben()
        {
            //   if (BerechneStatus() == Status.ABHOLBEREIT) {
            Teil tempTeil = _aktuellesTeil;

            _aktuellesTeil = null;
            //       Console.WriteLine(_Name + ": Teil zurueck gegeben. Seriennummer: " + tempTeil.GetSeriennummer());
            return(tempTeil);

            //   } else {
            //       Console.WriteLine("!!!" + _Name + ": Teil nicht abholbereit. Teil kann nicht zurueck gegeben werden.");
            //       return null;
            //}
        }
 public void TeilFuerDenVersandEmpfangen(Teil t)
 {
     _Bestand.Add(t);
     GibHistorieAus(t);
 }
 public void TeilZwischenlagern(Teil t)
 {
     _BestandZubearbeiten.Add(t);
     // Console.WriteLine("Einganglager: " + t.GetSeriennummer() + " zwischengelagert.");
 }