diff options
author | Mark Wells <mark@freeside.biz> | 2016-05-03 12:52:21 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2016-05-03 13:16:55 -0700 |
commit | eb1796299a429ba5cd3b939a65bf5e95abf0086c (patch) | |
tree | 403dd2dafb7137da92128ad8a6a0001e4c7faa9f /FS | |
parent | 755159a8654a2eda89badd1498f8def3a472cb15 (diff) |
email to specific contact classes, 3.x adjustments
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Misc.pm | 7 | ||||
-rw-r--r-- | FS/FS/cust_main.pm | 56 | ||||
-rw-r--r-- | FS/FS/cust_main_Mixin.pm | 5 |
3 files changed, 46 insertions, 22 deletions
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm index e425c4a4b..eedc736ee 100644 --- a/FS/FS/Misc.pm +++ b/FS/FS/Misc.pm @@ -256,6 +256,13 @@ sub send_email { push @to, $options{bcc} if defined($options{bcc}); # make sure my @env_to = split(/\s*,\s*/, join(', ', @to)); + # strip display-name from envelope addresses + foreach (@env_to) { + s/^\s*//; + s/\s*$//; + s/^(.*)\s*<(.*@.*)>$/$2/; + } + local $@; # just in case eval { sendmail($message, { transport => $transport, from => $from, diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index ef3ab61a7..41b274320 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -3367,9 +3367,7 @@ sub invoicing_list_emailonly_scalar { Returns a list of contacts (L<FS::contact> objects) for the customer. If a list of contact classnums is given, returns only contacts in those -classes. If the pseudo-classnum 'invoice' is given, returns contacts that -are marked as invoice destinations. If '0' is given, also returns contacts -with no class. +classes. If '0' is given, also returns contacts with no class. If no arguments are given, returns all contacts for the customer. @@ -3379,18 +3377,15 @@ sub contact_list { my $self = shift; my $search = { table => 'contact', - select => 'contact.*, cust_contact.invoice_dest', - addl_from => ' JOIN cust_contact USING (contactnum)', - extra_sql => ' WHERE cust_contact.custnum = '.$self->custnum, + select => 'contact.*', + extra_sql => ' WHERE contact.custnum = '.$self->custnum, }; my @orwhere; my @classnums; foreach (@_) { - if ( $_ eq 'invoice' ) { - push @orwhere, 'cust_contact.invoice_dest = \'Y\''; - } elsif ( $_ eq '0' ) { - push @orwhere, 'cust_contact.classnum is null'; + if ( $_ eq '0' ) { + push @orwhere, 'contact.classnum is null'; } elsif ( /^\d+$/ ) { push @classnums, $_; } else { @@ -3399,7 +3394,7 @@ sub contact_list { } if (@classnums) { - push @orwhere, 'cust_contact.classnum IN ('.join(',', @classnums).')'; + push @orwhere, 'contact.classnum IN ('.join(',', @classnums).')'; } if (@orwhere) { $search->{extra_sql} .= ' AND (' . @@ -3413,21 +3408,44 @@ sub contact_list { =item contact_list_email [ CLASSNUM, ... ] Same as L</contact_list>, but returns email destinations instead of contact -objects. +objects. Also accepts 'invoice' as an argument, in which case this will also +return the invoice email address if any. =cut sub contact_list_email { my $self = shift; - my @contacts = $self->contact_list(@_); - my @emails; - foreach my $contact (@contacts) { - foreach my $contact_email ($contact->contact_email) { - push @emails, - $contact->firstlast . ' <' . $contact_email->emailaddress . '>'; + my @classnums; + my $and_invoice; + foreach (@_) { + if (/^invoice$/) { + $and_invoice = 1; + } else { + push @classnums, $_; + } + } + my %emails; + # if the only argument passed was 'invoice' then no classnums are + # intended, so skip this. + if ( @classnums ) { + my @contacts = $self->contact_list(@classnums); + foreach my $contact (@contacts) { + foreach my $contact_email ($contact->contact_email) { + # unlike on 4.x, we have a separate list of invoice email + # destinations. + # make sure they're not redundant with contact emails + my $dest = $contact->firstlast . ' <' . $contact_email->emailaddress . '>'; + $emails{ $contact_email->emailaddress } = $dest; + } + } + } + if ( $and_invoice ) { + foreach my $email ($self->invoicing_list_emailonly) { + my $dest = $self->name_short . ' <' . $email . '>'; + $emails{ $email } ||= $dest; } } - @emails; + values %emails; } =item referral_custnum_cust_main diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index 94e6eaa29..dee9aa831 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -469,9 +469,8 @@ sub email_search_result { # 3.x: false laziness with msg_template.pm; on 4.x, all email notices # are generated from templates and this case goes away my @classes; - if ( $opt{'to_contact_classnum'} ) { - my $classnum = $opt{'to_contact_classnum'}; - @classes = ref($classnum) ? @$classnum : split(',', $classnum); + if ( $to_contact_classnum ) { + @classes = ref($to_contact_classnum) ? @$to_contact_classnum : split(',', $to_contact_classnum); } if (!@classes) { @classes = ( 'invoice' ); |