@@ -, +, @@ Koha::Libraries->pickup_locations() and move logic to Koha::Template::Plugin::Branches->pickup_locations(). --- Koha/Libraries.pm | 30 ++++++++++++------- Koha/Template/Plugin/Branches.pm | 29 ++++++++++++++---- .../prog/en/includes/holds_table.inc | 2 +- 3 files changed, 44 insertions(+), 17 deletions(-) --- a/Koha/Libraries.pm +++ a/Koha/Libraries.pm @@ -67,17 +67,12 @@ sub pickup_locations { my $item = $params->{'item'}; my $biblio = $params->{'biblio'}; - my $patron = $params->{'patron'}; - if ($biblio && $item) { Koha::Exceptions::BadParameter->throw( error => "Koha::Libraries->pickup_locations takes either 'biblio' or " ." 'item' as parameter, but not both." ); } - unless (! defined $patron || ref($patron) eq 'Koha::Patron') { - $patron = Koha::Patrons->find($patron); - } # Select libraries that are configured as pickup locations my $libraries = $self->search({ @@ -86,20 +81,33 @@ sub pickup_locations { order_by => ['branchname'] }); - return $libraries unless $item or $biblio; - if($item) { + return $libraries->unblessed unless $item or $biblio; + return $libraries->unblessed + unless C4::Context->preference('UseBranchTransferLimits'); + my $limittype = C4::Context->preference('BranchTransferLimitsType'); + + if ($item) { unless (ref($item) eq 'Koha::Item') { $item = Koha::Items->find($item); - return $libraries unless $item; + return $libraries->unblessed unless $item; } - return $item->pickup_locations( {patron => $patron} ); } else { unless (ref($biblio) eq 'Koha::Biblio') { $biblio = Koha::Biblios->find($biblio); - return $libraries unless $biblio; + return $libraries->unblessed unless $biblio; } - return $biblio->pickup_locations( {patron => $patron} ); } + + my @pickup_locations; + foreach my $library ($libraries->as_list) { + if ($item && $item->can_be_transferred({ to => $library })) { + push @pickup_locations, $library->unblessed; + } elsif ($biblio && $biblio->can_be_transferred({ to => $library })) { + push @pickup_locations, $library->unblessed; + } + } + + return wantarray ? @pickup_locations : \@pickup_locations; } =head3 search_filtered --- a/Koha/Template/Plugin/Branches.pm +++ a/Koha/Template/Plugin/Branches.pm @@ -87,13 +87,32 @@ sub InIndependentBranchesMode { sub pickup_locations { my ( $self, $params ) = @_; - my $search_params = $params->{search_params} || {}; my $selected = $params->{selected}; - my $libraries = Koha::Libraries->pickup_locations($search_params); + my @libraries; + + if(defined $search_params->{item} || defined $search_params->{biblio}) { + my $item = $search_params->{'item'}; + my $biblio = $search_params->{'biblio'}; + my $patron = $search_params->{'patron'}; + + unless (! defined $patron || ref($patron) eq 'Koha::Patron') { + $patron = Koha::Patrons->find($patron); + } + + if($item) { + $item = Koha::Items->find($item) unless ref($item) eq 'Koha::Item'; + @libraries = map { $_->unblessed } $item->pickup_locations( {patron => $patron} ) if defined $item; + } elsif($biblio) { + $biblio = Koha::Biblios->find($biblio) unless ref($biblio) eq 'Koha::Biblio'; + @libraries = map { $_->unblessed } $biblio->pickup_locations( {patron => $patron} ) if defined $biblio; + } + + } - for my $l (@$libraries) { - $l = $l->unblessed; + @libraries = Koha::Libraries->pickup_locations() unless @libraries; + + for my $l (@libraries) { if ( defined $selected and $l->{branchcode} eq $selected or not defined $selected and C4::Context->userenv @@ -103,7 +122,7 @@ sub pickup_locations { } } - return $libraries; + return \@libraries; } 1; --- a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc @@ -131,7 +131,7 @@ [% Branches.GetName(hold.branchcode) | html %] [% ELSE %] [% END %] [% END %] --