#include"JWI_Klassen_Bestellposten.h"
#include"JWI_Klassen_Datum.cpp"



class Bestellung

{
	// Attribute
	public:		//	notwendig, damit die abgeleiteten Klassen die Daten verändern können
		int bnr;			//	Bestellnummer der Kunden- bzw. Nachbestellung
		int gnr;			//	Nummer des Geschäftspartners (Kunde bzw. Lieferant)
		class Datum datum;	//	Datum der Bestellung
		int bearbeitet;		//	zeigt an, ob die Bestellung schon bearbeitet wurde
							//	(1=bearbeitet, 0=nicht bearbeitet)
		BestellpostenListe postenliste;
							//	Liste der Bestellposten, die der Bestellung zugeordnet werden

	//	Operationen
	public:

	//	Konstruktor
		Bestellung(int bestellungsnr=0, int geschaeftspartnernr=0)
			: bnr(bestellungsnr), gnr(geschaeftspartnernr), bearbeitet(0)
		{
			datum.SetzeAufAktuellesDatum();
	
			//	Liste wird durch die Aufzählung unter Attributen initialisiert
		}

	//	Destruktor
		~Bestellung(void)
		{
			postenliste.SetzeAufAnfang();
			for(int i=1; i <= postenliste.Laenge(); i++)
			{
				postenliste.ElementLoeschen();
			};
		}

	//	Daten ändern
		void DatenAendern(void);

	//	Daten abfragen
		int HoleBestellungsNr(void);
		Datum HoleDatum(void);
		BestellpostenListe HoleBestellpostenListe(void);
		int HoleBearbeitet(void);

	//	Hinzufügen eines Bestellpostens zur Bestellung,
	//	d.h. ein Bestellposten wird an die postenliste angehängt
		void PostenAnhaengen(Bestellposten bestp);

//	Setze Bearbeitet auf 1, d.h. Bestellung bearbeitet ist wahr
		void SetzeBearbeitet(void) {bearbeitet = 1;};
};



//	abgeleitete Klassen


class Kundenbestellung: public Bestellung
{
	//	Operationen:
	public:

	//	abgeleiteter Constructor
		Kundenbestellung(int bestellungsnr=0, int geschaeftspartnernr=0)
			:Bestellung(bestellungsnr, geschaeftspartnernr) {}

	//	Destructor
		~Kundenbestellung(void) {}


	//	spezielle Daten abfragen (nur notwendig fur den angepaßen Namen der Operation)
		int HoleKundenNr(void);

	//	füllt zu einer erzeugten Instanz die Daten aus; 
	//	die betellnummer, d.h. Nummer der Kundenbestellung, wird von der Verwaltungsklasse,
	//	von der aus diese Operation	aufgerufen wird, vorgegeben
		void Neu(int bestellungsnr);
};



class Nachbestellung: public Bestellung
{
	//	Operationen:
	public:

	//	abgeleiteter Konstruktor	
		Nachbestellung(int bestellungsnr=0, int geschaeftspartnernr=0)
			: Bestellung(bestellungsnr, geschaeftspartnernr) {}

	//	Destructor		
		~Nachbestellung(void) {}

	//	Daten abfragen
		int HoleLieferantenNr(void);

	//	neue Bestellung ausfüllen 
	//	- die Nummer der Nachbestellung wird von der Klasse Verwaltung vorgegeben
		void Neu(int bestellungsnr);

	//	druckt die Nachbestellung
		void Drucken(void);
};



//	von der Klasse Liste werden weitere Klasse abgeleitet, die als Karteien bezeichtnet werden
//	diese Beszeichnung soll andeuten, daß diese Klasse durch Operationen erweitert werden 
//	können, die diese Liste ggf. auf einem externen Datenträger anlegen:

class NachbestellungenKartei: public Liste<Nachbestellung>{};

class KundenbestellungenKartei: public Liste<Kundenbestellung>{};
