summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm33
-rw-r--r--FS/FS/cdr.pm32
-rw-r--r--fs_selfservice/FS-SelfService/cgi/view_cdr_details.html14
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!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
} ''; %>
-
+
<TABLE WIDTH="100%">
<TR>
<TD WIDTH="50%">
@@ -32,9 +32,11 @@
</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>';
}
%>