Bug 19444: Do not auto renew if patron is expired and BlockExpiredPatronOpacActions is set
If the patron's account has expired and BlockExpiredPatronOpacActions is set,
we expect auto renewal to be rejected.
Test plan:
Use the automatic_renewals.pl cronjob script to auto renew a checkout
Before this patch, if the patron's account has expired the auto renew was done.
With this patch, it will only be auto renewed if BlockExpiredPatronOpacActions is not set.
Signed-off-by: Claire Gravely <claire.gravely@bsz-bw.de>
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Conflicts:
t/db_dependent/Circulation.t
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit 87680805dd)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
parent
f74fc96595
commit
47448fdff8
|
|
@ -2747,6 +2747,11 @@ sub CanBookBeRenewed {
|
|||
}
|
||||
|
||||
if ( $itemissue->{auto_renew} ) {
|
||||
|
||||
if ( $patron->category->effective_BlockExpiredPatronOpacActions and $patron->is_expired ) {
|
||||
return ( 0, 'auto_account_expired' );
|
||||
}
|
||||
|
||||
if ( defined $issuing_rule->no_auto_renewal_after
|
||||
and $issuing_rule->no_auto_renewal_after ne "" ) {
|
||||
# Get issue_date and add no_auto_renewal_after
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ while ( my $auto_renew = $auto_renews->next ) {
|
|||
or $error eq 'on_reserve'
|
||||
or $error eq 'restriction'
|
||||
or $error eq 'overdue'
|
||||
or $error eq 'auto_account_expired'
|
||||
or $error eq 'auto_too_late'
|
||||
or $error eq 'auto_too_much_oweing'
|
||||
or $error eq 'auto_too_soon' ) {
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 100;
|
||||
use Test::More tests => 101;
|
||||
|
||||
use DateTime;
|
||||
|
||||
|
|
@ -58,7 +58,16 @@ my $itemtype = $builder->build(
|
|||
value => { notforloan => undef, rentalcharge => 0 }
|
||||
}
|
||||
)->{itemtype};
|
||||
my $patron_category = $builder->build({ source => 'Category', value => { categorycode => 'NOT_X', category_type => 'P', enrolmentfee => 0 } });
|
||||
my $patron_category = $builder->build(
|
||||
{
|
||||
source => 'Category',
|
||||
value => {
|
||||
category_type => 'P',
|
||||
enrolmentfee => 0,
|
||||
BlockExpiredPatronOpacActions => -1, # Pick the pref value
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
my $CircControl = C4::Context->preference('CircControl');
|
||||
my $HomeOrHoldingBranch = C4::Context->preference('HomeOrHoldingBranch');
|
||||
|
|
@ -288,13 +297,23 @@ C4::Context->dbh->do("DELETE FROM accountlines");
|
|||
branchcode => $branch,
|
||||
);
|
||||
|
||||
my %expired_borrower_data = (
|
||||
firstname => 'Ça',
|
||||
surname => 'Glisse',
|
||||
categorycode => $patron_category->{categorycode},
|
||||
branchcode => $branch,
|
||||
dateexpiry => dt_from_string->subtract( months => 1 ),
|
||||
);
|
||||
|
||||
my $renewing_borrowernumber = AddMember(%renewing_borrower_data);
|
||||
my $reserving_borrowernumber = AddMember(%reserving_borrower_data);
|
||||
my $hold_waiting_borrowernumber = AddMember(%hold_waiting_borrower_data);
|
||||
my $restricted_borrowernumber = AddMember(%restricted_borrower_data);
|
||||
my $expired_borrowernumber = AddMember(%expired_borrower_data);
|
||||
|
||||
my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber );
|
||||
my $restricted_borrower = GetMember( borrowernumber => $restricted_borrowernumber );
|
||||
my $expired_borrower = GetMember( borrowernumber => $expired_borrowernumber );
|
||||
|
||||
my $bibitems = '';
|
||||
my $priority = '1';
|
||||
|
|
@ -693,6 +712,58 @@ C4::Context->dbh->do("DELETE FROM accountlines");
|
|||
$dbh->do('DELETE FROM accountlines WHERE borrowernumber=?', undef, $renewing_borrowernumber);
|
||||
};
|
||||
|
||||
subtest "auto_account_expired | BlockExpiredPatronOpacActions" => sub {
|
||||
plan tests => 6;
|
||||
my $item_to_auto_renew = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
}
|
||||
});
|
||||
|
||||
$dbh->do('UPDATE issuingrules SET norenewalbefore = 10, no_auto_renewal_after = 11');
|
||||
|
||||
my $ten_days_before = dt_from_string->add( days => -10 );
|
||||
my $ten_days_ahead = dt_from_string->add( days => 10 );
|
||||
|
||||
# Patron is expired and BlockExpiredPatronOpacActions=0
|
||||
# => auto renew is allowed
|
||||
t::lib::Mocks::mock_preference('BlockExpiredPatronOpacActions', 0);
|
||||
my $patron = $expired_borrower;
|
||||
my $checkout = AddIssue( $patron, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->{itemnumber} );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, patron is expired but BlockExpiredPatronOpacActions=0' );
|
||||
Koha::Checkouts->find( $checkout->issue_id )->delete;
|
||||
|
||||
|
||||
# Patron is expired and BlockExpiredPatronOpacActions=1
|
||||
# => auto renew is not allowed
|
||||
t::lib::Mocks::mock_preference('BlockExpiredPatronOpacActions', 1);
|
||||
$patron = $expired_borrower;
|
||||
$checkout = AddIssue( $patron, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->{itemnumber} );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_account_expired', 'Can not auto renew, lockExpiredPatronOpacActions=1 and patron is expired' );
|
||||
Koha::Checkouts->find( $checkout->issue_id )->delete;
|
||||
|
||||
|
||||
# Patron is not expired and BlockExpiredPatronOpacActions=1
|
||||
# => auto renew is allowed
|
||||
t::lib::Mocks::mock_preference('BlockExpiredPatronOpacActions', 1);
|
||||
$patron = $renewing_borrower;
|
||||
$checkout = AddIssue( $patron, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->{itemnumber} );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, BlockExpiredPatronOpacActions=1 but patron is not expired' );
|
||||
Koha::Checkouts->find( $checkout->issue_id )->delete;
|
||||
};
|
||||
|
||||
subtest "GetLatestAutoRenewDate" => sub {
|
||||
plan tests => 5;
|
||||
my $item_to_auto_renew = $builder->build(
|
||||
|
|
|
|||
Loading…
Reference in New Issue