From cf0b940a63f4b7efebf0ea4360ed80f37f476212 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 | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index bab7d0efec..515b4b8e04 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -1288,7 +1288,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 @@ -1313,45 +1313,36 @@ 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 $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; - } elsif ($allowreturntobranch eq 'homeorholdingbranch' && $branch ne $item->homebranch && $branch ne $item->holdingbranch) { + $message = $item->holdingbranch; + } elsif ($allowreturntobranch eq 'homeorholdingbranch' && $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 @@ -2177,7 +2168,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