@@ -, +, @@
hold_fulfillment_policy option
---
C4/Reserves.pm | 3 +++
Koha/Item.pm | 16 ++++++++--------
Koha/Libraries.pm | 3 ++-
.../prog/en/modules/admin/smart-rules.tt | 16 ++++++++++++++++
reserve/request.pl | 2 +-
5 files changed, 30 insertions(+), 10 deletions(-)
--- a/C4/Reserves.pm
+++ a/C4/Reserves.pm
@@ -510,6 +510,9 @@ sub CanItemBeReserved {
unless ($branchitemrule->{hold_fulfillment_policy} ne 'holdgroup' || $item_library->validate_hold_sibling( {branchcode => $pickup_branchcode} )) {
return { status => 'pickupNotInHoldGroup' };
}
+ unless ($branchitemrule->{hold_fulfillment_policy} ne 'patrongroup' || Koha::Libraries->find({branchcode => $borrower->{branchcode}})->validate_hold_sibling({branchcode => $pickup_branchcode})) {
+ return { status => 'pickupNotInHoldGroup' };
+ }
}
return { status => 'OK' };
--- a/Koha/Item.pm
+++ a/Koha/Item.pm
@@ -313,19 +313,19 @@ sub pickup_locations {
my $branchitemrule =
C4::Circulation::GetBranchItemRule( $circ_control_branch, $self->itype );
- my $branch_control = C4::Context->preference('HomeOrHoldingBranch');
- my $library = $branch_control eq 'holdingbranch' ? $self->holding_branch : $self->home_branch;
-
my @libs;
if(defined $patron) {
- return @libs if $branchitemrule->{holdallowed} == 3 && !$library->validate_hold_sibling( {branchcode => $patron->branchcode} );
- return @libs if $branchitemrule->{holdallowed} == 1 && $library->branchcode ne $patron->branchcode;
+ return @libs if $branchitemrule->{holdallowed} == 3 && !$self->home_branch->validate_hold_sibling( {branchcode => $patron->branchcode} );
+ return @libs if $branchitemrule->{holdallowed} == 1 && $self->home_branch->branchcode ne $patron->branchcode;
}
if ($branchitemrule->{hold_fulfillment_policy} eq 'holdgroup') {
- @libs = $library->get_hold_libraries;
- my $circ_control_library = Koha::Libraries->find($circ_control_branch);
- push @libs, $circ_control_library unless scalar(@libs) > 0;
+ @libs = $self->home_branch->get_hold_libraries;
+ push @libs, $self->home_branch unless scalar(@libs) > 0;
+ } elsif ($branchitemrule->{hold_fulfillment_policy} eq 'patrongroup') {
+ my $plib = Koha::Libraries->find({ branchcode => $patron->branchcode});
+ @libs = $plib->get_hold_libraries;
+ push @libs, $self->home_branch unless scalar(@libs) > 0;
} elsif ($branchitemrule->{hold_fulfillment_policy} eq 'homebranch') {
push @libs, $self->home_branch;
} elsif ($branchitemrule->{hold_fulfillment_policy} eq 'holdingbranch') {
--- a/Koha/Libraries.pm
+++ a/Koha/Libraries.pm
@@ -28,6 +28,7 @@ use Koha::Database;
use Koha::Item::Transfer::Limits;
use Koha::Items;
use Koha::Library;
+use Koha::Patrons;
use base qw(Koha::Objects);
@@ -75,7 +76,7 @@ sub pickup_locations {
);
}
unless (! defined $patron || ref($patron) eq 'Koha::Patron') {
- $patron = Koha::Items->find($patron);
+ $patron = Koha::Patrons->find($patron);
}
# Select libraries that are configured as pickup locations
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt
@@ -496,6 +496,16 @@
[% END %]
+ [% IF hold_fulfillment_policy == 'patrongroup' %]
+
+ [% ELSE %]
+
+ [% END %]
+
[% IF hold_fulfillment_policy == 'homebranch' %]
+
+
--- a/reserve/request.pl
+++ a/reserve/request.pl
@@ -565,7 +565,7 @@ foreach my $biblionumber (@biblionumbers) {
if($branchitemrule->{'hold_fulfillment_policy'} eq 'any' ) {
$item->{pickup_locations} = 'Any library';
} else {
- $item->{pickup_locations} = join (', ', map { $_->{branchname} } Koha::Items->find($itemnumber)->pickup_locations());
+ $item->{pickup_locations} = join (', ', map { $_->{branchname} } Koha::Items->find($itemnumber)->pickup_locations({ patron => $patron }));
}
push( @available_itemtypes, $item->{itype} );
--