From: erickson Date: Thu, 1 Nov 2007 20:25:56 +0000 (+0000) Subject: returning a boolean retarget flag from the nearest_hold method to indicate whether... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=e1caa4899729e57c6cd23aaf544301da0dfa177d;p=Evergreen.git returning a boolean retarget flag from the nearest_hold method to indicate whether a hold was reset during opportunistic capture. if so, after the current transaction is commited and we have responded complete to the client, we kick off the hold targeter to process untargeted holds git-svn-id: svn://svn.open-ils.org/ILS/trunk@7962 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Circulate.pm index ece07496c4..abd8390fbc 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; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm index 9b26acf78b..8ce6d5ad37 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Circ/Holds.pm @@ -1323,6 +1323,8 @@ sub find_nearest_permitted_hold { or return (undef, $editor->event); + my $retarget = 0; + # re-target any other holds that already target this copy for my $old_hold (@$old_holds) { next if $old_hold->id eq $best_hold->id; # don't re-target the hold we want @@ -1332,9 +1334,10 @@ sub find_nearest_permitted_hold { $old_hold->clear_prev_check_time; $editor->update_action_hold_request($old_hold) or return (undef, $editor->event); + $retarget = 1; } - return ($best_hold); + return ($best_hold, undef, $retarget); }