% if ( $conf->exists('dashboard-toplist') ) {
<& /elements/table-grid.html &>
% my $bgcolor1 = '#eeeeee';
% my $bgcolor2 = '#ffffff';
% my $bgcolor = $bgcolor2;
% foreach my $line ( $conf->config('dashboard-toplist') ) {
%
% if ( $bgcolor eq $bgcolor1 ) {
% $bgcolor = $bgcolor2;
% } else {
% $bgcolor = $bgcolor1;
% }
% if ( $line =~ /^\s*cust_main:\s*(\d+)\s*$/ ) { #customer line
% my $custnum = $1;
% my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
% if ( $cust_main ) {
<% $cust_main->name |h %>
|
<& /elements/mcp_lint.html, 'cust_main'=>$cust_main &>
|
<% mt('(new ticket)') |h %>
|
% foreach my $priority ( @custom_priorities ) {
% my $num = $num_tickets_by_priority{$priority}->{$custnum};
% if ( $num ) {
<% $num %>
% if ( $priority &&
% exists($num_tickets_by_priority{''}{$custnum}) ) {
% # decrement the customer's total by the number in
% # this priority bin
% $num_tickets_by_priority{''}{$custnum} -= $num;
% }
% }
|
% }
% } else {
<% mt("Unknown customer number [_1]", $custnum) |h %>
|
% }
%
% } elsif ( $line =~ /^\-\-+$/ ) { #divider
%
|
% next;
%
% } elsif ( $line =~ /^\s*$/ ) {
|
% } elsif ( $line =~ /^\S/ ) { #label line
<% $line %> |
<% mt('Lint') |h %> |
|
% foreach my $priority ( @custom_priorities ) {
<% $priority || '(none)'%>
|
% }
% } else { #regular line
<% $line %> |
% }
%
% }
% }
<%init>
my $conf = new FS::Conf;
#false laziness w/httemplate/search/cust_main.cgi... care if
# custom_priority_field becomes anything but a local hack...
my @custom_priorities = ();
my $custom_priority_field = $conf->config('ticket_system-custom_priority_field');
if ( $custom_priority_field
&& @{[ $conf->config('ticket_system-custom_priority_field-values') ]} ) {
@custom_priorities =
$conf->config('ticket_system-custom_priority_field-values');
}
push @custom_priorities, '';
my %num_tickets_by_priority = map { $_ => {} } @custom_priorities;
# "optimization" (i.e. "terrible hack") to avoid constructing
# (@custom_priorities) x (cust_main) queries with a bazillion
# joins each just to count tickets
if ( $FS::TicketSystem::system eq 'RT_Internal'
and $conf->config('dashboard-toplist') )
{
my $text = (driver_name =~ /^Pg/) ? 'text' : 'char';
# The RT API does not play nicely with aggregate queries,
# so we're going to go around it.
my $sql;
# optimization to keep this from taking a million years
my $cust_tickets =
"SELECT custnum, Tickets.Id, Tickets.Queue
FROM cust_main
JOIN Links ON (
Links.Target = 'freeside://freeside/cust_main/' || CAST(cust_main.custnum AS $text)
AND Links.Base LIKE '%rt://%/ticket/%'
AND Links.Type = 'MemberOf'
) JOIN Tickets ON (Links.LocalBase = Tickets.Id)
UNION
SELECT custnum, Tickets.Id, Tickets.Queue
FROM cust_pkg JOIN cust_svc USING (pkgnum)
JOIN Links ON (
Links.Target = 'freeside://freeside/cust_svc/' || CAST(cust_svc.svcnum AS $text)
AND Links.Base LIKE '%rt://%/ticket/%'
AND Links.Type = 'MemberOf'
) JOIN Tickets ON (Links.LocalBase = Tickets.Id)
";
if ( $custom_priority_field ) {
$sql =
"SELECT cust_tickets.custnum AS custnum,
ObjectCustomFieldValues.Content as priority,
COUNT(DISTINCT cust_tickets.Id) AS num_tickets
FROM ($cust_tickets) AS cust_tickets
LEFT JOIN ObjectCustomFields ON (
ObjectCustomFields.ObjectId = '0' OR
ObjectCustomFields.ObjectId = cust_tickets.Queue
)
LEFT JOIN CustomFields ON (
ObjectCustomFields.CustomField = CustomFields.Id AND
CustomFields.Name = '$custom_priority_field'
)
LEFT JOIN ObjectCustomFieldValues ON (
ObjectCustomFieldValues.CustomField = CustomFields.Id AND
ObjectCustomFieldValues.ObjectType = 'RT::Ticket' AND
ObjectCustomFieldValues.Disabled = '0' AND
ObjectCustomFieldValues.ObjectId = cust_tickets.Id
)
GROUP BY cust_tickets.custnum, ObjectCustomFieldValues.Content";
} else { # no custom_priority_field
$sql =
"SELECT cust_tickets.custnum,
'' as priority,
COUNT(DISTINCT cust_tickets.Id) AS num_tickets
FROM ($cust_tickets) AS cust_tickets
GROUP BY cust_tickets.custnum";
}
my $sth = dbh->prepare($sql) or die dbh->errstr;
$sth->execute or die $sth->errstr;
while ( my $row = $sth->fetchrow_hashref ) {
$num_tickets_by_priority{ $row->{priority} }->{ $row->{custnum} } =
$row->{num_tickets};
}
}
%init>