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};
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';
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";