<?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=Rt-askForFeedback</id>
	<title>Rt-askForFeedback - 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=Rt-askForFeedback"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=Rt-askForFeedback&amp;action=history"/>
	<updated>2026-08-22T05:29:39Z</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=Rt-askForFeedback&amp;diff=3238&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=Rt-askForFeedback&amp;diff=3238&amp;oldid=prev"/>
		<updated>2016-04-06T20:36:20Z</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;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Installation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
1. Create a Global &amp;quot;Custom Field&amp;quot; with the Name: &amp;quot;Reminder4Stalled&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. Place this script somewhere on a server:&lt;br /&gt;
 #!/usr/bin/perl -w&lt;br /&gt;
 &lt;br /&gt;
  # This Script bases on:&lt;br /&gt;
  # http://requesttracker.wikia.com/wiki/RtUnifiedreminder&lt;br /&gt;
  &lt;br /&gt;
  ###############################################&lt;br /&gt;
  ### Author: Pascal Wagenhofer / Q-X GmbH, Switzerland&lt;br /&gt;
  ### Email: wagenhofer@q-x.ch&lt;br /&gt;
  ### Date: 07/15/2013&lt;br /&gt;
  ###############################################&lt;br /&gt;
  ### This script is provided &amp;quot;as it is&amp;quot; and comes without any warranty. Use it, modify&lt;br /&gt;
  ### it or do whatever you want with it.&lt;br /&gt;
  ###############################################&lt;br /&gt;
  ### Feedback is always welcome at wagenhofer@q-x.ch&lt;br /&gt;
  ###############################################&lt;br /&gt;
  &lt;br /&gt;
  ### INSTALLATION ###&lt;br /&gt;
  ### Read http://requesttracker.wikia.com/wiki/Rt-askForFeedback&lt;br /&gt;
  &lt;br /&gt;
  # RT3 reminder script&lt;br /&gt;
  # One big reminder report about ALL tickets that are getting to be too long since LastUpdated&lt;br /&gt;
  # Sends multipart HTML + plaintext email, so HTML capable mail readers can click links&lt;br /&gt;
  # Many pieces cannibalized from the other reminder scripts in the wiki.&lt;br /&gt;
  &lt;br /&gt;
  # You will run this script from cron as a user with perms to read the RT_SiteConfig.pm config file&lt;br /&gt;
  # Crontab would look like this to run twice a day, at 10:15am and 3:15pm&lt;br /&gt;
  ## send unified remind email twice per day&lt;br /&gt;
  #15 10 * * * /home/crystalfontz/scripts/rt_reminder2cust.pl&lt;br /&gt;
  &lt;br /&gt;
  # This Script bases on:&lt;br /&gt;
  # http://requesttracker.wikia.com/wiki/RtUnifiedreminder&lt;br /&gt;
  &lt;br /&gt;
  ### Configuration&lt;br /&gt;
  &lt;br /&gt;
  # Location of RT3&amp;#039;s libs -- Change this to where yours are&lt;br /&gt;
  use lib (&amp;quot;/usr/share/request-tracker3.8/lib&amp;quot;, &amp;quot;/usr/local/share/request-tracker3.8/lib&amp;quot;, &amp;quot;/usr/local/rt/lib&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  # Address emails should originate from&lt;br /&gt;
  my($from) = &amp;#039;Ticket Sys &amp;lt;your@mail.ticketsys.com&amp;gt;&amp;#039;;&lt;br /&gt;
  &lt;br /&gt;
  # maximum number of seconds since LastUpdated, beyond which the ticket will be reported&lt;br /&gt;
  my %max_untouched_ages = (&lt;br /&gt;
                            &amp;quot;stalled&amp;quot; =&amp;gt; 60 * 60 * 24 * 3,  # 3 days before warn about stalled&lt;br /&gt;
                            &amp;quot;2beclosed&amp;quot; =&amp;gt; 60 * 60 * 24 * 3,  # 3 days before warn about stalled&lt;br /&gt;
                           );&lt;br /&gt;
  &lt;br /&gt;
  # Queues to operate on. Default is all&lt;br /&gt;
  # my @goodqueues = qw[ThisQueue ThatQueue]; # to look only in specific queues, uncomment this line and comment the next one&lt;br /&gt;
  my @goodqueues = (); # leave like this to look in all queues&lt;br /&gt;
  &lt;br /&gt;
  # Queues to skip. Default is none. Use either @goodqueues or @badqueues, not both.&lt;br /&gt;
  # my @badqueues = qw[ ]; # If you have no queues to exclude, uncomment this line and comment the next one&lt;br /&gt;
  #my @badqueues = qw[Ignoreme IgnoreAnother]; # To exclude certain queues, list them here and comment line above&lt;br /&gt;
  &lt;br /&gt;
  my($debug) = 0; # nonzero will print plaintext report to STOUT instead of emailing it&lt;br /&gt;
  &lt;br /&gt;
  # The length at which lines for plaintext mail will be truncated. 78, or thereabouts looks&lt;br /&gt;
  # best for most people. Setting to 0 will stop lines being truncated.&lt;br /&gt;
  my($linelen) = 78; # has no effect on HTML mail&lt;br /&gt;
  &lt;br /&gt;
  #Enter here the path/url for the REST-API of Request Tracker&lt;br /&gt;
  my($apiurl) = &amp;quot;https://your.url.tld/rt3/REST/1.0/&amp;quot;;&lt;br /&gt;
  my($username) = &amp;quot;username&amp;quot;; #Username to access RT3 (needs to have rights to update CF in the appropriate Queue(s)&lt;br /&gt;
  my($password) = &amp;quot;password&amp;quot;; #Password of the above username&lt;br /&gt;
  my($agentname) = &amp;quot;Your LWP::Agent-Name&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
  #Mail-Section&lt;br /&gt;
  my $plainbody = &amp;quot;your Body of the E-Mail (Plaintext)&amp;quot;;&lt;br /&gt;
  my $subjectline = &amp;quot;Your subject of the e-mail to the customer&amp;quot;; #Example: &amp;quot;[TicketSys #$ticketNumber] $subject&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  ### Code&lt;br /&gt;
  &lt;br /&gt;
  use strict;&lt;br /&gt;
  use Carp;&lt;br /&gt;
  use MIME::Lite;&lt;br /&gt;
  use URI::Escape;&lt;br /&gt;
  use LWP;&lt;br /&gt;
  &lt;br /&gt;
  # Pull in the RT stuff&lt;br /&gt;
  package RT;&lt;br /&gt;
  use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc);&lt;br /&gt;
  &lt;br /&gt;
  CleanEnv();       # Clean our the environment&lt;br /&gt;
  RT::LoadConfig(); # Load the RT configuration&lt;br /&gt;
  RT::Init();       # Initialise RT&lt;br /&gt;
  &lt;br /&gt;
  use RT::Date;&lt;br /&gt;
  use RT::Queue;&lt;br /&gt;
  use RT::Queues;&lt;br /&gt;
  use RT::Tickets;&lt;br /&gt;
 &lt;br /&gt;
  my $max_age = 0;&lt;br /&gt;
 &lt;br /&gt;
  my $user = new RT::User($RT::SystemUser); # Define an RT User variable&lt;br /&gt;
  my $tickets = new RT::Tickets($RT::SystemUser); # Used to store Ticket search results&lt;br /&gt;
  my $date = new RT::Date($RT::SystemUser); # Define a date variable (used for comparisions)&lt;br /&gt;
  my $now = new RT::Date($RT::SystemUser); # get current time&lt;br /&gt;
  $now-&amp;gt;SetToNow();&lt;br /&gt;
  &lt;br /&gt;
  # Limit the ticket search to new and open only.&lt;br /&gt;
  $tickets-&amp;gt;LimitCustomField(&lt;br /&gt;
 	CUSTOMFIELD =&amp;gt; &amp;#039;Reminder4Stalled&amp;#039;,&lt;br /&gt;
 		OPERATOR =&amp;gt; &amp;#039;!=&amp;#039;,&lt;br /&gt;
 		VALUE =&amp;gt; &amp;#039;1&amp;#039;&lt;br /&gt;
  );&lt;br /&gt;
  $tickets-&amp;gt;LimitStatus(VALUE =&amp;gt; &amp;#039;stalled&amp;#039;);&lt;br /&gt;
  &lt;br /&gt;
  my $searchqueue = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
  &lt;br /&gt;
  if($#goodqueues != -1)&lt;br /&gt;
  {&lt;br /&gt;
      $tickets-&amp;gt;_OpenParen();&lt;br /&gt;
      foreach my $queue (@goodqueues)&lt;br /&gt;
      {&lt;br /&gt;
          $tickets-&amp;gt;LimitQueue(VALUE =&amp;gt; $queue, OPERATOR =&amp;gt; &amp;#039;=&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
      $tickets-&amp;gt;_CloseParen();&lt;br /&gt;
      $searchqueue = &amp;quot; AND (Queue = &amp;#039;&amp;quot;. join(&amp;quot;&amp;#039; OR Queue = &amp;#039;&amp;quot;, @goodqueues) .&amp;quot;&amp;#039;)&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif($#badqueues != -1)&lt;br /&gt;
  {&lt;br /&gt;
      foreach my $queue (@badqueues)&lt;br /&gt;
      {&lt;br /&gt;
          $tickets-&amp;gt;LimitQueue(VALUE =&amp;gt; $queue, OPERATOR =&amp;gt; &amp;#039;!=&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
      $searchqueue = &amp;quot; AND Queue != &amp;#039;&amp;quot;. join(&amp;quot;&amp;#039; AND Queue != &amp;#039;&amp;quot;, @badqueues) .&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  $tickets-&amp;gt;OrderByCols( {FIELD =&amp;gt; &amp;#039;Status&amp;#039;, ORDER =&amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                         {FIELD =&amp;gt; &amp;#039;queue&amp;#039;, ORDER =&amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                         {FIELD =&amp;gt; &amp;#039;Priority&amp;#039;, ORDER =&amp;gt; &amp;#039;DESC&amp;#039;},&lt;br /&gt;
                         {FIELD =&amp;gt; &amp;#039;LastUpdated&amp;#039;, ORDER =&amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                        );&lt;br /&gt;
 &lt;br /&gt;
  # We might not want to print the message if there are no tickets&lt;br /&gt;
  my($printmsg) = 0;&lt;br /&gt;
 &lt;br /&gt;
  my $j = 0;&lt;br /&gt;
  my $bgcolor = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
  my $last_status = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
  my $status_title = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
  my $count_by_status = 0;&lt;br /&gt;
  my $searchURL = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
  # Loop through tickets for reminder&lt;br /&gt;
  while (my $Ticket = $tickets-&amp;gt;Next)&lt;br /&gt;
  {&lt;br /&gt;
      # Compare Dates to see if LastUpdated date is old enough to report&lt;br /&gt;
      $max_age = $max_untouched_ages{$Ticket-&amp;gt;Status} || 0;&lt;br /&gt;
      my $max_age_2resolve = $max_untouched_ages{&amp;#039;2beclosed&amp;#039;} || 0;&lt;br /&gt;
  &lt;br /&gt;
      $date-&amp;gt;Set(Format =&amp;gt; &amp;quot;ISO&amp;quot;, Value =&amp;gt; $Ticket-&amp;gt;LastUpdated);&lt;br /&gt;
      if ($now-&amp;gt;Unix - $date-&amp;gt;Unix &amp;lt; $max_age) { next; } # skip it if too young&lt;br /&gt;
      $j++;&lt;br /&gt;
  &lt;br /&gt;
      $user-&amp;gt;Load($Ticket-&amp;gt;Owner);&lt;br /&gt;
      &lt;br /&gt;
 	use LWP;&lt;br /&gt;
 	my $ua = LWP::UserAgent-&amp;gt;new;&lt;br /&gt;
 	$ua-&amp;gt;timeout(10);&lt;br /&gt;
 	$ua-&amp;gt;agent($agentname);&lt;br /&gt;
 	my $uri = $apiurl;&lt;br /&gt;
 	my $access_user = $username;&lt;br /&gt;
 	my $access_password = $password;&lt;br /&gt;
 	my $ticketNumber = $Ticket-&amp;gt;{values}-&amp;gt;{&amp;#039;id&amp;#039;};&lt;br /&gt;
 	my @customermail = &amp;quot;&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
      my $response = $ua-&amp;gt;post($uri.&amp;quot;ticket/$ticketNumber/edit&amp;quot;,&lt;br /&gt;
    [&amp;#039;user&amp;#039; =&amp;gt; $access_user, &amp;#039;pass&amp;#039; =&amp;gt; $access_password,&lt;br /&gt;
     &amp;#039;content&amp;#039; =&amp;gt; &amp;#039;CF.{Reminder4Stalled}: 1&amp;#039;]);&lt;br /&gt;
     &lt;br /&gt;
     if ($response-&amp;gt;is_success) {&lt;br /&gt;
  &lt;br /&gt;
      if($Ticket-&amp;gt;Status ne $last_status)&lt;br /&gt;
      { &lt;br /&gt;
          $last_status = $Ticket-&amp;gt;Status;&lt;br /&gt;
  &lt;br /&gt;
          $count_by_status = 0; # reset on every difft status&lt;br /&gt;
 &lt;br /&gt;
          # get a date object that can give us the datetime cutoff for this query&lt;br /&gt;
          $date-&amp;gt;SetToNow();&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      # Use our own date formatting routine&lt;br /&gt;
      my($updated) = &amp;amp;formatDate($Ticket-&amp;gt;LastUpdatedObj-&amp;gt;Unix);&lt;br /&gt;
      my($subject) = $Ticket-&amp;gt;Subject ? $Ticket-&amp;gt;Subject : &amp;quot;(No subject)&amp;quot;;&lt;br /&gt;
      my($queue) = substr($Ticket-&amp;gt;QueueObj-&amp;gt;Name, 0, 7);&lt;br /&gt;
  &lt;br /&gt;
      my($line) = sprintf &amp;quot;%5d  %-7s %3d  %-13s %-7s %-6s %-30s&amp;quot;,&lt;br /&gt;
                           $Ticket-&amp;gt;Id, $Ticket-&amp;gt;Status, $Ticket-&amp;gt;Priority, $updated, $queue, $user-&amp;gt;Name, $subject;&lt;br /&gt;
  &lt;br /&gt;
      # Truncate lines if required&lt;br /&gt;
      if($linelen)&lt;br /&gt;
      {&lt;br /&gt;
          $line = substr($line, 0, $linelen);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      # ---- GET ALL REQUESTORS&lt;br /&gt;
 	my $response = $ua-&amp;gt;post($uri.&amp;quot;ticket/$ticketNumber&amp;quot;,&lt;br /&gt;
 	[&amp;#039;user&amp;#039; =&amp;gt; $access_user, &amp;#039;pass&amp;#039; =&amp;gt; $access_password]);&lt;br /&gt;
 &lt;br /&gt;
 	if ($response-&amp;gt;is_success) {&lt;br /&gt;
 	my $html = $response-&amp;gt;decoded_content;&lt;br /&gt;
 	my @array1=split(/\n/,$html);&lt;br /&gt;
 	my @array2=split(/Requestors: (.*)/,$array1[11]);&lt;br /&gt;
 	if ($#array2 &amp;gt; 1) {&lt;br /&gt;
 		@customermail=split(m/\ (.*)/,$array2[1]);&lt;br /&gt;
 	} else {&lt;br /&gt;
 		@customermail=$array2[1];&lt;br /&gt;
 	}&lt;br /&gt;
 	&lt;br /&gt;
 	# ----- END GET ALL REQUESTORS&lt;br /&gt;
 &lt;br /&gt;
 	my $receiviers = &amp;quot;&amp;quot;;&lt;br /&gt;
 	my $sendto = $array2[1];&lt;br /&gt;
 	&lt;br /&gt;
 	my $subjecttot = $subjectline;&lt;br /&gt;
 	&lt;br /&gt;
 	my $msg = MIME::Lite-&amp;gt;new(From    =&amp;gt; $from,&lt;br /&gt;
                            To      =&amp;gt;  join(&amp;#039;,&amp;#039;, $sendto),&lt;br /&gt;
                            Subject =&amp;gt; $subjecttot,&lt;br /&gt;
                            Type    =&amp;gt; &amp;#039;text/plain&amp;#039;,&lt;br /&gt;
                            Charset    =&amp;gt; &amp;#039;utf8&amp;#039;,&lt;br /&gt;
 			   Data	=&amp;gt; $plainbody);&lt;br /&gt;
  &lt;br /&gt;
      if ($debug)&lt;br /&gt;
      {&lt;br /&gt;
 	 print &amp;quot;Would send E-Mail for Ticket #&amp;quot;.$ticketNumber.&amp;quot;\n&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
 	$msg-&amp;gt;send;&lt;br /&gt;
      }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  $tickets = new RT::Tickets($RT::SystemUser); # Used to store Ticket search results&lt;br /&gt;
  $tickets-&amp;gt;LimitCustomField(&lt;br /&gt;
 	CUSTOMFIELD =&amp;gt; &amp;#039;Reminder4Stalled&amp;#039;,&lt;br /&gt;
 		OPERATOR =&amp;gt; &amp;#039;=&amp;#039;,&lt;br /&gt;
 		VALUE =&amp;gt; &amp;#039;1&amp;#039;&lt;br /&gt;
  );&lt;br /&gt;
 $searchqueue = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
  &lt;br /&gt;
  if($#goodqueues != -1)&lt;br /&gt;
  {&lt;br /&gt;
      $tickets-&amp;gt;_OpenParen();&lt;br /&gt;
      foreach my $queue (@goodqueues)&lt;br /&gt;
      {&lt;br /&gt;
          $tickets-&amp;gt;LimitQueue(VALUE =&amp;gt; $queue, OPERATOR =&amp;gt; &amp;#039;=&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
      $tickets-&amp;gt;_CloseParen();&lt;br /&gt;
      $searchqueue = &amp;quot; AND (Queue = &amp;#039;&amp;quot;. join(&amp;quot;&amp;#039; OR Queue = &amp;#039;&amp;quot;, @goodqueues) .&amp;quot;&amp;#039;)&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  elsif($#badqueues != -1)&lt;br /&gt;
  {&lt;br /&gt;
      foreach my $queue (@badqueues)&lt;br /&gt;
      {&lt;br /&gt;
          $tickets-&amp;gt;LimitQueue(VALUE =&amp;gt; $queue, OPERATOR =&amp;gt; &amp;#039;!=&amp;#039;);&lt;br /&gt;
      }&lt;br /&gt;
      $searchqueue = &amp;quot; AND Queue != &amp;#039;&amp;quot;. join(&amp;quot;&amp;#039; AND Queue != &amp;#039;&amp;quot;, @badqueues) .&amp;quot;&amp;#039;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
  $tickets-&amp;gt;OrderByCols( {FIELD =&amp;gt; &amp;#039;Status&amp;#039;, ORDER =&amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                         {FIELD =&amp;gt; &amp;#039;queue&amp;#039;, ORDER =&amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                         {FIELD =&amp;gt; &amp;#039;Priority&amp;#039;, ORDER =&amp;gt; &amp;#039;DESC&amp;#039;},&lt;br /&gt;
                         {FIELD =&amp;gt; &amp;#039;LastUpdated&amp;#039;, ORDER =&amp;gt; &amp;#039;ASC&amp;#039;},&lt;br /&gt;
                        );&lt;br /&gt;
 &lt;br /&gt;
  # We might not want to print the message if there are no tickets&lt;br /&gt;
 ($printmsg) = 0;&lt;br /&gt;
 &lt;br /&gt;
 $j = 0;&lt;br /&gt;
 $bgcolor = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
 $last_status = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
 $status_title = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
 $count_by_status = 0;&lt;br /&gt;
 $searchURL = &amp;#039;&amp;#039;;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
 # Loop through tickets to close&lt;br /&gt;
  while (my $Ticket = $tickets-&amp;gt;Next)&lt;br /&gt;
  {&lt;br /&gt;
      # Compare Dates to see if LastUpdated date is old enough to report&lt;br /&gt;
      $max_age = $max_untouched_ages{$Ticket-&amp;gt;Status} || 0;&lt;br /&gt;
      my $max_age_2resolve = $max_untouched_ages{&amp;#039;2beclosed&amp;#039;} || 0;&lt;br /&gt;
  &lt;br /&gt;
      $date-&amp;gt;Set(Format =&amp;gt; &amp;quot;ISO&amp;quot;, Value =&amp;gt; $Ticket-&amp;gt;LastUpdated);&lt;br /&gt;
      if ($now-&amp;gt;Unix - $date-&amp;gt;Unix &amp;lt; $max_age_2resolve) { next; } # skip it if too young&lt;br /&gt;
      $j++;&lt;br /&gt;
  &lt;br /&gt;
      $user-&amp;gt;Load($Ticket-&amp;gt;Owner);&lt;br /&gt;
 &lt;br /&gt;
      if($Ticket-&amp;gt;Status ne $last_status)&lt;br /&gt;
      { &lt;br /&gt;
          $last_status = $Ticket-&amp;gt;Status;&lt;br /&gt;
  &lt;br /&gt;
          $count_by_status = 0; # reset on every difft status&lt;br /&gt;
  &lt;br /&gt;
          # get a date object that can give us the datetime cutoff for this query&lt;br /&gt;
          $date-&amp;gt;SetToNow();&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      # Use our own date formatting routine&lt;br /&gt;
      my ($updated) = &amp;amp;formatDate($Ticket-&amp;gt;LastUpdatedObj-&amp;gt;Unix);&lt;br /&gt;
      my ($subject) = $Ticket-&amp;gt;Subject ? $Ticket-&amp;gt;Subject : &amp;quot;(No subject)&amp;quot;;&lt;br /&gt;
      my ($queue) = substr($Ticket-&amp;gt;QueueObj-&amp;gt;Name, 0, 7);&lt;br /&gt;
  &lt;br /&gt;
      my ($line) = sprintf &amp;quot;%5d  %-7s %3d  %-13s %-7s %-6s %-30s&amp;quot;,&lt;br /&gt;
                           $Ticket-&amp;gt;Id, $Ticket-&amp;gt;Status, $Ticket-&amp;gt;Priority, $updated, $queue, $user-&amp;gt;Name, $subject;&lt;br /&gt;
 			  &lt;br /&gt;
      if ($debug)&lt;br /&gt;
      {&lt;br /&gt;
 	 print &amp;quot;Would close Ticket &amp;quot;.$Ticket-&amp;gt;Id.&amp;quot;\n\n&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
 	  $Ticket-&amp;gt;Resolve();&lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
  # Disconnect before we finish off&lt;br /&gt;
  $RT::Handle-&amp;gt;Disconnect();&lt;br /&gt;
  exit 0;&lt;br /&gt;
  &lt;br /&gt;
  # Formats a date like: Thu 10-07-03&lt;br /&gt;
  # Designed to be consice yet useful&lt;br /&gt;
  sub formatDate() {&lt;br /&gt;
      my($unixtime) = @_;&lt;br /&gt;
      my(@days) = ( &amp;quot;Sun&amp;quot;, &amp;quot;Mon&amp;quot;, &amp;quot;Tue&amp;quot;, &amp;quot;Wed&amp;quot;, &amp;quot;Thu&amp;quot;, &amp;quot;Fri&amp;quot;, &amp;quot;Sat&amp;quot; );&lt;br /&gt;
      # Return an empty string if we haven&amp;#039;t been given a time&lt;br /&gt;
      return &amp;quot;&amp;quot; if $unixtime &amp;lt;= 0;&lt;br /&gt;
      my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($unixtime);&lt;br /&gt;
      return sprintf &amp;quot;%s %02d-%02d-%02d&amp;quot;, $days[$wday], $mon+1, $mday, $year%100;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
3. install a Cronjob on your server (see script head)&lt;br /&gt;
&lt;br /&gt;
4. Now, we need to setup a new Scrip to reset the &amp;quot;Reminder4Stalled&amp;quot;-Field in case of Correspondance. Create a new Scrip in the Global-Section which looks like this:&lt;br /&gt;
&lt;br /&gt;
Description: &amp;quot;Set Reminder4Stalled = 0&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
Condition: &amp;quot;On Correspondance&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
Action: &amp;quot;User defined&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
Template: &amp;quot;Global Template: empty&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
Phase: &amp;quot;TransactionCreate&amp;quot;&lt;br /&gt;
&lt;br /&gt;
User Defined Condition:&lt;br /&gt;
 return 1;&lt;br /&gt;
User Defined Action Preparation Code:&lt;br /&gt;
 my $ticket = $self-&amp;gt;TicketObj;&lt;br /&gt;
 my $cf_obj = RT::CustomField-&amp;gt;new($RT::SystemUser);&lt;br /&gt;
 my $cf_name = &amp;quot;Reminder4Stalled&amp;quot;;&lt;br /&gt;
 my $cf_value = &amp;quot;0&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 $cf_obj-&amp;gt;LoadByName( Name =&amp;gt; $cf_name );&lt;br /&gt;
 $RT::Logger-&amp;gt;debug( &amp;quot;Loaded \$cf_obj-&amp;gt;Name = &amp;quot;. $cf_obj-&amp;gt;Name() .&amp;quot;\n&amp;quot; );&lt;br /&gt;
 $ticket-&amp;gt;AddCustomFieldValue( Field=&amp;gt;$cf_obj, Value=&amp;gt;$cf_value,&lt;br /&gt;
 RecordTransaction=&amp;gt;0 );&lt;br /&gt;
User Defined Post Action Code:&lt;br /&gt;
 return 1;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>