From 03b9e4ca61b6c491e936cf4650251366e0c9c5cb Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Thu, 9 Jun 2016 14:10:46 -0400 Subject: [PATCH] hold targeter reify experiment Signed-off-by: Bill Erickson --- .../src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm | 34 +++++++++++++++++----- .../support-scripts/test-scripts/hold_targeter.pl | 7 +++-- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm b/Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm index dab21d9381..497d888d12 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm @@ -32,12 +32,35 @@ sub editor { sub init { my $self = shift; - my $closed = $self->{editor}->search_actor_org_unit_closed_date({ + my $closed_orgs_query = { close_start => {'<=', 'now'}, close_end => {'>=', 'now'} - }); + }; + + if ($self->{retarget_interval}) { + + # Convert the interval to seconds for current and future use. + $self->{retarget_interval} = + interval_to_seconds($self->{retarget_interval}); + + # An org unit is considered closed for retargeting purposes + # if it's closed both now and at the next re-target date. + + my $next_check_time = + DateTime->now->add(seconds => $self->{retarget_interval}); - # TODO: check expire / closed_at_next logic + $closed_orgs_query = { + '-and' => [ + $closed_orgs_query, { + close_start => {'<=', $next_check_time}, + close_end => {'>=', $next_check_time} + } + ] + } + } + + my $closed = + $self->editor->search_actor_org_unit_closed_date($closed_orgs_query); # Map of org id to 1. Any org in the map is closed. $self->{closed_orgs} = {map {$_->org_unit => 1} @$closed}; @@ -77,10 +100,7 @@ sub target_all { sub collect_hold_ids { my $self = shift; - $self->{retarget_interval} ||= '12h'; - - my $date = DateTime->now->subtract( - seconds => interval_to_seconds($self->{retarget_interval})); + my $date = DateTime->now->subtract(seconds => $self->{retarget_interval}); my $rtime_sort = $self->{newest_first} ? 'DESC' : 'ASC'; diff --git a/Open-ILS/src/support-scripts/test-scripts/hold_targeter.pl b/Open-ILS/src/support-scripts/test-scripts/hold_targeter.pl index afb3516dd5..0191b8e2d9 100755 --- a/Open-ILS/src/support-scripts/test-scripts/hold_targeter.pl +++ b/Open-ILS/src/support-scripts/test-scripts/hold_targeter.pl @@ -13,9 +13,12 @@ use Data::Dumper; my $config = shift; # path to opensrf_core.xml osrf_connect($config); # connect to jabber -my $targeter = OpenILS::Utils::HoldTargeter->new; -$targeter->{retarget_interval} = '6h'; +my $targeter = OpenILS::Utils::HoldTargeter->new( + retarget_interval => '12h', + newest_first => 1 +); +$targeter->init; my $responses = $targeter->target_all; #print Dumper($responses); print "Processed " . scalar(@$responses) . " holds\n"; -- 2.11.0