From 6119625608376dd55cf3cd53c04513d1934737c4 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 --- C4/Circulation.pm | 50 +++++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 30 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index d3d1f26bb3..e285dfefda 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.39.5