<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=UpdatePriority</id>
	<title>UpdatePriority - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/index.php?action=history&amp;feed=atom&amp;title=UpdatePriority"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=UpdatePriority&amp;action=history"/>
	<updated>2026-08-23T15:24:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=UpdatePriority&amp;diff=4050&amp;oldid=prev</id>
		<title>Admin: 2 revisions imported</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=UpdatePriority&amp;diff=4050&amp;oldid=prev"/>
		<updated>2016-04-06T20:39:37Z</updated>

		<summary type="html">&lt;p&gt;2 revisions imported&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &amp;lt;nowiki&amp;gt;=head1 NAME&lt;br /&gt;
 &lt;br /&gt;
   RT::Action::UpdatePriority&lt;br /&gt;
 &lt;br /&gt;
 =head1 DESCRIPTION&lt;br /&gt;
 &lt;br /&gt;
 UpdatePriority is a ScriptAction that updates the priority of a ticket&lt;br /&gt;
 to match that of the queue it is in. UpdatePriority is supposed to be&lt;br /&gt;
 called by an RT escalation tool, such as rt-crontool. It makes it&lt;br /&gt;
 possible to move a ticket from one queue to another, and have the&lt;br /&gt;
 ticket&amp;#039;s priority updated.&lt;br /&gt;
 &lt;br /&gt;
 Here&amp;#039;s an example: Suppose you have tree queues. One where the tickets&lt;br /&gt;
 are due in 7 days, one where they are due in 14 days and one where&lt;br /&gt;
 they are due in 30 days. If you now wanted to move tickets from one&lt;br /&gt;
 queue to another, the due date for the tickets would be wrong. You&lt;br /&gt;
 would then run this ScriptAction to update the priority in the moved&lt;br /&gt;
 tickets.&lt;br /&gt;
 &lt;br /&gt;
 UpdatePriority will change the ticket&amp;#039;s priority to satisfy this&lt;br /&gt;
 equation:&lt;br /&gt;
 &lt;br /&gt;
 priority =&lt;br /&gt;
 (FinalPriority / DefaultDueIn) * (today - Created) + InitialPriority&lt;br /&gt;
 &lt;br /&gt;
 =cut&lt;br /&gt;
 &lt;br /&gt;
 package RT::Action::UpdatePriority;&lt;br /&gt;
 require RT::Action::Generic;&lt;br /&gt;
 &lt;br /&gt;
 use strict;&lt;br /&gt;
 &lt;br /&gt;
 use vars qw(@ISA);&lt;br /&gt;
 @ISA = qw(RT::Action::Generic);&lt;br /&gt;
 &lt;br /&gt;
 # What does this Action do?&lt;br /&gt;
 sub Describe {&lt;br /&gt;
     my $self = shift;&lt;br /&gt;
     return ref $self .&lt;br /&gt;
     &amp;quot; updates a ticket&amp;#039;s priority to match that of the queue it is in&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 use constant SECONDS_PER_DAY =&amp;amp;gt; 60 * 60 * 24;&lt;br /&gt;
 &lt;br /&gt;
 sub Prepare {&lt;br /&gt;
     my $self = shift;&lt;br /&gt;
     my $final_priority = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;QueueObj-&amp;amp;gt;FinalPriority();&lt;br /&gt;
     my $initial_priority = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;QueueObj-&amp;amp;gt;InitialPriority();&lt;br /&gt;
     my $created = RT::Date-&amp;amp;gt;new($self-&amp;amp;gt;TicketObj-&amp;amp;gt;CurrentUser());&lt;br /&gt;
     $created-&amp;amp;gt;Set(Format =&amp;amp;gt; &amp;#039;sql&amp;#039;,&lt;br /&gt;
        Value =&amp;amp;gt; $self-&amp;amp;gt;TicketObj-&amp;amp;gt;Created());&lt;br /&gt;
     my $priority = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority();&lt;br /&gt;
     my $default_due_in = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;QueueObj-&amp;amp;gt;DefaultDueIn();&lt;br /&gt;
     my $due = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;DueObj();&lt;br /&gt;
     my $today = RT::Date-&amp;amp;gt;new($self-&amp;amp;gt;TicketObj-&amp;amp;gt;CurrentUser());&lt;br /&gt;
     $today-&amp;amp;gt;SetToNow();&lt;br /&gt;
 &lt;br /&gt;
     return 0 if ($priority &amp;amp;gt; $final_priority);&lt;br /&gt;
 &lt;br /&gt;
     # -1 means that the ticket has no due date at all. We leave such&lt;br /&gt;
     # tickets alone.&lt;br /&gt;
     return 0 if ($due-&amp;amp;gt;Unix == -1);&lt;br /&gt;
 &lt;br /&gt;
     my $diff_in_days = int($today-&amp;amp;gt;Diff($created) / SECONDS_PER_DAY);&lt;br /&gt;
 &lt;br /&gt;
     my $new_priority =&lt;br /&gt;
     int(($final_priority / $default_due_in) * $diff_in_days) +&lt;br /&gt;
     $initial_priority;&lt;br /&gt;
 &lt;br /&gt;
     $new_priority = $final_priority if ($new_priority &amp;amp;gt; $final_priority);&lt;br /&gt;
 &lt;br /&gt;
     if ($new_priority != $priority) {&lt;br /&gt;
         $self-&amp;amp;gt;{prio} = $new_priority;&lt;br /&gt;
         return 1;&lt;br /&gt;
     }&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 sub Commit {&lt;br /&gt;
     my $self = shift;&lt;br /&gt;
 &lt;br /&gt;
     my ($val, $msg) = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;SetPriority($self-&amp;amp;gt;{prio});&lt;br /&gt;
 &lt;br /&gt;
     unless ($val) {&lt;br /&gt;
     $RT::Logger-&amp;amp;gt;debug($self . &amp;quot; $msg\n&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 1;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== updated ===&lt;br /&gt;
&lt;br /&gt;
Pulled into VIM so I could strip out the tabs and wikify the whole thing. -- [[AndyHarrison]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>