X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_credit.pm;h=ad888f9d19ba3d21b5ed787f85a879b66d9e05fc;hp=aebf25922305dd51d2efb781355410db95ff46f4;hb=ffa18709ee8a4d05e18d2d406cf73afe79e52524;hpb=44dcd4a1ff335a85a6babf0e007be57e6ec4f525 diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index aebf25922..ad888f9d1 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -140,12 +140,12 @@ Ooptions are passed as a list of keys and values. Available options: =item reason_type -L type for newly-inserted reason +L Reason type for newly-inserted reason =item cust_credit_source_bill_pkg An arrayref of -L objects. +L objects. They will have their crednum set and will be inserted along with this credit. =back @@ -167,6 +167,10 @@ sub insert { my $dbh = dbh; my $cust_main = qsearchs( 'cust_main', { 'custnum' => $self->custnum } ); + unless ( $cust_main ) { + $dbh->rollback if $oldAutoCommit; + return "Unknown custnum ". $self->custnum; + } my $old_balance = $cust_main->balance; if (!$self->reasonnum) { @@ -728,10 +732,12 @@ sub calculate_tax_adjustment { if ($recur) { $recur -= $cust_bill_pkg->credited('', '', setuprecur => 'recur') || 0; } + # Skip line items that have been completely credited. + next if ($setup + $recur) == 0; my $setup_ratio = $setup / ($setup + $recur); - # Calculate the fraction of tax to credit: it's the fraction of this charge - # (either setup or recur) that's being credited. + # Calculate the fraction of tax to credit: it's the fraction of this + # charge (either setup or recur) that's being credited. my $charged = ($setuprecur eq 'setup') ? $setup : $recur; next if $charged == 0; # shouldn't happen, but still... @@ -900,7 +906,7 @@ sub credit_lineitems { my $invnum = $cust_bill_pkg->invnum; $need_to_unapply -= $cust_bill_pkg->owed($setuprecur); - next if $need_to_unapply < 0.005; + return if $need_to_unapply < 0.005; my $error; # then unapply payments one at a time (partially if need be) until the