summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm33
-rw-r--r--FS/FS/cdr.pm32
2 files changed, 47 insertions, 18 deletions
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index ffdc772..2e60eda 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 190ffe2..1e40881 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'} }, ];