diff options
author | Mark Wells <mark@freeside.biz> | 2013-03-27 12:34:22 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2013-03-27 12:34:22 -0700 |
commit | c5310e027f5d7264b22640f72c3f1744148045ff (patch) | |
tree | 0e064eb5b88f0d39ed8971baa443e75bb24fd2b7 /FS | |
parent | 3ee7348febaf61d9662b463aad3053210593b06b (diff) |
cust_bill_owed_percent condition, #611
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/part_event/Condition/cust_bill_owed_percent.pm | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/FS/FS/part_event/Condition/cust_bill_owed_percent.pm b/FS/FS/part_event/Condition/cust_bill_owed_percent.pm new file mode 100644 index 000000000..e06b511ef --- /dev/null +++ b/FS/FS/part_event/Condition/cust_bill_owed_percent.pm @@ -0,0 +1,50 @@ +package FS::part_event::Condition::cust_bill_owed_percent; + +use strict; +use FS::cust_bill; + +use base qw( FS::part_event::Condition ); + +sub description { + 'Percentage owed on specific invoice'; +} + +sub eventtable_hashref { + { 'cust_main' => 0, + 'cust_bill' => 1, + 'cust_pkg' => 0, + }; +} + +sub option_fields { + ( + 'owed' => { 'label' => 'Percentage of invoice owed over', + 'type' => 'percentage', + 'value' => '0', #default + }, + ); +} + +sub condition { + #my($self, $cust_bill, %opt) = @_; + my($self, $cust_bill) = @_; + + my $percent = $self->option('owed') || 0; + my $over = sprintf('%.2f', + $cust_bill->charged * $percent / 100); + + $cust_bill->owed > $over; +} + +sub condition_sql { + my( $class, $table ) = @_; + + # forces the option to be an integer--do we care? + my $percent = $class->condition_sql_option_integer('owed'); + + my $owed_sql = FS::cust_bill->owed_sql; + + "$owed_sql > CAST( cust_bill.charged * $percent / 100 AS DECIMAL(10,2) )"; +} + +1; |