summaryrefslogtreecommitdiff
path: root/FS/FS/part_event/Action
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2016-01-22 15:13:30 -0800
committerIvan Kohler <ivan@freeside.biz>2016-01-22 15:13:30 -0800
commite86b1e9c3887bea0e3b0af13938e45f9f0ebe1e3 (patch)
tree523093ddbe7b6bbc49aeb8d52339a8e2d083eb9b /FS/FS/part_event/Action
parentb5ba8c79c7a22cb0ee7d001cc8fe87de527b702e (diff)
discount as a package-specific event, RT#39870
Diffstat (limited to 'FS/FS/part_event/Action')
-rw-r--r--FS/FS/part_event/Action/pkg_discount.pm34
1 files changed, 26 insertions, 8 deletions
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) {