<?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=EscalatePriority</id>
	<title>EscalatePriority - 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=EscalatePriority"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=EscalatePriority&amp;action=history"/>
	<updated>2026-08-24T00:32:02Z</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=EscalatePriority&amp;diff=1098&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=EscalatePriority&amp;diff=1098&amp;oldid=prev"/>
		<updated>2016-04-06T20:08:54Z</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;# BEGIN LICENSE BLOCK&lt;br /&gt;
 #&lt;br /&gt;
 # Copyright (c) 1996-2003 Jesse Vincent &amp;amp;lt;jesse@bestpractical.com&amp;amp;gt;&lt;br /&gt;
 #&lt;br /&gt;
 # (Except where explictly superceded by other copyright notices)&lt;br /&gt;
 #&lt;br /&gt;
 # This work is made available to you under the terms of Version 2 of&lt;br /&gt;
 # the GNU General Public License. A copy of that license should have&lt;br /&gt;
 # been provided with this software, but in any event can be snarfed&lt;br /&gt;
 # from www.gnu.org.&lt;br /&gt;
 #&lt;br /&gt;
 # This work is distributed in the hope that it will be useful, but&lt;br /&gt;
 # WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
 # General Public License for more details.&lt;br /&gt;
 #&lt;br /&gt;
 # Unless otherwise specified, all modifications, corrections or&lt;br /&gt;
 # extensions to this work which alter its source code become the&lt;br /&gt;
 # property of Best Practical Solutions, LLC when submitted for&lt;br /&gt;
 # inclusion in the work.&lt;br /&gt;
 #&lt;br /&gt;
 #&lt;br /&gt;
 # END LICENSE BLOCK&lt;br /&gt;
 =head1 NAME&lt;br /&gt;
 &lt;br /&gt;
  RT::Action::EscalatePriority&lt;br /&gt;
 &lt;br /&gt;
 =head1 DESCRIPTION&lt;br /&gt;
 &lt;br /&gt;
 EscalatePriority is a ScripAction which is NOT intended to be called per&lt;br /&gt;
 transaction. It&amp;#039;s intended to be called by an RT escalation daemon.&lt;br /&gt;
 (The daemon is called escalator).&lt;br /&gt;
 &lt;br /&gt;
 EsclatePriority uses the following formula to change a ticket&amp;#039;s priority:&lt;br /&gt;
 &lt;br /&gt;
    Priority = Priority +  (( FinalPriority - Priority ) / ( DueDate-Today))&lt;br /&gt;
 &lt;br /&gt;
  Unless the duedate is past, in which case priority gets bumped straight&lt;br /&gt;
 to final priority.&lt;br /&gt;
 &lt;br /&gt;
 In this way, priority is either increased or decreased toward the final priority&lt;br /&gt;
 as the ticket heads toward its due date.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 =cut&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 package RT::Action::EscalatePriority;&lt;br /&gt;
 require RT::Action::Generic;&lt;br /&gt;
 &lt;br /&gt;
 use strict;&lt;br /&gt;
 use vars qw/@ISA/;&lt;br /&gt;
 @ISA=qw(RT::Action::Generic);&lt;br /&gt;
 &lt;br /&gt;
 #Do what we need to do and send it out.&lt;br /&gt;
 &lt;br /&gt;
 #What does this type of Action does&lt;br /&gt;
 &lt;br /&gt;
 # {{{ sub Describe&lt;br /&gt;
 sub Describe  {&lt;br /&gt;
  my $self = shift;&lt;br /&gt;
  return (ref $self . &amp;quot; will move a ticket&amp;#039;s priority toward its final priority.&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 # }}}&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # {{{ sub Prepare&lt;br /&gt;
 sub Prepare  {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
 &lt;br /&gt;
    if ($self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority() == $self-&amp;amp;gt;TicketObj-&amp;amp;gt;FinalPriority()) {&lt;br /&gt;
        # no update necessary.&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    #compute the number of days until the ticket is due&lt;br /&gt;
    my $due = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;DueObj();&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
    # If we don&amp;#039;t have a due date, adjust the priority by one&lt;br /&gt;
    # until we hit the final priority&lt;br /&gt;
    if ($due-&amp;amp;gt;Unix() &amp;amp;lt; 1) {&lt;br /&gt;
      if ( $self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority &amp;amp;gt; $self-&amp;amp;gt;TicketObj-&amp;amp;gt;FinalPriority ){&lt;br /&gt;
          $self-&amp;amp;gt;{&amp;#039;prio&amp;#039;} = ($self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority - 1);&lt;br /&gt;
          return 1;&lt;br /&gt;
      } elsif ( $self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority &amp;amp;lt; $self-&amp;amp;gt;TicketObj-&amp;amp;gt;FinalPriority ){&lt;br /&gt;
           $self-&amp;amp;gt;{&amp;#039;prio&amp;#039;} = ($self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority + 1);&lt;br /&gt;
           return 1;&lt;br /&gt;
      }&lt;br /&gt;
      # otherwise the priority is at the final priority. we don&amp;#039;t need to&lt;br /&gt;
      # Continue&lt;br /&gt;
      else {&lt;br /&gt;
          return 0;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    # we&amp;#039;ve got a due date. now there are other things we should do&lt;br /&gt;
    else {&lt;br /&gt;
      my $diff_in_seconds = $due-&amp;amp;gt;Diff(time());&lt;br /&gt;
      my $diff_in_days = int( $diff_in_seconds / 86400);&lt;br /&gt;
 &lt;br /&gt;
      #if we haven&amp;#039;t hit the due date yet&lt;br /&gt;
      if ($diff_in_days &amp;amp;gt; 0 ) {&lt;br /&gt;
 &lt;br /&gt;
          # compute the difference between the current priority and the&lt;br /&gt;
          # final priority&lt;br /&gt;
 &lt;br /&gt;
          my $prio_delta =&lt;br /&gt;
            $self-&amp;amp;gt;TicketObj-&amp;amp;gt;FinalPriority() - $self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority;&lt;br /&gt;
 &lt;br /&gt;
          my $inc_priority_by = int( $prio_delta / $diff_in_days );&lt;br /&gt;
 &lt;br /&gt;
          #set the ticket&amp;#039;s priority to that amount&lt;br /&gt;
          $self-&amp;amp;gt;{&amp;#039;prio&amp;#039;} = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;Priority + $inc_priority_by;&lt;br /&gt;
 &lt;br /&gt;
      }&lt;br /&gt;
      #if $days is less than 1, set priority to final_priority&lt;br /&gt;
      else {&lt;br /&gt;
          $self-&amp;amp;gt;{&amp;#039;prio&amp;#039;} = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;FinalPriority();&lt;br /&gt;
      }&lt;br /&gt;
 &lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
 }&lt;br /&gt;
 # }}}&lt;br /&gt;
 &lt;br /&gt;
 sub Commit {&lt;br /&gt;
    my $self = shift;&lt;br /&gt;
   my ($val, $msg) = $self-&amp;amp;gt;TicketObj-&amp;amp;gt;SetPriority($self-&amp;amp;gt;{&amp;#039;prio&amp;#039;});&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;
 eval &amp;quot;require RT::Action::EscalatePriority_Vendor&amp;quot;;&lt;br /&gt;
 die $@ if ($@ &amp;amp;amp;&amp;amp;amp; $@ !~ qr{^Can&amp;#039;t locate RT/Action/EscalatePriority_Vendor.pm});&lt;br /&gt;
 eval &amp;quot;require RT::Action::EscalatePriority_Local&amp;quot;;&lt;br /&gt;
 die $@ if ($@ &amp;amp;amp;&amp;amp;amp; $@ !~ qr{^Can&amp;#039;t locate RT/Action/EscalatePriority_Local.pm});&lt;br /&gt;
 &lt;br /&gt;
 1;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>