diff --git a/Koha/Hold.pm b/Koha/Hold.pm index 03bc85dfbf..9a06833193 100644 --- a/Koha/Hold.pm +++ b/Koha/Hold.pm @@ -214,6 +214,16 @@ sub move_hold { $new_itemnumber = $item->itemnumber; $new_biblionumber = $item->biblionumber; + my $branchitemrule = C4::Circulation::GetBranchItemRule( + Koha::Policy::Holds->holds_control_library( $item, $patron ), + $item->effective_itemtype + ); + + my $policy = $branchitemrule->{hold_fulfillment_policy}; + if ( ( $policy eq 'homebranch' || $policy eq 'holdingbranch' ) && $self->branchcode ne $item->$policy ) { + return { success => 0, error => 'invalidPickupBranch' }; + } + $canReserve = C4::Reserves::CanItemBeReserved( $patron, $item, $self->branchcode, { ignore_hold_counts => 1 } ); } elsif ( $args->{new_biblionumber} ) { $new_biblionumber = $args->{new_biblionumber}; @@ -222,6 +232,9 @@ sub move_hold { $patron->borrowernumber, $new_biblionumber, $self->branchcode, { ignore_hold_counts => 1 } ); + + # for record level holds we must check to make sure there is an item on the record that can fufill the new hold + } else { return { success => 0, error => 'Missing itemnumber or biblionumber' }; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index 8726265631..af8123ee97 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -225,6 +225,8 @@ Target item is not for loan [% CASE 'damaged' %] Target item is damaged + [% CASE 'invalidPickupBranch' %] + Target item is an invalid pickup location [% CASE %] Error: [% fail.error | html %] [% END %]