option to only allow primary users access to the self-service server
[freeside.git] / FS / FS / cust_svc.pm
index af0abf7..fae265d 100644 (file)
@@ -281,10 +281,15 @@ sub label {
   if ( $svcdb eq 'svc_acct' ) {
     $tag = $svc_x->email;
   } elsif ( $svcdb eq 'svc_forward' ) {
-    my $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $svc_x->srcsvc } );
-    $tag = $svc_acct->email. '->';
+    if ( $svc_x->srcsvc ) {
+      my $svc_acct = $svc_x->srcsvc_acct;
+      $tag = $svc_acct->email;
+    } else {
+      $tag = $svc_x->src;
+    }
+    $tag .= '->';
     if ( $svc_x->dstsvc ) {
-      $svc_acct = qsearchs( 'svc_acct', { 'svcnum' => $svc_x->dstsvc } );
+      my $svc_acct = $svc_x->dstsvc_acct;
       $tag .= $svc_acct->email;
     } else {
       $tag .= $svc_x->dst;
@@ -296,6 +301,8 @@ sub label {
     $tag = $domain->zone;
   } elsif ( $svcdb eq 'svc_broadband' ) {
     $tag = $svc_x->ip_addr;
+  } elsif ( $svcdb eq 'svc_external' ) {
+    $tag = $svc_x->id. ': '. $svc_x->title;
   } else {
     cluck "warning: asked for label of unsupported svcdb; using svcnum";
     $tag = $svc_x->getfield('svcnum');
@@ -365,13 +372,15 @@ sub seconds_since_sqlradacct {
   my $seconds = 0;
   foreach my $part_export ( @part_export ) {
 
+    next if $part_export->option('ignore_accounting');
+
     my $dbh = DBI->connect( map { $part_export->option($_) }
                             qw(datasrc username password)    )
       or die "can't connect to sqlradius database: ". $DBI::errstr;
 
     #select a unix time conversion function based on database type
     my $str2time;
-    if ( $dbh->{Driver}->{Name} eq 'mysql' ) {
+    if ( $dbh->{Driver}->{Name} =~ /^mysql(PP)?$/ ) {
       $str2time = 'UNIX_TIMESTAMP(';
     } elsif ( $dbh->{Driver}->{Name} eq 'Pg' ) {
       $str2time = 'EXTRACT( EPOCH FROM ';
@@ -481,13 +490,15 @@ sub attribute_since_sqlradacct {
 
   foreach my $part_export ( @part_export ) {
 
+    next if $part_export->option('ignore_accounting');
+
     my $dbh = DBI->connect( map { $part_export->option($_) }
                             qw(datasrc username password)    )
       or die "can't connect to sqlradius database: ". $DBI::errstr;
 
     #select a unix time conversion function based on database type
     my $str2time;
-    if ( $dbh->{Driver}->{Name} eq 'mysql' ) {
+    if ( $dbh->{Driver}->{Name} =~ /^mysql(PP)?$/ ) {
       $str2time = 'UNIX_TIMESTAMP(';
     } elsif ( $dbh->{Driver}->{Name} eq 'Pg' ) {
       $str2time = 'EXTRACT( EPOCH FROM ';
@@ -550,7 +561,7 @@ sub get_session_history {
 
     #select a unix time conversion function based on database type
     my $str2time;                                                 
-    if ( $dbh->{Driver}->{Name} eq 'mysql' ) {
+    if ( $dbh->{Driver}->{Name} =~ /^mysql(PP)?$/ ) {
       $str2time = 'UNIX_TIMESTAMP(';          
     } elsif ( $dbh->{Driver}->{Name} eq 'Pg' ) {
       $str2time = 'EXTRACT( EPOCH FROM ';       
@@ -579,6 +590,23 @@ sub get_session_history {
 
 }
 
+=item pkg_svc
+
+Returns the pkg_svc record for for this service, if applicable.
+
+=cut
+
+sub pkg_svc {
+  my $self = shift;
+  my $cust_pkg = $self->cust_pkg;
+  return undef unless $cust_pkg;
+
+  qsearchs( 'pkg_svc', { 'svcpart' => $self->svcpart,
+                         'pkgpart' => $cust_pkg->pkgpart,
+                       }
+          );
+}
+
 =back
 
 =head1 BUGS