summaryrefslogtreecommitdiff
path: root/rt/docs
diff options
context:
space:
mode:
authorivan <ivan>2007-08-02 19:56:20 +0000
committerivan <ivan>2007-08-02 19:56:20 +0000
commitef20b2b6b1feb47ad02b5ff7525f1a0fd11d0fa4 (patch)
treea2ea500cf510739908761a6bfbd14e990131f2cc /rt/docs
parenta513c0bef534d05f03c1242831b6f3be19b97dae (diff)
import rt 3.6.4
Diffstat (limited to 'rt/docs')
-rw-r--r--rt/docs/design_docs/ruleset-workflow.txt158
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.