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
Eigenschaft | Beschreibung |
---|---|
CbDataModule:O | Daten-Modul des Controllers. |
Funktionen
Funktion | Parameter | Beschreibung |
---|---|---|
CbInsertTaskAfterCurrent():N Fügt einen neuen Vorgang in den Vorgangs-Baum ein. | aProjectBo:O | Projekt Business Objekt (auf Projekt positioniert) |
aTaskBo:O | Vorgangs 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. | aProjectBo:O | Projekt Business Objekt (auf Projekt positioniert) |
aTaskBo:O | Vorgangs Business Objekt. | |
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. | aTaskBo:O | Vorgangs 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:O | Vorgangs 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:O | Vorgangs 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:O | Vorgangs 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:O | Vorgangs 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:O | Vorgangs 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:O | Projekt Business Objekt (auf Projekt positioniert) |
aTaskBo:O | Vorgangs Business Objekt (auf Vorgang positioniert) | |
aTaskEffortBo:O | Vorgangs-Leistungs Business Objekt, positioniert auf die Vorgangs-Leistung, für die die Buchung erstellt wird. | |
aPostingDate:D | Datum der Buchung | |
aMinutes:N | Ist-Menge (in Minuten) der Buchung | |
aComment:C | Buchungs-Kommentar | |
CbCreateNewProjectFromTemplate:N Kopiert ein vorhandenes Projekt inkl. aller Projekt-Vorgänge und Vorgangs-Leistungen. | aSourceProjectID:N | ID des Projekts, das als Vorlage für die Kopie dienen soll |
aTargetProjectBO:O | Ziel 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 | |
pftDefault | Projekt kopieren | |
pftTasks | Vorgänge kopieren | |
pftTaskEfforts | Leistungen kopieren (nur ivm. pftTasks möglich) | |
CbCreateSalesProfit:L Erstellt einen neuen Projekt-Erlös (Business Objekt bleibt im Bearbeitungs-Modus) | aSalesProfitBO:O | Projekt-Erlöse Business Objekt |
aProjectID:N | ID des Projekts | |
CbEditSalesProfit:L Versetzt einen bestehenden Projekt-Erlös in den Bearbeitungs-Modus | aSalesProfitBO:O | Projekt-Erlöse Business Objekt, das bearbeitet werden soll |
CbDeleteSalesProfit:L Löscht einen Projekt-Erlös | aSalesProfitBO:O | Projekt-Erlöse Business Objekt (Positioniert auf den zu löschenden Erlös) |
aProjectBO:O | Ziel Projekt Business Objekt | |
CbPostSalesProfit:L Speichert einen Projekt-Erlös | aSalesProfitBO:O | Projekt-Erlöse Business Objekt |
aProjectBO:O | Ziel Projekt Business Objekt | |
CbCancelSalesProfit:L Änderung am Projekt-Erlös verwerfen | aSalesProfitBO:O | Projekt-Erlöse Business Objekt |
CbAutoCalcSalesProfit:L Berechnet automatisch alle Erlöse für ein Projekt. | aProjectBO:O | Ziel Projekt Business Objekt |
aSalesProfitBO:O | Projekt-Erlöse Business Objekt |
Aufbau der Projektverwaltung
Beispiel
| 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,