Bug 9103: overdue_notices.pl should use AutoEmailPrimaryAddress syspref
Script overdue_notices.pl creates a printed letter if borrower as no email. Actually, unless --email option is used, first valid email of borrower is used. Email field should depend on AutoEmailPrimaryAddress syspref like in other letter creations. Signed-off-by: MJ Ray <mjr@phonecoop.coop> Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de> All tests and QA script pass. Following test plan from Julien Sicot from Bugzilla: - with patron's email address specified on "primary email" field AND syspref "AutoEmailPrimaryAddress" on "home" => notice sent to patron | OK - with patron's email address specified on "secondary email" field AND syspref "AutoEmailPrimaryAddress" on "work" => notice sent to patron | OK - with patron's email address specified on "alternate email" field AND syspref "AutoEmailPrimaryAddress" on "alternate" => notice sent to patron | OK - with patron's email address specified on "secondary email" OR "alternate email" field AND syspref "AutoEmailPrimaryAddress" on "home" => no notice sent to patron, overdue notice sent to koha admin | OK - with patron's email address specified on "primary email" OR - with patron's email address specified on "primary email" field AND syspref "AutoEmailPrimaryAddress" on "home" => notice sent to patron | OK - with patron's email address specified on "secondary email" field AND syspref "AutoEmailPrimaryAddress" on "work" => notice sent to patron | OK - with patron's email address specified on "alternate email" field AND syspref "AutoEmailPrimaryAddress" on "alternate" => notice sent to patron | OK - with patron's email address specified on "secondary email" OR "alternate email" field AND syspref "AutoEmailPrimaryAddress" on "home" => no notice sent to patron, overdue notice sent to koha admin | OK - with patron's email address specified on "primary email" OR "secondary email" field AND syspref "AutoEmailPrimaryAddress" on "alternate" => no notice sent to patron, overdue notice sent to koha admin | OK - with patron's email address specified on "primary email" OR "secondary email" OR "alternate email" field and syspref "AutoEmailPrimaryAddress" on "first valid" => notice sent to patron | OK"secondary email" field AND syspref "AutoEmailPrimaryAddress" on "alternate" => no notice sent to patron, overdue notice sent to koha admin | OK - with patron's email address specified on "primary email" OR "secondary email" OR "alternate email" field and syspref "AutoEmailPrimaryAddress" on "first valid" => notice sent to patron | OK Note: Options for AutoEmailPrimaryAddress should be like the field names on the patron form (primary, secondary...), but this is outside the scope of this patch. Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
This commit is contained in:
parent
9b95795edc
commit
7061e74676
4 changed files with 69 additions and 72 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue