Skip to main content
Skip table of contents

TBeProjectBusinessController

TBeProjectBusinessController

Die Klasse TBeProjectBusinessController stellt Funktionen und Methoden für die Projekt-Verwaltung bereit. Jeder Vorgang ist einem Projekt zugeordnet, jedes Projekt kann "n" Vorgänge haben.

Konstanten

cPMResHourPrec = 4 Nachkomma-Stellen für Stunden Genauigkeit
cPMResMinutePrec = 2 Nachkomma-Stellen für Minuten Genauigkeit

Eigenschaften

EigenschaftBeschreibung

CbDataModule:O

Daten-Modul des Controllers.
Für alle Funktionen und Methoden die Daten verändern / erzeugen, muss auf diesem Daten-Modul eine Transaktion gestartet werden

Funktionen

FunktionParameterBeschreibung

CbInsertTaskAfterCurrent():N

Fügt einen neuen Vorgang in den Vorgangs-Baum ein.
Der neue Vorgang wird nach dem aktuell positionierten TBeProjectTaskBO und auf der selben Ebene wie dieser eingefügt.
Rückgabe ist die ID des angelegten Vorgangs

aProjectBo:OProjekt Business Objekt (auf Projekt positioniert)
aTaskBo:OVorgangs Business Objekt, das auf den Vorgang positioniert ist nachdem eingefügt werden soll.Das Business Objekt ist nach der Ausführung auf dem neuen Vorgang positioniert

CbInsertTaskAtEnd:N

Fügt einen neuen Vorgang auf oberster Ebene am Ende des Vorgangs-Baums ein.
Rückgabe ist die ID des angelegten Vorgangs

aProjectBo:OProjekt Business Objekt (auf Projekt positioniert)
aTaskBo:O

Vorgangs Business Objekt.
Das Business Objekt ist nach der Ausführung auf dem neuen Vorgang positioniert

CbDeleteTaskAndChildren:N

Löscht einen Vorgang und alle ihm untergeordneten Vorgänge aus dem Vorgangs-Baum. Wenn einer der Vorgänge aus der Baum-Liste nicht gelöscht werden kann, wird nichts gelöscht.
Rückgabe ist die Anzahl der gelöschten Vorgänge, falls einer der Vorgänge nicht gelöscht werden kann, ist die Rückgabe -2

aTaskBo:OVorgangs Business Objekt welches gelöscht werden soll

CbIndentTask:N

Rückt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Ebene ein/tiefer. Dabei wird der Vorgang dem ihm übergeordneten Vorgang untergeordnet. Ist das Einrücken eines Vorgangs nicht möglich, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge eingerückt, ist die Rückgabe -1

aTaskBo:OVorgangs Business Objekt welches eingerückt werden soll

CbOutdentTask:N

Rückt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Ebene aus/höher. Falls das Ausrücken eines Vorgangs nicht möglich ist, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge eingerückt, ist die Rückgabe -1

aTaskBo:OVorgangs Business Objekt welches ausgerückt werden soll

CbMoveTaskAndChildrenUp:N

Verschiebt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Position auf gleicher Ebene nach oben. Ist das Verschieben des Vorgangs nicht möglich, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge verschoben, ist die Rückgabe -1

aTaskBo:OVorgangs Business Objekt, welches verschoben werden soll

CbMoveTaskAndChildrenDown:N

Verschiebt einen Vorgang und alle ihm untergeordneten Vorgänge um eine Position auf gleicher Ebene nach unten. Ist das Verschieben des Vorgangs nicht möglich, ist die Rückgabe die Nummer einer Sprachkonstante mit Fehlertext. Wurden alle Vorgänge verschoben, ist die Rückgabe -1

aTaskBo:OVorgangs Business Objekt, welches verschoben werden soll

CbTaskTree:N

Liefert ein Array für einen Vorgang und alle ihm untergeordneten Vorgänge mit folgendem Aufbau: {{ID, SORT, VORG_SAM, EBENE}, ...}

aTaskBo:OVorgangs Business Objekt, für das die Liste ermittelt werden soll

CbCreateEffortPosting:N

Erstellt eine neue Vorgangs-Leistungs-Buchung. Rückgabe ist die ID der angelegten Vorgangs-Leistungs-Buchung






aProjectBo:OProjekt Business Objekt (auf Projekt positioniert)
aTaskBo:OVorgangs Business Objekt (auf Vorgang positioniert)
aTaskEffortBo:O

Vorgangs-Leistungs Business Objekt, positioniert auf die Vorgangs-Leistung, für die die Buchung erstellt wird.
Das Business Objekt ist nach der Ausführung auf der neuen Buchung positioniert

aPostingDate:DDatum der Buchung
aMinutes:NIst-Menge (in Minuten) der Buchung
aComment:CBuchungs-Kommentar

CbCreateNewProjectFromTemplate:N

Kopiert ein vorhandenes Projekt inkl. aller Projekt-Vorgänge und Vorgangs-Leistungen.
Rückgabe ist die ID des erstellten Projekts






aSourceProjectID:NID des Projekts, das als Vorlage für die Kopie dienen soll
aTargetProjectBO:OZiel Projekt Business Objekt (ist nach dem Prozess auf dem neuen Projekt positioniert)
aCreationSettings:N

Welche Teile des Projekts sollen kopiert werden. Werte müssen mit OR verknüpft werden z.B. pftDefault OR pftTasks OR pftTaskEfforts kopiert das gesamte Projekt inkl. aller Vorgänge und Vorgangs-Leistungen

pftDefaultProjekt kopieren
pftTasksVorgänge kopieren
pftTaskEffortsLeistungen kopieren (nur ivm. pftTasks möglich)

CbCreateSalesProfit:L

Erstellt einen neuen Projekt-Erlös (Business Objekt bleibt im Bearbeitungs-Modus)

aSalesProfitBO:OProjekt-Erlöse Business Objekt
aProjectID:NID des Projekts

CbEditSalesProfit:L

Versetzt einen bestehenden Projekt-Erlös in den Bearbeitungs-Modus

aSalesProfitBO:OProjekt-Erlöse Business Objekt, das bearbeitet werden soll

CbDeleteSalesProfit:L

Löscht einen Projekt-Erlös

aSalesProfitBO:OProjekt-Erlöse Business Objekt (Positioniert auf den zu löschenden Erlös)
aProjectBO:OZiel Projekt Business Objekt

CbPostSalesProfit:L

Speichert einen Projekt-Erlös

aSalesProfitBO:OProjekt-Erlöse Business Objekt
aProjectBO:OZiel Projekt Business Objekt

CbCancelSalesProfit:L

Änderung am Projekt-Erlös verwerfen

aSalesProfitBO:OProjekt-Erlöse Business Objekt

CbAutoCalcSalesProfit:L

Berechnet automatisch alle Erlöse für ein Projekt.
Dabei werden die Werte in nicht manuell erzeugten Zeilen aktualisiert und ggf. neue Zeilen angelegt

aProjectBO:OZiel Projekt Business Objekt
aSalesProfitBO:OProjekt-Erlöse Business Objekt

Aufbau der Projektverwaltung

Beispiel

CODE
| m_oPrjBC, m_oDM, m_oPrjBO, m_oTskBO, m_oEffBO, m_oPstBO, m_oProfitBO,
  nProjectID:N, nTaskID:N, nEffortID, nPostingID, m_oDab262, i |

//******************************************************************************
// Erzeugt ein neues Projekt, 5 Vorgänge (1 Vorgang pro Werktag)
// Rückt die Vorgänge zu einer Kaskade ein
// Legt für den letzten Vorgang eine Vorgang-Leisung an und führt eine
// Buchung auf diese Vorgangs-Leistung durch
//******************************************************************************
// Projekt
//    Vorgang 1
//       Vorgang 2
//          ...
//******************************************************************************
m_oDM := CreateObject('TBeDbGet'),
startseq
   m_oDab262 := BeOpen(waDAB262),
   if eof(m_oDab262) then
      SetError('Beispiel funktioniert nicht mit leerem Personalstamm'),
   endif,

   DbStartTrans(m_oDM.AdsConnection),
   startseq

      m_oPrjBC    := CreateObject('TBeProjectBusinessController'),  // Kontroller
      m_oPrjBO    := CreateObject('TBeProjectBo'),                  // Projekt
      m_oTskBO    := CreateObject('TBeProjectTaskBo'),              // Vorgang
      m_oEffBO    := CreateObject('TBeProjectTaskEffortBO'),        // Vorgangs-Leistung
      m_oPstBO    := CreateObject('TBePostingBO'),                  // Leistungs-Buchung
      m_oProfitBO := CreateObject('TBeProjectSalesProfitBO'),       // Projekt-Erlöse
      startseq
         // Gleiches Datenmodul für alle Business-Objekte
         m_oPrjBC.CbDataModule    := m_oDM,
         m_oPrjBO.CbDataModule    := m_oDM,
         m_oTskBO.CbDataModule    := m_oDM,
         m_oEffBo.CbDataModule    := m_oDM,
         m_oPstBo.CbDataModule    := m_oDM,
         m_oProfitBO.CbDataModule := m_oDM,

         //*********************************************************************
         // Neues Projekt anlegen
         //*********************************************************************
         m_oPrjBO.CbInsert(),
         m_oPrjBO.CbDescription := 'Test Projekt ' + Kw(Now()),
         m_oPrjBO.CbType        := 300, // Projekt Typ "Organisation intern"
         m_oPrjBO.CbStartDate   := FrKw(Kw(Now())) - 4, // Beginn = Montag der akt. Woche
         m_oPrjBO.CbEndDate     := FrKw(Kw(Now())),     // Ende   = Freitag der akt. Woche
         m_oPrjBO.CbPost(),
         nProjectID := m_oPrjBO.CbID,
         writeln('Projekt Nr.'  + Str(nProjectID) + ' angelegt ( ' +
                 DtoC(m_oPrjBO.CbStartDate) + ' bis '  +
                 DtoC(m_oPrjBO.CbEndDate) + ')' ),

         //*********************************************************************
         // 5 Vorgänge die jeweils 1 Tag dauern dem Projekt hinzufügen
         //*********************************************************************
         m_oTskBO.CbGoToId(-1),
         for i:=0 to 4 do
            nTaskID := m_oPrjBC.CbInsertTaskAfterCurrent(m_oPrjBO, m_oTskBO),
            m_oTskBO.CbEdit(),
            m_oTskBO.CbDescription := 'Vorgang Nr. ' + str(m_oTskBo.CbId + 1),
            m_oTskBO.CbStart       := m_oPrjBO.CbStartDate + i,
            m_oTskBO.CbEnd         := m_oTskBO.CbStart + 1,
            m_oTskBo.CbPost(),
            // Vorgang um eine Ebene einrücken  (Kaskade)
            if i > 0 then
               m_oPrjBC.CbIndentTask(m_oTskBO),
            endif,
            writeln(Padl('', i) +  '   Vorgang Nr.'  + Str(nTaskID) + ' angelegt (' +
                    DtoC(m_oTskBO.CbStart) + ')'),
         next,

         //*********************************************************************
         // Neue Vorgangs-Leistung anlegen (für den letzten Vorgang)
         //*********************************************************************
         nEffortID := m_oEffBO.CbInsertTaskEffort(nTaskID),
         m_oEffBO.CbEdit(),
         m_oEffBO.CbDescription  := 'Projektplan prüfen',
         m_oEffBO.CbResourceType := 'M', // Mitarbeiter
         m_oEffBO.CbResourceID   := m_oDab262:PERSNR, // Mitarbeiter aus Personalstamm
         m_oEffBO.CbPost(),
         writeln(' '),
         writeln('Leistung Nr. ' + Str(nEffortID) + ' für Vorgang Nr.'  +
                 Str(nTaskID) + ' angelegt'),

         //*********************************************************************
         // Leistungs-Buchung durchführen (1h)
         //*********************************************************************
         nPostingID := m_oPrjBC.CbCreateEffortPosting(m_oPrjBO, m_oTskBO,
                                                      m_oEffBO, now(),
                                                      1 * 60, 'Projekt erstellt und geprüft'),
         writeln('Buchung für Leistung Nr.' + Str(nEffortID) + ' durchgeführt'),

         //*********************************************************************
         // Das Projekt inkl. aller Vorgänge und Leistungen nochmals kopieren
         //*********************************************************************
         DestroyObject(m_oTskBO), // diese BO's dürfen für den Kopie-Vorgang nicht
         DestroyObject(m_oEffBo), // mehr existieren da diese autoamtisch
         m_oTskBO := nil,         // in der Funktion erzeugt werden
         m_oEffBO := nil,
         m_oPrjBC.CbCreateNewProjectFromTemplate(nProjectID, m_oPrjBO, pftDefault or pftTasks or pftTaskEfforts),
         writeln('Projekt mit allen Vorgängen und Leistungen kopiert'),

         //*********************************************************************
         // Projekt-Erlöse anlegen
         //*********************************************************************
         m_oPrjBC.CbCreateSalesProfit(m_oProfitBO, nProjectID),
         m_oProfitBO.CbKind               := 10,
         m_oProfitBO.CbProfitType         := 10,
         m_oProfitBO.CbTargetProfit       := 1500,
         m_oProfitBO.CbTargetProfitManual := True,
         m_oPrjBC.CbPostSalesProfit(m_oProfitBO, m_oPrjBO),
         writeln('Manueller Projekt-Erlös für Projekt Nr.' + Str(nProjectID) + ' angelegt'),

      always,
         DestroyObject(m_oPrjBC),
         DestroyObject(m_oPrjBO),
         if not empty(m_oTskBO) then
            DestroyObject(m_oTskBO),
         endif,
         if not empty(m_oEffBO) then
            DestroyObject(m_oEffBO),
         endif,
         DestroyObject(m_oPstBO),
         DestroyObject(m_oProfitBO),
      stopseq,

      DbCommit(m_oDM.AdsConnection),
   always
      if DbInTrans(m_oDM.AdsConnection) then
         DbRollback(m_oDM.AdsConnection),
         DbResetDm(m_oDM),
      endif,
   stopseq,
always
   BeClose(m_oDab262),
   DestroyObject(m_oDM),
stopseq,

Weitere Verknüpfungen

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.