#include"JWI_Klassen_Verwaltung.h"
#include"JWI_Klassen_Fenster.cpp"



//	ausgelagerte Operationen der Klasse Verwaltung


void Verwaltung::RuecklaufBearbeiten()
{
	class Lieferschein liefers;
	class BestellpostenListe postenliste;
	class Bestellposten bestp;
	class Bestellung best;
	class EingabeFenster<int> E;
	int bestellungsnr;
	int allesbearbeitet;
	char* Text;

	Text="Bitte geben Sie die Bestellungsnr. der erfolgreich ausgelieferten Bestellung ein:";
	bestellungsnr = E.HoleEingabe(Text);

	liefers = SucheLieferscheinBestellungsNr(bestellungsnr);
	postenliste = liefers.HoleBestellpostenListe();

	postenliste.SetzeAufAnfang();
	for (int i=1; i <= postenliste.Laenge(); i++)
	{
		bestp = postenliste.HoleInhalt();
		//	setzt den internen Zeiger der Lieferkartei auf den ausgelieferten Bestellposten
		SucheBestellposten(bestp.HoleLaufendeNr());
		liefer_kartei.ElementLoeschen();	//	löscht diesen ausgelieferten Bestllposten

		//	setzt den Zeiger der Bestellpostenliste des Lieferscheines ein Element weiter
		postenliste.NachfolgendesElement();
	};

	//	löscht den ausgelieferten und gerade bearbeiteten Lieferschein
	lieferscheine.ElementLoeschen();


	//	kontrollieren, ob durch diese Auslieferung eine Kundenbestellung
	//	abschließend bearbeitet wurde:

	kundenbestellungen.SetzeAufAnfang();
	for(i=1; i <= kundenbestellungen.Laenge(); i++)
	{
		//	holt das aktuelle Element der Liste der Kundenbestellungen
		best = kundenbestellungen.HoleInhalt();	

		if(best.HoleBearbeitet() == 0)
		{
			postenliste = best.HoleBestellpostenListe();
			allesbearbeitet = 1;

			//	kontrollieren, ob für die gegebene Kundenbestellung
			//	alle Bestellposten weder in der Warte-, noch in der Lieferkartei sind;
			//	dann sind alle Posten ausgeliefert und die Bestellung bearbeitet

			postenliste.SetzeAufAnfang();
			for(int j=1; j <= postenliste.Laenge(); j++)
			{
				bestp = postenliste.HoleInhalt();
				if(SucheBestellposten(bestp.HoleLaufendeNr()).HoleLaufendeNr() != 0)
				//	der aktuelle Bestllposten ist in einer der Karteien und somit unbearbeitet
				{
					allesbearbeitet = 0;
				};

				postenliste.NachfolgendesElement();
			};

			//	falls alle Bestellposten bearbeitet sind, 
			//	wird die Bestllung als bearbeitet deklariert
			if(allesbearbeitet == 1)
			{
				best.SetzeBearbeitet();
			};
		};

		kundenbestellungen.NachfolgendesElement();
	};
}
