Merge branch 'bug_9103' into 3.12-master
This commit is contained in:
commit
252ed24410
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"]);
|
||||
|
|
|
|||
Loading…
Reference in New Issue