From 43d2e192dfed48adc33af02b2dd98d66d5813e33 Mon Sep 17 00:00:00 2001 From: mark Date: Mon, 19 Dec 2011 23:16:51 +0000 Subject: [PATCH] use detail formats to show CDRs in selfservice, #14923 --- FS/FS/ClientAPI/MyAccount.pm | 33 ++++++++++++++++------ FS/FS/cdr.pm | 32 ++++++++++++++------- .../FS-SelfService/cgi/view_cdr_details.html | 14 +++++---- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm index ffdc772bd..2e60eda3b 100644 --- a/FS/FS/ClientAPI/MyAccount.pm +++ b/FS/FS/ClientAPI/MyAccount.pm @@ -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 diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 190ffe2b5..1e4088162 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -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'} }, ]; diff --git a/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html b/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html index 620fa2218..b0205ec89 100644 --- a/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html +++ b/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html @@ -9,7 +9,7 @@ <%= if ( $error ) { $OUT .= qq!$error

!; } ''; %> - +
@@ -32,9 +32,11 @@
-<%= foreach my $header (@header) { - $OUT .= qq(); - } +<%= $space = ''; + $OUT .= join($space, + map { '' } + @header + ) %> <%= my $total = 0; @@ -42,7 +44,9 @@ my $dtotal = 0; foreach my $usage ( @usage ) { $OUT .= ''; - $OUT .= qq() foreach @{$usage}; + $OUT .= join($space, + map { "" } @{$usage} + ); $OUT .= ''; } %> -- 2.11.0
$header '.$_.'
$_$_