From 0be52ad33d9f0966332e55068e761d7b2007f49d Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 27 May 2022 12:19:56 +0000 Subject: [PATCH] Bug 30860: Add return_all_items parameter to CanBookBeReserved --- C4/Reserves.pm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 6ff7149edc..6bcae548d4 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -326,7 +326,9 @@ sub AddReserve { $canReserve = &CanBookBeReserved($borrowernumber, $biblionumber, $branchcode, $params) if ($canReserve eq 'OK') { #We can reserve this Item! } - $params are passed directly through to CanItemBeReserved + Accepts param 'return_all_items' which will process all items and return results of + CanItemBeReserved + All other $params are passed directly through to CanItemBeReserved See CanItemBeReserved() for possible return values. @@ -334,6 +336,7 @@ See CanItemBeReserved() for possible return values. sub CanBookBeReserved{ my ($borrowernumber, $biblionumber, $pickup_branchcode, $params) = @_; + my $return_all_items = $params->{return_all_items} // 0; # Check that patron have not checked out this biblio (if AllowHoldsOnPatronsPossessions set) if ( !C4::Context->preference('AllowHoldsOnPatronsPossessions') @@ -388,11 +391,18 @@ sub CanBookBeReserved{ my $canReserve = { status => '' }; my $patron = Koha::Patrons->find( $borrowernumber ); + my %items; + my $can_book_be_reserved = 0; while ( my $item = $items->next ) { $canReserve = CanItemBeReserved( $patron, $item, $pickup_branchcode, $params ); - return { status => 'OK' } if $canReserve->{status} eq 'OK'; + $can_book_be_reserved = 1 if $canReserve->{status} eq 'OK'; + return { status => 'OK' } if !$return_all_items && $can_book_be_reserved; + $items{$item->itemnumber} = $canReserve; } - return $canReserve; + return { + status => $can_book_be_reserved ? 'OK' : $canReserve->{status}, + %items + }; } =head2 CanItemBeReserved -- 2.30.2