diff options
author | Ivan Kohler <ivan@freeside.biz> | 2018-10-30 12:17:12 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2018-10-30 12:17:12 -0700 |
commit | 368ed08e24400e9d1faf401a1e4e23ea54d2c969 (patch) | |
tree | 7668985ed39ffa99767304a8c3696b4f1b4f0f19 /FS/FS | |
parent | 3fc05ed5adb6cbfcd6aee27b2ae199cf95cd4224 (diff) |
add option to limit automatic unsuspensions to a specific suspension reason type, RT#74448, RT#81634
Diffstat (limited to 'FS/FS')
-rw-r--r-- | FS/FS/Conf.pm | 7 | ||||
-rw-r--r-- | FS/FS/cust_main.pm | 2 | ||||
-rw-r--r-- | FS/FS/cust_main/Packages.pm | 22 | ||||
-rw-r--r-- | FS/FS/cust_main_Mixin.pm | 4 |
4 files changed, 30 insertions, 5 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 057e4cf..aed054a 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2047,6 +2047,13 @@ and customer address. Include units.', }, { + 'key' => 'unsuspend_reason_type', + 'section' => 'suspension', + 'description' => 'If set, limits automatic unsuspension to packages which were suspended for this reason type.', + reason_type_options('S'), + }, + + { 'key' => 'unsuspend-always_adjust_next_bill_date', 'section' => 'suspension', 'description' => 'Global override that causes unsuspensions to always adjust the next bill date under any circumstances. This is now controlled on a per-package bases - probably best not to use this option unless you are a legacy installation that requires this behaviour.', diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index 2e8fe81..fb4b153 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -2064,7 +2064,7 @@ Returns a list: an empty list on success or a list of errors. sub unsuspend { my $self = shift; - grep { ($_->get('setup')) && $_->unsuspend } $self->suspended_pkgs; + grep { ($_->get('setup')) && $_->unsuspend } $self->suspended_pkgs(@_); } =item release_hold diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm index 7090ce7..3437542 100644 --- a/FS/FS/cust_main/Packages.pm +++ b/FS/FS/cust_main/Packages.pm @@ -570,16 +570,32 @@ sub sort_packages { } -=item suspended_pkgs +=item suspended_pkgs OPTION => VALUE ... Returns all suspended packages (see L<FS::cust_pkg>) for this customer. +Currently supports one option, I<reason_type>, which if set to a typenum, +limits the results to packages which were suspended for reasons of this type. +(Does not currently work in scalar context; i.e. when just asking for a count.) + =cut sub suspended_pkgs { my $self = shift; - return $self->num_suspended_pkgs unless wantarray; - grep { $_->susp } $self->ncancelled_pkgs; + my %opt = @_; + + return $self->num_suspended_pkgs unless wantarray; #XXX opt in scalar context + + my @pkgs = grep { $_->susp } $self->ncancelled_pkgs; + + if ( $opt{reason_type} ) { + @pkgs = grep { my $r = $_->last_reason('susp'); + $r && $r->reason_type == $opt{reason_type}; + } + @pkgs; + } + + @pkgs; } =item unsuspended_pkgs diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index cceaa4b..6a2e905 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -737,7 +737,9 @@ sub unsuspend_balance { } my $balance = $cust_main->balance || 0; if ($balance <= $maxbalance) { - my @errors = $cust_main->unsuspend; + my @errors = $cust_main->unsuspend( + 'reason_type' => $conf->config('unsuspend_reason_type') + ); # side-fx with nested transactions? upstack rolls back? warn "WARNING:Errors unsuspending customer ". $cust_main->custnum. ": ". join(' / ', @errors) |