diff options
author | ivan <ivan> | 2008-04-01 08:43:33 +0000 |
---|---|---|
committer | ivan <ivan> | 2008-04-01 08:43:33 +0000 |
commit | 4d3c77fe23ae72abb72e4cb9f8e77a84b2375e6a (patch) | |
tree | 109f3e3e9feb6f39f1261eb8a9949c453bd883c1 /FS | |
parent | 2f673cd6e61a8c67c4ef89d11cae3e96a7fac306 (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 b58a52c..37f98c6 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -5515,6 +5515,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 71029d0..11d5a44 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 |