From 41b3f2d4cebc4b8f3187aecccf4fc66030019203 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Wed, 17 Feb 2021 14:43:01 +0000 Subject: [PATCH] Bug 7376: Allow passing 'transferbranch' to CanBookBeReturned This patch adds the optional 'tranferbranch' parameter to the CanBookBeReturned routine. This allows for passing the correct 'ReturnToX' transfer to be tested at return time for transfer limit restrictions. Signed-off-by: Julian Maurice --- C4/Circulation.pm | 50 +++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index d3d1f26b..e285dfef 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1358,7 +1358,7 @@ sub CanBookBeIssued { =head2 CanBookBeReturned - ($returnallowed, $message) = CanBookBeReturned($item, $branch) + ($returnallowed, $message) = CanBookBeReturned($item, $branch, [$transferbranch]) Check whether the item can be returned to the provided branch @@ -1383,49 +1383,39 @@ Returns: =cut sub CanBookBeReturned { - my ( $item, $branch ) = @_; + my ( $item, $returnbranch, $transferbranch ) = @_; my $allowreturntobranch = C4::Context->preference("AllowReturnToBranch") || 'anywhere'; # assume return is allowed to start - my $allowed = 1; - my $to_branch = $branch; + my $allowed = 1; my $message; # identify all cases where return is forbidden - if ( $allowreturntobranch eq 'homebranch' && $branch ne $item->homebranch ) { + if ( $allowreturntobranch eq 'homebranch' && $returnbranch ne $item->homebranch ) { $allowed = 0; - $message = $to_branch = $item->homebranch; - } elsif ( $allowreturntobranch eq 'holdingbranch' && $branch ne $item->holdingbranch ) { + $message = $item->homebranch; + } elsif ( $allowreturntobranch eq 'holdingbranch' && $returnbranch ne $item->holdingbranch ) { $allowed = 0; - $message = $to_branch = $item->holdingbranch; + $message = $item->holdingbranch; } elsif ( $allowreturntobranch eq 'homeorholdingbranch' - && $branch ne $item->homebranch - && $branch ne $item->holdingbranch ) + && $returnbranch ne $item->homebranch + && $returnbranch ne $item->holdingbranch ) { $allowed = 0; - $message = $to_branch = $item->homebranch; # FIXME: choice of homebranch is arbitrary + $message = $item->homebranch; # FIXME: choice of homebranch is arbitrary } - return ( $allowed, $message ) unless $allowed; - - # Make sure there are no branch transfer limits between item's current - # branch (holdinbranch) and the return branch - my $return_library = Koha::Libraries->find($to_branch); - if ( !$item->can_be_transferred( { to => $return_library } ) ) { - return ( 0, $item->homebranch ); - } - - # Make sure there are no branch transfer limits between - # either homebranch and holdinbranch and the return branch - my $home_library = Koha::Libraries->find( $item->homebranch ); - my $holding_library = Koha::Libraries->find( $item->holdingbranch ); - if ( $item->can_be_transferred( { from => $return_library, to => $holding_library } ) - or $item->can_be_transferred( { from => $return_library, to => $home_library } ) ) - { - return ( 1, undef ); + # identify cases where transfer rules prohibit return + if ( defined($transferbranch) && $allowed ) { + my $from_library = Koha::Libraries->find($returnbranch); + my $to_library = Koha::Libraries->find($transferbranch); + if ( !$item->can_be_transferred( { from => $from_library, to => $to_library } ) ) { + $allowed = 0; + $message = $transferbranch; + } } - return ( 0, $item->homebranch ); + return ( $allowed, $message ); } =head2 CheckHighHolds @@ -2308,7 +2298,7 @@ sub AddReturn { } # check if the return is allowed at this branch - my ( $returnallowed, $message ) = CanBookBeReturned( $item, $branch ); + my ( $returnallowed, $message ) = CanBookBeReturned( $item, $branch, $returnbranch ); unless ($returnallowed) { $messages->{'Wrongbranch'} = { -- 2.30.2