- 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] ->