cust_bill_owed_percent condition, #611
authorMark Wells <mark@freeside.biz>
Wed, 27 Mar 2013 19:34:22 +0000 (12:34 -0700)
committerMark Wells <mark@freeside.biz>
Wed, 27 Mar 2013 19:34:22 +0000 (12:34 -0700)
FS/FS/part_event/Condition/cust_bill_owed_percent.pm [new file with mode: 0644]
httemplate/elements/selectlayers.html

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 (file)
index 0000000..e06b511
--- /dev/null
@@ -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;
index 01fd590..cb1d2d6 100644 (file)
@@ -236,7 +236,7 @@ sub layer_callback {
       $date_noinit = 1;
     }
     else {
-      $include = "input-$include" if $include =~ /^(text|money)$/;
+      $include = "input-$include" if $include =~ /^(text|money|percentage)$/;
       $include = "tr-$include" unless $include eq 'hidden';
       $html .= include( "/elements/$include.html",
                         %$lf,