[freeside-commits] branch master updated. 72e4046329988c9a99b4aefc4e69b678f1e29fcb

Christopher Burger burgerc at freeside.biz
Mon Dec 4 12:33:56 PST 2017


The branch, master has been updated
       via  72e4046329988c9a99b4aefc4e69b678f1e29fcb (commit)
      from  f1efa648c501e910f675475c522dde7ed44c671f (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 72e4046329988c9a99b4aefc4e69b678f1e29fcb
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Dec 4 13:06:20 2017 -0500

    RT# 33362 - fixed discount_mixin to not throw perl error when trying to discount non monthly recuring.

diff --git a/FS/FS/part_event/Action/pkg_discount.pm b/FS/FS/part_event/Action/pkg_discount.pm
index dd85ada9b..d245ef40b 100644
--- a/FS/FS/part_event/Action/pkg_discount.pm
+++ b/FS/FS/part_event/Action/pkg_discount.pm
@@ -23,10 +23,10 @@ sub option_fields {
                        'extra_sql' => q(AND freq NOT LIKE '0%' AND freq NOT LIKE '%d' AND freq NOT LIKE '%h' AND freq NOT LIKE '%w'), 
                        'multiple' => 1,
                      },
-    'if_pkg_class'    => { label    => 'Only package class',
-                           type     => 'select-pkg_class',
-                           multiple => 1,
-                         },
+    'if_pkg_class' => { 'label'    => 'Only package class',
+                        'type'     => 'select-pkg_class',
+                        'multiple' => 1,
+                      },
     'discountnum' => { 'label'    => 'Discount',
                        'type'     => 'select-table', #we don't handle the select-discount create a discount case
                        'table'    => 'discount',
@@ -54,7 +54,7 @@ sub do_action {
 
   my $cust_main = $self->cust_main($object);
   my %if_pkgpart = map { $_=>1 } split(/\s*,\s*/, $self->option('if_pkgpart') );
-  my $if_pkg_class = $self->option('if_pkg_class') || {};
+  my %if_pkg_class = map { $_=>1 } split(/\s*,\s*/, $self->option('if_pkg_class') );
 
   my $allpkgs = (keys %if_pkgpart) ? 0 : 1;
 
@@ -65,8 +65,8 @@ sub do_action {
     return 'Package not selected'
       if ! $allpkgs && ! $if_pkgpart{ $object->pkgpart };
     return 'Package not of selected class'
-      if keys %$if_pkg_class
-      && ! $if_pkg_class->{ $object->part_pkg->classnum };
+      if keys %if_pkg_class
+      && ! $if_pkg_class{ $object->part_pkg->classnum };
     return 'Package frequency not monthly or a multiple'
       if $object->part_pkg->freq !~ /^\d+$/;
 
@@ -76,7 +76,7 @@ sub do_action {
 
     @cust_pkg = grep {
          ( $allpkgs || $if_pkgpart{ $_->pkgpart } ) 
-      && ( ! keys %$if_pkg_class || $if_pkg_class->{ $_->part_pkg->classnum } )
+      && ( ! keys %if_pkg_class || $if_pkg_class{ $_->part_pkg->classnum } )
       && $_->part_pkg->freq
       #remove after fixing discount bug with non-monthly pkgs
       && ( $_->part_pkg->freq =~ /^\d+$/)
diff --git a/FS/FS/part_pkg/discount_Mixin.pm b/FS/FS/part_pkg/discount_Mixin.pm
index 801737b04..1e4653639 100644
--- a/FS/FS/part_pkg/discount_Mixin.pm
+++ b/FS/FS/part_pkg/discount_Mixin.pm
@@ -46,7 +46,11 @@ sub calc_discount {
   my $conf = new FS::Conf;
 
   my $br = $self->base_recur($cust_pkg, $sdate);
-  $br += $param->{'override_charges'} * ($cust_pkg->part_pkg->freq || 0) if $param->{'override_charges'};
+
+  ## can not multiply non monthly recurring frequency so skip.
+  unless ($cust_pkg->part_pkg->freq !~ /^\d+$/) {
+    $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
@@ -147,6 +151,9 @@ sub calc_discount {
       # the "estimated recurring fee" is only for as long as the discount
       # lasts.
 
+      # can not multiply non monthly recurring frequency so skip.
+      next if $self->freq !~ /^\d+$/;
+
       my $recur_charge = $br * $months / $self->freq;
       # round this, because the real recur charge is rounded
       $recur_charge = sprintf('%.2f', $recur_charge);

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/part_event/Action/pkg_discount.pm | 16 ++++++++--------
 FS/FS/part_pkg/discount_Mixin.pm        |  9 ++++++++-
 2 files changed, 16 insertions(+), 9 deletions(-)




More information about the freeside-commits mailing list