[freeside-commits] branch master updated. cae584bf375249ab6c1143f5c7cce2776e849e05

Ivan ivan at 420.am
Fri Jan 22 15:13:30 PST 2016


The branch, master has been updated
       via  cae584bf375249ab6c1143f5c7cce2776e849e05 (commit)
      from  a98d391396726b9459f7266cde26ff3b76924447 (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 cae584bf375249ab6c1143f5c7cce2776e849e05
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Fri Jan 22 15:13:29 2016 -0800

    discount as a package-specific event, RT#39870

diff --git a/FS/FS/part_event/Action/pkg_discount.pm b/FS/FS/part_event/Action/pkg_discount.pm
index 592e044..bae3c34 100644
--- a/FS/FS/part_event/Action/pkg_discount.pm
+++ b/FS/FS/part_event/Action/pkg_discount.pm
@@ -3,10 +3,12 @@ package FS::part_event::Action::pkg_discount;
 use strict;
 use base qw( FS::part_event::Action );
 
-sub description { "Discount unsuspended customer packages (monthly recurring only)"; }
+sub description { "Discount unsuspended package(s) (monthly recurring only)"; }
 
 sub eventtable_hashref {
-  { 'cust_main' => 1 };
+  { 'cust_main' => 1,
+    'cust_pkg'  => 1,
+  };
 }
 
 sub event_stage { 'pre-bill'; }
@@ -42,12 +44,28 @@ sub do_action {
   my $cust_main = $self->cust_main($object);
   my %if_pkgpart = map { $_=>1 } split(/\s*,\s*/, $self->option('if_pkgpart') );
   my $allpkgs = (keys %if_pkgpart) ? 0 : 1;
-  my @cust_pkg = grep { ( $allpkgs || $if_pkgpart{ $_->pkgpart } ) 
-                          && $_->part_pkg->freq
-                          #can remove after fixing discount bug with non-monthly pkgs
-                          && ( $_->part_pkg->freq =~ /^\d+$/) } 
-                      $cust_main->unsuspended_pkgs;
-  return 'No qualifying packages' unless @cust_pkg;
+
+  my @cust_pkg = ();
+  if ( $object->table eq 'cust_pkg' ) {
+
+    return 'Package is suspended' if $object->susp;
+    return 'Package not selected'
+      if ! $allpkgs && ! $if_pkgpart{ $object->pkgpart };
+    return 'Package frequency not monthly or a multiple'
+      if $object->part_pkg->freq !~ /^\d+$/;
+
+    @cust_pkg = ( $object );
+
+  } else {
+
+    @cust_pkg = grep { ( $allpkgs || $if_pkgpart{ $_->pkgpart } ) 
+                         && $_->part_pkg->freq
+                         #remove after fixing discount bug with non-monthly pkgs
+                         && ( $_->part_pkg->freq =~ /^\d+$/) } 
+                     $cust_main->unsuspended_pkgs;
+    return 'No qualifying packages' unless @cust_pkg;
+
+  }
 
   my $gotit = 0;
   foreach my $cust_pkg (@cust_pkg) {

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

Summary of changes:
 FS/FS/part_event/Action/pkg_discount.pm |   34 +++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)




More information about the freeside-commits mailing list