use detail formats to show CDRs in selfservice, #14923
[freeside.git] / FS / FS / ClientAPI / MyAccount.pm
index 6a21da8..2e60eda 100644 (file)
@@ -1560,8 +1560,6 @@ sub acct_forward_info {
 
 sub process_acct_forward {
   my $p = shift;
-  warn Dumper($p);
-
   my($context, $session, $custnum) = _custoragent_session_custnum($p);
   return { 'error' => $session } if $context eq 'error';
 
@@ -1569,7 +1567,6 @@ sub process_acct_forward {
                              { 'srcsvc' => $p->{'svcnum'} },
                              'svc_forward',
                            );
-  warn $old;
 
   if ( $p->{'dst'} eq '' ) {
     if ( $old ) {
@@ -1585,20 +1582,21 @@ sub process_acct_forward {
 
   my $error;
   if ( $old ) {
-    warn "old: $old\n";
     $new->svcnum($old->svcnum);
     my $cust_svc = $old->cust_svc;
     $new->svcpart($old->svcpart);
     $new->pkgnuym($old->pkgnum);
     $error = $new->replace($old);
   } else {
-    warn "new: $new\n";
     my $conf = new FS::Conf;
     $new->svcpart($conf->config('selfservice-svc_forward_svcpart'));
-    $new->pkgnum($old->cust_svc->pkgnum);
-    warn Dumper($new);
+
+    my $svc_acct = _customer_svc_x( $custnum, $p->{'svcnum'}, 'svc_acct' )
+      or return { 'error' => 'No service' }; #how would we even get here?
+
+    $new->pkgnum( $svc_acct->cust_svc->pkgnum );
+
     $error = $new->insert;
-    warn $error;
   }
 
   return { 'error' => $error };
@@ -1718,9 +1716,10 @@ sub list_support_usage {
 }
 
 sub _list_cdr_usage {
-  my($svc_phone, $begin, $end) = @_;
-  map [ $_->downstream_csv('format' => 'default', 'keeparray' => 1) ], #XXX config for format
-                       $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, );
+  # XXX CDR type support...
+  my($svc_phone, $begin, $end, %opt) = @_;
+  map [ $_->downstream_csv(%opt, 'keeparray' => 1) ],
+    $svc_phone->get_cdrs( 'begin'=>$begin, 'end'=>$end, );
 }
 
 sub list_cdr_usage {
@@ -1745,12 +1744,26 @@ sub _usage_details {
   return { 'error' => 'No service selected in list_svc_usage' } 
     unless $svc_x;
 
-  my $header = $svcdb eq 'svc_phone'
-                 ? [ split(',', FS::cdr::invoice_header('default') ) ]  #XXX
-                 : [];
-
   my $cust_pkg = $svc_x->cust_svc->cust_pkg;
   my $freq     = $cust_pkg->part_pkg->freq;
+  my %callback_opt;
+  my $header = [];
+  if ( $svcdb eq 'svc_phone' ) {
+    my $format   = $cust_pkg->part_pkg->option('output_format') || '';
+    $format = '' if $format =~ /^sum_/;
+    # sensible default if there is no format or it's a summary format
+    if ( $cust_pkg->part_pkg->plan eq 'voip_inbound' ) {
+      $format ||= 'source_default';
+      $callback_opt{inbound} = 1;
+    }
+    else {
+      $format ||= 'default';
+    }
+    
+    $callback_opt{format} = $format;
+    $header = [ split(',', FS::cdr::invoice_header($format) ) ];
+  }
+
   my $start    = $cust_pkg->setup;
   #my $end      = $cust_pkg->bill; # or time?
   my $end      = time;
@@ -1760,7 +1773,9 @@ sub _usage_details {
     $p->{ending}    = $end;
   }
 
-  my (@usage) = &$callback($svc_x, $p->{beginning}, $p->{ending});
+  my (@usage) = &$callback($svc_x, $p->{beginning}, $p->{ending}, 
+    %callback_opt
+  );
 
   #kinda false laziness with FS::cust_main::bill, but perhaps
   #we should really change this bit to DateTime and DateTime::Duration