<?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=TimeWorked</id>
	<title>TimeWorked - 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=TimeWorked"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=TimeWorked&amp;action=history"/>
	<updated>2026-08-22T08:27:30Z</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=TimeWorked&amp;diff=3871&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=TimeWorked&amp;diff=3871&amp;oldid=prev"/>
		<updated>2016-04-06T20:39:28Z</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;[[TimeWorked]] report is a custom report used mainly by managers to find out how much time users spent solving tickets. It has been write for RT 3.6.1 . The code has been written by Şubredu Manuel (diablo - packages.ro) Code updated for RT-3.8.2 by Disaster&lt;br /&gt;
&lt;br /&gt;
INSTALL&lt;br /&gt;
&lt;br /&gt;
Add to /path/to/rt/share/html/Tools/Reports/Elements/Tabs the following content:&lt;br /&gt;
&lt;br /&gt;
 d =&amp;amp;gt; {&lt;br /&gt;
     title =&amp;amp;gt; loc(&amp;#039;Time worked&amp;#039;),&lt;br /&gt;
     path  =&amp;amp;gt; &amp;#039;Tools/Reports/TimeWorked.html&amp;#039;,&lt;br /&gt;
 },&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Add to /path/to/rt/share/html/Tools/Reports/index.html the following content:&lt;br /&gt;
&lt;br /&gt;
 D =&amp;amp;gt; {&lt;br /&gt;
     title       =&amp;amp;gt; loc(&amp;#039;Time worked&amp;#039;),&lt;br /&gt;
     path        =&amp;amp;gt; &amp;#039;/Tools/Reports/TimeWorked.html&amp;#039;,&lt;br /&gt;
     description =&amp;amp;gt; loc(&amp;#039;Show how much time has been worked on resolved tickets for a given interval&amp;#039;),&lt;br /&gt;
 },&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Now, create /path/to/rt/share/html/Tools/Reports/[[TimeWorked]].html with the following content:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;amp;lt;%args&amp;amp;gt;&lt;br /&gt;
  $StartDate =&amp;amp;gt; undef&lt;br /&gt;
  $EndDate   =&amp;amp;gt; undef&lt;br /&gt;
 &amp;amp;lt;/%args&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp; /Elements/Header, Title =&amp;amp;gt; $title &amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp; /Tools/Reports/Elements/Tabs, current_tab =&amp;amp;gt; &amp;#039;Tools/Reports/TimeWorked.html&amp;#039;, Title =&amp;amp;gt; $title &amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;hr&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;%init&amp;amp;gt;&lt;br /&gt;
 my ($start_date, $end_date, $title);&lt;br /&gt;
 &lt;br /&gt;
 $title = loc(&amp;#039;Time worked in all queues&amp;#039;);&lt;br /&gt;
 &lt;br /&gt;
 $start_date = RT::Date-&amp;amp;gt;new($session{&amp;#039;CurrentUser&amp;#039;});&lt;br /&gt;
 $end_date   = RT::Date-&amp;amp;gt;new($session{&amp;#039;CurrentUser&amp;#039;});&lt;br /&gt;
 &lt;br /&gt;
 if ($StartDate) {&lt;br /&gt;
   $start_date-&amp;amp;gt;Set(Format =&amp;amp;gt; &amp;#039;unknown&amp;#039;, Value =&amp;amp;gt; $StartDate);&lt;br /&gt;
   $StartDate = $start_date-&amp;amp;gt;AsString;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 if ($EndDate) {&lt;br /&gt;
   $end_date-&amp;amp;gt;Set(Format =&amp;amp;gt; &amp;#039;unknown&amp;#039;, Value =&amp;amp;gt; $EndDate);&lt;br /&gt;
   $EndDate = $end_date-&amp;amp;gt;AsString;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/%init&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;TimeWorked.html&amp;quot;&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;Start date&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;:&lt;br /&gt;
   &amp;amp;lt;&amp;amp;amp; /Elements/SelectDate, Name =&amp;amp;gt; &amp;#039;StartDate&amp;#039;, Default =&amp;amp;gt; ($StartDate) ? $start_date-&amp;amp;gt;ISO : &amp;#039;&amp;#039;&amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;br /&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;&amp;amp;amp;|/l&amp;amp;amp;&amp;amp;gt;End date&amp;amp;lt;/&amp;amp;amp;&amp;amp;gt;:&lt;br /&gt;
   &amp;amp;lt;&amp;amp;amp; /Elements/SelectDate, Name =&amp;amp;gt; &amp;#039;EndDate&amp;#039;, Default =&amp;amp;gt; ($EndDate) ? $end_date-&amp;amp;gt;ISO : &amp;#039;&amp;#039;&amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;&amp;amp;amp; /Elements/Submit&amp;amp;amp;&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;%perl&amp;amp;gt;&lt;br /&gt;
 my ($uhash, $ulist, $q_list, $queue_time);&lt;br /&gt;
 &lt;br /&gt;
 # First let&amp;#039;s prepare to take the users list&lt;br /&gt;
 $ulist = new RT::Users($session{&amp;#039;CurrentUser&amp;#039;});&lt;br /&gt;
 &lt;br /&gt;
 # We consider only the priviledged users&lt;br /&gt;
 $ulist-&amp;amp;gt;LimitToPrivileged;&lt;br /&gt;
 &lt;br /&gt;
 # initialize the users hash information. This hash is going to be used&lt;br /&gt;
 # to hold all the time worked information&lt;br /&gt;
 &lt;br /&gt;
 while (my $user = $ulist-&amp;amp;gt;Next) {&lt;br /&gt;
   my %ustat;&lt;br /&gt;
 &lt;br /&gt;
   $ustat{&amp;#039;real_name&amp;#039;} = $user-&amp;amp;gt;RealName;&lt;br /&gt;
   $ustat{&amp;#039;total&amp;#039;}     = 0;&lt;br /&gt;
   $ustat{&amp;#039;queues&amp;#039;}    = ();&lt;br /&gt;
 &lt;br /&gt;
   $uhash-&amp;amp;gt;{$user-&amp;amp;gt;Id} = \%ustat;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 # prepare to take the queues list&lt;br /&gt;
 $q_list = RT::Queues-&amp;amp;gt;new($session{&amp;#039;CurrentUser&amp;#039;});&lt;br /&gt;
 $q_list-&amp;amp;gt;UnLimit;&lt;br /&gt;
 &lt;br /&gt;
 # for each queue&lt;br /&gt;
 while(my $queue = $q_list-&amp;amp;gt;Next) {&lt;br /&gt;
   next if ($queue-&amp;amp;gt;Disabled);&lt;br /&gt;
 &lt;br /&gt;
   my ($sql_query, $tickets);&lt;br /&gt;
 &lt;br /&gt;
   $sql_query = q{};&lt;br /&gt;
   $tickets = RT::Tickets-&amp;amp;gt;new($session{&amp;#039;CurrentUser&amp;#039;});&lt;br /&gt;
   $queue_time-&amp;amp;gt;{$queue-&amp;amp;gt;Name} = 0;&lt;br /&gt;
 &lt;br /&gt;
   # select only the RESOLVED tickets from the current queue&lt;br /&gt;
   $sql_query = sprintf(&amp;quot;Status = &amp;#039;resolved&amp;#039; AND Queue = &amp;#039;%s&amp;#039;&amp;quot;, $queue-&amp;amp;gt;Name);&lt;br /&gt;
   if ($StartDate) {&lt;br /&gt;
     $sql_query .= sprintf(&amp;quot; AND Resolved &amp;amp;gt;= &amp;#039;%s&amp;#039;&amp;quot;, $start_date-&amp;amp;gt;ISO);&lt;br /&gt;
   }&lt;br /&gt;
   if ($EndDate) {&lt;br /&gt;
     $sql_query .= sprintf(&amp;quot; AND Resolved &amp;amp;lt;= &amp;#039;%s&amp;#039;&amp;quot;, $end_date-&amp;amp;gt;ISO);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $tickets-&amp;amp;gt;FromSQL($sql_query);&lt;br /&gt;
 &lt;br /&gt;
   # cycle trough the tickets from the current queue&lt;br /&gt;
   while(my $ticket = $tickets-&amp;amp;gt;Next()) {&lt;br /&gt;
     my $user_id;&lt;br /&gt;
 &lt;br /&gt;
     $user_id = $ticket-&amp;amp;gt;Owner;&lt;br /&gt;
 &lt;br /&gt;
     # adjust the total time worked by all users on the current queue&lt;br /&gt;
     $queue_time-&amp;amp;gt;{$queue-&amp;amp;gt;Name} += $ticket-&amp;amp;gt;TimeWorked;&lt;br /&gt;
 &lt;br /&gt;
     # adjust the total time worked (for all queues)&lt;br /&gt;
     $uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{total} += $ticket-&amp;amp;gt;TimeWorked;&lt;br /&gt;
 &lt;br /&gt;
     # adjust the time spent on the current queue&lt;br /&gt;
     if ($uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{queues}-&amp;amp;gt;{$queue-&amp;amp;gt;Name}) {&lt;br /&gt;
       $uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{queues}-&amp;amp;gt;{$queue-&amp;amp;gt;Name} += $ticket-&amp;amp;gt;TimeWorked;&lt;br /&gt;
     }&lt;br /&gt;
     else {&lt;br /&gt;
       $uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{queues}-&amp;amp;gt;{$queue-&amp;amp;gt;Name} = $ticket-&amp;amp;gt;TimeWorked;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 foreach(keys(%{ $uhash })) {&lt;br /&gt;
   my $user_id = $_;&lt;br /&gt;
 &lt;br /&gt;
   next if ($uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{total}        == 0);&lt;br /&gt;
   print &amp;#039;&amp;amp;lt;h2&amp;amp;gt;&amp;#039;,$uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{real_name},&amp;#039;&amp;amp;lt;/h2&amp;amp;gt;&amp;#039;;&lt;br /&gt;
   print &amp;#039;&amp;amp;lt;table&amp;amp;gt;&amp;amp;lt;tdata&amp;amp;gt;&amp;#039;,$/;&lt;br /&gt;
 &lt;br /&gt;
   foreach(keys(%{ $uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{queues} })) {&lt;br /&gt;
 &lt;br /&gt;
     next if ($uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{queues}-&amp;amp;gt;{$_} == 0);&lt;br /&gt;
 &lt;br /&gt;
     print &amp;#039;&amp;amp;lt;tr&amp;amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;&amp;amp;lt;td&amp;amp;gt;&amp;#039;,$_,&amp;#039;&amp;amp;lt;/td&amp;amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;&amp;amp;lt;td&amp;amp;gt;&amp;#039;,$uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{queues}-&amp;amp;gt;{$_},&amp;#039;&amp;amp;lt;/td&amp;amp;gt;&amp;#039;,&lt;br /&gt;
           &amp;#039;&amp;amp;lt;/tr&amp;amp;gt;&amp;#039;,$/;&lt;br /&gt;
   }&lt;br /&gt;
   print &amp;#039;&amp;amp;lt;tr style=&amp;quot;font-weight: bold;&amp;quot;&amp;amp;gt;&amp;amp;lt;td&amp;amp;gt;Total&amp;amp;lt;/td&amp;amp;gt;&amp;amp;lt;td&amp;amp;gt;&amp;#039;,$uhash-&amp;amp;gt;{$user_id}-&amp;amp;gt;{total},&amp;#039;&amp;amp;lt;/td&amp;amp;gt;&amp;amp;lt;/tr&amp;amp;gt;&amp;#039;,&lt;br /&gt;
         &amp;#039;&amp;amp;lt;/tdata&amp;amp;gt;&amp;amp;lt;/table&amp;amp;gt;&amp;#039;,$/;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 if (keys(%{ $queue_time })) {&lt;br /&gt;
   my $total_queues_time = 0;&lt;br /&gt;
 &lt;br /&gt;
   print &amp;#039;&amp;amp;lt;h2&amp;amp;gt;Queue times&amp;amp;lt;/h2&amp;amp;gt;&amp;#039;,&lt;br /&gt;
         &amp;#039;&amp;amp;lt;table&amp;amp;gt;&amp;amp;lt;tdata&amp;amp;gt;&amp;#039;,$/;&lt;br /&gt;
   foreach(keys(%{ $queue_time })) {&lt;br /&gt;
     print &amp;#039;&amp;amp;lt;tr&amp;amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;&amp;amp;lt;td&amp;amp;gt;&amp;#039;,$_,&amp;#039;&amp;amp;lt;/td&amp;amp;gt;&amp;#039;,&lt;br /&gt;
            &amp;#039;&amp;amp;lt;td&amp;amp;gt;&amp;#039;,$queue_time-&amp;amp;gt;{$_},&amp;#039;&amp;amp;lt;/td&amp;amp;gt;&amp;#039;,&lt;br /&gt;
           &amp;#039;&amp;amp;lt;/tr&amp;amp;gt;&amp;#039;,$/;&lt;br /&gt;
 &lt;br /&gt;
     $total_queues_time += $queue_time-&amp;amp;gt;{$_};&lt;br /&gt;
   }&lt;br /&gt;
   print &amp;#039;&amp;amp;lt;tr style=&amp;quot;font-weight: bold&amp;quot;&amp;amp;gt;&amp;#039;,&lt;br /&gt;
          &amp;#039;&amp;amp;lt;td&amp;amp;gt;Total&amp;amp;lt;/td&amp;amp;gt;&amp;#039;,&lt;br /&gt;
          &amp;#039;&amp;amp;lt;td&amp;amp;gt;&amp;#039;,$total_queues_time,&amp;#039;&amp;amp;lt;/td&amp;amp;gt;&amp;#039;,&lt;br /&gt;
         &amp;#039;&amp;amp;lt;/tr&amp;amp;gt;&amp;#039;,$/,&lt;br /&gt;
        &amp;#039;&amp;amp;lt;/tdata&amp;amp;gt;&amp;amp;lt;/table&amp;amp;gt;&amp;#039;,$/;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;/%perl&amp;amp;gt;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>