@@ -, +, @@ garantor --- C4/Letters.pm | 30 ++++++++++++++++-------------- C4/Members.pm | 27 +++++++++++++++------------ 2 files changed, 31 insertions(+), 26 deletions(-) --- a/C4/Letters.pm +++ a/C4/Letters.pm @@ -926,23 +926,25 @@ sub _send_message_by_email { my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); my $to_address = $message->{'to_address'}; - unless ($to_address) { - unless ($member) { - warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; - _set_message_status( { message_id => $message->{'message_id'}, - status => 'failed' } ); - return; - } - $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} ); - unless ($to_address) { - # warn "FAIL: No 'to_address' and no email for " . ($member->{surname} ||'') . ", borrowernumber ($message->{borrowernumber})"; - # warning too verbose for this more common case? - _set_message_status( { message_id => $message->{'message_id'}, - status => 'failed' } ); - return; + + if ($member) { + my $guarantorid = $member->{'guarantorid'}; + if ($guarantorid){ + $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} ); + } else { + unless ($to_address) { + $to_address = C4::Members::GetNoticeEmailAddress( $message->{'borrowernumber'} ); + } } } + unless ($to_address) { + warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; + _set_message_status( { message_id => $message->{'message_id'}, + status => 'failed' } ); + return; + } + my $utf8 = decode('MIME-Header', $message->{'subject'} ); $message->{subject}= encode('MIME-Header', $utf8); my $subject = encode('utf8', $message->{'subject'}); --- a/C4/Members.pm +++ a/C4/Members.pm @@ -1497,22 +1497,25 @@ Returns the empty string if no email address. sub GetNoticeEmailAddress { my $borrowernumber = shift; + my $dbh = C4::Context->dbh(); + + my $member = C4::Members::GetMember( 'borrowernumber' => $borrowernumber ); + my $guarantorid = $member->{'guarantorid'}; + + my $borrowerNumberToSendEmail = $guarantorid ? $guarantorid : $borrowernumber; my $which_address = C4::Context->preference("AutoEmailPrimaryAddress"); # if syspref is set to 'first valid' (value == OFF), look up email address + my $to_address = $member->{$which_address}; if ( $which_address eq 'OFF' ) { - return GetFirstValidEmailAddress($borrowernumber); - } - # specified email address field - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare( qq{ - SELECT $which_address AS primaryemail - FROM borrowers - WHERE borrowernumber=? - } ); - $sth->execute($borrowernumber); - my $data = $sth->fetchrow_hashref; - return $data->{'primaryemail'} || ''; + $to_address = GetFirstValidEmailAddress($borrowerNumberToSendEmail); + } elsif( $guarantorid ) { + my $guarantor = C4::Members::GetMember( 'borrowernumber' => $guarantorid ); + if ( $guarantor ){ + $to_address = $guarantor->{ $which_address }; + } + } + return $to_address || ''; } =head2 GetExpiryDate --