hold targeter reify experiment
authorBill Erickson <berickxx@gmail.com>
Thu, 9 Jun 2016 18:10:46 +0000 (14:10 -0400)
committerBill Erickson <berickxx@gmail.com>
Thu, 9 Jun 2016 18:10:46 +0000 (14:10 -0400)
Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Utils/HoldTargeter.pm
Open-ILS/src/support-scripts/test-scripts/hold_targeter.pl

index dab21d9..497d888 100644 (file)
@@ -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';
 
index afb3516..0191b8e 100755 (executable)
@@ -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";