[freeside-commits] branch master updated. 0f8882fa700977c08688d3bdf6412ad06f0e618e
Mark Wells
mark at 420.am
Sat Aug 29 16:17:49 PDT 2015
The branch, master has been updated
via 0f8882fa700977c08688d3bdf6412ad06f0e618e (commit)
via 42292b1e5813f6e9657f08137dffc68a3c810b01 (commit)
from beeeec140a0479d5757031d9ace0e40871d41d22 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 0f8882fa700977c08688d3bdf6412ad06f0e618e
Author: Rob Van Dam <rvandam00 at gmail.com>
Date: Thu Aug 6 17:05:28 2015 -0600
Changed min() call to reduce possibility of rounding error returning a
discount > base_recur. Also added comments for other possible problem
areas
diff --git a/FS/FS/part_pkg/discount_Mixin.pm b/FS/FS/part_pkg/discount_Mixin.pm
index 47cb251..abde93f 100644
--- a/FS/FS/part_pkg/discount_Mixin.pm
+++ b/FS/FS/part_pkg/discount_Mixin.pm
@@ -42,7 +42,10 @@ sub calc_discount {
my $br_permonth = $self->base_recur_permonth($cust_pkg, $sdate);
$br_permonth += $param->{'override_charges'} if $param->{'override_charges'};
-
+
+ my $br = $self->base_recur($cust_pkg, $sdate);
+ $br += $param->{'override_charges'} * ($cust_pkg->part_pkg->freq || 0) if $param->{'override_charges'};
+
my $tot_discount = 0;
#UI enforces just 1 for now, will need ordering when they can be stacked
@@ -83,7 +86,7 @@ sub calc_discount {
my $amount = 0;
$amount += $discount->amount
if $cust_pkg->pkgpart == $param->{'real_pkgpart'};
- $amount += sprintf('%.2f', $discount->percent * $br_permonth / 100 );
+ $amount += sprintf('%.2f', $discount->percent * $br_permonth / 100 ); # FIXME: should this use $br / $freq to avoid rounding errors?
my $chg_months = defined($param->{'months'}) ?
$param->{'months'} :
$cust_pkg->part_pkg->freq;
@@ -133,8 +136,7 @@ sub calc_discount {
};
}
- $amount = min($amount, $br_permonth);
- $amount *= $months;
+ $amount = min($amount * $months, $br);
}
$amount = sprintf('%.2f', $amount + 0.00000001 ); #so 1.005 rounds to 1.01
@@ -147,9 +149,9 @@ sub calc_discount {
&& !defined $param->{'setup_charge'}
)
{
- $discount_left = $br_permonth - $amount;
+ $discount_left = $br_permonth - $amount; # FIXME: $amount is no longer permonth at this point!
if ( $discount_left < 0 ) {
- $amount = $br_permonth;
+ $amount = $br_permonth; # FIXME: seems like this should *= $months
$param->{'discount_left_setup'}{$discount->discountnum} =
0 - $discount_left;
}
commit 42292b1e5813f6e9657f08137dffc68a3c810b01
Author: Rob Van Dam <rvandam00 at gmail.com>
Date: Thu Aug 6 16:56:15 2015 -0600
Renamed $br to $br_permonth to clarify value is base_recur_permonth, NOT
base_recur
diff --git a/FS/FS/part_pkg/discount_Mixin.pm b/FS/FS/part_pkg/discount_Mixin.pm
index 3180275..47cb251 100644
--- a/FS/FS/part_pkg/discount_Mixin.pm
+++ b/FS/FS/part_pkg/discount_Mixin.pm
@@ -40,8 +40,8 @@ sub calc_discount {
my($self, $cust_pkg, $sdate, $details, $param ) = @_;
my $conf = new FS::Conf;
- my $br = $self->base_recur_permonth($cust_pkg, $sdate);
- $br += $param->{'override_charges'} if $param->{'override_charges'};
+ my $br_permonth = $self->base_recur_permonth($cust_pkg, $sdate);
+ $br_permonth += $param->{'override_charges'} if $param->{'override_charges'};
my $tot_discount = 0;
#UI enforces just 1 for now, will need ordering when they can be stacked
@@ -83,7 +83,7 @@ sub calc_discount {
my $amount = 0;
$amount += $discount->amount
if $cust_pkg->pkgpart == $param->{'real_pkgpart'};
- $amount += sprintf('%.2f', $discount->percent * $br / 100 );
+ $amount += sprintf('%.2f', $discount->percent * $br_permonth / 100 );
my $chg_months = defined($param->{'months'}) ?
$param->{'months'} :
$cust_pkg->part_pkg->freq;
@@ -133,7 +133,7 @@ sub calc_discount {
};
}
- $amount = min($amount, $br);
+ $amount = min($amount, $br_permonth);
$amount *= $months;
}
@@ -147,9 +147,9 @@ sub calc_discount {
&& !defined $param->{'setup_charge'}
)
{
- $discount_left = $br - $amount;
+ $discount_left = $br_permonth - $amount;
if ( $discount_left < 0 ) {
- $amount = $br;
+ $amount = $br_permonth;
$param->{'discount_left_setup'}{$discount->discountnum} =
0 - $discount_left;
}
@@ -188,7 +188,7 @@ sub calc_discount {
#}
#push @$details, $d;
- #push @$details, sprintf( $format, $money_char, $br );
+ #push @$details, sprintf( $format, $money_char, $br_permonth );
}
-----------------------------------------------------------------------
Summary of changes:
FS/FS/part_pkg/discount_Mixin.pm | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
More information about the freeside-commits
mailing list