[freeside-commits] branch master updated. 368ed08e24400e9d1faf401a1e4e23ea54d2c969

Ivan Kohler ivan at freeside.biz
Tue Oct 30 12:17:22 PDT 2018


The branch, master has been updated
       via  368ed08e24400e9d1faf401a1e4e23ea54d2c969 (commit)
      from  3fc05ed5adb6cbfcd6aee27b2ae199cf95cd4224 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 368ed08e24400e9d1faf401a1e4e23ea54d2c969
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Tue Oct 30 12:17:12 2018 -0700

    add option to limit automatic unsuspensions to a specific suspension reason type, RT#74448, RT#81634

diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 057e4cff6..aed054a33 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -2047,6 +2047,13 @@ and customer address. Include units.',
   },
 
   {
+    'key'         => 'unsuspend_reason_type',
+    'section'     => 'suspension',
+    'description' => 'If set, limits automatic unsuspension to packages which were suspended for this reason type.',
+    reason_type_options('S'),
+  },
+
+  {
     'key'         => 'unsuspend-always_adjust_next_bill_date',
     'section'     => 'suspension',
     'description' => 'Global override that causes unsuspensions to always adjust the next bill date under any circumstances.  This is now controlled on a per-package bases - probably best not to use this option unless you are a legacy installation that requires this behaviour.',
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 2e8fe8159..fb4b153b2 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -2064,7 +2064,7 @@ Returns a list: an empty list on success or a list of errors.
 
 sub unsuspend {
   my $self = shift;
-  grep { ($_->get('setup')) && $_->unsuspend } $self->suspended_pkgs;
+  grep { ($_->get('setup')) && $_->unsuspend } $self->suspended_pkgs(@_);
 }
 
 =item release_hold
diff --git a/FS/FS/cust_main/Packages.pm b/FS/FS/cust_main/Packages.pm
index 7090ce765..343754295 100644
--- a/FS/FS/cust_main/Packages.pm
+++ b/FS/FS/cust_main/Packages.pm
@@ -570,16 +570,32 @@ sub sort_packages {
 
 }
 
-=item suspended_pkgs
+=item suspended_pkgs OPTION => VALUE ...
 
 Returns all suspended packages (see L<FS::cust_pkg>) for this customer.
 
+Currently supports one option, I<reason_type>, which if set to a typenum,
+limits the results to packages which were suspended for reasons of this type.
+(Does not currently work in scalar context; i.e. when just asking for a count.)
+
 =cut
 
 sub suspended_pkgs {
   my $self = shift;
-  return $self->num_suspended_pkgs unless wantarray;
-  grep { $_->susp } $self->ncancelled_pkgs;
+  my %opt = @_;
+
+  return $self->num_suspended_pkgs unless wantarray; #XXX opt in scalar context
+
+  my @pkgs = grep { $_->susp } $self->ncancelled_pkgs;
+
+  if ( $opt{reason_type} ) {
+    @pkgs = grep { my $r = $_->last_reason('susp');
+                   $r && $r->reason_type == $opt{reason_type};
+		 }
+              @pkgs;
+  }
+
+  @pkgs;
 }
 
 =item unsuspended_pkgs
diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index cceaa4bc7..6a2e9058c 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -737,7 +737,9 @@ sub unsuspend_balance {
   }
   my $balance = $cust_main->balance || 0;
   if ($balance <= $maxbalance) {
-    my @errors = $cust_main->unsuspend;
+    my @errors = $cust_main->unsuspend(
+	           'reason_type' => $conf->config('unsuspend_reason_type')
+	         );
     # side-fx with nested transactions?  upstack rolls back?
     warn "WARNING:Errors unsuspending customer ". $cust_main->custnum. ": ".
          join(' / ', @errors)

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/Conf.pm               |  7 +++++++
 FS/FS/cust_main.pm          |  2 +-
 FS/FS/cust_main/Packages.pm | 22 +++++++++++++++++++---
 FS/FS/cust_main_Mixin.pm    |  4 +++-
 4 files changed, 30 insertions(+), 5 deletions(-)




More information about the freeside-commits mailing list