add search on harcoded geocode customers w/cch, RT#10376
[freeside.git] / FS / FS / cust_main / Search.pm
index 3813f89..b9a30a5 100644 (file)
@@ -203,7 +203,7 @@ sub smart_search {
     } elsif ( ! $NameParse->parse($value) ) {
 
       my %name = $NameParse->components;
-      $first = $name{'given_name_1'};
+      $first = $name{'given_name_1'} || $name{'initials_1'}; #wtf NameParse, Ed?
       $last  = $name{'surname_1'};
 
     }
@@ -422,6 +422,8 @@ HASHREF.  Valid parameters are
 
 =item status
 
+=item address
+
 =item cancelled_pkgs
 
 bool
@@ -488,7 +490,19 @@ sub search {
     #push @where, $class->$method();
     push @where, FS::cust_main->$method();
   }
-  
+
+  ##
+  # address
+  ##
+  if ( $params->{'address'} =~ /\S/ ) {
+    my $address = dbh->quote('%'. lc($params->{'address'}). '%');
+    push @where, '('. join(' OR ',
+                             map "LOWER($_) LIKE $address",
+                               qw(address1 address2 ship_address1 ship_address2)
+                          ).
+                 ')';
+  }
+
   ##
   # parse cancelled package checkbox
   ##
@@ -506,6 +520,13 @@ sub search {
     if $params->{'no_censustract'};
 
   ##
+  # parse with hardcoded tax location checkbox
+  ##
+
+  push @where, "geocode is not null"
+    if $params->{'with_geocode'};
+
+  ##
   # dates
   ##
 
@@ -651,7 +672,7 @@ sub search {
 
   my $count_query = "SELECT COUNT(*) FROM cust_main $extra_sql";
 
-  my $select = join(', ', 
+  my @select = (
                  'cust_main.custnum',
                  FS::UI::Web::cust_sql_fields($params->{'cust_fields'}),
                );
@@ -663,10 +684,10 @@ sub search {
 
     if ($dbh->{Driver}->{Name} eq 'Pg') {
 
-      $select .= ", array_to_string(array(select pkg from cust_pkg left join part_pkg using ( pkgpart ) where cust_main.custnum = cust_pkg.custnum $pkgwhere),'|') as magic";
+      push @select, "array_to_string(array(select pkg from cust_pkg left join part_pkg using ( pkgpart ) where cust_main.custnum = cust_pkg.custnum $pkgwhere),'|') as magic";
 
     }elsif ($dbh->{Driver}->{Name} =~ /^mysql/i) {
-      $select .= ", GROUP_CONCAT(pkg SEPARATOR '|') as magic";
+      push @select, "GROUP_CONCAT(pkg SEPARATOR '|') as magic";
       $addl_from .= " LEFT JOIN part_pkg using ( pkgpart )";
     }else{
       warn "warning: unknown database type ". $dbh->{Driver}->{Name}. 
@@ -690,6 +711,21 @@ sub search {
 
   }
 
+  if ( $params->{'with_geocode'} ) {
+
+    unshift @extra_headers, 'Tax location override', 'Calculated tax location';
+    unshift @extra_fields, sub { my $c = shift; $c->get('geocode'); },
+                           sub { my $c = shift;
+                                 $c->set('geocode', '');
+                                 $c->geocode('cch'); #XXX only cch right now
+                               };
+    push @select, 'geocode';
+    push @select, 'zip' unless grep { $_ eq 'zip' } @select;
+    push @select, 'ship_zip' unless grep { $_ eq 'ship_zip' } @select;
+  }
+
+  my $select = join(', ', @select);
+
   my $sql_query = {
     'table'         => 'cust_main',
     'select'        => $select,