diff options
Diffstat (limited to 'rt/docs/design_docs/realflow.txt')
-rw-r--r-- | rt/docs/design_docs/realflow.txt | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/rt/docs/design_docs/realflow.txt b/rt/docs/design_docs/realflow.txt new file mode 100644 index 000000000..3717e273b --- /dev/null +++ b/rt/docs/design_docs/realflow.txt @@ -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] + -> |