diff options
author | Ivan Kohler <ivan@freeside.biz> | 2016-01-22 15:13:30 -0800 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2016-01-22 15:13:30 -0800 |
commit | e86b1e9c3887bea0e3b0af13938e45f9f0ebe1e3 (patch) | |
tree | 523093ddbe7b6bbc49aeb8d52339a8e2d083eb9b /FS/FS/part_event/Action | |
parent | b5ba8c79c7a22cb0ee7d001cc8fe87de527b702e (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.pm | 34 |
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) { |