This commit was manufactured by cvs2svn to create tag 'freeside_2_1_1'.
[freeside.git] / httemplate / search / cust_main.cgi
index 509fb29..93f960f 100755 (executable)
@@ -1,4 +1,7 @@
+%my $curuser = $FS::CurrentUser::CurrentUser;
 %
+%die "access denied"
+%  unless $curuser->access_right('List customers');
 %
 %my $conf = new FS::Conf;
 %my $maxrecords = $conf->config('maxsearchrecordsperpage');
 %  if ( $cgi->param('browse') ) {
 %    my $query = $cgi->param('browse');
 %    if ( $query eq 'custnum' ) {
-%      $sortby=\*custnum_sort;
-%      $orderby = "ORDER BY custnum";
+%      if ( $conf->exists('cust_main-default_agent_custid') ) {
+%        $sortby=\*display_custnum_sort;
+%        $orderby = "ORDER BY CASE WHEN agent_custid IS NOT NULL AND agent_custid != '' THEN CAST(agent_custid AS BIGINT) ELSE custnum END";
+%      } else {
+%        $sortby=\*custnum_sort;
+%        $orderby = "ORDER BY custnum";
+%      }
 %    } elsif ( $query eq 'last' ) {
 %      $sortby=\*last_sort;
 %      $orderby = "ORDER BY LOWER(last || ' ' || first)";
 %  }
 %
 %  if ( $cgi->param('otaker_on') ) {
-%    $cgi->param('otaker') =~ /^(\w{1,32})$/ or eidiot "Illegal otaker\n";
+%    die "access denied"
+%      unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+%    $cgi->param('otaker') =~ /^(\w{1,32})$/ or errorpage("Illegal otaker");
 %    $search{otaker} = $1;
 %  } elsif ( $cgi->param('agentnum_on') ) {
-%    $cgi->param('agentnum') =~ /^(\d+)$/ or eidiot "Illegal agentnum\n";
+%    $cgi->param('agentnum') =~ /^(\d+)$/ or errorpage("Illegal agentnum");
 %    $search{agentnum} = $1;
 %#  } else {
 %#    die "unknown query...";
 
 <!-- mason kludge -->
 %
-%  eidiot "No matching customers found!\n";
+%  errorpage("No matching customers found!");
 %} else { 
 %
 
 
 
   <% $total %> matching customers found
-%
-%  #begin pager
-%  my $pager = '';
-%  if ( $total != scalar(@cust_main) && $maxrecords ) {
-%    unless ( $offset == 0 ) {
-%      $cgi->param('offset', $offset - $maxrecords);
-%      $pager .= '<A HREF="'. $cgi->self_url.
-%                '"><B><FONT SIZE="+1">Previous</FONT></B></A> ';
-%    }
-%    my $poff;
-%    my $page;
-%    for ( $poff = 0; $poff < $total; $poff += $maxrecords ) {
-%      $page++;
-%      if ( $offset == $poff ) {
-%        $pager .= qq!<FONT SIZE="+2">$page</FONT> !;
-%      } else {
-%        $cgi->param('offset', $poff);
-%        $pager .= qq!<A HREF="!. $cgi->self_url. qq!">$page</A> !;
-%      }
-%    }
-%    unless ( $offset + $maxrecords > $total ) {
-%      $cgi->param('offset', $offset + $maxrecords);
-%      $pager .= '<A HREF="'. $cgi->self_url.
-%                '"><B><FONT SIZE="+1">Next</FONT></B></A> ';
-%    }
-%  }
-%  #end pager
+
+% my $pager = include( '/elements/pager.html',
+%                        'offset'     => $offset,
+%                       'num_rows'   => scalar(@cust_main),
+%                       'total'      => $total,
+%                       'maxrecords' => $maxrecords,
+%                    );
 %
 %  unless ( $cgi->param('cancelled') ) {
 %    if ( $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
 %      $cgi->param('offset', 0);
 %      print qq!( <a href="!. $cgi->self_url. qq!">hide!;
 %    }
-%    print ' cancelled customers</a> )';
+%    print ' canceled customers</a> )';
 %  }
 %
 %  if ( $cgi->param('referral_custnum') ) {
 %    $cgi->param('referral_custnum') =~ /^(\d+)$/
-%      or eidiot "Illegal referral_custnum\n";
+%      or errorpage("Illegal referral_custnum");
 %    my $referral_custnum = $1;
 %    my $cust_main = qsearchs('cust_main', { custnum => $referral_custnum } );
 %    print '<FORM METHOD="GET">'.
 %    print ' <SELECT NAME="referral_depth" SIZE="1" onChange="changed(this)">';
 %    my $max = 8; #config file
 %    $cgi->param('referral_depth') =~ /^(\d*)$/ 
-%      or eidiot "Illegal referral_depth";
+%      or errorpage("Illegal referral_depth");
 %    my $referral_depth = $1;
 %
 %    foreach my $depth ( 1 .. $max ) {
 %
 %  print "<BR><BR>". $pager. include('/elements/table-grid.html'). <<END;
 %      <TR>
-%        <TH CLASS="grid" BGCOLOR="#cccccc"></TH>
+%        <TH CLASS="grid" BGCOLOR="#cccccc">#</TH>
+%        <TH CLASS="grid" BGCOLOR="#cccccc">Status</TH>
 %        <TH CLASS="grid" BGCOLOR="#cccccc">(bill) name</TH>
 %        <TH CLASS="grid" BGCOLOR="#cccccc">company</TH>
 %END
 %      ? qq!<A HREF="$view"><FONT SIZE=-1>$company</FONT></A>!
 %      : '<FONT SIZE=-1>&nbsp;</FONT>';
 %    
-
+%    my $status = $cust_main->status;
+%    my $statuscol = $cust_main->statuscolor;
 
     <TR>
-      <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><A HREF="<% $view %>"><FONT SIZE=-1><% $custnum %></FONT></A></TD>
+      <TD CLASS="grid" ALIGN="right" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><A HREF="<% $view %>"><FONT SIZE=-1><% $cust_main->display_custnum %></FONT></A></TD>
+      <TD CLASS="grid" ALIGN="center" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><FONT SIZE="-1" COLOR="#<% $statuscol %>"><B><% ucfirst($status) %></B></FONT></TD>
       <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><A HREF="<% $view %>"><FONT SIZE=-1><% "$last, $first" %></FONT></A></TD>
       <TD CLASS="grid" BGCOLOR="<% $bgcolor %>" ROWSPAN=<% $rowspan || 1 %>><% $pcompany %></TD>
 %
 %#      my $part_pkg = qsearchs( 'part_pkg', { pkgpart => $_->pkgpart } );
 %      my $part_pkg = $_->part_pkg;
 %
-%      my $pkg = $part_pkg->pkg;
-%      my $comment = $part_pkg->comment;
-%      my $pkgview = "${p}view/cust_main.cgi?$custnum#cust_pkg$pkgnum";
+%      my $pkg_comment = $part_pkg->pkg_comment(nopkgpart => 1);
+%      my $show = $curuser->default_customer_view =~ /^(jumbo|packages)$/
+%                   ? ''
+%                   : ';show=packages';
+%      my $frag = "cust_pkg$pkgnum"; #hack for IE ignoring real #fragment
+%      my $pkgview = "${p}view/cust_main.cgi?custnum=$custnum$show;fragment=$frag#$frag";
 %      my @cust_svc = @{shift @lol_cust_svc};
 %      #my(@cust_svc) = qsearch( 'cust_svc', { 'pkgnum' => $_->pkgnum } );
 %      my $rowspan = scalar(@cust_svc) || 1;
 %
-%      print $n1, qq!<TD CLASS="grid" BGCOLOR="$bgcolor"  ROWSPAN=$rowspan><A HREF="$pkgview"><FONT SIZE=-1>$pkg - $comment</FONT></A></TD>!;
+%      print $n1, qq!<TD CLASS="grid" BGCOLOR="$bgcolor"  ROWSPAN=$rowspan><A HREF="$pkgview"><FONT SIZE=-1>$pkg_comment</FONT></A></TD>!;
 %
 %      my($n2)='';
 %      foreach my $cust_svc ( @cust_svc ) {
 %         my($label, $value, $svcdb) = $cust_svc->label;
 %         my($svcnum) = $cust_svc->svcnum;
 %         my($sview) = $p.'view';
-%         print $n2,qq!<TD CLASS="grid" BGCOLOR="$bgcolor" ><A HREF="$sview/$svcdb.cgi?$svcnum"><FONT SIZE=-1>$label</FONT></A></TD>!,
-%               qq!<TD CLASS="grid" BGCOLOR="$bgcolor" ><A HREF="$sview/$svcdb.cgi?$svcnum"><FONT SIZE=-1>$value</FONT></A></TD>!;
+%         print $n2,
+%           qq!<TD CLASS="grid" BGCOLOR="$bgcolor" >!. FS::UI::Web::svc_link($m, $cust_svc->part_svc, $cust_svc) . qq!</TD> !.
+%           qq!<TD CLASS="grid" BGCOLOR="$bgcolor" >!. FS::UI::Web::svc_label_link($m, $cust_svc->part_svc, $cust_svc) . qq!</TD> !;
 %         $n2="</TR><TR>";
 %      }
 %
 %  || lc($a->first) cmp lc($b->first);;
 %}
 %
+%sub display_custnum_sort {
+%  $a->display_custnum <=> $b->display_custnum;
+%}
+%
 %sub custnum_sort {
 %  $a->getfield('custnum') <=> $b->getfield('custnum');
 %}
 %
 %  my $custnum = $cgi->param('custnum_text');
 %  $custnum =~ s/\D//g;
-%  $custnum =~ /^(\d{1,23})$/ or eidiot "Illegal customer number\n";
+%  $custnum =~ /^(\d{1,23})$/ or errorpage("Illegal customer number");
 %  $custnum = $1;
 %  
 %  [ qsearchs('cust_main', { 'custnum' => $custnum } ) ];
 %
 %  my($card)=$cgi->param('card');
 %  $card =~ s/\D//g;
-%  $card =~ /^(\d{13,16})$/ or eidiot "Illegal card number\n";
+%  $card =~ /^(\d{13,16})$/ or errorpage("Illegal card number");
 %  my($payinfo)=$1;
 %
 %  [ qsearch('cust_main',{'payinfo'=>$payinfo, 'payby'=>'CARD'}),
 %
 %sub referralsearch {
 %  $cgi->param('referral_custnum') =~ /^(\d+)$/
-%    or eidiot "Illegal referral_custnum";
+%    or errorpage("Illegal referral_custnum");
 %  my $cust_main = qsearchs('cust_main', { 'custnum' => $1 } )
-%    or eidiot "Customer $1 not found";
+%    or errorpage("Customer $1 not found");
 %  my $depth;
 %  if ( $cgi->param('referral_depth') ) {
 %    $cgi->param('referral_depth') =~ /^(\d+)$/
-%      or eidiot "Illegal referral_depth";
+%      or errorpage("Illegal referral_depth");
 %    $depth = $1;
 %  } else {
 %    $depth = 1;
 %  }
 %
 %  $cgi->param('last_text') =~ /^([\w \,\.\-\']*)$/
-%    or eidiot "Illegal last name";
+%    or errorpage("Illegal last name");
 %  my($last)=$1;
 %
 %  if ( $last_type{'Exact'} || $last_type{'Fuzzy'} ) {
 %  }
 %
 %  if ( $last_type{'Fuzzy'} || $last_type{'All'} ) {
-%    push @cust_main, FS::cust_main->fuzzy_search( { 'last' => $last } );
+%    push @cust_main, FS::cust_main::Search->fuzzy_search( { 'last' => $last } );
 %  }
 %
 %  #if ($last_type{'Sound-alike'}) {
 %
 %  $cgi->param('company_text') =~
 %    /^([\w \!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\=]*)$/
-%      or eidiot "Illegal company";
+%      or errorpage("Illegal company");
 %  my $company = $1;
 %
 %  if ( $company_type{'Exact'} || $company_type{'Fuzzy'} ) {
 %  }
 %
 %  if ( $company_type{'Fuzzy'} || $company_type{'All'} ) {
-%    push @cust_main, FS::cust_main->fuzzy_search( { 'company' => $company } );
+%    push @cust_main, FS::cust_main::Search->fuzzy_search( { 'company' => $company } );
 %  }
 %
 %  if ($company_type{'Sound-alike'}) {
 %
 %  $cgi->param('address2_text') =~
 %    /^([\w \!\@\#\$\%\&\(\)\-\+\;\:\'\"\,\.\?\/\=]*)$/
-%      or eidiot "Illegal address2";
+%      or errorpage("Illegal address2");
 %  my $address2 = $1;
 %
 %  push @cust_main, qsearch( 'cust_main',
 %                            { 'address2' => { 'op'    => 'ILIKE',
 %                                              'value' => $address2 } } );
 %  push @cust_main, qsearch( 'cust_main',
-%                            { 'address2' => { 'op'    => 'ILIKE',
-%                                              'value' => $address2 } } )
-%    if defined dbdef->table('cust_main')->column('ship_last');
+%                            { 'ship_address2' => { 'op'    => 'ILIKE',
+%                                                   'value' => $address2 } } );
 %
 %  \@cust_main;
 %}
 %  } elsif ( $phone =~ /^(\d{3,4})$/ ) {
 %    $phone = $1;
 %  } else {
-%    eidiot gettext('illegal_phone'). ": $phone";
+%    errorpage(gettext('illegal_phone'). ": $phone");
 %  }
 %
 %  my @fields = qw(daytime night fax);
 %
 %  \@cust_main;
 %}
-%
-%
-