diff options
author | ivan <ivan> | 2007-08-02 19:56:20 +0000 |
---|---|---|
committer | ivan <ivan> | 2007-08-02 19:56:20 +0000 |
commit | ef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4 (patch) | |
tree | a2ea500cf510739908761a6bfbd14e990131f2cc /rt/docs | |
parent | a513c0bef534d05f03c1242831b6f3be19b97dae (diff) |
import rt 3.6.4
Diffstat (limited to 'rt/docs')
-rw-r--r-- | rt/docs/design_docs/ruleset-workflow.txt | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/rt/docs/design_docs/ruleset-workflow.txt b/rt/docs/design_docs/ruleset-workflow.txt new file mode 100644 index 0000000..f19dbd7 --- /dev/null +++ b/rt/docs/design_docs/ruleset-workflow.txt @@ -0,0 +1,158 @@ +# For an online version, see http://wiki.bestpractical.com/?RulesetWorkflow + +_*This is a design document for a work in progress. +It describes features that do not exist today and may never exist*_ + +== Text Description + +* The user of PurchaseOrder queue fill in a numeric "CF", called "Price". +* On creation, it needs to create following approvals: +** "ManagerApproval" if CF.Price is > 1000 +** "PresidentApproval" if CF.Price is > 2000 +* When all of "M", "P" are resolved (or if there were none to begin with), Create "FinanceApproval". +* If any approvals above is rejected, reject the original ticket. +* If "FinanceApproval" is resolved, resolve original ticket. +* If "FinanceApproval" is rejected, create an approval for "CEOApproval". +* If "CEOApproval" is resolved, resolve the original ticket. +* If "CEOApproval" is rejected, reject the original ticket. + +== ASCII Diagram + + ,----------. ,---------------------->[DONE] + | \ / ^ + [TOP]-+-?---->[M]---->[F] | + | | / \ | + `-?->[P]-+-' `-(!)->[C]-----------------' + | | | + | | `-(!)---------->[FAIL] + | | ^ + `-(!)----------------------------------' + +== Objects + +Note that "Scrips" are now called "Rules". + +=== RuleAction "AquireMyLocks" + + FOREACH $Scrip IN $TicketObj->Scrips + WHERE $Scrip.Action.Type == "TryCreateTicketWithRuleset" + DO LockRuleset $Scrip.Action.Argument + +=== RuleAction "TryCreateTicketWithRuleset" + + DO ReleaseMyLockOnRuleset $Argument + UNLESS RulesetLocked $Argument + DO CreateTicketWithRuleset $Argument + +=== RuleAction "CreateTicketWithRuleset" + + GIVEN $Ticket AS CreateTicket(@OtherArguments) + DO SetTicketRuleSet $Argument + DO RunTicketRuleSet $Argument + +=== GlobalRule "AquireLocks" + +* AppliesTo: All Objects +* Condition: OnCreate +* Action: AquireMyLocks + +=== Queue "PurchaseOrder" + +* Rule: +** Condition: OnCreate +** Action: SetTicketRuleSet "PurchaseFlow" +** Action: RunTicketRuleSet "PurchaseFlow" + +=== RuleSet "PurchaseFlow" + +* Rule (implicitly run by AcquireMyLocks): +** Condition: OnCreate +** Action: LockRuleSet "ManagerApproval" +** Action: LockRuleSet "PresidentApproval" +** Action: LockRuleSet "FinanceApproval" + +* Rule: +** Condition: OnCreate +** Condition: CF.Price > 1000 +** Action: TryCreateTicketWithRuleset "ManagerApproval" + +* Rule: +** Condition: OnCreate +** Condition: CF.Price > 2000 +** Action: TryCreateTicketWithRuleset "PresidentApproval" + +* Rule: +** Condition: OnCreate +** Condition: "Finance" is not blocked +** Action: TryCreateTicketWithRuleset "FinanceApproval" + +* Rule: +** Condition: OnReject +** Action: DeleteTree + +=== RuleSet: "ManagerApproval" + +* Rule (implicitly run by AcquireMyLocks): +** Condition: OnCreate +** Action: LockRuleSet "FinanceApproval" + +* Rule: +** Condition: OnResolve +** Action: TryCreateTicketWithRuleset "FinanceApproval" + +* Rule: +** Condition: OnReject +** Action: RejectTicket "PurchaseFlow" + +=== RuleSet: "PresidentApproval" + +* Rule (implicitly run by AcquireMyLocks): +** Condition: OnCreate +** Action: LockRuleSet "FinanceApproval" + +* Rule: +** Condition: OnResolve +** Action: TryCreateTicketWithRuleset "FinanceApproval" + +* Rule: +** Condition: OnReject +** Action: RejectTicket "PurchaseFlow" + +=== RuleSet: "FinanceApproval" + +* Rule: +** Condition: OnResolve +** Action: ResolveTicket "PurchaseFlow" + +* Rule: +** Condition: OnReject +** Action: ForceCreateTicketWithRuleset "CEOApproval" + +=== RuleSet: "CEOApproval" + +* Rule: +** Condition: OnResolve +** Action: ResolveTicket "PurchaseFlow" + +* Rule: +** Condition: OnReject +** Action: RejectTicket "PurchaseFlow" + +### FNORD FNORD FNORD FNORD FNORD FNORD FNORD FNORD FNORD ### + +== Another Text Description + +* I have a MonitoredQueue that sets tickets to "Monitored" if its subject matches /monitored/. +* I want to have a kind of Ticket that are 'Monitored'. +* I want all monitored tickets, when they are overdue for 14 days, to: +** Send notification to manager +** Mark as stalled +* I want all monitored tickets, when they are overdue for 28 days, to: +** Mark as rejected +* I want to query all tickets that are monitored as such +* I want to modify 14 => 15 and have it affect all existing tickets that are monitored +* I want to add a new "overdue for 27 days, add a 'ultimatum' correspondence to it" rule +** For all monitored tickets. +* I want to add a new "overdue for 27 days, add a 'ultimatum' correspondence to it" rule +** For all _new_ monitored tickets. +** Without affecting existing ones. |