From b3fa2506cd30edb5c1fe5e5ea4bd0627602e27b5 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 Signed-off-by: Nick Clemens Signed-off-by: Katrin Fischer --- Koha/Biblio.pm | 27 ++++++++++++++++--------- Koha/REST/V1/Biblios.pm | 1 + api/v1/swagger/definitions/library.yaml | 7 +++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index 3516a30f67..e066c4f68c 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -383,25 +383,34 @@ sub pickup_locations { my ( $self, $params ) = @_; Koha::Exceptions::MissingParameter->throw( parameter => 'patron' ) - unless exists $params->{patron}; + unless exists $params->{patron}; my $patron = $params->{patron}; 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||"" ; - my $item_pickup_locations = $memory_cache->get_from_cache( $cache_key ); - unless( $item_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 ); + $item->itype, $item->homebranch, $item->holdingbranch, $item->ccode || "", $patron->branchcode || ""; + my $item_pickup_locations = $memory_cache->get_from_cache($cache_key); + unless ($item_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}; + for my $location (@{$item_pickup_locations}) { + push @{ $location_items->{$location} }, $item->itemnumber; } - push @pickup_locations, @{ $item_pickup_locations } } - return Koha::Libraries->search( - { branchcode => { '-in' => \@pickup_locations } }, { order_by => ['branchname'] } ); + 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 8a93537ad9..44aabc9d29 100644 --- a/Koha/REST/V1/Biblios.pm +++ b/Koha/REST/V1/Biblios.pm @@ -530,6 +530,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 f2cb0b59fd..2d3f86d98f 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 if the library is marked as a pickup location + items: + type: integer public: type: boolean description: If the library is visible to the public -- 2.39.5