[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