From 10b4364dc788df061006dd866fde79cff08645fc Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Sat, 17 Mar 2012 16:28:58 -0700 Subject: [PATCH] fix term discount display, #16965 --- FS/FS/cust_bill.pm | 3 +++ FS/FS/discount_plan.pm | 11 ++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index bb44c0524..3aa75eca5 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -5261,6 +5261,9 @@ sub _items_discounts_avail { join(', ', map { "#$_" } $plan->pkgnums) if $list_pkgnums; + # discounts for non-integer months don't work anyway + $months = sprintf("%d", $months); + +{ description => $self->mt('Save [_1]% by paying for [_2] months', $percent, $months), diff --git a/FS/FS/discount_plan.pm b/FS/FS/discount_plan.pm index 3ae44c8d4..6a456766d 100644 --- a/FS/FS/discount_plan.pm +++ b/FS/FS/discount_plan.pm @@ -80,19 +80,24 @@ sub new { $self->{discounted} += $setup; } - if ( $discount->percent ) { + if ( $discount->percent > 0 ) { $discountable += $months * $permonth; $discountable -= ($discountable * $discount->percent / 100); $discountable -= ($permonth - $recur); # correct for prorate $self->{discounted} += $discountable; } - else { + elsif ( $discount->amount > 0 ) { $discountable += $recur; $discountable -= $discount->amount * $recur/$permonth; $discountable += ($months - 1) * max($permonth - $discount->amount,0); + $self->{discounted} += $discountable; + } + else { + warn "discountnum ".$discount->discountnum. + " has no amount or percentage, ignored\n"; + $self->{discounted} = $self->{base}; } - $self->{discounted} += $discountable; push @{ $self->{pkgnums} }, $cust_pkg->pkgnum; } else { #no discount -- 2.11.0