@@ -, +, @@ --- C4/Letters.pm | 30 ++++++++++---------- C4/Members.pm | 32 ++++++++++++++-------- installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 7 +++++ .../prog/en/modules/admin/preferences/patrons.pref | 6 ++++ 5 files changed, 50 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 @@ -1500,22 +1500,30 @@ 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 $enableRedirectGuaranteeEmail = C4::Context->preference("EnableRedirectGuaranteeEmail"); + if (!$enableRedirectGuaranteeEmail){ + $borrowerNumberToSendEmail = $borrowernumber; + $guarantorid = undef; + } 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 --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -111,6 +111,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('EnableBorrowerFiles','0',NULL,'If enabled, allows librarians to upload and attach arbitrary files to a borrower record.','YesNo'), ('EnableSearchHistory','0','','Enable or disable search history','YesNo'), ('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''), +('EnableRedirectGuaranteeEmail', '0', NULL, 'Enable the ability to redirect guarantee email messages to guarantor.', 'YesNo'), ('EnhancedMessagingPreferences','0','','If ON, allows patrons to select to receive additional messages about items due or nearly due.','YesNo'), ('expandedSearchOption','0',NULL,'If ON, set advanced search to be expanded by default','YesNo'), ('ExpireReservesMaxPickUpDelay','0','','Enabling this allows holds to expire automatically if they have not been picked by within the time period specified in ReservesMaxPickUpDelay','YesNo'), --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -8603,6 +8603,13 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "XXX"; +if ( CheckVersion($DBversion) ) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('EnableRedirectGuaranteeEmail','0',NULL,'Enable the ability to redirect guarantee email messages to guarantor.','YesNo')"); + print "Upgrade to $DBversion done (Bug 12532 - Redirect guarantee email to guarantor)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref @@ -138,3 +138,9 @@ Patrons: - pref: CardnumberLength - "characters long. The length can be a single number to specify an exact length, a range separated by a comma (i.e., 'Min,Max'), or a maximum with no minimum (i.e., ',Max')." - "If 'cardnumber' is included in the BorrowerMandatoryField list, the minimum length, if not specified here, defaults to one." + - + - pref: EnableRedirectGuaranteeEmail + choices: + yes: Do + no: "Don't" + - enable the ability to redirect guarantee email messages to guarantor. All email message placed in message_queue table will be affected. --