From 6eff2ff494b8b4e8c08cee698192458b005f5f71 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 8 Apr 2022 18:52:09 +0000 Subject: [PATCH] Bug 22042: Block all return actions when BlockReturnOfWithdrawn items is set to block Currently this syspref only bokcs the literal 'return' from a patron, i.e. the checkin It still processes transfers, refunds lost items, updates NotForLoan status etc. We should block all of these things To test: 1 - Set BlockReturnOfWithdrawn to block 2 - Set an item as lost and withdrawn 3 - Check it in 4 - Item is found 5 - Apply patch 6 - Repeat 1-3 7 - Checkin is blocked, item still lost --- C4/Circulation.pm | 15 ++++++++++----- t/db_dependent/Circulation.t | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index aa858a855b..2b9e71bd17 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2097,6 +2097,16 @@ sub AddReturn { } } + if ( $item->withdrawn ) { # book has been cancelled + $messages->{'withdrawn'} = 1; + + # In the case where we block return of withdrawn, we should completely block the return + # without updating item statuses, so we exit early + return ( 0, $messages, $issue, ( $patron ? $patron->unblessed : {} )) + if C4::Context->preference("BlockReturnOfWithdrawnItems"); + } + + # full item data, but no borrowernumber or checkout info (no issue) my $hbr = Koha::CirculationRules->get_return_branch_policy($item); # get the proper branch to which to return the item @@ -2166,11 +2176,6 @@ sub AddReturn { return ( $doreturn, $messages, $issue, $patron_unblessed); } - if ( $item->withdrawn ) { # book has been cancelled - $messages->{'withdrawn'} = 1; - $doreturn = 0 if C4::Context->preference("BlockReturnOfWithdrawnItems"); - } - if ( $item->itemlost and C4::Context->preference("BlockReturnOfLostItems") ) { $doreturn = 0; } diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index b783a8268b..cc4e3c15a4 100755 --- a/t/db_dependent/Circulation.t +++ b/t/db_dependent/Circulation.t @@ -18,7 +18,7 @@ use Modern::Perl; use utf8; -use Test::More tests => 63; +use Test::More tests => 64; use Test::Exception; use Test::MockModule; use Test::Deep qw( cmp_deeply ); @@ -5693,6 +5693,20 @@ subtest "GetSoonestRenewDate tests" => sub { ); }; +subtest 'Tests for BlockReturnOfWithdrawnItems' => sub { + + plan tests => 1; + + t::lib::Mocks::mock_preference('BlockReturnOfWithdrawnItems', 1); + my $item = $builder->build_sample_item(); + $item->withdrawn(1)->itemlost(1)->store; + my @return = AddReturn( $item->barcode, $item->homebranch, 0, undef ); + is_deeply( + \@return, + [ 0, { NotIssued => $item->barcode, withdrawn => 1 }, undef, {} ], "Item returned as withdrawn, no other messages"); + +}; + $schema->storage->txn_rollback; C4::Context->clear_syspref_cache(); $branches = Koha::Libraries->search(); -- 2.30.2