unless($circulator->bail_out) {
$circulator->do_hold_notify($circulator->notify_hold)
if $circulator->notify_hold;
+ $circulator->retarget_holds if $circulator->retarget;
}
}
dummy_author
circ_lib
barcode
- duration_level
- recurring_fines_level
- duration_rule
- recurring_fines_rule
- max_fine_rule
+ duration_level
+ recurring_fines_level
+ duration_rule
+ recurring_fines_rule
+ max_fine_rule
renewal_remaining
due_date
fulfilled_holds
opac_renewal
phone_renewal
desk_renewal
+ retarget
/;
my $copy = $self->copy;
# See if this copy can fulfill any holds
- my ($hold) = $holdcode->find_nearest_permitted_hold(
+ my ($hold, undef, $retarget) = $holdcode->find_nearest_permitted_hold(
$self->editor, $copy, $self->editor->requestor );
if(!$hold) {
return undef;
}
+ $self->retarget($retarget);
$logger->info("circulator: found permitted hold ".
$hold->id . " for copy, capturing...");
}
}
+sub retarget_holds {
+ $logger->info("retargeting prev_check_time=null holds after opportunistic capture");
+ my $ses = OpenSRF::AppSession->create('open-ils.storage');
+ $ses->request('open-ils.storage.action.hold_request.copy_targeter');
+ # no reason to wait for the return value
+ return;
+}
sub checkin_build_hold_transit {
my $self = shift;
$self->log_me("do_renew()");
$self->is_renewal(1);
- unless( $self->is_renewal ) {
- return $self->bail_on_events($self->editor->events)
- unless $self->editor->allowed('RENEW_CIRC');
- }
-
# Make sure there is an open circ to renew that is not
# marked as LOST, CLAIMSRETURNED, or LONGOVERDUE
my $circ = $self->editor->search_action_circulation(
return $self->bail_on_events($self->editor->event) unless $circ;
+ # A user is not allowed to renew another user's items without permission
+ unless( $circ->usr eq $self->editor->requestor->id ) {
+ return $self->bail_on_events($self->editor->events)
+ unless $self->editor->allowed('RENEW_CIRC', $circ->circ_lib);
+ }
+
$self->push_events(OpenILS::Event->new('MAX_RENEWALS_REACHED'))
if $circ->renewal_remaining < 1;