fix savings ach? RT#11377
[freeside.git] / FS / FS / cust_main / Billing_Realtime.pm
index ea09379..c8d328f 100644 (file)
@@ -19,7 +19,7 @@ $realtime_bop_decline_quiet = 0;
 # 1 is mostly method/subroutine entry and options
 # 2 traces progress of some operations
 # 3 is even more information including possibly sensitive data
-$DEBUG = 1;
+$DEBUG = 0;
 $me = '[FS::cust_main::Billing_Realtime]';
 
 install_callback FS::UID sub { 
@@ -322,7 +322,9 @@ sub realtime_bop {
   ###
 
   my $cc_surcharge = 0;
-  my $cc_surcharge_pct = $conf->config('credit-card-surcharge-percentage');
+  my $cc_surcharge_pct = 0;
+  $cc_surcharge_pct = $conf->config('credit-card-surcharge-percentage') 
+    if $conf->config('credit-card-surcharge-percentage');
   
   # always add cc surcharge if called from event 
   if($options{'cc_surcharge_from_event'} && $cc_surcharge_pct > 0) {
@@ -335,11 +337,10 @@ sub realtime_bop {
                                 # amount as post-surcharge
     $cc_surcharge = $options{'amount'} - ($options{'amount'} / ( 1 + $cc_surcharge_pct/100 ));
   }
-  if ( $cc_surcharge > 0) {
-      $cc_surcharge = sprintf("%.2f",$cc_surcharge);
-      $options{'cc_surcharge'} = $cc_surcharge;
-  }
+  
+  $cc_surcharge = sprintf("%.2f",$cc_surcharge) if $cc_surcharge > 0;
+  $options{'cc_surcharge'} = $cc_surcharge;
+
 
   if ( $DEBUG ) {
     warn "$me realtime_bop (new): $options{method} $options{amount}\n";
@@ -460,9 +461,9 @@ sub realtime_bop {
     $content{bank_state} = exists($options{'paystate'})
                              ? $options{'paystate'}
                              : $self->getfield('paystate');
-    $content{account_type} = exists($options{'paytype'})
-                               ? uc($options{'paytype'}) || 'CHECKING'
-                               : uc($self->getfield('paytype')) || 'CHECKING';
+    $content{account_type}= (exists($options{'paytype'}) && $options{'paytype'})
+                               ? uc($options{'paytype'})
+                               : uc($self->getfield('paytype')) || 'PERSONAL CHECKING';
     $content{account_name} = $self->getfield('first'). ' '.
                              $self->getfield('last');
 
@@ -912,6 +913,8 @@ sub _realtime_bop_result {
 
       # have a CC surcharge portion --> one-time charge
       if ( $options{'cc_surcharge'} > 0 ) { 
+           # XXX: this whole block needs to be in a transaction?
+
          my $invnum;
          $invnum = $options{'invnum'} if $options{'invnum'};
          unless ( $invnum ) { # probably from a payment screen
@@ -942,26 +945,28 @@ sub _realtime_bop_result {
                                    'cust_pkg_ref' => \$cust_pkg,
                                });
          if($charge_error) {
-               warn 'Unable to add CC surcharge';
+               warn 'Unable to add CC surcharge cust_pkg';
                return '';
          }
+
+         $cust_pkg->setup(time);
+         my $cp_error = $cust_pkg->replace;
+         if($cp_error) {
+             warn 'Unable to set setup time on cust_pkg for cc surcharge';
+           # but keep going...
+         }
                                    
-         my $cust_bill_pkg = new FS::cust_bill_pkg({
-           'invnum' => $invnum,
-           'pkgnum' => $cust_pkg->pkgnum,
-           'setup' => $options{'cc_surcharge'},
-         });
-         my $cbp_error = $cust_bill_pkg->insert;
-
-         if ( $cbp_error) {
-               warn 'Cannot add CC surcharge line item to invoice #'.$invnum;
-               return '';
-         } else {
-               my $cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum });
-               warn 'invoice for cc surcharge: ' . Dumper($cust_bill) if $DEBUG;
-               $cust_bill->apply_payments_and_credits;
+         my $cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum });
+         unless ( $cust_bill ) {
+             warn "race condition + invoice deletion just happened";
+             return '';
          }
 
+         my $grand_error = 
+           $cust_bill->add_cc_surcharge($cust_pkg->pkgnum,$options{'cc_surcharge'});
+
+         warn "cannot add CC surcharge to invoice #$invnum: $grand_error"
+           if $grand_error;
       }
 
       return ''; #no error