]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Trigger/Validator.pm
Whitespace. gah.
[working/Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Trigger / Validator.pm
1 package OpenILS::Application::Trigger::Validator;
2 use strict; use warnings;
3 use DateTime;
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 }
11
12 sub CircIsOpen {
13     my $self = shift;
14     my $env = shift;
15
16     return 0 if (defined($env->{target}->checkin_time));
17
18     if ($env->{params}->{min_target_age}) {
19         $env->{params}->{target_age_field} = 'xact_start';
20         return 0 if (!$self->MinPassiveTargetAge($env));
21     }
22
23     return 1;
24 }
25
26 sub MinPassiveTargetAge {
27     my $self = shift;
28     my $env = shift;
29     my $target = $env->{target};
30     my $delay_field = $env->{params}->{target_age_field} || $env->{event}->event_def->delay_field;
31
32     unless($env->{params}->{min_target_age}) {
33         $logger->warn("'min_target_age' parameter required for MinPassiveTargetAge validator");
34         return 0; # no-op false
35     }
36
37     unless($delay_field) {
38         $logger->warn("'target_age_field' parameter or delay_field required for MinPassiveTargetAge validator");
39         return 0; # no-op false
40     }
41
42     my $delay_field_ts = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($target->$delay_field()));
43
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} ) );
46
47     return 1 if $delay_field_ts <= DateTime->now;
48     return 0;
49 }
50
51 sub CircIsOverdue {
52     my $self = shift;
53     my $env = shift;
54     my $circ = $env->{target};
55
56     return 0 if $circ->checkin_time;
57     return 0 if $circ->stop_fines and not $circ->stop_fines =~ /MAXFINES|LONGOVERDUE/;
58
59     if ($env->{params}->{min_target_age}) {
60         $env->{params}->{target_age_field} = 'xact_start';
61         return 0 if (!$self->MinPassiveTargetAge($env));
62     }
63
64     my $due_date = DateTime::Format::ISO8601->new->parse_datetime(cleanse_ISO8601($circ->due_date));
65     return 0 if $due_date > DateTime->now;
66
67     return 1;
68 }
69
70 sub HoldIsAvailable {
71     my $self = shift;
72     my $env = shift;
73
74     my $hold = $env->{target};
75
76     return 1 if 
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;
81
82     return 0;
83 }
84
85 sub HoldIsCancelled {
86     my $self = shift;
87     my $env = shift;
88
89     my $hold = $env->{target};
90
91     return ($hold->cancel_time) ? 1 : 0;
92 }
93
94 1;