customer credit limits, RT#8209
authormark <mark>
Wed, 22 Sep 2010 21:22:03 +0000 (21:22 +0000)
committermark <mark>
Wed, 22 Sep 2010 21:22:03 +0000 (21:22 +0000)
FS/FS/Schema.pm
FS/FS/cust_main.pm
FS/FS/part_event/Condition/balance_credit_limit.pm [new file with mode: 0644]
httemplate/edit/cust_main/billing.html
httemplate/edit/process/cust_main.cgi
httemplate/view/cust_main/billing.html

index 57ef18e..09daef0 100644 (file)
@@ -768,6 +768,7 @@ sub tables_hashref {
         'squelch_cdr','char', 'NULL', 1, '', '', 
         'cdr_termination_percentage', 'decimal', 'NULL', '', '', '',
         'invoice_terms', 'varchar', 'NULL', $char_d, '', '',
         'squelch_cdr','char', 'NULL', 1, '', '', 
         'cdr_termination_percentage', 'decimal', 'NULL', '', '', '',
         'invoice_terms', 'varchar', 'NULL', $char_d, '', '',
+        'credit_limit', @money_typen, '', '',
         'archived', 'char', 'NULL', 1, '', '',
         'email_csv_cdr', 'char', 'NULL', 1, '', '',
       ],
         'archived', 'char', 'NULL', 1, '', '',
         'email_csv_cdr', 'char', 'NULL', 1, '', '',
       ],
index f9204ca..b1b2753 100644 (file)
@@ -1415,6 +1415,7 @@ sub check {
     || $self->ut_textn('invoice_terms')
     || $self->ut_alphan('geocode')
     || $self->ut_floatn('cdr_termination_percentage')
     || $self->ut_textn('invoice_terms')
     || $self->ut_alphan('geocode')
     || $self->ut_floatn('cdr_termination_percentage')
+    || $self->ut_floatn('credit_limit')
   ;
 
   #barf.  need message catalogs.  i18n.  etc.
   ;
 
   #barf.  need message catalogs.  i18n.  etc.
diff --git a/FS/FS/part_event/Condition/balance_credit_limit.pm b/FS/FS/part_event/Condition/balance_credit_limit.pm
new file mode 100644 (file)
index 0000000..1bc2aa1
--- /dev/null
@@ -0,0 +1,32 @@
+package FS::part_event::Condition::balance_credit_limit;
+
+use strict;
+use FS::cust_main;
+
+use base qw( FS::part_event::Condition );
+
+sub description { 'Customer is over credit limit'; }
+
+sub condition {
+  my($self, $object) = @_;
+
+  my $cust_main = $self->cust_main($object);
+
+  my $over = $cust_main->credit_limit;
+  return 0 if !length($over); # if credit limit is null, no limit
+
+  $cust_main->balance > $over;
+}
+
+sub condition_sql {
+  my( $class, $table ) = @_;
+
+  my $balance_sql = FS::cust_main->balance_sql;
+
+  "(cust_main.credit_limit IS NULL OR
+    $balance_sql - cust_main.credit_limit > 0 )";
+
+}
+
+1;
+
index ad83778..aeb67b6 100644 (file)
         %>
       </TD>
     </TR>
         %>
       </TD>
     </TR>
+    <TR>
+      <TD ALIGN="right" WIDTH="200">Credit limit </TD>
+      <TD WIDTH="408">
+        <SCRIPT TYPE="text/javascript">
+function toggle(obj) {
+  obj.form.credit_limit.disabled = obj.checked;
+}
+        </SCRIPT>
+        <INPUT TYPE="text" NAME="credit_limit" VALUE=<% sprintf('"%.2f"', $cust_main->credit_limit) %><% length($cust_main->credit_limit) ? '' : ' DISABLED' %>>
+        <INPUT TYPE="checkbox" NAME="no_credit_limit" VALUE=1 onclick="toggle(this)"<% length($cust_main->credit_limit) ? '' : ' CHECKED'%>> Unlimited
+      </TD>
+    </TR>
 
 % if ( $conf->exists('voip-cust_cdr_spools') ) { 
       <TR>
 
 % if ( $conf->exists('voip-cust_cdr_spools') ) { 
       <TR>
index 3158d7b..e2238bd 100755 (executable)
@@ -73,6 +73,10 @@ if ( defined($cgi->param('same')) && $cgi->param('same') eq "Y" ) {
   );
 }
 
   );
 }
 
+if ( $cgi->param('no_credit_limit') ) {
+  $new->setfield('credit_limit', '');
+}
+
 $new->tagnum( [ $cgi->param('tagnum') ] );
 
 my %usedatetime = ( 'birthdate' => 1 );
 $new->tagnum( [ $cgi->param('tagnum') ] );
 
 my %usedatetime = ( 'birthdate' => 1 );
index 54c180b..dd19523 100644 (file)
@@ -206,6 +206,14 @@ Billing information
     <% $cust_main->invoice_terms || 'Default ('. ( $conf->config('invoice_default_terms') || 'Payable upon receipt' ). ')' %>
   </TD>
 </TR>
     <% $cust_main->invoice_terms || 'Default ('. ( $conf->config('invoice_default_terms') || 'Payable upon receipt' ). ')' %>
   </TD>
 </TR>
+<TR>
+  <TD ALIGN="right">Credit&nbsp;limit</TD>
+  <TD BGCOLOR="#ffffff">
+    <% length($cust_main->credit_limit) ? 
+        $money_char.sprintf("%.2f", $cust_main->credit_limit) :
+        'Unlimited' %>
+  </TD>
+</TR>
 
 % if ( $conf->exists('voip-cust_cdr_spools') ) { 
   <TR>
 
 % if ( $conf->exists('voip-cust_cdr_spools') ) { 
   <TR>