Ächz...
Vereinfachen wir doch mal:
not_seen=0
accepted=1
rejected=2
=3
Also zB:
mgr:=@If(
signature_manager_approval != "" & signature_manager_reject!="";
3;
signature_manager_approval = "" & signature_manager_reject="";
0;
signature_manager_approval != "";
1;
2
);
So, jetzt sortieren und in 'WF-Pseudocode' darstellen:
@If (mgr=0;
"@mgr, new travel request to approve by manager";
@If (mgr=1 & dir=0 & director!="";
"@dir, new travel request to approve by director";
@If (mgr=1 & dir=0;
"@pre, new travel request to approve by president";
@If (mgr=2 & dir=0;
"@emp, your travel request has been rejected by manager";
@If (mgr=1 & dir=2;
"@emp, your travel request has been rejected by director";
@If (mgr=1 & dir=1 pre=2;
"@emp, your travel request has been rejected by president"
@If (mgr=1 & dir=1 & pre=1;
"@emp, your travel request is ready"
.....usw...
Aaaah jetzt ja! Genau diese Verwendung/Handhabung von Pseudocode (und das Debugging) ist der Grund, warum ich Workflow *immer* mit LS-OOP mache.
Block 3 ist die Ursache. Wenn der president auch director ist, dann kann er machen, was er will, an dieser Stelle bekommt er immer 'ne Nachricht... also
@If (mgr=1 & (dir=0 & director="") & pre=0;
"@pre, new travel request to approve by president";
Und dann fehlt vermutlich noch:
@If (mgr=1 & dir=1 & pre=0;
"@pre, new travel request to approve by president";
Kann man beides in einem Ausdruck zusammenziehen.
Es sind auch noch massig Redundanzen drin, zB
@If (mgr=1 & dir=2;
"@emp, your travel request has been rejected by director";
dir=2 sollte da eigentlich reichen,.... es sei denn, es ist was schiefgelaufen. Und das kriegst Du ohne Plausibilitätsprüfung kaum raus.
@If (mgr=2 & dir=0;
"@emp, your travel request has been rejected by manager";
...dito, oder kann der director approven, wenn der manager abgelehnt hat? das trifft dann aber auch auf den president zu.
Ob das alles (und alles 100%ig richtig) war, weiß ich nicht, soviel Zeit hab' ich leider nicht. Nochmal die Tips:
1) mit Symbolen/Variablen arbeiten
2) Plausibilitätsprüfung einbauen, Du hast nur recht wenig erlaubte Zustände
3) Nimm LS-OOP, das ist viel leichter wartbar.
4) Code entsteht auf dem Papier, nicht auf dem Rechner.
Viel Erfolg!