display customer agent, class, tag in ticket search, #8784
authormark <mark>
Fri, 8 Apr 2011 00:27:00 +0000 (00:27 +0000)
committermark <mark>
Fri, 8 Apr 2011 00:27:00 +0000 (00:27 +0000)
rt/etc/RT_Config.pm.in
rt/lib/RT/Tickets_Overlay.pm
rt/lib/RT/URI/freeside.pm
rt/lib/RT/URI/freeside/Internal.pm
rt/share/html/Elements/RT__Ticket/ColumnMap
rt/share/html/Search/Elements/BuildFormatString

index 2fd22ef..2018023 100644 (file)
@@ -1400,13 +1400,13 @@ Set ($DefaultSearchResultFormat, qq{
    '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
    Customer,
    Status,
-   QueueName, 
+   QueueName,
    OwnerName, 
    Priority, 
    '__NEWLINE__',
-   '', 
-   '<small>__Requestors__</small>',
    '',
+   '<small>__Requestors__</small>',
+   '<small>__CustomerTags__</small>',
    '<small>__CreatedRelative__</small>',
    '<small>__ToldRelative__</small>',
    '<small>__LastUpdatedRelative__</small>',
index 687be73..5a7e020 100644 (file)
@@ -1791,6 +1791,12 @@ sub OrderByCols {
                    $custalias.last || ', ' || $custalias.first
                    )";
                }
+               elsif ( $subkey eq 'Class' ) {
+                   $field = "$custalias.classnum";
+               }
+               elsif ( $subkey eq 'Agent' ) {
+                   $field = "$custalias.agentnum";
+               }
                else {
                    # no other cases exist yet, but for obviousness:
                    $field = $subkey;
index 00a9ebb..33845dd 100644 (file)
@@ -299,6 +299,31 @@ if ($@ &&
   die $@;
 };
 
+=item AgentName
+
+Return the name of the customer's agent.
+
+=cut
+
+sub AgentName { undef }
+
+=item CustomerClass
+
+Return the name of the customer's class.
+
+=cut
+
+sub CustomerClass { undef }
+
+=item CustomerTags
+
+Return the list of tags attached to the customer.  Each tag is returned
+as a hashref with keys "name", "desc", and "color".
+
+=cut
+
+sub CustomerTags { ( ) }
+
 =back
 
 =cut
index b5af134..6d3adc2 100644 (file)
@@ -142,4 +142,29 @@ sub _FreesideURILabelLong {
 
 }
 
+sub AgentName {
+  my $self = shift;
+  my $rec = $self->_FreesideGetRecord() or return;
+  my $agent = $rec->{'_object'}->agent or return;
+  return $agent->agentnum . ': ' . $agent->agent;
+}
+
+sub CustomerClass {
+  my $self = shift;
+  my $rec = $self->_FreesideGetRecord() or return;
+  my $cust_class = $rec->{'_object'}->cust_class or return;
+  return $cust_class->classname;
+}
+  
+sub CustomerTags {
+  my $self = shift;
+  my $rec = $self->_FreesideGetRecord() or return;
+  my @part_tag = $rec->{'_object'}->part_tag;
+  return map { 
+    { 'name'  => $_->tagname,
+      'desc'  => $_->tagdesc,
+      'color' => $_->tagcolor }
+  } @part_tag;
+}
+
 1;
index 7efc4b4..411b3e5 100644 (file)
@@ -316,24 +316,84 @@ $COLUMN_MAP = {
 
     Customer => {
         title     => 'Customer', #loc
-        attribute => 'Customer', #title/attribute/name... what does it all mean?
+        attribute => 'Customer.Number', #title/attribute/name... what does it all mean?
         value     => sub {
-          my $Ticket = shift;
-          my @Customers = @{ $Ticket->Customers->ItemsArrayRef };
-          my @CustResolvers = map $_->TargetURI->Resolver, @Customers;
-          my @return = ();
-          for ( 0 .. $#CustResolvers ) {
-            my $c = @CustResolvers[$_];
-            push @return, \'<A HREF="', $c->HREF, \'">', $c->AsString, \'</A>';
-            push @return, \'<BR>' if scalar(@CustResolvers) > 1
-                                  && $_ != $#CustResolvers;
-          }
-          @return;
+            my $Ticket = shift;
+            my @return = ();
+            foreach my $c (ticket_cust_resolvers($Ticket)) {
+                push @return, \'<A HREF="', $c->HREF, \'">', 
+                              $c->AsString,
+                              \'</A>',
+                              \'<BR>';
+            }
+            pop @return;
+            @return;
+        },
+    },
+    # For future reference:
+    # hash key = name of the column in the format string 
+    #   (see /Search/Elements/BuildFormatString)
+    # title = displayed name in the table header
+    # attribute = the field to ORDER BY when sorting on this column
+    Agent => {
+        title     => 'Agent',
+        attribute => 'Customer.Agent',
+        value => sub {
+            my $Ticket = shift;
+            my @return = ();
+            foreach my $c (ticket_cust_resolvers($Ticket)) {
+                push @return, $c->AgentName, \'<BR>';
+            }
+            pop @return;
+            @return;
+        },
+    },
+    CustomerClass => {
+        title     => 'Class',
+        attribute => 'Customer.Class',
+        value     => sub {
+            my $Ticket = shift;
+            my @return = ();
+            foreach my $c (ticket_cust_resolvers($Ticket)) {
+                push @return, $c->CustomerClass, \'<BR>';
+            }
+            pop @return;
+            @return;
+        },
+    },
+    CustomerTags => {
+        title     => '',
+        attribute => '',
+        value     => sub {
+            my $Ticket = shift;
+            my @return = ();
+            foreach my $c (ticket_cust_resolvers($Ticket)) {
+                my @tags = sort { $a->{'name'} cmp $b->{'name'} }
+                            $c->CustomerTags;
+                foreach my $t (@tags) {
+                    push @return, \'<SPAN style="background-color:#',
+                                  $t->{'color'},
+                                  \';">&nbsp;',
+                                  $t->{'name'},
+                                  \'&nbsp;</SPAN>',
+                                  \'&nbsp;'
+                                  ;
+                }
+                pop @return;
+                push @return, \'<BR>';
+            }
+            pop @return;
+            @return;
         },
     },
-
 };
 
+sub ticket_cust_resolvers {
+    my $Ticket = shift;
+    my @Customers = @{ $Ticket->Customers->ItemsArrayRef };
+    return map $_->TargetURI->Resolver, @Customers;
+}
+
 # if no GPG support, then KeyOwnerName and KeyRequestors fall back to the regular
 # versions
 if (RT->Config->Get('GnuPG')->{'Enable'}) {
index 654f1db..dc07c68 100644 (file)
@@ -72,7 +72,7 @@ $CurrentDisplayColumns => undef
 my @fields = qw(
     id QueueName Subject
 
-    Customer
+    Customer Agent CustomerClass CustomerTags
 
     Status ExtendedStatus UpdateStatus
     Type