From da5380829ebb8d0690fcb495490672225f34f203 Mon Sep 17 00:00:00 2001 From: erickson Date: Wed, 21 Nov 2007 16:01:16 +0000 Subject: [PATCH] backporting the logic to delay hold retargeting until after the checkin is complete and responded. also, repaired renew perm check git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_2@8105 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../perlmods/OpenILS/Application/Circ/Circulate.pm | 33 ++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm index ece07496c4..f6383fbb43 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm @@ -211,6 +211,7 @@ sub run_method { unless($circulator->bail_out) { $circulator->do_hold_notify($circulator->notify_hold) if $circulator->notify_hold; + $circulator->retarget_holds if $circulator->retarget; } } @@ -333,11 +334,11 @@ my @AUTOLOAD_FIELDS = qw/ 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 @@ -351,6 +352,7 @@ my @AUTOLOAD_FIELDS = qw/ opac_renewal phone_renewal desk_renewal + retarget /; @@ -1537,7 +1539,7 @@ sub attempt_checkin_hold_capture { 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) { @@ -1546,6 +1548,7 @@ sub attempt_checkin_hold_capture { return undef; } + $self->retarget($retarget); $logger->info("circulator: found permitted hold ". $hold->id . " for copy, capturing..."); @@ -1624,6 +1627,13 @@ sub do_hold_notify { } } +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; @@ -1932,11 +1942,6 @@ sub do_renew { $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( @@ -1954,6 +1959,12 @@ sub do_renew { 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; -- 2.11.0