// $Source: /usr/local/SimSoft/Sfx3D/src/gsl/bestell.h,v $
// $Revision: 1.2 $
// $Author: baum $
// $Date: 2001/11/29 15:18:09 $
//
// Login name of the user who locked the revision
// $Locker:  $
// Tag name used to checkout the file
// $Name:  $
// State assigned to revision
// $State: Exp $
//
//
// $Log: bestell.h,v $
// Revision 1.2  2001/11/29 15:18:09  baum
// -Realzeitsteuerung eingebaut
// -Handsteuerung eingebaut
//

#ifndef _BESTELL_H
#define _BESTELL_H     1

#include "transp.h"

#ifdef _BESTELL_CPP
#  undef _impexp
#  define _impexp __declspec(dllexport)
#elif defined BUILD_MAIN_DLL
#  undef _impexp
#  define _impexp
#else
#  undef _impexp
#  define _impexp __declspec(dllimport)
#endif

#if defined __GNUC__ || defined __hpux
#  undef _impexp
#  define _impexp
#endif

//-----------------------------------------------------
//   Klasse Bestellzettel
//-----------------------------------------------------

class _impexp Bestellzettel {
 public:
   Bestellzettel  (unsigned istv, unsigned sollv, unsigned wieoft);
   virtual ~Bestellzettel ();

   virtual unsigned IdentNr () const = 0;
   unsigned IstVorgang   () const;
   unsigned SollVorgang  () const;
   unsigned Wieoft       () const;
   unsigned decWieoft    ();

   virtual bool hatArbeitsplan (unsigned idnr, unsigned istv) const;
   virtual bool hatArtikel (unsigned idnr, unsigned istv) const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const = 0;
   virtual void DruckeBestellZettel () const;

 private:
   unsigned ObjIstvorgang;
   unsigned ObjSollvorgang;
   unsigned ObjWieoft;

   // declared, but not defined
   Bestellzettel ();
   Bestellzettel (const Bestellzettel&);
   const Bestellzettel& operator = (const Bestellzettel&);
};

//-----------------------------------------------------
//   Klasse ArbeitsplanBestellzettel
//-----------------------------------------------------

class _impexp ArbeitsplanBestellzettel : public Bestellzettel {
 public:
   ArbeitsplanBestellzettel  (unsigned arbNr, unsigned istv, unsigned sollv,
                              unsigned wieoft);
   virtual ~ArbeitsplanBestellzettel ();

   virtual unsigned IdentNr () const;
   virtual bool hatArbeitsplan (unsigned idnr, unsigned istv) const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const;
   virtual void DruckeBestellZettel () const;

 private:
   unsigned ObjArbeitsplanNr;

   // declared, but not defined
   ArbeitsplanBestellzettel ();
   ArbeitsplanBestellzettel (const ArbeitsplanBestellzettel&);
   const ArbeitsplanBestellzettel& operator = (const ArbeitsplanBestellzettel&);
};

//-----------------------------------------------------
//   Klasse ArtikelBestellzettel
//-----------------------------------------------------

class _impexp ArtikelBestellzettel : public Bestellzettel {
 public:
   ArtikelBestellzettel  (unsigned artNr, unsigned istv, unsigned sollv,
                          unsigned wieoft);
   virtual ~ArtikelBestellzettel ();

   virtual unsigned IdentNr () const;
   virtual bool hatArtikel (unsigned idnr, unsigned istv) const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const;
   virtual void DruckeBestellZettel () const;

 private:
   unsigned ObjArtikelNr;

   // declared, but not defined
   ArtikelBestellzettel ();
   ArtikelBestellzettel (const ArtikelBestellzettel&);
   const ArtikelBestellzettel& operator = (const ArtikelBestellzettel&);
};

//-----------------------------------------------------
//   Klasse TEBestellzettel
//-----------------------------------------------------

class _impexp TEBestellzettel : public Bestellzettel {
 public:
   TEBestellzettel  (typTransportEinheit* welcheTE, unsigned sollv);
   virtual ~TEBestellzettel ();

   virtual unsigned IdentNr () const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const;
   virtual void DruckeBestellZettel () const;
   typTransportEinheit* TE () const;

 private:
   typTransportEinheit* ObjTE;

   // declared, but not defined
   TEBestellzettel ();
   TEBestellzettel (const TEBestellzettel&);
   const TEBestellzettel& operator = (const TEBestellzettel&);
};

//-----------------------------------------------------
//   Klasse Zuweisung
//-----------------------------------------------------

class _impexp Zuweisung : public Bestellzettel {
 public:
   Zuweisung  (unsigned fuerwen, unsigned istv, unsigned sollv, unsigned wieoft);
   virtual ~Zuweisung ();

   unsigned FuerBaustein () const;
   virtual bool hatArbeitsplan (unsigned idnr, unsigned istv) const;
   virtual bool hatArtikel (unsigned idnr, unsigned istv) const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const = 0;

 private:
   unsigned ObjFuerBaustein;

   // declared, but not defined
   Zuweisung ();
   Zuweisung (const Zuweisung&);
   const Zuweisung& operator = (const Zuweisung&);
};

//-----------------------------------------------------
//   Klasse ArbeitsplanZuweisung
//-----------------------------------------------------

class _impexp ArbeitsplanZuweisung : public Zuweisung {
 public:
   ArbeitsplanZuweisung  (unsigned arbNr, unsigned fuerwen, unsigned istv,
                          unsigned sollv, unsigned wieoft);
   virtual ~ArbeitsplanZuweisung ();

   virtual unsigned IdentNr  () const;
   virtual bool hatArbeitsplan (unsigned idnr, unsigned istv) const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const;

 private:
   unsigned ObjArbeitsplanNr;

   // declared, but not defined
   ArbeitsplanZuweisung ();
   ArbeitsplanZuweisung (const ArbeitsplanZuweisung&);
   const ArbeitsplanZuweisung& operator = (const ArbeitsplanZuweisung&);
};

//-----------------------------------------------------
//   Klasse ArtikelZuweisung
//-----------------------------------------------------

class _impexp ArtikelZuweisung : public Zuweisung {
 public:
   ArtikelZuweisung  (unsigned artNr, unsigned fuerwen, unsigned istv,
                          unsigned sollv, unsigned wieoft);
   virtual ~ArtikelZuweisung ();

   virtual unsigned IdentNr  () const;
   virtual bool hatArtikel (unsigned idnr, unsigned istv) const;
   virtual bool TransportEinheitPasst (typTransportEinheit* zTE) const;

 private:
   unsigned ObjArtikelNr;

   // declared, but not defined
   ArtikelZuweisung ();
   ArtikelZuweisung (const ArtikelZuweisung&);
   const ArtikelZuweisung& operator = (const ArtikelZuweisung&);
};

//---------------------------------------------------------
// class typTransportBestellung
//---------------------------------------------------------

class _impexp typTransportBestellung {
  public :
    typTransportBestellung  (unsigned werBstNr, unsigned zielBstNr, unsigned palPlatz, unsigned typ);
    ~typTransportBestellung ();

    const unsigned TransportBausteinNr		() const;
    const unsigned ZielBausteinNr			() const;
    const unsigned TransportPalPlatz		() const;
    const unsigned Typ							() const;

    int  Prioritaet      () const;
    void incPrioritaet   (int wert);
    void decPrioritaet   (int wert);
    void setPrioritaet   (int wert);
    void PrioEingliedern (List<typTransportBestellung>& lst);
    void AnfangGliedern (List<typTransportBestellung>& lst);
    void VorGliedern		 (List<typTransportBestellung>& lst, const typTransportBestellung *alt);
    void print ();

  private:
    int ObjPrio;
    unsigned ObjTransportBausteinNr;
    unsigned ObjZielBausteinNr;
    unsigned ObjTransportPalPlatz;
    unsigned ObjTyp; // 0 = holen, 1 = bringen

};



#endif /* _BESTELL_H */
