- #hmmm... error handling
- my ($credit, $savings, $total) =
- $cust_main->discount_term_values($months);
+ # XXX this should be moved out somewhere, but discount_term_values
+ # doesn't fit right
+ my ($cust_bill) = ($cust_main->cust_bill)[-1]; # most recent invoice
+ return "can't accept prepayment for an unbilled customer" if !$cust_bill;
+
+ my %billing_pkgs = map { $_->pkgnum => $_ } $cust_main->billing_pkgs;
+ my $credit = 0; # sum of recurring charges from that invoice
+ my $last_bill_date = 0; # the real bill date
+ foreach my $item ( $cust_bill->cust_bill_pkg ) {
+ next if !exists($billing_pkgs{$item->pkgnum}); # skip inactive packages
+ $credit += $item->recur;
+ $last_bill_date = $item->cust_pkg->last_bill
+ if defined($item->cust_pkg)
+ and $item->cust_pkg->last_bill > $last_bill_date
+ }
+