From 19b409c53a996f83c58ad162dc1b8674ef2e398c Mon Sep 17 00:00:00 2001 From: simith Date: Tue, 12 Aug 2014 15:59:28 -0400 Subject: [PATCH] Bug 12532 - Redirect guarantee email to guarantor All email message placed in message_queue table will be affected. Patch updated; system preference EnableRedirectGuaranteeEmail added to enable this feature. Testing: I Apply the patch II Run updatedatabase.pl 0) Enable EnhancedMessagingPreferences preference; 0) Enable EnableRedirectGuaranteeEmail preference; 1) Select a patron with child; 2) Enable Item checkout -> email in patron messaging preferences; 3) Select the patron's child; 4) Checkout an item; 5) Valide child checkout message in patron's inbox; sponsored by the ville de victoriaville --- 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(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index a11c862..779247e 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -1115,23 +1115,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'}); diff --git a/C4/Members.pm b/C4/Members.pm index 4fb845d..129f921 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -1553,22 +1553,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 diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 9020b4b..e2f83be 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -116,6 +116,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'), ('EnableOpacSearchHistory','1','YesNo','Enable or disable opac search history',''), ('EnableSearchHistory','0','','Enable or disable search history','YesNo'), +('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'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index bd39629..a0f883a 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -9804,6 +9804,13 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.19.00.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) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref index aa567c3..7126d1a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref @@ -139,6 +139,12 @@ 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. "Norwegian patron database": - - pref: NorwegianPatronDBEnable -- 1.9.1