From 4f3f85d928738c69a145f0b03be7e4862386a32c Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 7 Mar 2024 15:30:26 +0000 Subject: [PATCH] Bug 36120: Add pickup_items to the pickup_locations response This patch adds pickup_items as a list of itemnumbers that can be picked from the library should it be selected as a pickup location. Sponsored-by: Cuyahoga County Public Library Signed-off-by: Lisette Scheer Signed-off-by: Kristi Krueger --- Koha/Biblio.pm | 12 ++++++++++-- Koha/REST/V1/Biblios.pm | 1 + api/v1/swagger/definitions/library.yaml | 7 +++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index 771af6c1676..96af89be24c 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -371,6 +371,7 @@ sub pickup_locations { my $memory_cache = Koha::Cache::Memory::Lite->get_instance(); my @pickup_locations; + my $location_items; foreach my $item ( $self->items->as_list ) { my $cache_key = sprintf "Pickup_locations:%s:%s:%s:%s:%s", $item->itype,$item->homebranch,$item->holdingbranch,$item->ccode || "",$patron->branchcode||"" ; @@ -379,11 +380,18 @@ sub pickup_locations { @{ $item_pickup_locations } = $item->pickup_locations( { patron => $patron } )->_resultset->get_column('branchcode')->all; $memory_cache->set_in_cache( $cache_key, $item_pickup_locations ); } - push @pickup_locations, @{ $item_pickup_locations } + push @pickup_locations, @{ $item_pickup_locations }; + for my $location (@pickup_locations) { + push @{$location_items->{$location}}, $item->itemnumber; + } } - return Koha::Libraries->search( + my $resultSet = Koha::Libraries->search( { branchcode => { '-in' => \@pickup_locations } }, { order_by => ['branchname'] } ); + + $resultSet->{_pickup_location_items} = $location_items; + + return $resultSet; } =head3 hidden_in_opac diff --git a/Koha/REST/V1/Biblios.pm b/Koha/REST/V1/Biblios.pm index 0f66754f830..553d09918fc 100644 --- a/Koha/REST/V1/Biblios.pm +++ b/Koha/REST/V1/Biblios.pm @@ -573,6 +573,7 @@ sub pickup_locations { my $pickup_locations = $c->objects->search($pl_set); @response = map { $_->{needs_override} = Mojo::JSON->false; $_; } @{$pickup_locations}; } + @response = map { $_->{pickup_items} = $pl_set->{_pickup_location_items}->{ $_->{library_id} }; $_; } @response; return $c->render( status => 200, diff --git a/api/v1/swagger/definitions/library.yaml b/api/v1/swagger/definitions/library.yaml index de010c50d30..6d9a23878f6 100644 --- a/api/v1/swagger/definitions/library.yaml +++ b/api/v1/swagger/definitions/library.yaml @@ -104,6 +104,13 @@ properties: pickup_location: type: boolean description: If the library can act as a pickup location + pickup_items: + type: + - array + - "null" + description: Array of items available for pickup at this library is the library is marked as a pickup location + items: + type: integer public: type: boolean description: If the library is visible to the public -- 2.44.0