summaryrefslogtreecommitdiff
path: root/FS/FS
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2018-10-30 12:17:12 -0700
committerIvan Kohler <ivan@freeside.biz>2018-10-30 12:17:12 -0700
commit368ed08e24400e9d1faf401a1e4e23ea54d2c969 (patch)
tree7668985ed39ffa99767304a8c3696b4f1b4f0f19 /FS/FS
parent3fc05ed5adb6cbfcd6aee27b2ae199cf95cd4224 (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.pm7
-rw-r--r--FS/FS/cust_main.pm2
-rw-r--r--FS/FS/cust_main/Packages.pm22
-rw-r--r--FS/FS/cust_main_Mixin.pm4
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)