diff options
author | Jonathan Prykop <jonathan@freeside.biz> | 2016-03-14 23:39:18 -0500 |
---|---|---|
committer | Jonathan Prykop <jonathan@freeside.biz> | 2016-03-14 23:39:18 -0500 |
commit | b3cc20aeca25e4351c6ec3b795a951e6124f6376 (patch) | |
tree | aa9251c2443d26e33cc3fab59ccbee07ca5e0164 /FS/FS/cust_main_Mixin.pm | |
parent | 2ffdb485e5534df3d89bcc12d4d02d485e9b28f5 (diff) |
RT#28648: Unsuspend when past due balance is paid
Diffstat (limited to 'FS/FS/cust_main_Mixin.pm')
-rw-r--r-- | FS/FS/cust_main_Mixin.pm | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index de13847..9b4ae3a 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -654,6 +654,45 @@ sub time2str_local { $string; } +=item unsuspend_balance + +If conf I<unsuspend_balance> is set and customer's current balance is +beneath the set threshold, unsuspends customer packages. + +=cut + +sub unsuspend_balance { + my $self = shift; + my $cust_main = $self->cust_main; + my $conf = $self->conf; + my $setting = $conf->config('unsuspend_balance'); + my $maxbalance; + if ($setting eq 'Zero') { + $maxbalance = 0; + } elsif ($setting eq 'Latest invoice charges') { + my @cust_bill = $cust_main->cust_bill(); + my $cust_bill = $cust_bill[-1]; #always want the most recent one + return unless $cust_bill; + $maxbalance = $cust_bill->charged || 0; + } elsif (length($setting)) { + warn "Unrecognized unsuspend_balance setting $setting"; + return; + } else { + return; + } + my $balance = $cust_main->balance || 0; + if ($balance <= $maxbalance) { + # or should this be + # my @errors = grep { ($_->get('setup')) && $_->unsuspend } $cust_main->unflagged_suspended_pkgs; + my @errors = $cust_main->unsuspend; + # side-fx with nested transactions? upstack rolls back? + warn "WARNING:Errors unsuspending customer ". $cust_main->custnum. ": ". + join(' / ', @errors) + if @errors; + } + return; +} + =back =head1 BUGS |