[freeside-commits] branch master updated. 9cedd28800e1c77dd53adab3027494a6f2e1b2cf

Mark Wells mark at 420.am
Fri Dec 21 16:57:54 PST 2012


The branch, master has been updated
       via  9cedd28800e1c77dd53adab3027494a6f2e1b2cf (commit)
      from  95cef2cea4c98d8fde7f58bacce3cf1da955c1a0 (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 9cedd28800e1c77dd53adab3027494a6f2e1b2cf
Author: Mark Wells <mark at freeside.biz>
Date:   Fri Dec 21 16:57:32 2012 -0800

    correctly unapply payments when applying a lineitem credit with tax, #18676

diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm
index 7741bbe..c716602 100644
--- a/FS/FS/cust_credit.pm
+++ b/FS/FS/cust_credit.pm
@@ -717,6 +717,8 @@ sub credit_lineitems {
   my %cust_bill_pkg = ();
   my %cust_credit_bill_pkg = ();
   my %taxlisthash = ();
+  # except here they're billpaynums
+  my %unapplied_payments;
   foreach my $billpkgnum ( @{$arg{billpkgnums}} ) {
     my $setuprecur = shift @{$arg{setuprecurs}};
     my $amount = shift @{$arg{amounts}};
@@ -744,7 +746,6 @@ sub credit_lineitems {
 
     push @{$cust_bill_pkg{$invnum}}, $cust_bill_pkg;
 
-    my %unapplied_payments; # billpaynum => amount
     #unapply any payments applied to this line item (other credits too?)
     foreach my $cust_bill_pay_pkg ( $cust_bill_pkg->cust_bill_pay_pkg($setuprecur) ) {
       $error = $cust_bill_pay_pkg->delete;
@@ -755,28 +756,6 @@ sub credit_lineitems {
       $unapplied_payments{$cust_bill_pay_pkg->billpaynum}
         += $cust_bill_pay_pkg->amount;
     }
-    # also unapply that amount from the invoice so it doesn't screw up 
-    # application of the credit
-    foreach my $billpaynum (keys %unapplied_payments) {
-      my $cust_bill_pay = FS::cust_bill_pay->by_key($billpaynum)
-        or die "broken payment application $billpaynum";
-      $error = $cust_bill_pay->delete; # can't replace
-
-      my $new_cust_bill_pay = FS::cust_bill_pay->new({
-          $cust_bill_pay->hash,
-          billpaynum => '',
-          amount => sprintf('%.2f', 
-              $cust_bill_pay->amount - $unapplied_payments{$billpaynum}),
-      });
-
-      if ( $new_cust_bill_pay->amount > 0 ) {
-        $error ||= $new_cust_bill_pay->insert;
-      }
-      if ( $error ) {
-        $dbh->rollback if $oldAutoCommit;
-        return "Error unapplying payment: $error";
-      }
-    }
 
     #$subtotal += $amount;
     $cust_credit_bill{$invnum} += $amount;
@@ -904,8 +883,43 @@ sub credit_lineitems {
           };
 
       } # if $amount > 0
+
+      #unapply any payments applied to the tax
+      foreach my $cust_bill_pay_pkg
+        ( $tax_item->cust_bill_pay_pkg('setup') )
+      {
+        $error = $cust_bill_pay_pkg->delete;
+        if ( $error ) {
+          $dbh->rollback if $oldAutoCommit;
+          return "Error unapplying payment: $error";
+        }
+        $unapplied_payments{$cust_bill_pay_pkg->billpaynum}
+          += $cust_bill_pay_pkg->amount;
+      }
     } #foreach $taxline
 
+    # if we unapplied any payments from line items, also unapply that 
+    # amount from the invoice
+    foreach my $billpaynum (keys %unapplied_payments) {
+      my $cust_bill_pay = FS::cust_bill_pay->by_key($billpaynum)
+        or die "broken payment application $billpaynum";
+      $error = $cust_bill_pay->delete; # can't replace
+
+      my $new_cust_bill_pay = FS::cust_bill_pay->new({
+          $cust_bill_pay->hash,
+          billpaynum => '',
+          amount => sprintf('%.2f', 
+              $cust_bill_pay->amount - $unapplied_payments{$billpaynum}),
+      });
+
+      if ( $new_cust_bill_pay->amount > 0 ) {
+        $error ||= $new_cust_bill_pay->insert;
+      }
+      if ( $error ) {
+        $dbh->rollback if $oldAutoCommit;
+        return "Error unapplying payment: $error";
+      }
+    }
     #insert cust_credit_bill
 
     my $cust_credit_bill = new FS::cust_credit_bill {

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

Summary of changes:
 FS/FS/cust_credit.pm |   60 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 37 insertions(+), 23 deletions(-)




More information about the freeside-commits mailing list