summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/cust_main.pm10
-rw-r--r--FS/FS/part_event/Action/suspend.pm29
2 files changed, 27 insertions, 12 deletions
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 57d598a..9e305c7 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -2075,8 +2075,14 @@ Returns a list: an empty list on success or a list of errors.
=cut
sub suspend {
- my $self = shift;
- grep { $_->suspend(@_) } $self->unsuspended_pkgs;
+ my($self, %opt) = @_;
+
+ my @pkgs = $self->unsuspended_pkgs;
+
+ @pkgs = grep { ! $_->get('start_date') } @pkgs
+ if $opt{skip_future_startdate};
+
+ grep { $_->suspend(%opt) } @pkgs;
}
=item suspend_if_pkgpart HASHREF | PKGPART [ , PKGPART ... ]
diff --git a/FS/FS/part_event/Action/suspend.pm b/FS/FS/part_event/Action/suspend.pm
index 84a7101..6a84836 100644
--- a/FS/FS/part_event/Action/suspend.pm
+++ b/FS/FS/part_event/Action/suspend.pm
@@ -7,14 +7,21 @@ sub description { 'Suspend all of this customer\'s packages'; }
sub option_fields {
(
- 'reasonnum' => { 'label' => 'Reason',
- 'type' => 'select-reason',
- 'reason_class' => 'S',
- },
- 'suspend_bill' => { 'label' => 'Continue recurring billing while suspended',
- 'type' => 'checkbox',
- 'value' => 'Y',
- },
+ 'reasonnum' => {
+ 'label' => 'Reason',
+ 'type' => 'select-reason',
+ 'reason_class' => 'S',
+ },
+ 'suspend_bill' => {
+ 'label' => 'Continue recurring billing while suspended',
+ 'type' => 'checkbox',
+ 'value' => 'Y',
+ },
+ 'skip_future_startdate' => {
+ 'label' => "Don't suspend packages with a future start date",
+ 'type' => 'checkbox',
+ 'value' => 'Y',
+ },
);
}
@@ -26,8 +33,10 @@ sub do_action {
my $cust_main = $self->cust_main($cust_object);
my @err = $cust_main->suspend(
- 'reason' => $self->option('reasonnum'),
- 'options' => { 'suspend_bill' => $self->option('suspend_bill') },
+ 'skip_future_startdate' => $self->option('skip_future_startdate'),
+ 'reason' => $self->option('reasonnum'),
+ 'options' => { 'suspend_bill' => $self->option('suspend_bill')
+ },
);
die join(' / ', @err) if scalar(@err);