*finally* seems to be working under Mason. sheesh.
[freeside.git] / httemplate / search / cust_main.cgi
index a139f0e..b962c7c 100755 (executable)
@@ -1,27 +1,9 @@
 <%
-#<!-- $Id: cust_main.cgi,v 1.15 2001-12-03 08:41:43 ivan Exp $ -->
-
-use strict;
-#use vars qw( $conf %ncancelled_pkgs %all_pkgs $cgi @cust_main $sortby );
-#use vars qw( $conf %all_pkgs $cgi @cust_main $sortby );
-use vars qw( $conf %all_pkgs $cgi @cust_main $sortby $orderby $maxrecords $limit $offset );
-use CGI;
-use CGI::Carp qw(fatalsToBrowser);
-use IO::Handle;
-use String::Approx qw(amatch);
-use FS::UID qw(dbh cgisuidsetup);
-use FS::Record qw(qsearch qsearchs dbdef jsearch);
-use FS::CGI qw(header menubar eidiot popurl table);
-use FS::cust_main;
-use FS::cust_svc;
-
-$cgi = new CGI;
-cgisuidsetup($cgi);
-
-$conf = new FS::Conf;
-$maxrecords = $conf->config('maxsearchrecordsperpage');
-
-my $cache;
+
+my $conf = new FS::Conf;
+my $maxrecords = $conf->config('maxsearchrecordsperpage');
+
+#my $cache;
 
 #my $monsterjoin = <<END;
 #cust_main left outer join (
@@ -57,36 +39,15 @@ my $cache;
 #) using (custnum)
 #END
 
-my $monsterjoin = <<END;
-cust_main left outer join (
-  ( cust_pkg left outer join part_pkg using(pkgpart)
-  ) left outer join (
-    (
-      (
-        ( cust_svc left outer join part_svc using (svcpart)
-        ) left outer join (
-          svc_acct left outer join (
-            select svcnum, domain, catchall from svc_domain
-            ) as svc_acct_domsvc (
-              svc_acct_svcnum, svc_acct_domain, svc_acct_catchall
-          ) on svc_acct.domsvc = svc_acct_domsvc.svc_acct_svcnum
-        ) using (svcnum)
-      ) left outer join svc_domain using(svcnum)
-    ) left outer join svc_forward using(svcnum)
-  ) using (pkgnum)
-) using (custnum)
-END
-
-$orderby = ''; #removeme
-
-$limit = '';
+my $limit = '';
 $limit .= "LIMIT $maxrecords" if $maxrecords;
 
-$offset = $cgi->param('offset') || 0;
+my $offset = $cgi->param('offset') || 0;
 $limit .= " OFFSET $offset" if $offset;
 
 my $total;
 
+my(@cust_main, $sortby, $orderby);
 if ( $cgi->param('browse') ) {
   my $query = $cgi->param('browse');
   if ( $query eq 'custnum' ) {
@@ -128,7 +89,7 @@ if ( $cgi->param('browse') ) {
     or die dbh->errstr. " doing $statement";
   $sth->execute or die "Error executing \"$statement\": ". $sth->errstr;
 
-  $total = @{$sth->fetchrow_arrayref}[0];
+  $total = $sth->fetchrow_arrayref->[0];
 
   my @just_cust_main = qsearch('cust_main',{}, '',
     "$ncancelled $orderby $limit"
@@ -153,10 +114,21 @@ if ( $cgi->param('browse') ) {
 
 } else {
   @cust_main=();
-  &cardsearch if $cgi->param('card_on') && $cgi->param('card');
-  &lastsearch if $cgi->param('last_on') && $cgi->param('last_text');
-  &companysearch if $cgi->param('company_on') && $cgi->param('company_text');
-  &referralsearch if $cgi->param('referral_custnum');
+  $sortby = \*last_sort;
+
+  push @cust_main, @{&cardsearch}
+    if $cgi->param('card_on') && $cgi->param('card');
+  push @cust_main, @{&lastsearch}
+    if $cgi->param('last_on') && $cgi->param('last_text');
+  push @cust_main, @{&companysearch}
+    if $cgi->param('company_on') && $cgi->param('company_text');
+  push @cust_main, @{&referralsearch}
+    if $cgi->param('referral_custnum');
+
+  if ( $cgi->param('company_on') && $cgi->param('company_text') ) {
+    $sortby = \*company_sort;
+    push @cust_main, @{&companysearch};
+  }
 
   @cust_main = grep { $_->ncancelled_pkgs || ! $_->all_pkgs } @cust_main
     if $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
@@ -164,6 +136,7 @@ if ( $cgi->param('browse') ) {
              && ! $cgi->param('showcancelledcustomers') );
 }
 
+my %all_pkgs;
 if ( $conf->exists('hidecancelledpackages' ) ) {
   %all_pkgs = map { $_->custnum => [ $_->ncancelled_pkgs ] } @cust_main;
 } else {
@@ -172,17 +145,28 @@ if ( $conf->exists('hidecancelledpackages' ) ) {
 #%all_pkgs = ();
 
 if ( scalar(@cust_main) == 1 && ! $cgi->param('referral_custnum') ) {
-  print $cgi->redirect(popurl(2). "view/cust_main.cgi?". $cust_main[0]->custnum);
-  exit;
+  if ( $cgi->param('quickpay') eq 'yes' ) {
+    print $cgi->redirect(popurl(2). "edit/cust_pay.cgi?quickpay=yes;custnum=". $cust_main[0]->custnum);
+  } else {
+    print $cgi->redirect(popurl(2). "view/cust_main.cgi?". $cust_main[0]->custnum);
+  }
+  #exit;
 } elsif ( scalar(@cust_main) == 0 ) {
+%>
+<!-- mason kludge -->
+<%
   eidiot "No matching customers found!\n";
 } else { 
+%>
+<!-- mason kludge -->
+<%
 
   $total ||= scalar(@cust_main);
   print header("Customer Search Results",menubar(
     'Main Menu', popurl(2)
   )), "$total matching customers found ";
 
+  #begin pager
   my $pager = '';
   if ( $total != scalar(@cust_main) && $maxrecords ) {
     unless ( $offset == 0 ) {
@@ -207,6 +191,7 @@ if ( scalar(@cust_main) == 1 && ! $cgi->param('referral_custnum') ) {
                 '"><B><FONT SIZE="+1">Next</FONT></B></A> ';
     }
   }
+  #end pager
   
   if ( $cgi->param('showcancelledcustomers') eq '0' #see if it was set by me
        || ( $conf->exists('hidecancelledcustomers')
@@ -298,7 +283,12 @@ END
     }
 
     #my($rowspan) = scalar(@{$all_pkgs{$custnum}});
-    my $view = $p. 'view/cust_main.cgi?'. $custnum;
+    my $view;
+    if ( defined $cgi->param('quickpay') && $cgi->param('quickpay') eq 'yes' ) {
+      $view = $p. 'edit/cust_pay.cgi?quickpay=yes;custnum='. $custnum;
+    } else {
+      $view = $p. 'view/cust_main.cgi?'. $custnum;
+    }
     print <<END;
     <TR>
       <TD ROWSPAN=$rowspan><A HREF="$view"><FONT SIZE=-1>$custnum</FONT></A></TD>
@@ -350,7 +340,7 @@ END
 
 }
 
-undef $cache; #does this help?
+#undef $cache; #does this help?
 
 #
 
@@ -375,8 +365,7 @@ sub cardsearch {
   $card =~ /^(\d{13,16})$/ or eidiot "Illegal card number\n";
   my($payinfo)=$1;
 
-  push @cust_main, qsearch('cust_main',{'payinfo'=>$payinfo, 'payby'=>'CARD'});
-  $sortby=\*last_sort;
+  [ qsearch('cust_main',{'payinfo'=>$payinfo, 'payby'=>'CARD'}) ];
 }
 
 sub referralsearch {
@@ -392,12 +381,12 @@ sub referralsearch {
   } else {
     $depth = 1;
   }
-  push @cust_main, $cust_main->referral_cust_main($depth);
-  $sortby=\*last_sort;
+  [ $cust_main->referral_cust_main($depth) ];
 }
 
 sub lastsearch {
   my(%last_type);
+  my @cust_main;
   foreach ( $cgi->param('last_type') ) {
     $last_type{$_}++;
   }
@@ -406,17 +395,18 @@ sub lastsearch {
     or eidiot "Illegal last name";
   my($last)=$1;
 
-  if ( $last_type{'Exact'}
-       && ! $last_type{'Fuzzy'} 
-     #  && ! $last_type{'Sound-alike'}
-  ) {
+#  if ( $last_type{'Exact'}
+#       && ! $last_type{'Fuzzy'} 
+#     #  && ! $last_type{'Sound-alike'}
+#  ) {
 
     push @cust_main, qsearch('cust_main',{'last'=>$last});
 
     push @cust_main, qsearch('cust_main',{'ship_last'=>$last})
       if defined dbdef->table('cust_main')->column('ship_last');
 
-  } else {
+#  } else {
+  if ( $last_type{'Fuzzy'} ) {
 
     &FS::cust_main::check_and_rebuild_fuzzyfiles;
     my $all_last = &FS::cust_main::all_last;
@@ -438,12 +428,13 @@ sub lastsearch {
     }
 
   }
-  $sortby=\*last_sort;
+  \@cust_main;
 }
 
 sub companysearch {
 
   my(%company_type);
+  my @cust_main;
   foreach ( $cgi->param('company_type') ) {
     $company_type{$_}++ 
   };
@@ -452,17 +443,18 @@ sub companysearch {
     or eidiot "Illegal company";
   my($company)=$1;
 
-  if ( $company_type{'Exact'}
-       && ! $company_type{'Fuzzy'} 
-     #  && ! $company_type{'Sound-alike'}
-  ) {
+#  if ( $company_type{'Exact'}
+#       && ! $company_type{'Fuzzy'} 
+#     #  && ! $company_type{'Sound-alike'}
+#  ) {
 
     push @cust_main, qsearch('cust_main',{'company'=>$company});
 
     push @cust_main, qsearch('cust_main',{'ship_company'=>$company})
       if defined dbdef->table('cust_main')->column('ship_last');
 
-  } else {
+#  } else {
+  if ( $company_type{'Fuzzy'} ) {
 
     &FS::cust_main::check_and_rebuild_fuzzyfiles;
     my $all_company = &FS::cust_main::all_company;
@@ -484,7 +476,7 @@ sub companysearch {
     }
 
   }
-  $sortby=\*company_sort;
 
+  \@cust_main;
 }
 %>