deuglify
[freeside.git] / httemplate / search / cust_main.cgi
index 27f23de..9ef3847 100755 (executable)
@@ -48,6 +48,9 @@ $limit .= " OFFSET $offset" if $offset;
 my $total = 0;
 
 my(@cust_main, $sortby, $orderby);
+my @select = ();
+my @addl_headers = ();
+my @addl_cols = ();
 if ( $cgi->param('browse')
      || $cgi->param('otaker_on')
      || $cgi->param('agentnum_on')
@@ -65,6 +68,12 @@ if ( $cgi->param('browse')
     } elsif ( $query eq 'company' ) {
       $sortby=\*company_sort;
       $orderby = "ORDER BY LOWER(company || ' ' || last || ' ' || first )";
+    } elsif ( $query eq 'tickets' ) {
+      $sortby = \*tickets_sort;
+      $orderby = "ORDER BY tickets DESC";
+      push @select, FS::TicketSystem->sql_num_customer_tickets. " as tickets";
+      push @addl_headers, 'Tickets';
+      push @addl_cols, 'tickets';
     } else {
       die "unknown browse field $query";
     }
@@ -136,7 +145,14 @@ if ( $cgi->param('browse')
     }
   }
 
-  @cust_main = qsearch('cust_main', \%search, '',   
+  my $select;
+  if ( @select ) {
+    $select = 'cust_main.*, '. join (', ', @select);
+  } else {
+    $select = '*';
+  }
+
+  @cust_main = qsearch('cust_main', \%search, $select,   
                          "$addl_qual $orderby $limit" );
 
 #  foreach my $cust_main ( @just_cust_main ) {
@@ -263,6 +279,7 @@ if ( scalar(@cust_main) == 1 && ! $cgi->param('referral_custnum') ) {
     }
     print ' cancelled customers</a> )';
   }
+
   if ( $cgi->param('referral_custnum') ) {
     $cgi->param('referral_custnum') =~ /^(\d+)$/
       or eidiot "Illegal referral_custnum\n";
@@ -298,6 +315,13 @@ END
           '</FORM>';
   }
 
+  my @custom_priorities = ();
+  if ( $conf->config('ticket_system-custom_priority_field')
+       && @{[ $conf->config('ticket_system-custom_priority_field-values') ]} ) {
+    @custom_priorities =
+      $conf->config('ticket_system-custom_priority_field-values');
+  }
+
   print "<BR><BR>". $pager. &table(). <<END;
       <TR>
         <TH></TH>
@@ -312,6 +336,10 @@ if ( defined dbdef->table('cust_main')->column('ship_last') ) {
 END
 }
 
+foreach my $addl_header ( @addl_headers ) {
+  print "<TH>$addl_header</TH>";
+}
+
 print <<END;
         <TH>Packages</TH>
         <TH COLSPAN=2>Services</TH>
@@ -319,7 +347,6 @@ print <<END;
 END
 
   my(%saw,$cust_main);
-  my $p = popurl(2);
   foreach $cust_main (
     sort $sortby grep(!$saw{$_->custnum}++, @cust_main)
   ) {
@@ -370,6 +397,39 @@ END
 END
     }
 
+    foreach my $addl_col ( @addl_cols ) {
+      print "<TD ROWSPAN=$rowspan ALIGN=right>";
+      if ( $addl_col eq 'tickets' ) {
+        if ( @custom_priorities ) {
+          print '<TABLE>';
+          foreach my $priority ( @custom_priorities, '' ) {
+            my $ahref =
+              '<A HREF="'.
+                FS::TicketSystem->href_customer_tickets($custnum,$priority).
+              '">';
+            print "<TR><TD ALIGN=right>$ahref".
+                    FS::TicketSystem->num_customer_tickets($custnum,$priority).
+                  "</A></TD>".
+                  "<TD ALIGN=left>$ahref".
+                  ( $priority || '<i>(none)</i>' ).
+                  "</A></TD></TR>";
+          }
+          print '<TR><TD BGCOLOR="#000000" COLSPAN=2></TD></TR>'.
+                '<TR><TD ALIGN=right>';
+        }
+        my $ahref =
+          '<A HREF="'.
+            FS::TicketSystem->href_customer_tickets($custnum).
+          '">';
+        print $ahref. $cust_main->get($addl_col). '</A>';
+        print "</TD><TD ALIGN=left>${ahref}Total</A></TD></TR></TABLE>"
+          if @custom_priorities;
+      } else {
+        print $cust_main->get($addl_col);
+      }
+      print "</TD>";
+    }
+
     my($n1)='';
     foreach ( @{$all_pkgs{$custnum}} ) {
       my $pkgnum = $_->pkgnum;
@@ -424,6 +484,10 @@ sub custnum_sort {
   $a->getfield('custnum') <=> $b->getfield('custnum');
 }
 
+sub tickets_sort {
+  $b->getfield('tickets') <=> $a->getfield('tickets');
+}
+
 sub custnumsearch {
 
   my $custnum = $cgi->param('custnum_text');