From 4a6c653042e35de6c3fa33c21cb8f4a5772508f9 Mon Sep 17 00:00:00 2001 From: Agustin Moyano Date: Mon, 27 May 2019 23:49:05 -0300 Subject: [PATCH] Bug 22284: Add "patron's hold group" as new hold_fulfillment_policy option This patch adds "patron's hold group" as a new option to Hold pickup library match To test: 1. Set ReservesControlBranch preference to item. 2. Create a hold group 3. Go to circulation and fines rules SUCCESS => in 'Hold pickup library match' there is a new option called "patron's hold group" 4. In a library not in hold group set 'Hold policy' to "any" and 'Hold pickup library match' to "patron's hold group" 5. Search for a user in the hold group 6. 'Search to hold' for items of the library of step 4 7. Select an item and 'Place hold for [user]' SUCCESS => in 'Pickup at' you should see patron's hold group as options 8. In OPAC sign in as the same user of step 5 9. Search for the item in step 7 SUCCESS => in 'Pick up locations' you should see patron's hold group as options 10. Sign off Signed-off-by: Josef Moravec --- 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(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 482580f130..66c682d0bb 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -494,6 +494,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' }; diff --git a/Koha/Item.pm b/Koha/Item.pm index f0e1376cd9..9763115610 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -316,19 +316,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') { diff --git a/Koha/Libraries.pm b/Koha/Libraries.pm index bc92f0bb10..ebd552b3fc 100644 --- a/Koha/Libraries.pm +++ b/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 diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt index 7da8f8a0f3..e1d90c8824 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tt +++ b/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' %] + + diff --git a/reserve/request.pl b/reserve/request.pl index 06a49ceb7b..605f64c2e7 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -494,7 +494,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} ); -- 2.17.1