Merge branch 'bug_9103' into 3.12-master

This commit is contained in:
Jared Camins-Esakov 2013-03-19 22:51:01 -04:00
commit 252ed24410
5 changed files with 87 additions and 74 deletions

View File

@ -919,13 +919,7 @@ sub _send_message_by_email {
status => 'failed' } );
return;
}
my $which_address = C4::Context->preference('AutoEmailPrimaryAddress');
# If the system preference is set to 'first valid' (value == OFF), look up email address
if ($which_address eq 'OFF') {
$to_address = GetFirstValidEmailAddress( $message->{'borrowernumber'} );
} else {
$to_address = $member->{$which_address};
}
$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?

View File

@ -66,6 +66,7 @@ BEGIN {
&getidcity
&GetFirstValidEmailAddress
&GetNoticeEmailAddress
&GetAge
&GetCities
@ -1357,6 +1358,35 @@ sub GetFirstValidEmailAddress {
}
}
=head2 GetNoticeEmailAddress
$email = GetNoticeEmailAddress($borrowernumber);
Return the email address of borrower used for notices, given the borrowernumber.
Returns the empty string if no email address.
=cut
sub GetNoticeEmailAddress {
my $borrowernumber = shift;
my $which_address = C4::Context->preference("AutoEmailPrimaryAddress");
# if syspref is set to 'first valid' (value == OFF), look up email 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'} || '';
}
=head2 GetExpiryDate
$expirydate = GetExpiryDate($categorycode, $dateenrolled);

View File

@ -1859,14 +1859,7 @@ sub _koha_notify_reserve {
my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber);
# Try to get the borrower's email address
my $to_address;
my $which_address = C4::Context->preference('AutoEmailPrimaryAddress');
# If the system preference is set to 'first valid' (value == OFF), look up email address
if ($which_address eq 'OFF') {
$to_address = C4::Members::GetFirstValidEmailAddress( $borrowernumber );
} else {
$to_address = $borrower->{$which_address};
}
my $to_address = C4::Members::GetNoticeEmailAddress($borrowernumber);
my $letter_code;
my $print_mode = 0;

View File

@ -450,7 +450,7 @@ END_SQL
# <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
my $borrower_sql = <<'END_SQL';
SELECT distinct(issues.borrowernumber), firstname, surname, address, address2, city, zipcode, country, email
SELECT distinct(issues.borrowernumber), firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email
FROM issues,borrowers,categories
WHERE issues.borrowernumber=borrowers.borrowernumber
AND borrowers.categorycode=categories.categorycode
@ -478,24 +478,26 @@ END_SQL
$sth->execute(@borrower_parameters);
$verbose and warn $borrower_sql . "\n $branchcode | " . $overdue_rules->{'categorycode'} . "\n ($mindays, $maxdays)\nreturns " . $sth->rows . " rows";
while ( my ( $borrowernumber, $firstname, $lastname,
$address1, $address2, $city, $postcode, $country, $email
) = $sth->fetchrow )
{
$verbose and warn "borrower $firstname, $lastname ($borrowernumber) has items triggering level $i.";
while ( my $data = $sth->fetchrow_hashref ) {
my $borrowernumber = $data->{'borrowernumber'};
my $borr =
$data->{'firstname'} . ', '
. $data->{'surname'} . ' ('
. $borrowernumber . ')';
$verbose
and warn "borrower $borr has items triggering level $i.";
@emails_to_use = ();
if ( !$nomail) {
if ( @emails ) {
my $memberinfos = C4::Members::GetMember(borrowernumber => $borrowernumber);
my $notice_email =
C4::Members::GetNoticeEmailAddress($borrowernumber);
unless ($nomail) {
if (@emails) {
foreach (@emails) {
push @emails_to_use, $memberinfos->{$_}
if ($memberinfos->{$_} ne '');
push @emails_to_use, $data->{$_} if ( $data->{$_} );
}
}
else {
$email =
C4::Members::GetFirstValidEmailAddress($borrowernumber);
push @emails_to_use, $email if ($email ne '');
push @emails_to_use, $notice_email if ($notice_email);
}
}
@ -513,7 +515,7 @@ END_SQL
#action taken is debarring
C4::Members::DebarMember($borrowernumber, '9999-12-31');
$verbose and warn "debarring $borrowernumber $firstname $lastname\n";
$verbose and warn "debarring $borr\n";
}
my @params = ($listall ? ( $borrowernumber , 1 , $MAX ) : ( $borrowernumber, $mindays, $maxdays ));
$verbose and warn "STH2 PARAMS: borrowernumber = $borrowernumber, mindays = $mindays, maxdays = $maxdays";
@ -567,57 +569,35 @@ END_SQL
}
$letter->{'content'} =~ s/\<[^<>]*?\>//g; # Now that we've warned about them, remove them.
$letter->{'content'} =~ s/\<[^<>]*?\>//g; # 2nd pass for the double nesting.
if ($nomail) {
if ( !$nomail && scalar @emails_to_use ) {
C4::Letters::EnqueueLetter(
{ letter => $letter,
borrowernumber => $borrowernumber,
message_transport_type => 'email',
from_address => $admin_email_address,
to_address => join(',', @emails_to_use),
}
);
} else {
# if not sent by email then print
push @output_chunks,
prepare_letter_for_printing(
{ letter => $letter,
borrowernumber => $borrowernumber,
firstname => $firstname,
lastname => $lastname,
address1 => $address1,
address2 => $address2,
city => $city,
postcode => $postcode,
country => $country,
email => $email,
firstname => $data->{'firstname'},
lastname => $data->{'surname'},
address1 => $data->{'address'},
address2 => $data->{'address2'},
city => $data->{'city'},
postcode => $data->{'zipcode'},
country => $data->{'country'},
email => $notice_email,
itemcount => $itemcount,
titles => $titles,
outputformat => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : '',
}
);
} else {
if (scalar(@emails_to_use) > 0 ) {
C4::Letters::EnqueueLetter(
{ letter => $letter,
borrowernumber => $borrowernumber,
message_transport_type => 'email',
from_address => $admin_email_address,
to_address => join(',', @emails_to_use),
}
);
} else {
# If we don't have an email address for this patron, send it to the admin to deal with.
push @output_chunks,
prepare_letter_for_printing(
{ letter => $letter,
borrowernumber => $borrowernumber,
firstname => $firstname,
lastname => $lastname,
address1 => $address1,
address2 => $address2,
city => $city,
postcode => $postcode,
country => $country,
email => $email,
itemcount => $itemcount,
titles => $titles,
outputformat => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : '',
}
);
}
}
}
$sth->finish;

View File

@ -6,7 +6,7 @@
use strict;
use warnings;
use Test::More tests => 20;
use Test::More tests => 22;
use Data::Dumper;
BEGIN {
@ -22,6 +22,7 @@ my $BRANCHCODE = 'CPL';
my $CHANGED_FIRSTNAME = "Marry Ann";
my $EMAIL = "Marie\@email.com";
my $EMAILPRO = "Marie\@work.com";
my $ETHNICITY = "German";
my $PHONE = "555-12123";
@ -77,12 +78,14 @@ $member->{firstname} = $CHANGED_FIRSTNAME;
$member->{email} = $EMAIL;
$member->{ethnicity} = $ETHNICITY;
$member->{phone} = $PHONE;
$member->{emailpro} = $EMAILPRO;
ModMember(%$member);
my $changedmember=GetMemberDetails("",$CARDNUMBER);
ok ( $changedmember->{firstname} eq $CHANGED_FIRSTNAME &&
$changedmember->{email} eq $EMAIL &&
$changedmember->{ethnicity} eq $ETHNICITY &&
$changedmember->{phone} eq $PHONE
$changedmember->{phone} eq $PHONE &&
$changedmember->{emailpro} eq $EMAILPRO
, "Member Changed")
or diag("Mismatching member details: ".Dumper($member, $changedmember));
@ -154,6 +157,19 @@ is ($age, "18", "Age correct");
$age=GetAge("2011-01-19", "1992-01-19");
is ($age, "-19", "Birthday In the Future");
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'OFF' );
C4::Context->clear_syspref_cache();
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
is ($notice_email, $EMAIL, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is off");
C4::Context->set_preference( 'AutoEmailPrimaryAddress', 'emailpro' );
C4::Context->clear_syspref_cache();
my $notice_email = GetNoticeEmailAddress($member->{'borrowernumber'});
is ($notice_email, $EMAILPRO, "GetNoticeEmailAddress returns correct value when AutoEmailPrimaryAddress is emailpro");
# clean up
DelMember($member->{borrowernumber});
$results = Search($CARDNUMBER,undef,undef,undef,["cardnumber"]);