diff options
author | Ivan Kohler <ivan@freeside.biz> | 2013-01-09 16:22:41 -0800 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2013-01-09 16:22:41 -0800 |
commit | 85ce878a87e2da7ed3e2f927cae7745ef3b59cc0 (patch) | |
tree | e824c6e4a069c702a476141cc5ab05d9c19b296c | |
parent | 27ed323fad9fca12f507a524e1788fb37e36501e (diff) | |
parent | baa48df835b04f1aee3f9cd2c03f00e780585f13 (diff) |
Merge branch 'master' of git.freeside.biz:/home/git/freeside
-rw-r--r-- | FS/FS/cust_credit.pm | 21 | ||||
-rw-r--r-- | FS/FS/cust_main_county.pm | 2 |
2 files changed, 17 insertions, 6 deletions
diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index c716602a0..05d961c3f 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -717,8 +717,7 @@ sub credit_lineitems { my %cust_bill_pkg = (); my %cust_credit_bill_pkg = (); my %taxlisthash = (); - # except here they're billpaynums - my %unapplied_payments; + my %unapplied_payments; #invoice numbers, and then billpaynums foreach my $billpkgnum ( @{$arg{billpkgnums}} ) { my $setuprecur = shift @{$arg{setuprecurs}}; my $amount = shift @{$arg{amounts}}; @@ -753,7 +752,7 @@ sub credit_lineitems { $dbh->rollback if $oldAutoCommit; return "Error unapplying payment: $error"; } - $unapplied_payments{$cust_bill_pay_pkg->billpaynum} + $unapplied_payments{$invnum}{$cust_bill_pay_pkg->billpaynum} += $cust_bill_pay_pkg->amount; } @@ -893,27 +892,37 @@ sub credit_lineitems { $dbh->rollback if $oldAutoCommit; return "Error unapplying payment: $error"; } - $unapplied_payments{$cust_bill_pay_pkg->billpaynum} + $unapplied_payments{$invnum}{$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) { + foreach my $billpaynum (keys %{$unapplied_payments{$invnum}}) { my $cust_bill_pay = FS::cust_bill_pay->by_key($billpaynum) or die "broken payment application $billpaynum"; + my @subapps = $cust_bill_pay->lineitem_applications; $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}), + $cust_bill_pay->amount + - $unapplied_payments{$invnum}{$billpaynum}), }); if ( $new_cust_bill_pay->amount > 0 ) { $error ||= $new_cust_bill_pay->insert; + # Also reapply it to everything it was applied to before. + # Note that we've already deleted cust_bill_pay_pkg records for the + # items we're crediting, so they aren't on this list. + foreach my $cust_bill_pay_pkg (@subapps) { + $cust_bill_pay_pkg->billpaypkgnum(''); + $cust_bill_pay_pkg->billpaynum($new_cust_bill_pay->billpaynum); + $error ||= $cust_bill_pay_pkg->insert; + } } if ( $error ) { $dbh->rollback if $oldAutoCommit; diff --git a/FS/FS/cust_main_county.pm b/FS/FS/cust_main_county.pm index db6be751d..573359571 100644 --- a/FS/FS/cust_main_county.pm +++ b/FS/FS/cust_main_county.pm @@ -498,6 +498,8 @@ sub taxline { 'taxnum' => $self->taxnum, 'taxtype' => ref($self), 'cents' => $this_tax_cents, + 'pkgnum' => $cust_bill_pkg->pkgnum, + 'locationnum' => $cust_bill_pkg->cust_pkg->tax_locationnum, 'taxable_cust_bill_pkg' => $cust_bill_pkg, 'tax_cust_bill_pkg' => $tax_item, }); |