[Rt-commit] r2285 - in rt/branches/3.4-RELEASE: . docs/design_docs

jesse at bestpractical.com jesse at bestpractical.com
Sat Mar 5 20:11:52 EST 2005


Author: jesse
Date: Sat Mar  5 20:11:52 2005
New Revision: 2285

Added:
   rt/branches/3.4-RELEASE/docs/design_docs/realflow.txt
   rt/branches/3.4-RELEASE/docs/design_docs/rt-mvc
Modified:
   rt/branches/3.4-RELEASE/   (props changed)
Log:
 r6290 at hualien:  jesse | 2005-03-05 19:06:54 -0500
 random design docs


Added: rt/branches/3.4-RELEASE/docs/design_docs/realflow.txt
==============================================================================
--- (empty file)
+++ rt/branches/3.4-RELEASE/docs/design_docs/realflow.txt	Sat Mar  5 20:11:52 2005
@@ -0,0 +1,191 @@
+- 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.
+}
+
+- The user of OrderRequest queue needs to fill a numeric "CF",
+  called "Price".
+- On creation, it needs to create following approvals:
+    - "Manager" approval if CF.Price is > 1000
+    - "President" approval if CF.Price is > 2000
+- When all of "M", "P" are resolved (if any, or if there were none
+  to begin with), Create a new approval, "Finance".
+- If any approvals above is rejected, reject the original ticket.
+- If "Finance" is resolved, resolve original ticket.
+- If "Finance" is rejected, create an approval for "CEO".
+- If "CEO" is resolved, resolve the original ticket.
+- If "CEO" is rejected, reject the original ticket.
+
+[RuleAction CreateTicketWithRuleset]
+  -> ReleaseMyLockOnRuleset $ruleset
+  -> UnlessLockOnRuleset $ruleset
+     # i.e. if no active tickets still have a lock on it
+     -> ForceCreateTicketWithRuleset $ruleset
+
+[Queue OrderRequest]
+  -> Condition: OnCreate
+     Action: AddTicketRuleSet "PurchaseApproval"
+             # Triggers immediately
+
+[RuleSet: PurchaseApproval]
+  -> Condition: OnCreate 
+     Condition: CF.Price > 1000
+     Action: CreateTicketWithRuleset "ManagerApproval"
+  -> Condition: OnCreate 
+     Condition: CF.Price > 2000
+     Action: CreateTicketWithRuleset "PresidentApproval"
+  -> Condition: OnCreate 
+     Action: CreateTicketWithRuleset "FinanceApproval"
+  -> Condition: OnReject
+     Action: DeleteTree
+
+[RuleSet: ManagerApproval]
+  -> Condition: OnCreate
+     Action: Prohibit Ruleset "FinanceApproval"
+  -> Condition: OnResolve
+     Action: CreateTicketWithRuleset "FinanceApproval"
+  -> Condition: OnReject
+     Action: RejectTicket TOP
+
+[RuleSet: PresidentApproval]
+  -> Condition: OnCreate
+     Action: Prohibit CreateTicketWithRuleset "FinanceApproval"
+  -> Condition: OnResolve
+     Action: CreateTicketWithRuleset "FinanceApproval"
+  -> Condition: OnReject
+     Action: RejectTicket TOP
+
+[RuleSet: FinanceApproval]
+  -> Condition: OnCreate
+     Action: Prohibit RuleSet "CEOApproval"
+  -> Condition: OnResolve
+     Action: ResolveTicket TOP
+  -> Condition: OnReject
+     Action: CreateTicketWithRuleset "CEOApproval"
+
+[RuleSet: CEOApproval]
+  -> Condition: OnResolve
+     Action: ResolveTicket TOP
+  -> Condition: OnReject
+     Action: RejectTicket TOP
+
+
+
+Prohibit Ticket Operation:
+		Ruleset CEOApproval
+
+
+
+
+
+
+
+      ,--------.
+[TOP] --> [M] --> [F]
+    ` `-> [P] -'
+     `
+      `-> [X] --> [Y]
+  
+
+[TOP] => [Approval]
+            -> Queue: B
+              -> Rule: yyy
+            -> Workflow: W
+              -> Stage: Approval
+              -> Rule: xxx
+
+isa_ok( $Approval->Type, 'RT::Ticket' );
+is( $Approval->Workflow->Name, 'W' );
+is( $Approval->Stage->Name, 'Approval' );
+
+[Queue: A]
+  -> Workflow: W
+
+[Workflow: W]
+  -> Stage: TOP
+  -> Stage: Approval
+  -> Stage: SUCCESS
+  -> Stage: FAIL
+
+"RuleCollections"
+
+[Stage: TOP]
+  -> Rule: OnCreate RunStage Approval
+
+ok( TicketA->Rules->HasEntry($ApprovalRule) )
+ok( TicketB->Rules->HasEntry($ApprovalRule) )
+
+[Rule: Approval]
+  -> Rule: OnResolve RunStage SUCCESS
+  -> Rule: OnReject RunStage FAIL
+
+[Stage: SUCCESS]
+  -> Rule: OnCreate SetStatus('resolved') TOP
+
+[Stage: FAIL]
+  -> Rule: OnCreate SetStatus('rejected') TOP
+
+[Unassociated]
+  - Rule FOO: OnAnything {
+        CreateTicketIfNotBlocked StageFOO
+        AddLink DependedOnBy TOP to Stage1
+        AssignRule DoStage2 to Stage1
+        AssignRule DoStage3 to Stage1
+    }
+  - Rule BAR: OnAnything {
+        CreateTicketIfNotBlocked StageBAR
+        DoSomethingBizzare
+    }
+
+     ,==> [Stage0] ==>.
+    ,                  .
+[TOP] ==> [Stage1] ==> [Stage3]
+    `                  '
+     `==> [Stage2] ==>'
+
+OnTransaction:
+    $self->Ticket->Queues->Scrips->Apply
+
+OnTransaction:
+    $self->Ticket->Queues->Scrips->Apply
+                 ->Scrips->Apply
+
+OnTransaction:
+    $self->Ticket->Queues->Scrips->Apply
+                 ->Stages->Scrips->Apply
+
+[QueueX]
+ - Rule:
+    OnCreate: 
+        RunRule FOO
+
+[QueueY]
+ - Rule:
+    OnWhatever: 
+        RunRule FOO
+
+
+[TOP] => [Stage1] => [Stage2] => [END]
+               `- => [Stage3] => [END]
+                ` -> [Stage4]
+
+[Stages]
+ -> 

Added: rt/branches/3.4-RELEASE/docs/design_docs/rt-mvc
==============================================================================
--- (empty file)
+++ rt/branches/3.4-RELEASE/docs/design_docs/rt-mvc	Sat Mar  5 20:11:52 2005
@@ -0,0 +1,32 @@
+Goals:
+
+
+	Never write an init block for a page that just views/edits pages
+	No style embedded in view/edit pages
+
+	Validation / Error display and re-editing.   
+
+
+Implementation.
+
+
+	For a given object's fields:
+
+	print a label for the field
+	print the current values for the field
+	print an edit widget for create
+	print an edit widget for update 
+
+
+
+	for a given form buttons for "perform the action" "don't perform the main action"
+
+
+Edit widgets
+
+
+	text input
+	hidden
+	fixed enum as { dropdown, select multiple, sleect single, radio} 
+	checkbox  	fixed enum
+


More information about the Rt-commit mailing list