<& /Elements/Header, Title => loc("Tickets per day in Queue:" . $QueueObj->Name()) &> <& /RTx/Statistics/Elements/Tabs, Title => loc("Tickets by status per day in Queue:" . $QueueObj->Name()) &>

### Description

This page displays details about tickets in the selected queue over the date range chosen. It shows how many tickets were created on each day in the chosen range, and how many of those were either Resolved or Deleted.

To always show the current month to date, bookmark this link, or for a spreadsheet, use this link.

% Statistics::DebugLog("queue name=" . $QueueObj->Name() . "\n"); %my $title = "Ticket counts in " . $QueueObj->Name() . " by status per day from " . % Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[0]) . " through " . % Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$#dates-1]); <&|/Elements/TitleBox, title => $title, title_href => "/RTx/Statistics/CallsQueueDay/index.html?$QueryString" &>

% if ($ShowHeader) { <& /RTx/Statistics/Elements/CollectionAsTable/Header, Format => \@Format, FormatString => $Format, AllowSorting => $AllowSorting, Order => $Order, Query => undef, Rows => $Rows, Page => $Page, OrderBy => $OrderBy , BaseURL => $BaseURL, maxitems => $maxitems &> % } % my $line = 1; % LINE: for my $d (0..$#dates) { % if ($d == $#dates){ % next LINE; % } % my $x = 1; % $values{Statistics_Date} = Statistics::FormatDate($Statistics::PerDayDateFormat, $dates[$d]); %# NOTE need to handle all status values here.... % for my $status (qw(created resolved deleted)) { % my $tix = new RT::Tickets($session{'CurrentUser'}); % $tix->LimitQueue (VALUE => $Queue); % if ($status eq "created") { % $tix->LimitCreated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); % if ($dates[$d+1]) { % $tix->LimitCreated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); % } % $values{Statistics_Created_Count} = $tix->Count; % $Totals{Statistics_Created_Count} += $tix->Count; % } % elsif ($status eq "resolved") { % $tix->LimitStatus(VALUE => $status); % $tix->LimitResolved(VALUE => $dates[$d]->ISO, OPERATOR => ">="); % if ($dates[$d+1]) { % $tix->LimitResolved(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); % } % $values{Statistics_Resolved_Count} = $tix->Count; % $Totals{Statistics_Resolved_Count} += $tix->Count; % } % elsif ($status eq "deleted") { % $tix->LimitStatus(VALUE => $status); % $tix->LimitLastUpdated(VALUE => $dates[$d]->ISO, OPERATOR => ">="); % if ($dates[$d+1]) { % $tix->LimitLastUpdated(VALUE => $dates[$d+1]->ISO, OPERATOR => "<="); % } % $values{Statistics_Deleted_Count} = $tix->Count; % $Totals{Statistics_Deleted_Count} += $tix->Count; % } % $data[$x++][$d] = $tix->Count; % } <& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@Format, i => $line, record => $record, maxitems => $maxitems &> % $line++; % } % $values {Statistics_Date} = "Totals"; % $values {Statistics_Created_Count} = $Totals{Statistics_Created_Count}; % $values {Statistics_Resolved_Count} = $Totals{Statistics_Resolved_Count}; % $values {Statistics_Deleted_Count} = $Totals{Statistics_Deleted_Count}; <& /RTx/Statistics/Elements/CollectionAsTable/Row, Format => \@BoldFormat, i => $line, record => $record, maxitems => $maxitems &>

<%perl> # Create the graph URL my $url= 'Elements/Chart?x_labels='; for (1..$diff) { $url .= $data[0][$_] . ","; } chop $url; $url .= "&"; shift @data; for (0..$#data) { $url .= "data".(1+$_)."=".(join ",", @{$data[$_]})."&"; } chop $url; $url .= "&set_legend=Created,Resolved,Deleted"; <& /RTx/Statistics/Elements/GraphBox, GraphURL => $url &> <& /RTx/Statistics/Elements/ControlsAsTable/ControlBox, Title => "Change Queue or Dates", ShowDates => 1, sMonth => \$sMonth, sDay => \$sDay, sYear => \$sYear, eMonth => \$eMonth, eDay => \$eDay, eYear => \$eYear, weekends => $weekends, ShowSingleQueue => 1, Queue => $Queue &> <&|/l&>Bookmarkable link | <&|/l&>spreadsheet
% Statistics::DebugLog("ref of eMonth is " . ref($eMonth) . "\n"); % Statistics::DebugInit( $m ); <%ARGS> $Queue => undef $weekends => $Statistics::PerDayWeekends; $sMonth=>undef $sDay=>undef $sYear=>undef $eMonth=>undef $eDay=>undef $eYear=>undef $days=>undef $currentMonth=>undef $AllowSorting => undef $Order => undef $OrderBy => undef $ShowNavigation => 1 $ShowHeader => 1 $Rows => 50 $Page => 1 $BaseURL => undef <%INIT> use RTx::Statistics; use Time::Local; my $selected; my $n = 0; my @data = ([]); my @dates; my @msgs; my $diff; my $sEpoch=0; my $eEpoch=0; my %Totals; my $QueryString; my $maxitems = 4; my %record; my %values; my $record = \%record; $record{values} = \%values; # If debugging, set things up and display all the args Statistics::DebugClear(); Statistics::DebugLog("CallsQueueDay/index.html ARGS:\n"); for my $key (keys %ARGS) { Statistics::DebugLog("ARG{ $key }=" . $ARGS{$key} . "\n"); } my $Format = qq{ Statistics_Date, '__Statistics_Created_Count__/STYLE:text-align:right;', '__Statistics_Resolved_Count__/STYLE:text-align:right;', '__Statistics_Deleted_Count__/STYLE:text-align:right;' }; my $BoldFormat = qq{ '__Statistics_Date__', '__Statistics_Created_Count__/STYLE:text-align:right;', '__Statistics_Resolved_Count__/STYLE:text-align:right;', '__Statistics_Deleted_Count__/STYLE:text-align:right;' }; my (@Format) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $Format); my (@BoldFormat) = $m->comp('/RTx/Statistics/Elements/CollectionAsTable/ParseFormat', Format => $BoldFormat); Statistics::DebugLog("CallsQueueDay/index.html Format array=" . join(',', @Format) . "\n"); if (!defined $Queue) { my $QueueObj = new RT::Queue($session{'CurrentUser'}); $QueueObj->Load($Statistics::PerDayQueue); $Queue = $QueueObj->Id(); } if ($sDay > $Statistics::monthsMaxDay{$sMonth}) { $sDay = $Statistics::monthsMaxDay{$sMonth}; } if ($eDay > $Statistics::monthsMaxDay{$eMonth}) { $eDay = $Statistics::monthsMaxDay{$eMonth}; } if ($sYear){ $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear-1900); } if ($eYear){ Statistics::DebugLog("eMonth = " . $eMonth . "\n"); $eEpoch = timelocal(0, 0, 0, $eDay, $eMonth, $eYear-1900); } else { # This case happens when the page is first loaded my @local = localtime(time); ($eDay, $eMonth, $eYear) = ($local[3], $local[4], $local[5]); $eYear += 1900; $eEpoch = timelocal(0, 0, 0, $local[3], $local[4], $local[5], $local[6], $local[7], $local[8]); Statistics::DebugLog("Setting eEpoch=$eEpoch from current time.\n"); } if (($eEpoch < $sEpoch) || ($sEpoch == 0)) { # We have an end, but not a start, or, overlapping. # if $currentMonth is set, just set the day to 1 if($currentMonth) { # set start vars from end, but with day set to 1 (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($eEpoch); $sDay=1; $sEpoch = timelocal(0, 0, 0, $sDay, $sMonth, $sYear); } else { # If the user has specified how many days back to go, use that, # If not, set start to configured default period before end if(defined $days) { $sEpoch = $eEpoch - ($days * $Statistics::secsPerDay); } else { $sEpoch = $eEpoch - ($Statistics::PerDayPeriod * $Statistics::secsPerDay); } (undef, undef, undef, $sDay, $sMonth, $sYear) = localtime($sEpoch); } $sYear += 1900; } # Compute days to chart. # The +1 is because we need to generate one more date. If the user # selected a 10 day range, we need to generate 11 days. $diff = int(($eEpoch - $sEpoch + $Statistics::secsPerDay - 1) / $Statistics::secsPerDay)+1; Statistics::DebugLog("Setting diff=$diff\n"); Statistics::DebugLog("sEpoch=$sEpoch, components=" . join(',', localtime($sEpoch)) . "\n"); Statistics::DebugLog("eEpoch=$eEpoch, components=" . join(',', localtime($eEpoch)) . "\n"); # Set up the string for the current query for bookmarkable link $QueryString = "sDay=$sDay&sMonth=$sMonth&sYear=$sYear&eDay=$eDay&eMonth=$eMonth&eYear=$eYear&weekends=$weekends&Queue=$Queue"; # Set up the end date to be midnight(morning) of the date after the one the user wanted. my $endRange = $eEpoch + $Statistics::secsPerDay; my $QueueObj = new RT::Queue($session{'CurrentUser'}); $QueueObj->Load($Queue); $n = 0; until ($#dates == $diff) { my $date = new RT::Date($session{CurrentUser}); $date->Set(Value=>$endRange - $n, Format => 'unix'); # Note: we used to adjust the time to local midnight, but # none of the other date entry fields in RT seem to adjust, so we've stopped. #Statistics::DebugLog("Before adjust to midnight date " . Statistics::FormatDate("%c", $date) . "\n"); $n+= $Statistics::secsPerDay; # If we aren't showing weekends and this is one, decrement the number # of days to show and skip to the next date. if(!$weekends and Statistics::RTDateIsWeekend($date)) {$diff--; next;} unshift @dates, $date; Statistics::DebugLog("pushing date " . Statistics::FormatDate("%c", $date) . "\n"); unshift @{ $data[0] }, Statistics::FormatDate($Statistics::PerDayLabelDateFormat, $date); } # We put an extra day into the lists to cover up till midnight of the next day, # But we don't want that to appear in the labels, so pop it off. pop( @{ $data[0] } );