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



//	ausgelagerte Operationen der Klasse Verwaltung


void Verwaltung::BestellungAnnehmenUndBearbeiten(void)
{
//	Bestellung annehmen

	//	ist der Kunde noch nicht vorhanden, so muß er zuerst mit der Operation NeuerKunde
	//	angelegt werden - dies ist nicht Teil dieser Operation;
	//	anschließend wird unter der Kundennummer (knr) die bestellung aufgenommen und 
	//	registriert; dieses geschieht durch die Operation Neu der Klasse Kundenbestellung

	//	Generierung der Kundenbestellung und Eingabe der notwendigen Informationen

	class Kundenbestellung neuebestellung;
	class EingabeFenster<int> E;
	char* Text;	//	Text der im Menü ausgegeben werden soll
	int mehr;

	zaeler_bnr++;
	neuebestellung.Neu(zaeler_bnr);


	//	Generierung der Liste der Bestellposten - über einen Bildschirmdialog:

	Text="Soll ein weiterer Bestllposten der Bestellung hinzugefügt werden?";

	do
	{
		
		//	Bildschirmabfrage, ob ein weiterer Bestellposten angehängt werden soll
		//	(das Ergebnis wird in mehr abgespeichert)
		mehr = E.HoleEingabe(Text);

		if (mehr) 
		//	Generierung eines Bestellpostens und Eingabe der notwendigen Informationen
		{
			class Bestellposten neuerbestp;
			neuerbestp.Neu((neuebestellung.HoleBestellpostenListe().Laenge()+1), zaeler_bnr);
					//	generierung eines neuen Bestellposten
					//	die laufende Nummer wird über die Anzahl der schon bestehenden Bestellposten der Bestellung errechnet
			
			neuebestellung.PostenAnhaengen(neuerbestp);		//	der Bestellposten wird and die Liste der Bestellposten der Bestellung angehängt
		};
	
	} while (mehr);
	
	//	die neue Bestellung wird in die Liste der Kundenbestellungen der Klasse Verwaltung aufgenommen
	kundenbestellungen.ElementHinzufuegen(neuebestellung);	

	
	
//	Bestellung bearbeiten

	class BestellpostenListe postenliste;
	class Bestellposten bestp;
	class Produkt prod;

	postenliste = neuebestellung.HoleBestellpostenListe();

	postenliste.SetzeAufAnfang();
	for (int i=1; i <= postenliste.Laenge(); i++)
	{
		bestp = postenliste.HoleInhalt();	//	Zuweisung des aktuellen Listenelementes an bestp
		prod = SucheProdukt(bestp.HoleProduktNr());	//	sucht das zugehörige Produkt

		//	überprüfen, ob der Bestellposten ausgeliefert werden kann
		if (bestp.HoleMenge() <= prod.HoleAktuellenBestand())
		//	Bestellposten kann ausgeliefert werden
		{
			prod.AktuellenBestandKorregieren(-bestp.HoleMenge());	//	korregiert den Lagerbestand
			liefer_kartei.ElementHinzufuegen(bestp);	//	weist den Bestllposten der Lieferkartei zu
		}
		else
		//	Bestellposten kann NICHT ausgeliefert werden
		{
			prod.Vormerken(bestp.HoleMenge());	//	Menge zur Nachbestellung vormerken
			warte_kartei.ElementHinzufuegen(bestp);	//	weist den Bestellposten der Wartekartei zu
		};

		postenliste.NachfolgendesElement();	//	setzt den Listenzeiger ein Element weiter
	};
}
