update address standardization for cust_location changes
[freeside.git] / FS / FS / part_event / Condition / balance_age_under.pm
diff --git a/FS/FS/part_event/Condition/balance_age_under.pm b/FS/FS/part_event/Condition/balance_age_under.pm
new file mode 100644 (file)
index 0000000..ac6d786
--- /dev/null
@@ -0,0 +1,52 @@
+package FS::part_event::Condition::balance_age_under;
+
+use strict;
+use base qw( FS::part_event::Condition );
+
+sub description { 'Customer balance age (under)'; }
+
+sub option_fields {
+  (
+    'balance' => { 'label'      => 'Balance under (or equal to)',
+                   'type'       => 'money',
+                   'value'      => '0.00', #default
+                 },
+    'age'     => { 'label'      => 'Age',
+                   'type'       => 'freq',
+                 },
+  );
+}
+
+sub condition {
+  my($self, $object, %opt) = @_;
+
+  my $cust_main = $self->cust_main($object);
+
+  my $under = $self->option('balance');
+  $under = 0 unless length($under);
+
+  my $age = $self->option_age_from('age', $opt{'time'} );
+
+  $cust_main->balance_date($age) <= $under;
+}
+
+sub condition_sql {
+  my( $class, $table, %opt ) = @_;
+
+  my $under   = $class->condition_sql_option('balance');
+  my $age     = $class->condition_sql_option_age_from('age', $opt{'time'});
+
+  my $balance_sql = FS::cust_main->balance_date_sql( $age );
+
+  "$balance_sql <= CAST( $under AS DECIMAL(10,2) )";
+}
+
+sub order_sql {
+  shift->condition_sql_option_age('age');
+}
+
+sub order_sql_weight {
+  10;
+}
+
+1;