use detail formats to show CDRs in selfservice, #14923
authormark <mark>
Mon, 19 Dec 2011 23:16:51 +0000 (23:16 +0000)
committermark <mark>
Mon, 19 Dec 2011 23:16:51 +0000 (23:16 +0000)
FS/FS/ClientAPI/MyAccount.pm
FS/FS/cdr.pm
fs_selfservice/FS-SelfService/cgi/view_cdr_details.html

index ffdc772..2e60eda 100644 (file)
@@ -1716,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 {
@@ -1743,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;
@@ -1758,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
index 190ffe2..1e40881 100644 (file)
@@ -610,6 +610,22 @@ sub export_formats {
     }
   };
 
+  my $price_sub = sub {
+    my ($cdr, %opt) = @_;
+    my $price;
+    if ( defined($opt{charge}) ) {
+      $price = $opt{charge};
+    }
+    elsif ( $opt{inbound} ) {
+      my $term = $cdr->cdr_termination(1); # 1 = inbound
+      $price = $term->rated_price if defined $term;
+    }
+    else {
+      $price = $cdr->rated_price;
+    }
+    length($price) ? ($opt{money_char} . $price) : '';
+  };
+
   %export_formats = (
     'simple' => [
       sub { time2str($date_format, shift->calldate_unix ) },   #DATE
@@ -618,7 +634,7 @@ sub export_formats {
       'dst',                                           #NUMBER_DIALED
       $duration_sub,                                   #DURATION
       #sub { sprintf('%.3f', shift->upstream_price ) }, #PRICE
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, #PRICE
+      $price_sub,
     ],
     'simple2' => [
       sub { time2str($date_format, shift->calldate_unix ) },   #DATE
@@ -628,7 +644,7 @@ sub export_formats {
       'dst',                                           #NUMBER_DIALED
       $duration_sub,                                   #DURATION
       #sub { sprintf('%.3f', shift->upstream_price ) }, #PRICE
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, #PRICE
+      $price_sub,
     ],
     'sum_duration' => [ 
       # for summary formats, the CDR is a fictitious object containing the 
@@ -636,18 +652,18 @@ sub export_formats {
       'src',
       sub { my($cdr, %opt) = @_; $opt{count} },
       sub { my($cdr, %opt) = @_; int($opt{seconds}/60).'m' },
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; },
+      $price_sub,
     ],
     'sum_count' => [
       'src',
       sub { my($cdr, %opt) = @_; $opt{count} },
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; },
+      $price_sub,
     ],
     'basic' => [
       sub { time2str('%d %b - %I:%M %p', shift->calldate_unix) },
       'dst',
       $duration_sub,
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, #PRICE
+      $price_sub,
     ],
     'default' => [
 
@@ -669,11 +685,7 @@ sub export_formats {
       $duration_sub,
 
       #PRICE
-      sub { my($cdr, %opt) = @_; 
-        $opt{charge} = '0.00' unless defined $opt{charge};
-        $opt{money_char}.$opt{charge}; 
-      },
-
+      $price_sub,
     ],
   );
   $export_formats{'source_default'} = [ 'src', @{ $export_formats{'default'} }, ];
index 620fa22..b0205ec 100644 (file)
@@ -9,7 +9,7 @@
 <%= if ( $error ) {
   $OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
 } ''; %>
+
 <TABLE WIDTH="100%">
   <TR>
     <TD WIDTH="50%">
 </TABLE>
 <TABLE BGCOLOR="#cccccc">
   <TR>
-<%= foreach my $header (@header) {
-      $OUT .= qq(<TH ALIGN="right">$header</TH>);
-    }
+<%= $space = '<TD>&nbsp;</TD>';
+  $OUT .= join($space, 
+    map { '<TH ALIGN="right">'.$_.'</TH>' } 
+    @header
+  )
 %>
   </TR>
 <%= my $total = 0;
@@ -42,7 +44,9 @@
     my $dtotal = 0;
     foreach my $usage ( @usage ) {
       $OUT .= '<TR>';
-      $OUT .= qq(<TD>$_</TD>) foreach @{$usage};
+      $OUT .= join($space,
+        map { "<TD>$_</TD>" } @{$usage}
+      );
       $OUT .= '</TR>';
     }
 %>