1 package FS::part_event::Condition::cust_bill_age;
5 use Time::Local qw(timelocal_nocheck);
7 use base qw( FS::part_event::Condition );
13 sub eventtable_hashref {
23 #'days' => { label=>'Days', size=>3, },
24 'age' => { label=>'Age', type=>'freq', },
29 my( $self, $cust_bill, %opt ) = @_;
31 #false laziness w/balance_age
32 my $time = $opt{'time'};
33 my $age = $self->option('age');
34 $age = '0m' unless length($age);
36 my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($time) )[0,1,2,3,4,5];
37 if ( $age =~ /^(\d+)m$/i ) {
39 until ( $mon >= 0 ) { $mon += 12; $year--; }
40 } elsif ( $age =~ /^(\d+)y$/i ) {
42 } elsif ( $age =~ /^(\d+)w$/i ) {
44 } elsif ( $age =~ /^(\d+)d$/i ) {
46 } elsif ( $age =~ /^(\d+)h$/i ) {
49 die "unparsable age: $age";
51 my $age_date = timelocal_nocheck($sec,$min,$hour,$mday,$mon,$year);
53 $cust_bill->_date <= $age_date;
57 # and seconds <= $time - cust_bill._date
60 my( $class, $table, %opt ) = @_;
62 my $time = $opt{'time'};
64 my $age = $class->condition_sql_option('age');
66 "$time - EXTRACT( EPOCH FROM REPLACE( $age, 'm', 'mon')::interval )";
68 "cust_bill._date <= $age_sql";
75 my $age = $class->condition_sql_option('age');
76 "EXTRACT( EPOCH FROM REPLACE( $age, 'm', 'mon')::interval )";
79 sub order_sql_weight {