add skip_dcontext_suffix to skip CDRs with dcontext ending in a definable string...
[freeside.git] / FS / FS / part_svc.pm
index 08003dd..621a554 100644 (file)
@@ -565,6 +565,9 @@ is specified as B<0>, returns the number of unlinked customer services.
 sub num_cust_svc {
   my $self = shift;
 
+  return $self->{Hash}{num_cust_svc}
+    if !@_ && exists($self->{Hash}{num_cust_svc});
+
   my @param = ( $self->svcpart );
 
   my( $join, $and ) = ( '', '' );
@@ -587,6 +590,26 @@ sub num_cust_svc {
   $sth->fetchrow_arrayref->[0];
 }
 
+=item num_cust_svc_cancelled
+
+Returns the number of associated customer services that are
+attached to cancelled packages.
+
+=cut
+
+sub num_cust_svc_cancelled {
+  my $self = shift;
+  my $sth = dbh->prepare(
+    "SELECT COUNT(*) FROM cust_svc
+     LEFT JOIN cust_pkg USING ( pkgnum )
+     WHERE svcpart = ?
+     AND cust_pkg.cancel IS NOT NULL"
+  ) or die dbh->errstr;
+  $sth->execute($self->svcpart)
+    or die $sth->errstr;
+  $sth->fetchrow_arrayref->[0];
+}
+
 =item svc_x
 
 Returns a list of associated FS::svc_* records.