[freeside-commits] branch FREESIDE_4_BRANCH updated. eedd5a49c5584189e7dbc1038afa74af688b15ca

Christopher Burger burgerc at freeside.biz
Mon Jun 24 12:38:02 PDT 2019


The branch, FREESIDE_4_BRANCH has been updated
       via  eedd5a49c5584189e7dbc1038afa74af688b15ca (commit)
       via  7c2cf2ef058fe57af302e703685934418723f817 (commit)
      from  cde49427a8daf716c7a59968a8d7b348d9bc5fc2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit eedd5a49c5584189e7dbc1038afa74af688b15ca
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jun 24 15:07:04 2019 -0400

    RT# 82137 - fixed problem with form submit before selecting payment amount

diff --git a/httemplate/elements/tr-amount_fee.html b/httemplate/elements/tr-amount_fee.html
index 0ae6a0f74..42132e09a 100644
--- a/httemplate/elements/tr-amount_fee.html
+++ b/httemplate/elements/tr-amount_fee.html
@@ -5,7 +5,7 @@
         <% $money_char %><INPUT NAME     = "amount"
                                 ID       = "amount"
                                 TYPE     = "text"
-                                VALUE    = "<% $amount %>"
+                                VALUE    = ""
                                 SIZE     = 8
                                 STYLE    = "text-align:right;"
 %                               if ( $fee || $surcharge_percentage || $surcharge_flatfee || $processing_fee) {

commit 7c2cf2ef058fe57af302e703685934418723f817
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jun 24 13:27:17 2019 -0400

    RT# 82137 - Added ability for processing fee to be pain on seperate invoice.

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index d81035273..ea2e133a3 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -2700,6 +2700,17 @@ and customer address. Include units.',
   },
 
   {
+    'key'         => 'processing-fee_on_separate_invoice',
+    'section'     => 'payments',
+    'description' => 'Places the processing fee on a separate invoice by itself.  Only works with real time processing.',
+    'type'        => 'checkbox',
+    'validate'    => sub {
+                        my $conf = new FS::Conf;
+                        !$conf->config('batch-enable_payby') ? '' : 'You can not set this option while batch processing is enabled.';
+                     },
+  },
+
+  {
     'key'         => 'banned_pay-pad',
     'section'     => 'credit_cards',
     'description' => 'Padding for encrypted storage of banned credit card hashes.  If you already have new-style SHA512 entries in the banned_pay table, do not change as this will invalidate the old entries.',
@@ -3854,6 +3865,11 @@ and customer address. Include units.',
     'description' => 'Enable batch processing for the specified payment types.',
     'type'        => 'selectmultiple',
     'select_enum' => [qw( CARD CHEK )],
+    'validate'    => sub {
+                        ## can not create a new invoice and pay it silently with batch processing, only realtime processing.
+                        my $conf = new FS::Conf;
+                        !$conf->exists('processing-fee_on_separate_invoice') ? '' : 'You can not enable batch processing while processing-fee_on_separate_invoice option is enabled.';
+                     },
   },
 
   {
diff --git a/FS/FS/cust_main/Billing_Realtime.pm b/FS/FS/cust_main/Billing_Realtime.pm
index 346d5661b..b8ed03075 100644
--- a/FS/FS/cust_main/Billing_Realtime.pm
+++ b/FS/FS/cust_main/Billing_Realtime.pm
@@ -985,17 +985,20 @@ sub _realtime_bop_result {
     savepoint_create( $savepoint_label );
 
     #start a transaction, insert the cust_pay and set cust_pay_pending.status to done in a single transction
-
-    my $error = $cust_pay->insert($options{'manual'} ? ( 'manual' => 1 ) : () );
+    my $error = $cust_pay->insert(
+      $options{'manual'} ? ( 'manual' => 1 ) : (),
+      $options{'processing-fee'} > 0 ? ( 'processing-fee' => $options{'processing-fee'} ) : (),
+    );
 
     if ( $error ) {
       savepoint_rollback( $savepoint_label );
 
       $cust_pay->invnum(''); #try again with no specific invnum
       $cust_pay->paynum('');
-      my $error2 = $cust_pay->insert( $options{'manual'} ?
-                                      ( 'manual' => 1 ) : ()
-                                    );
+      my $error2 = $cust_pay->insert(
+        $options{'manual'} ? ( 'manual' => 1 ) : (),
+        $options{'processing-fee'} > 0 ? ( 'processing-fee' => $options{'processing-fee'} ) : (),
+      );
       if ( $error2 ) {
         # gah.  but at least we have a record of the state we had to abort in
         # from cust_pay_pending now.
@@ -1137,11 +1140,23 @@ sub _realtime_bop_result {
     if ($options{'processing-fee'} > 0) {
       my $pf_cust_pkg;
       my $processing_fee_text = 'Payment Processing Fee';
+
+      my $conf = new FS::Conf;
+
+      my $pf_seperate_bill;
+      my $pf_bill_now;
+      if ($conf->exists('processing-fee_on_separate_invoice')) {
+        $pf_seperate_bill = 'Y';
+        $pf_bill_now = '1';
+      }
+
       my $pf_change_error = $self->charge({
             'amount'  => $options{'processing-fee'},
             'pkg'   => $processing_fee_text,
             'setuptax'  => 'Y',
             'cust_pkg_ref' => \$pf_cust_pkg,
+            'separate_bill' => $pf_seperate_bill,
+            'bill_now' => $pf_bill_now,
       });
 
       if($pf_change_error) {
@@ -1156,17 +1171,41 @@ sub _realtime_bop_result {
         # but keep going...
       }
 
-      my $cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum });
-      unless ( $cust_bill ) {
-        warn "race condition + invoice deletion just happened";
-        return '';
-      }
+      if ($conf->exists('processing-fee_on_separate_invoice')) {
+        my $cust_bill_pkg = qsearchs( 'cust_bill_pkg', { 'pkgnum' => $pf_cust_pkg->pkgnum } );
+
+        my $pf_cust_bill = qsearchs('cust_bill', { 'invnum' => $cust_bill_pkg->invnum });
+        unless ( $pf_cust_bill ) {
+          warn "no processing fee inv found!";
+          return '';
+        }
+
+        my $pf_apply_error = $pf_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_pf_error = $cust_bill->apply_payments_and_credits;
+
+        warn "cannot apply Processing fee to invoice #$invnum: $grand_pf_error - $pf_apply_error"
+          if $grand_pf_error || $pf_apply_error;
+      } ## processing-fee_on_separate_invoice
+      else {
+        my $cust_bill = qsearchs('cust_bill', { 'invnum' => $invnum });
+        unless ( $cust_bill ) {
+          warn "race condition + invoice deletion just happened";
+          return '';
+        }
 
-      my $grand_pf_error =
-        $cust_bill->add_cc_surcharge($pf_cust_pkg->pkgnum,$options{'processing-fee'});
+        my $grand_pf_error =
+          $cust_bill->add_cc_surcharge($pf_cust_pkg->pkgnum,$options{'processing-fee'});
 
-      warn "cannot add Processing fee to invoice #$invnum: $grand_pf_error"
-        if $grand_pf_error;
+        warn "cannot add Processing fee to invoice #$invnum: $grand_pf_error"
+          if $grand_pf_error;
+      } ## no processing-fee_on_separate_invoice
     } #end if $options{'processing-fee'}
 
       } #end if ( $options{'cc_surcharge'} > 0 || $options{'processing-fee'} > 0)
diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm
index 915cb3303..c0a254119 100644
--- a/FS/FS/cust_pay.pm
+++ b/FS/FS/cust_pay.pm
@@ -395,6 +395,8 @@ sub insert {
 
   $dbh->commit or die $dbh->errstr if $oldAutoCommit;
 
+  $self->{'processing_fee'} = $options{'processing-fee'};
+
   #payment receipt
   my $trigger = $conf->config('payment_receipt-trigger', 
                               $self->cust_main->agentnum) || 'cust_pay';
@@ -735,6 +737,8 @@ sub send_message_receipt {
 
       my %substitutions = ();
       $substitutions{invnum} = $cust_bill->invnum if $cust_bill;
+      $substitutions{'processing_fee'} = $self->{'processing_fee'};
+
 
       my $msg_template = qsearchs('msg_template',{ msgnum => $msgnum});
       unless ($msg_template) {
diff --git a/httemplate/config/config-process.cgi b/httemplate/config/config-process.cgi
index d84edce00..6af7d2322 100644
--- a/httemplate/config/config-process.cgi
+++ b/httemplate/config/config-process.cgi
@@ -155,7 +155,9 @@ foreach my $type ( ref($i->type) ? @{$i->type} : $i->type ) {
     }
   } elsif ( $type eq 'checkbox' ) {
     if ( defined $cgi->param($i->key.$n) ) {
-      push @touch, $i->key;
+      my $error = &{$i->validate}('', $n) if $i->validate;
+      push @error, $error if $error;
+      push @touch, $i->key if !$error;
     } else {
       push @delete, $i->key;
     }
@@ -167,7 +169,7 @@ foreach my $type ( ref($i->type) ? @{$i->type} : $i->type ) {
     if ( scalar(@{[ $cgi->param($i->key.$n) ]}) && $cgi->param($i->key.$n) ne '' ) {
       my $error = &{$i->validate}([ $cgi->param($i->key.$n) ], $n) if $i->validate;
       push @error, $error if $error;
-      $conf->set($i->key, join("\n", @{[ $cgi->param($i->key.$n) ]} ), $agentnum);
+      $conf->set($i->key, join("\n", @{[ $cgi->param($i->key.$n) ]} ), $agentnum) if !$error;
     } else {
       $conf->delete($i->key, $agentnum);
     }
diff --git a/httemplate/elements/tr-amount_fee.html b/httemplate/elements/tr-amount_fee.html
index 94795de37..0ae6a0f74 100644
--- a/httemplate/elements/tr-amount_fee.html
+++ b/httemplate/elements/tr-amount_fee.html
@@ -44,7 +44,7 @@
         <TD>
           <TABLE><TR>
             <TD BGCOLOR="#ffffff">
-             <INPUT TYPE="checkbox" NAME="processing_fee" ID="processing_fee" VALUE="<% $processing_fee %>" onclick="<% $opt{prefix} %>process_fee_changed()">
+             <INPUT TYPE="checkbox" NAME="processing_fee" ID="processing_fee" VALUE="<% $processing_fee %>" onclick="<% $opt{prefix} %>process_fee_changed()" checked>
             </TD>
             <TD ID="ajax_processingfee_cell" BGCOLOR="#dddddd" STYLE="border:1px solid blue">
              <FONT SIZE="+1">A processing fee of <% $processing_fee %> is being applied to this transaction.</FONT>
diff --git a/httemplate/elements/tr-select-payment_options.html b/httemplate/elements/tr-select-payment_options.html
index c5b84e756..27df9622e 100644
--- a/httemplate/elements/tr-select-payment_options.html
+++ b/httemplate/elements/tr-select-payment_options.html
@@ -60,7 +60,7 @@ Example:
 
       $('#payment_option_row').<% $payment_option_row %>();
       $('#payment_amount_row').<% $payment_amount_row %>();
-      $('#ajax_processingfee_cell').hide();
+      $('#ajax_processingfee_cell').show();
 
       if($('#payment_amount_row').is(':visible')) {
         var surcharge;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Conf.pm                                      | 16 ++++++
 FS/FS/cust_main/Billing_Realtime.pm                | 67 +++++++++++++++++-----
 FS/FS/cust_pay.pm                                  |  4 ++
 httemplate/config/config-process.cgi               |  6 +-
 httemplate/elements/tr-amount_fee.html             |  4 +-
 httemplate/elements/tr-select-payment_options.html |  2 +-
 6 files changed, 80 insertions(+), 19 deletions(-)




More information about the freeside-commits mailing list