From 86d0a7354912e74d4f3188db45eeaa41c39e38da 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 Signed-off-by: Baptiste Wojtkowski Signed-off-by: Mathieu Saby Signed-off-by: Martin Renvoize --- C4/Circulation.pm | 50 +++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 798e73eb429..5cac2810226 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1375,7 +1375,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 @@ -1400,49 +1400,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 @@ -2392,7 +2382,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.52.0