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));
18 if ($env->{params}->{min_target_age}) {
19 $env->{params}->{target_age_field} = 'xact_start';
20 return 0 if (!$self->MinPassiveTargetAge($env));
26 sub MinPassiveTargetAge {
29 my $target = $env->{target};
30 my $delay_field = $env->{params}->{target_age_field} || $env->{event}->event_def->delay_field;
32 unless($env->{params}->{min_target_age}) {
33 $logger->warn("'min_target_age' parameter required for MinPassiveTargetAge validator");
34 return 0; # no-op false
37 unless($delay_field) {
38 $logger->warn("'target_age_field' parameter or delay_field required for MinPassiveTargetAge validator");
39 return 0; # no-op false
42 my $delay_field_ts = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($target->$delay_field()));
44 # to get the minimum time that the target must have aged to, add the min age to the delay field
45 $delay_field_ts->add( seconds => interval_to_seconds( $env->{params}->{min_target_age} ) );
47 return 1 if $delay_field_ts <= DateTime->now;
54 my $circ = $env->{target};
56 return 0 if $circ->checkin_time;
57 return 0 if $circ->stop_fines and not $circ->stop_fines =~ /MAXFINES|LONGOVERDUE/;
59 if ($env->{params}->{min_target_age}) {
60 $env->{params}->{target_age_field} = 'xact_start';
61 return 0 if (!$self->MinPassiveTargetAge($env));
64 my $due_date = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($circ->due_date));
65 return 0 if $due_date > DateTime->now;
74 my $hold = $env->{target};
77 !$hold->cancel_time and
78 $hold->capture_time and
79 $hold->current_copy and
80 $hold->current_copy->status == OILS_COPY_STATUS_ON_HOLDS_SHELF;
89 my $hold = $env->{target};
91 return ($hold->cancel_time) ? 1 : 0;