diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/cdr.pm | 14 | ||||
| -rw-r--r-- | FS/FS/part_pkg/voip_cdr.pm | 76 | ||||
| -rw-r--r-- | FS/FS/part_pkg/voip_tiered.pm | 1 | 
3 files changed, 57 insertions, 34 deletions
| diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm index 1e4088162..d7a4fbdc3 100644 --- a/FS/FS/cdr.pm +++ b/FS/FS/cdr.pm @@ -575,11 +575,11 @@ my %export_names = (    },    'sum_duration' => {      'name'           => 'Summary (one line per service, with duration)', -    'invoice_header' => 'Caller,Calls,Minutes,Price', +    'invoice_header' => 'Caller,Rate,Calls,Minutes,Price',    },    'sum_count' => {      'name'           => 'Summary (one line per service, with count)', -    'invoice_header' => 'Caller,Messages,Price', +    'invoice_header' => 'Caller,Rate,Messages,Price',    },  ); @@ -650,12 +650,14 @@ sub export_formats {        # for summary formats, the CDR is a fictitious object containing the         # total billsec and the phone number of the service        'src', +      sub { my($cdr, %opt) = @_; $opt{ratename} },        sub { my($cdr, %opt) = @_; $opt{count} },        sub { my($cdr, %opt) = @_; int($opt{seconds}/60).'m' },        $price_sub,      ],      'sum_count' => [        'src', +      sub { my($cdr, %opt) = @_; $opt{ratename} },        sub { my($cdr, %opt) = @_; $opt{count} },        $price_sub,      ], @@ -711,9 +713,13 @@ Options:  format -charge +charge - override the 'rated_price' field of the CDR -seconds +seconds - override the 'billsec' field of the CDR + +count - number of usage events included in this record, for summary formats + +ratename - name of the rate table used to rate this call  granularity diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index b92cb4702..786533534 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -427,6 +427,7 @@ sub calc_usage {        my $seconds = '';        my $weektime = '';        my $regionname = ''; +      my $ratename = '';        my $classnum = '';        my $countrycode;        my $number; @@ -514,8 +515,9 @@ sub calc_usage {              ? $cust_pkg->part_pkg->option('accountcode_tollfree_ratenum')              : ''; -          my $intrastate_ratenum = $cust_pkg->part_pkg->option('accountcode_tollfree_ratenum'); +          my $intrastate_ratenum = $cust_pkg->part_pkg->option('intrastate_ratenum');            if ( $intrastate_ratenum && !$cdr->is_tollfree ) { +            $ratename = 'Interstate'; #until proven otherwise              # this is relatively easy only because:              # -assume all numbers are valid NANP numbers NOT in a fully-qualified format              # -disregard toll-free @@ -532,9 +534,12 @@ sub calc_usage {              $srcprefix = qsearchs('rate_prefix', {   'countrycode' => '1',                                                       'npa' => $1,                                                    }) || ''; -            $eff_ratenum = $intrastate_ratenum if ($srcprefix && $dstprefix +            if ($srcprefix && $dstprefix                  && $srcprefix->state && $dstprefix->state -                && $srcprefix->state eq $dstprefix->state); +                && $srcprefix->state eq $dstprefix->state) { +              $eff_ratenum = $intrastate_ratenum; +              $ratename = 'Intrastate'; # XXX possibly just use the ratename? +            }            }            $eff_ratenum ||= $ratenum; @@ -786,7 +791,6 @@ sub calc_usage {              );            }          } #if(there is a rate_detail) -           #if ( $charge > 0 ) {          # generate a detail record for every call; filter out $charge = 0  @@ -821,6 +825,8 @@ sub calc_usage {              regionname  => $regionname,            };          } +        $call_details->{'ratename'} = $ratename; +          push @invoice_details_sort, [ $call_details, $cdr->calldate_unix ];          #} $charge > 0 @@ -998,35 +1004,45 @@ sub sum_detail {    my $self = shift;    my $svc_x = shift;    my $invoice_details = shift || []; -  my $count = scalar(@$invoice_details); -  return () if !$count; -  my $sum_detail = { -    amount    => 0, -    format    => 'C', -    classnum  => '', #XXX -    duration  => 0, -    phonenum  => $svc_x->phonenum, -    accountcode => '', #XXX -    startdate => '', #XXX -    regionnam => '', -  }; +  return () if !@$invoice_details; +  my $details_by_rate = {};    # combine the entire set of CDRs    foreach ( @$invoice_details ) { -    $sum_detail->{amount} += $_->[0]{amount}; -    $sum_detail->{duration} += $_->[0]{duration}; +    my $d = $_->[0]; +    my $sum = $details_by_rate->{ $d->{ratename} } ||= { +      amount      => 0, +      format      => 'C', +      classnum    => '', #XXX +      duration    => 0, +      phonenum    => $svc_x->phonenum, +      accountcode => '', #XXX +      startdate   => '', #XXX +      regionname  => '', +      count       => 0, +    }; +    $sum->{amount} += $d->{amount}; +    $sum->{duration} += $d->{duration}; +    $sum->{count}++;    } -  my $total_cdr = FS::cdr->new({ -      'billsec' => $sum_detail->{duration}, -      'src'     => $sum_detail->{phonenum}, -    }); -  $sum_detail->{detail} = $total_cdr->downstream_csv( -    format    => $self->option('output_format'), -    seconds   => $sum_detail->{duration}, -    charge    => sprintf('%.2f',$sum_detail->{amount}), -    phonenum  => $sum_detail->{phonenum}, -    count     => $count, -  ); -  return $sum_detail; +  my @details; +  foreach my $ratename ( sort keys(%$details_by_rate) ) { +    my $sum = $details_by_rate->{$ratename}; +    next if $sum->{count} == 0; +    my $total_cdr = FS::cdr->new({ +        'billsec' => $sum->{duration}, +        'src'     => $sum->{phonenum}, +      }); +    $sum->{detail} = $total_cdr->downstream_csv( +      format    => $self->option('output_format'), +      seconds   => $sum->{duration}, +      charge    => sprintf('%.2f',$sum->{amount}), +      ratename  => $ratename, +      phonenum  => $sum->{phonenum}, +      count     => $sum->{count}, +    ); +    push @details, $sum; +  } +  @details;  }  # and whether cust_bill should show a detail line for the service label  diff --git a/FS/FS/part_pkg/voip_tiered.pm b/FS/FS/part_pkg/voip_tiered.pm index c1382fb45..492e1f69f 100644 --- a/FS/FS/part_pkg/voip_tiered.pm +++ b/FS/FS/part_pkg/voip_tiered.pm @@ -98,6 +98,7 @@ sub calc_usage {    my %options = (      'disable_src'    => $self->option('disable_src'),      'default_prefix' => $self->option('default_prefix'), +    'cdrtypenum'     => $self->option('use_cdrtypenum'),      'status'         => '',      'for_update'     => 1,    );  # $last_bill, $$sdate ) | 
