diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/ClientAPI/MyAccount.pm | 33 | ||||
| -rw-r--r-- | FS/FS/cdr.pm | 32 | 
2 files changed, 47 insertions, 18 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'} }, ]; | 
