add option to limit automatic unsuspensions to a specific suspension reason type...
[freeside.git] / FS / FS / cust_main / Packages.pm
index 9e21dd2..3437542 100644 (file)
@@ -155,7 +155,7 @@ sub order_pkg {
     }
     $cust_pkg->locationnum($opt->{'cust_location'}->locationnum);
 
-  } else {
+  } elsif ( ! $cust_pkg->locationnum ) {
 
     $cust_pkg->locationnum($self->ship_locationnum);
 
@@ -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
@@ -602,6 +618,8 @@ this customer that are active (recurring).
 
 =cut
 
+#recurring_pkgs?  different from cust_pkg idea of "active" which has
+# a setup vs not_yet_billed which doesn't
 sub active_pkgs {
   my $self = shift; 
   grep { my $part_pkg = $_->part_pkg;
@@ -617,6 +635,8 @@ are active (recurring).
 
 =cut
 
+#ncancelled_recurring_pkgs?  different from cust_pkg idea of "active" which has
+# a setup vs not_yet_billed which doesn't
 sub ncancelled_active_pkgs {
   my $self = shift; 
   grep { my $part_pkg = $_->part_pkg;
@@ -871,7 +891,7 @@ sub display_recurring {
         my $discount = $cust_pkg_discount->discount;
         #and only one of these for each
         $pkg_amount -= $discount->amount;
-        $pkg_amount -= $amount * $discount->percent/100;
+        $pkg_amount -= $pkg_amount * $discount->percent/100;
       }
 
       $pkg_amount *= ( $cust_pkg->quantity || 1 );