eliminate some false laziness in FS::Misc::send_email vs. msg_template/email.pm send_...
[freeside.git] / FS / FS / cust_credit.pm
index aebf259..ad888f9 100644 (file)
@@ -140,12 +140,12 @@ Ooptions are passed as a list of keys and values.  Available options:
 
 =item reason_type
 
-L<FS::reason_type|Reason> type for newly-inserted reason
+L<FS::reason_type> Reason type for newly-inserted reason
 
 =item cust_credit_source_bill_pkg
 
 An arrayref of
-L<FS::cust_credit_source_bill_pkg|FS::cust_credit_source_bilL_pkg> objects.
+L<FS::cust_credit_source_bill_pkg> 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