X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fdiscount_Mixin.pm;h=4a9a65eeb1c2ee5f92ed03a97b0db7161496ba42;hb=df97be326720e596f1eeb3c3b9f70ae9c2ae9406;hp=d97e180426fc164c17933341cd3dd26b174d1470;hpb=d4aa507c7523ac052307088ea17fdc92276cbf6c;p=freeside.git diff --git a/FS/FS/part_pkg/discount_Mixin.pm b/FS/FS/part_pkg/discount_Mixin.pm index d97e18042..4a9a65eeb 100644 --- a/FS/FS/part_pkg/discount_Mixin.pm +++ b/FS/FS/part_pkg/discount_Mixin.pm @@ -1,14 +1,12 @@ package FS::part_pkg::discount_Mixin; use strict; -use vars qw(@ISA %info); -use FS::part_pkg; +use vars qw( %info ); +use Time::Local qw( timelocal ); +use List::Util qw( min ); use FS::cust_pkg; use FS::cust_bill_pkg_discount; -use Time::Local qw(timelocal); -use List::Util 'min'; -@ISA = qw(FS::part_pkg); %info = ( 'disabled' => 1 ); =head1 NAME @@ -41,7 +39,7 @@ discount and generates an invoice detail describing it. sub calc_discount { my($self, $cust_pkg, $sdate, $details, $param ) = @_; - my $br = $self->base_recur($cust_pkg, $sdate); + my $br = $self->base_recur_permonth($cust_pkg, $sdate); $br += $param->{'override_charges'} if $param->{'override_charges'}; my $tot_discount = 0; @@ -120,6 +118,9 @@ sub calc_discount { $param->{'discount_left_recur'}{$discount->discountnum} = 0; $months = 1; } + elsif ( $discount->setup && $discount->months == 1 && $discount->amount ) { + next; + } my $error = $cust_pkg_discount->increment_months_used($months) if (defined $param->{'real_pkgpart'} @@ -127,11 +128,12 @@ sub calc_discount { && ! defined $param->{'setup_charge'}); die "error discounting: $error" if $error; + $amount = min($amount, $br); $amount *= $months; $amount = sprintf('%.2f', $amount); next unless $amount > 0; - + # transfer remainder of discount, if any, to setup if ( $discount->setup && $discount->amount && (!$discount->months || $discount->months != 1)