1 package OpenILS::Application::Trigger::Validator;
2 use strict; use warnings;
4 use DateTime::Format::ISO8601;
5 use OpenSRF::Utils qw/:datetime/;
6 use OpenSRF::Utils::Logger qw/:logger/;
7 use OpenILS::Const qw/:const/;
8 sub fourty_two { return 42 }
9 sub NOOP_True { return 1 }
10 sub NOOP_False { return 0 }
16 return 0 if (defined($env->{target}->checkin_time));
17 return 0 if ($env->{params}->{max_delay_age} && !$self->MaxPassiveDelayAge($env));
22 sub MaxPassiveDelayAge {
25 my $target = $env->{target};
26 my $delay_field = $env->{event}->event_def->delay_field;
28 my $delay_field_ts = DateTime::Format::ISO8601->new->parse_datetime(clense_ISO8601($target->$delay_field()));
30 # the cutoff date is the target timestamp + the delay + the max_delay_age
31 # This is also true for negative delays. For example:
32 # due_date + "-3 days" + "1 day" == -2 days old.
34 ->add( seconds => interval_to_seconds( $env->{event}->event_def->delay ) )
35 ->add( seconds => interval_to_seconds( $env->{params}->{max_delay_age} ) );
37 return 1 if $delay_field_ts > DateTime->now;
44 my $circ = $env->{target};
46 return 0 if $circ->checkin_time;
47 return 0 if $circ->stop_fines and not $circ->stop_fines =~ /MAXFINES|LONGOVERDUE/;
48 return 0 if ($env->{params}->{max_delay_age} && !$self->MaxPassiveDelayAge($env));
50 my $due_date = DateTime::Format::ISO8601->new->parse_datetime(clense_ISO8601($circ->due_date));
51 return 0 if $due_date > DateTime->now;
60 my $hold = $env->{target};
63 !$hold->cancel_time and
64 $hold->capture_time and
65 $hold->current_copy and
66 $hold->current_copy->status == OILS_COPY_STATUS_ON_HOLDS_SHELF;