summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2014-09-16 21:38:07 -0700
committerMark Wells <mark@freeside.biz>2014-09-16 21:38:15 -0700
commit7a486dea647f735a9a1d0381443218ad6affe6e1 (patch)
tree33fffd4cfdf1288767ba61da6ee58c358daaa76a /FS
parent43da86c4a7fab275a941650abb11173f4f2930aa (diff)
improve unsuspend behavior for packages on hold, #28508
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Conf.pm7
-rw-r--r--FS/FS/Record.pm4
-rw-r--r--FS/FS/cust_main.pm19
-rw-r--r--FS/FS/cust_main/Billing.pm16
4 files changed, 29 insertions, 17 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 616a06c..e56cf3b 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -4046,13 +4046,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 c53c9ae..4915b96 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -3322,7 +3322,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
@@ -3335,7 +3335,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 9b893ea..84426b4 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -2171,14 +2171,27 @@ sub cust_payby {
=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 d55cb2f..29f7e8e 100644
--- a/FS/FS/cust_main/Billing.pm
+++ b/FS/FS/cust_main/Billing.pm
@@ -1090,6 +1090,16 @@ sub _make_lines {
my %setup_param = ( 'discounts' => \@setup_discounts );
my $setup_billed_currency = '';
my $setup_billed_amount = 0;
+ # 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'}
@@ -1097,11 +1107,7 @@ 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') )
)
)
)