fix up smart searching to make the quick payment entry behave better
[freeside.git] / FS / FS / cust_main.pm
index 8956d5b..f4568a8 100644 (file)
@@ -944,10 +944,13 @@ sub replace {
     $old = qsearchs( 'cust_main', { 'custnum' => $self->custnum } );
   }
 
-  if ( $self->payby eq 'COMP' && $self->payby ne $old->payby
-       && $conf->config('users-allow_comp')                  ) {
-    return "You are not permitted to create complimentary accounts."
-      unless grep { $_ eq getotaker } $conf->config('users-allow_comp');
+  my $curuser = $FS::CurrentUser::CurrentUser;
+  if (    $self->payby eq 'COMP'
+       && $self->payby ne $old->payby
+       && ! $curuser->access_right('Complimentary customer')
+     )
+  {
+    return "You are not permitted to create complimentary accounts.";
   }
 
   local($ignore_expired_card) = 1
@@ -1302,9 +1305,12 @@ sub check {
 
   } elsif ( $self->payby eq 'COMP' ) {
 
-    if ( !$self->custnum && $conf->config('users-allow_comp') ) {
+    my $curuser = $FS::CurrentUser::CurrentUser;
+    if (    ! $self->custnum
+         && ! $curuser->access_right('Complimentary customer')
+       )
+    {
       return "You are not permitted to create complimentary accounts."
-        unless grep { $_ eq getotaker } $conf->config('users-allow_comp');
     }
 
     $error = $self->ut_textn('payinfo');
@@ -3664,18 +3670,17 @@ Returns a hex triplet color string for this customer's status.
 
 =cut
 
+use vars qw(%statuscolor);
+%statuscolor = (
+  'prospect'  => '7e0079', #'000000', #black?  naw, purple
+  'active'    => '00CC00', #green
+  'inactive'  => '0000CC', #blue
+  'suspended' => 'FF9900', #yellow
+  'cancelled' => 'FF0000', #red
+);
 
 sub statuscolor {
   my $self = shift;
-
-  my %statuscolor = (
-    'prospect'  => '7e0079', #'000000', #black?  naw, purple
-    'active'    => '00CC00', #green
-    'inactive'  => '0000CC', #blue
-    'suspended' => 'FF9900', #yellow
-    'cancelled' => 'FF0000', #red
-  );
-
   $statuscolor{$self->status};
 }
 
@@ -3697,6 +3702,10 @@ $select_count_pkgs =
   "SELECT COUNT(*) FROM cust_pkg
     WHERE cust_pkg.custnum = cust_main.custnum";
 
+sub select_count_pkgs_sql {
+  $select_count_pkgs;
+}
+
 sub prospect_sql { "
   0 = ( $select_count_pkgs )
 "; }
@@ -3857,6 +3866,11 @@ sub smart_search {
   } elsif ( $search =~ /^\s*(\S.*\S)\s*$/ ) { #value search
 
     my $value = lc($1);
+
+    # remove "(Last, First)" in "Company (Last, First"), otherwise the
+    # full strings the browser remembers won't work
+    $value =~ s/\([\w \,\.\-\']*\)$//; #false laziness w/Record::ut_name
+    
     my $q_value = dbh->quote($value);
 
     #exact
@@ -3880,7 +3894,7 @@ sub smart_search {
       push @cust_main, qsearch( {
         'table'     => 'cust_main',
         'hashref'   => { 'last'     => { 'op'    => 'ILIKE',
-                                         'value' => "%$q_value%" },
+                                         'value' => "%$value%" },
                          %options,
                        },
         'extra_sql' => " AND $agentnums_sql", #agent virtualizaiton
@@ -3888,7 +3902,7 @@ sub smart_search {
       push @cust_main, qsearch( {
         'table'     => 'cust_main',
         'hashref'   => { 'ship_last' => { 'op'     => 'ILIKE',
-                                          'value' => "%$q_value%" },
+                                          'value' => "%$value%" },
                          %options, 
                        },
         'extra_sql' => " AND $agentnums_sql", #agent virtualization
@@ -3898,7 +3912,7 @@ sub smart_search {
       push @cust_main, qsearch( {
         'table'     => 'cust_main',
         'hashref'   => { 'company'  => { 'op'    => 'ILIKE',
-                                         'value' => "%$q_value%" },
+                                         'value' => "%$value%" },
                          %options,
                        },
         'extra_sql' => " AND $agentnums_sql", #agent virtualization
@@ -3906,7 +3920,7 @@ sub smart_search {
       push @cust_main, qsearch(  {
         'table'     => 'cust_main',
         'hashref'   => { 'ship_company' => { 'op'    => 'ILIKE',
-                                             'value' => "%$q_value%" },
+                                             'value' => "%$value%" },
                          %options,
                        },
         'extra_sql' => " AND $agentnums_sql", #agent virtualization
@@ -3929,6 +3943,10 @@ sub smart_search {
 
     }
 
+    #eliminate duplicates
+    my %saw = ();
+    @cust_main = grep { !$saw{$_->custnum}++ } @cust_main;
+
   }
 
   @cust_main;