so Search.tsf and Search.rdf work
[freeside.git] / FS / FS / cust_svc.pm
index 65f8d58..2bc20ff 100644 (file)
@@ -1,8 +1,8 @@
 package FS::cust_svc;
 
 use strict;
-use vars qw( @ISA $ignore_quantity );
-use Carp qw( cluck );
+use vars qw( @ISA $DEBUG $ignore_quantity );
+use Carp qw( carp cluck );
 use FS::Conf;
 use FS::Record qw( qsearch qsearchs dbh );
 use FS::cust_pkg;
@@ -19,6 +19,8 @@ use FS::part_export;
 
 @ISA = qw( FS::Record );
 
+$DEBUG = 0;
+
 $ignore_quantity = 0;
 
 sub _cache {
@@ -176,6 +178,7 @@ sub replace {
   if ( $new->svcpart != $old->svcpart ) {
     my $svc_x = $new->svc_x;
     my $new_svc_x = ref($svc_x)->new({$svc_x->hash, svcpart=>$new->svcpart });
+    local($FS::Record::nowarn_identical) = 1;
     my $error = $new_svc_x->replace($svc_x);
     if ( $error ) {
       $dbh->rollback if $oldAutoCommit;
@@ -276,37 +279,45 @@ Returns a list consisting of:
 
 sub label {
   my $self = shift;
-  my $svcdb = $self->part_svc->svcdb;
+  carp "FS::cust_svc::label called on $self" if $DEBUG;
   my $svc_x = $self->svc_x
-    or die "can't find $svcdb.svcnum ". $self->svcnum;
+    or die "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum;
+  $self->_svc_label($svc_x);
+}
+
+sub _svc_label {
+  my( $self, $svc_x ) = ( shift, shift );
+  my $svcdb = $self->part_svc->svcdb;
+
   my $tag;
   if ( $svcdb eq 'svc_acct' ) {
-    $tag = $svc_x->email;
+    $tag = $svc_x->email(@_);
   } elsif ( $svcdb eq 'svc_forward' ) {
     if ( $svc_x->srcsvc ) {
-      my $svc_acct = $svc_x->srcsvc_acct;
-      $tag = $svc_acct->email;
+      my $svc_acct = $svc_x->srcsvc_acct(@_);
+      $tag = $svc_acct->email(@_);
     } else {
       $tag = $svc_x->src;
     }
     $tag .= '->';
     if ( $svc_x->dstsvc ) {
-      my $svc_acct = $svc_x->dstsvc_acct;
-      $tag .= $svc_acct->email;
+      my $svc_acct = $svc_x->dstsvc_acct(@_);
+      $tag .= $svc_acct->email(@_);
     } else {
       $tag .= $svc_x->dst;
     }
   } elsif ( $svcdb eq 'svc_domain' ) {
     $tag = $svc_x->getfield('domain');
   } elsif ( $svcdb eq 'svc_www' ) {
-    my $domain = qsearchs( 'domain_record', { 'recnum' => $svc_x->recnum } );
-    $tag = $domain->zone;
+    my $domain_record = $svc_x->domain_record(@_);
+    $tag = $domain_record->zone;
   } elsif ( $svcdb eq 'svc_broadband' ) {
     $tag = $svc_x->ip_addr;
   } elsif ( $svcdb eq 'svc_external' ) {
     my $conf = new FS::Conf;
     if ( $conf->config('svc_external-display_type') eq 'artera_turbo' ) {
-      $tag = sprintf('%010d', $svc_x->id). '-'. $svc_x->title;
+      $tag = sprintf('%010d', $svc_x->id). '-'.
+             substr('0000000000'.uc($svc_x->title), -10);
     } else {
       $tag = $svc_x->id. ': '. $svc_x->title;
     }
@@ -314,7 +325,9 @@ sub label {
     cluck "warning: asked for label of unsupported svcdb; using svcnum";
     $tag = $svc_x->getfield('svcnum');
   }
+
   $self->part_svc->svc, $tag, $svcdb;
+
 }
 
 =item svc_x
@@ -542,11 +555,11 @@ sub attribute_since_sqlradacct {
 
 }
 
-=item get_session_history_sqlradacct TIMESTAMP_START TIMESTAMP_END
+=item get_session_history TIMESTAMP_START TIMESTAMP_END
 
-See L<FS::svc_acct/get_session_history_sqlradacct>.  Equivalent to
-$cust_svc->svc_x->get_session_history_sqlradacct, but more efficient.
-Meaningless for records where B<svcdb> is not "svc_acct".
+See L<FS::svc_acct/get_session_history>.  Equivalent to
+$cust_svc->svc_x->get_session_history, but more efficient.  Meaningless for
+records where B<svcdb> is not "svc_acct".
 
 =cut
 
@@ -555,6 +568,7 @@ sub get_session_history {
 
   #$attrib ???
 
+  #my @part_export = $cust_svc->part_svc->part_export->can('usage_sessions');
   my @part_export = $self->part_svc->part_export('sqlradius');
   push @part_export, $self->part_svc->part_export('sqlradius_withdomain');
   die "no sqlradius or sqlradius_withdomain export configured for this".
@@ -565,10 +579,11 @@ sub get_session_history {
   my @sessions = ();
 
   foreach my $part_export ( @part_export ) {
-    push @sessions, $part_export->usage_sessions( $self->svc_x, $start, $end );
+    push @sessions,
+      @{ $part_export->usage_sessions( $start, $end, $self->svc_x ) };
   }
 
-  \@sessions;
+  @sessions;
 
 }