diff options
| author | ivan <ivan> | 2008-04-01 08:43:41 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2008-04-01 08:43:41 +0000 | 
| commit | 0c449daf0d4bcb064515454bd4e8166d612dee8c (patch) | |
| tree | 6b917eb87041ffed232412888e6bbfdc32f179c5 /FS | |
| parent | 8c495658f865ebaf27a0fb19272c2fa95df1a519 (diff) | |
last bit of magic for RT ticket customer auto-association: look for requestor email addresses in cust_main_invoice and svc_acct, closes; RT#1160
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/cust_main.pm | 66 | ||||
| -rw-r--r-- | FS/FS/cust_main_invoice.pm | 11 | 
2 files changed, 77 insertions, 0 deletions
| diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 55796819b..ef7c0d5ce 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -4942,6 +4942,72 @@ sub smart_search {  } +=item email_search + +Accepts the following options: I<email>, the email address to search for.  The +email address will be searched for as an email invoice destination and as an +svc_acct account. + +#Any additional options are treated as an additional qualifier on the search +#(i.e. I<agentnum>). + +Returns a (possibly empty) array of FS::cust_main objects (but usually just +none or one). + +=cut + +sub email_search { +  my %options = @_; + +  local($DEBUG) = 1; + +  my $email = delete $options{'email'}; + +  #we're only being used by RT at the moment... no agent virtualization yet +  #my $agentnums_sql = $FS::CurrentUser::CurrentUser->agentnums_sql; + +  my @cust_main = (); + +  if ( $email =~ /([^@]+)\@([^@]+)/ ) { + +    my ( $user, $domain ) = ( $1, $2 ); + +    warn "$me smart_search: searching for $user in domain $domain" +      if $DEBUG; + +    push @cust_main, +      map $_->cust_main, +          qsearch( { +                     'table'     => 'cust_main_invoice', +                     'hashref'   => { 'dest' => $email }, +                   } +                 ); + +    push @cust_main, +      map  $_->cust_main, +      grep $_, +      map  $_->cust_svc->cust_pkg, +          qsearch( { +                     'table'     => 'svc_acct', +                     'hashref'   => { 'username' => $user, }, +                     'extra_sql' => +                       'AND ( SELECT domain FROM svc_domain +                                WHERE svc_acct.domsvc = svc_domain.svcnum +                            ) = '. dbh->quote($domain), +                   } +                 ); +  } + +  my %saw = (); +  @cust_main = grep { !$saw{$_->custnum}++ } @cust_main; + +  warn "$me smart_search: found ". scalar(@cust_main). " unique customers" +    if $DEBUG; + +  @cust_main; + +} +  =item check_and_rebuild_fuzzyfiles  =cut diff --git a/FS/FS/cust_main_invoice.pm b/FS/FS/cust_main_invoice.pm index 71029d096..11d5a44b7 100644 --- a/FS/FS/cust_main_invoice.pm +++ b/FS/FS/cust_main_invoice.pm @@ -159,6 +159,17 @@ sub address {    }  } +=item cust_main + +Returns the parent customer object (see L<FS::cust_main>). + +=cut + +sub cust_main { +  my $self = shift; +  qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); +} +  =back  =head1 BUGS | 
