Creating the ability to suspend from an invoice, suspending all
authorJason (Jayce^) Hall <jayce@lug-nut.com>
Thu, 8 Jan 2015 21:44:49 +0000 (14:44 -0700)
committerJason (Jayce^) Hall <jayce@lug-nut.com>
Thu, 8 Jan 2015 21:44:49 +0000 (14:44 -0700)
not-cancelled cust_pkg's on that invoice.  Also creates a new part_event
Action that let's you trigger this as an invoice event.

FS/FS/cust_bill.pm
FS/FS/part_event/Action/cust_bill_suspend.pm [new file with mode: 0644]

index 0c07e9a..92ff5f3 100644 (file)
@@ -629,6 +629,23 @@ sub num_cust_event {
 
 Returns the customer (see L<FS::cust_main>) for this invoice.
 
+=item suspend
+
+Suspends all unsuspended packages (see L<FS::cust_pkg>) for this invoice
+
+Returns a list: an empty list on success or a list of errors.
+
+=cut
+
+sub suspend {
+  my $self = shift;
+
+  grep { $_->suspend(@_) } 
+  grep { $_->getfield('cancel') } 
+  $self->cust_pkg;
+
+}
+
 =item cust_suspend_if_balance_over AMOUNT
 
 Suspends the customer associated with this invoice if the total amount owed on
diff --git a/FS/FS/part_event/Action/cust_bill_suspend.pm b/FS/FS/part_event/Action/cust_bill_suspend.pm
new file mode 100644 (file)
index 0000000..339d6b9
--- /dev/null
@@ -0,0 +1,41 @@
+package FS::part_event::Action::cust_bill_suspend;
+
+use strict;
+use base qw( FS::part_event::Action );
+
+sub description { 'Suspend packages on this invoice'; }
+
+sub eventtable_hashref {
+  { 'cust_bill' => 1 };
+}
+
+sub option_fields {
+  (
+    'reasonnum'    => { 'label'        => 'Reason',
+                        'type'         => 'select-reason',
+                        'reason_class' => 'S',
+                      },
+    'suspend_bill' => { 'label' => 'Continue recurring billing while suspended',
+                        'type'  => 'checkbox',
+                        'value' => 'Y',
+                      },
+  );
+}
+
+sub default_weight { 10; }
+
+sub do_action {
+  my( $self, $cust_bill ) = @_;
+
+  my @err = $cust_bill->suspend(
+    'reason'  => $self->option('reasonnum'),
+    'options' => { 'suspend_bill' => $self->option('suspend_bill') },
+  );
+
+  die join(' / ', @err) if scalar(@err);
+
+  return '';
+
+}
+
+1;