TimeWorked

From Request Tracker Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

INSTALL

Add to /path/to/rt/share/html/Tools/Reports/Elements/Tabs the following content:

d => {
    title => loc('Time worked'),
    path  => 'Tools/Reports/TimeWorked.html',
},

Add to /path/to/rt/share/html/Tools/Reports/index.html the following content:

D => {
    title       => loc('Time worked'),
    path        => '/Tools/Reports/TimeWorked.html',
    description => loc('Show how much time has been worked on resolved tickets for a given interval'),
},

Now, create /path/to/rt/share/html/Tools/Reports/TimeWorked.html with the following content:

<%args>
  $StartDate => undef
  $EndDate   => undef
 </%args>
 
 <& /Elements/Header, Title => $title &>
 <& /Tools/Reports/Elements/Tabs, current_tab => 'Tools/Reports/TimeWorked.html', Title => $title &>
 <hr>
 <%init>
 my ($start_date, $end_date, $title);
 
 $title = loc('Time worked in all queues');
 
 $start_date = RT::Date->new($session{'CurrentUser'});
 $end_date   = RT::Date->new($session{'CurrentUser'});
 
 if ($StartDate) {
   $start_date->Set(Format => 'unknown', Value => $StartDate);
   $StartDate = $start_date->AsString;
 }
 
 if ($EndDate) {
   $end_date->Set(Format => 'unknown', Value => $EndDate);
   $EndDate = $end_date->AsString;
 }
 
 </%init>
 
 <form method="post" action="TimeWorked.html">
  <br />
   <&|/l&>Start date</&>:
   <& /Elements/SelectDate, Name => 'StartDate', Default => ($StartDate) ? $start_date->ISO : ''&>
  <br />
   <&|/l&>End date</&>:
   <& /Elements/SelectDate, Name => 'EndDate', Default => ($EndDate) ? $end_date->ISO : ''&>
 
 <& /Elements/Submit&>
 
 </form>
 <%perl>
 my ($uhash, $ulist, $q_list, $queue_time);
 
 # First let's prepare to take the users list
 $ulist = new RT::Users($session{'CurrentUser'});
 
 # We consider only the priviledged users
 $ulist->LimitToPrivileged;
 
 # initialize the users hash information. This hash is going to be used
 # to hold all the time worked information
 
 while (my $user = $ulist->Next) {
   my %ustat;
 
   $ustat{'real_name'} = $user->RealName;
   $ustat{'total'}     = 0;
   $ustat{'queues'}    = ();
 
   $uhash->{$user->Id} = \%ustat;
 }
 
 # prepare to take the queues list
 $q_list = RT::Queues->new($session{'CurrentUser'});
 $q_list->UnLimit;
 
 # for each queue
 while(my $queue = $q_list->Next) {
   next if ($queue->Disabled);
 
   my ($sql_query, $tickets);
 
   $sql_query = q{};
   $tickets = RT::Tickets->new($session{'CurrentUser'});
   $queue_time->{$queue->Name} = 0;
 
   # select only the RESOLVED tickets from the current queue
   $sql_query = sprintf("Status = 'resolved' AND Queue = '%s'", $queue->Name);
   if ($StartDate) {
     $sql_query .= sprintf(" AND Resolved >= '%s'", $start_date->ISO);
   }
   if ($EndDate) {
     $sql_query .= sprintf(" AND Resolved <= '%s'", $end_date->ISO);
   }
 
   $tickets->FromSQL($sql_query);
 
   # cycle trough the tickets from the current queue
   while(my $ticket = $tickets->Next()) {
     my $user_id;
 
     $user_id = $ticket->Owner;
 
     # adjust the total time worked by all users on the current queue
     $queue_time->{$queue->Name} += $ticket->TimeWorked;
 
     # adjust the total time worked (for all queues)
     $uhash->{$user_id}->{total} += $ticket->TimeWorked;
 
     # adjust the time spent on the current queue
     if ($uhash->{$user_id}->{queues}->{$queue->Name}) {
       $uhash->{$user_id}->{queues}->{$queue->Name} += $ticket->TimeWorked;
     }
     else {
       $uhash->{$user_id}->{queues}->{$queue->Name} = $ticket->TimeWorked;
     }
   }
 }
 foreach(keys(%{ $uhash })) {
   my $user_id = $_;
 
   next if ($uhash->{$user_id}->{total}        == 0);
   print '<h2>',$uhash->{$user_id}->{real_name},'</h2>';
   print '<table><tdata>',$/;
 
   foreach(keys(%{ $uhash->{$user_id}->{queues} })) {
 
     next if ($uhash->{$user_id}->{queues}->{$_} == 0);
 
     print '<tr>',
            '<td>',$_,'</td>',
            '<td>',$uhash->{$user_id}->{queues}->{$_},'</td>',
           '</tr>',$/;
   }
   print '<tr style="font-weight: bold;"><td>Total</td><td>',$uhash->{$user_id}->{total},'</td></tr>',
         '</tdata></table>',$/;
 }
 
 if (keys(%{ $queue_time })) {
   my $total_queues_time = 0;
 
   print '<h2>Queue times</h2>',
         '<table><tdata>',$/;
   foreach(keys(%{ $queue_time })) {
     print '<tr>',
            '<td>',$_,'</td>',
            '<td>',$queue_time->{$_},'</td>',
           '</tr>',$/;
 
     $total_queues_time += $queue_time->{$_};
   }
   print '<tr style="font-weight: bold">',
          '<td>Total</td>',
          '<td>',$total_queues_time,'</td>',
         '</tr>',$/,
        '</tdata></table>',$/;
 }
 
 </%perl>