diff options
author | Mark Wells <mark@freeside.biz> | 2014-09-16 21:55:13 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2014-09-16 21:55:13 -0700 |
commit | caaba136dc662ca8a5b4a221fac238b89945332a (patch) | |
tree | 4cd2da82405263a27f3e3b57dc7fa83d75e23c2d /FS | |
parent | 4dcbb6b380dfd036cc06e4d7002cbda17d29f23a (diff) |
improve unsuspend behavior for packages on hold, #28508
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Conf.pm | 7 | ||||
-rw-r--r-- | FS/FS/Record.pm | 4 | ||||
-rw-r--r-- | FS/FS/cust_main.pm | 19 | ||||
-rw-r--r-- | FS/FS/cust_main/Billing.pm | 18 |
4 files changed, 30 insertions, 18 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 3d7ffe7cd..b6fa81dac 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -4053,13 +4053,6 @@ and customer address. Include units.', }, { - 'key' => 'disable_setup_suspended_pkgs', - 'section' => 'billing', - 'description' => 'Disables charging of setup fees for suspended packages.', - 'type' => 'checkbox', - }, - - { 'key' => 'password-generated-allcaps', 'section' => 'password', 'description' => 'Causes passwords automatically generated to consist entirely of capital letters', diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 734d61aaf..3e50b11a7 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -3165,7 +3165,7 @@ sub scalar_sql { defined($scalar) ? $scalar : ''; } -=item count [ WHERE ] +=item count [ WHERE [, PLACEHOLDER ...] ] Convenience method for the common case of "SELECT COUNT(*) FROM table", with optional WHERE. Must be called as method on a class with an @@ -3178,7 +3178,7 @@ sub count { my $table = $self->table or die 'count called on object of class '.ref($self); my $sql = "SELECT COUNT(*) FROM $table"; $sql .= " WHERE $where" if $where; - $self->scalar_sql($sql); + $self->scalar_sql($sql, @_); } =back diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index e1d3caafe..c0d8dbe20 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -2149,14 +2149,27 @@ sub cust_contact { =item unsuspend Unsuspends all unflagged suspended packages (see L</unflagged_suspended_pkgs> -and L<FS::cust_pkg>) for this customer. Always returns a list: an empty list -on success or a list of errors. +and L<FS::cust_pkg>) for this customer, except those on hold. + +Returns a list: an empty list on success or a list of errors. =cut sub unsuspend { my $self = shift; - grep { $_->unsuspend } $self->suspended_pkgs; + grep { ($_->get('setup')) && $_->unsuspend } $self->suspended_pkgs; +} + +=item release_hold + +Unsuspends all suspended packages in the on-hold state (those without setup +dates) for this customer. + +=cut + +sub release_hold { + my $self = shift; + grep { (!$_->setup) && $_->unsuspend } $self->suspended_pkgs; } =item suspend diff --git a/FS/FS/cust_main/Billing.pm b/FS/FS/cust_main/Billing.pm index 6191eb8c3..2c41ecb67 100644 --- a/FS/FS/cust_main/Billing.pm +++ b/FS/FS/cust_main/Billing.pm @@ -1088,6 +1088,16 @@ sub _make_lines { my $unitsetup = 0; my @setup_discounts = (); my %setup_param = ( 'discounts' => \@setup_discounts ); + # Conditions for setting setup date and charging the setup fee: + # - this is not a recurring-only billing run + # - and the package is not currently being canceled + # - and, unless we're specifically told otherwise via 'resetup': + # - it doesn't already HAVE a setup date + # - or a start date in the future + # - and it's not suspended + # + # The last condition used to check the "disable_setup_suspended" option but + # that's obsolete. We now never set the setup date on a suspended package. if ( ! $options{recurring_only} and ! $options{cancel} and ( $options{'resetup'} @@ -1095,12 +1105,8 @@ sub _make_lines { && ( ! $cust_pkg->start_date || $cust_pkg->start_date <= $cmp_time ) - && ( ! $conf->exists('disable_setup_suspended_pkgs') - || ( $conf->exists('disable_setup_suspended_pkgs') && - ! $cust_pkg->getfield('susp') - ) - ) - ) + && ( ! $cust_pkg->getfield('susp') ) + ) ) ) { |