summaryrefslogtreecommitdiff
path: root/FS/FS/part_pkg
diff options
context:
space:
mode:
authormark <mark>2011-12-16 22:06:28 +0000
committermark <mark>2011-12-16 22:06:28 +0000
commit97883f4e483e4e879311079707d090c6974fdaea (patch)
treeec3b815a9f82388c2291dd3068dbc6c68317572f /FS/FS/part_pkg
parent1d3c63a24d02a3b98c550ac98c81698ca6e36184 (diff)
better summarization of zero-charge CDRs, #15535
Diffstat (limited to 'FS/FS/part_pkg')
-rw-r--r--FS/FS/part_pkg/voip_cdr.pm128
1 files changed, 66 insertions, 62 deletions
diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index 747965b..4550e1f 100644
--- a/FS/FS/part_pkg/voip_cdr.pm
+++ b/FS/FS/part_pkg/voip_cdr.pm
@@ -788,40 +788,41 @@ sub calc_usage {
} #if(there is a rate_detail)
- if ( $charge > 0 ) {
- #just use FS::cust_bill_pkg_detail objects?
- my $call_details;
- my $phonenum = $svc_x->phonenum;
-
- if ( scalar(@call_details) == 1 ) {
- $call_details =
- { format => 'C',
- detail => $call_details[0],
- amount => $charge,
- classnum => $classnum,
- phonenum => $phonenum,
- accountcode => $cdr->accountcode,
- startdate => $cdr->startdate,
- duration => $seconds,
- regionname => $regionname,
- };
- } else { #only used for $rating_method eq 'upstream' now
- # and for sum_ formats
- $csv->combine(@call_details);
- $call_details =
- { format => 'C',
- detail => $csv->string,
- amount => $charge,
- classnum => $classnum,
- phonenum => $phonenum,
- accountcode => $cdr->accountcode,
- startdate => $cdr->startdate,
- duration => $seconds,
- regionname => $regionname,
- };
- }
- push @invoice_details_sort, [ $call_details, $cdr->calldate_unix ];
+ #if ( $charge > 0 ) {
+ # generate a detail record for every call; filter out $charge = 0
+ # later.
+ my $call_details;
+ my $phonenum = $svc_x->phonenum;
+
+ if ( scalar(@call_details) == 1 ) {
+ $call_details =
+ { format => 'C',
+ detail => $call_details[0],
+ amount => $charge,
+ classnum => $classnum,
+ phonenum => $phonenum,
+ accountcode => $cdr->accountcode,
+ startdate => $cdr->startdate,
+ duration => $seconds,
+ regionname => $regionname,
+ };
+ } else { #only used for $rating_method eq 'upstream' now
+ # and for sum_ formats
+ $csv->combine(@call_details);
+ $call_details =
+ { format => 'C',
+ detail => $csv->string,
+ amount => $charge,
+ classnum => $classnum,
+ phonenum => $phonenum,
+ accountcode => $cdr->accountcode,
+ startdate => $cdr->startdate,
+ duration => $seconds,
+ regionname => $regionname,
+ };
}
+ push @invoice_details_sort, [ $call_details, $cdr->calldate_unix ];
+ #} $charge > 0
# if the customer flag is on, call "downstream_csv" or something
# like it to export the call downstream!
@@ -844,39 +845,42 @@ sub calc_usage {
my @sorted_invoice_details =
sort { @{$a}[1] <=> @{$b}[1] } @invoice_details_sort;
foreach my $sorted_call_detail ( @sorted_invoice_details ) {
- push @$details, @{$sorted_call_detail}[0];
+ my $d = $sorted_call_detail->[0];
+ push @$details, $d if $d->{amount} > 0;
}
}
else { #$self->sum_usage
- my $sum_detail = {
- amount => 0,
- format => 'C',
- classnum => '', #XXX
- duration => 0,
- phonenum => $svc_x->phonenum,
- accountcode => '', #XXX
- startdate => '', #XXX
- regionnam => '',
- };
- # combine the entire set of CDRs
- foreach ( @invoice_details_sort ) {
- $sum_detail->{amount} += $_->[0]{amount};
- $sum_detail->{duration} += $_->[0]{duration};
- }
- my $total_cdr = FS::cdr->new({
- 'billsec' => $sum_detail->{duration},
- 'src' => $sum_detail->{phonenum},
- });
- $sum_detail->{detail} = $total_cdr->downstream_csv(
- format => $output_format,
- seconds => $sum_detail->{duration},
- charge => sprintf('%.2f',$sum_detail->{amount}),
- phonenum => $sum_detail->{phonenum},
- count => scalar(@invoice_details_sort),
- );
- push @$details, $sum_detail;
+ my $count = scalar(@invoice_details_sort);
+ if ( $count > 0 ) {
+ my $sum_detail = {
+ amount => 0,
+ format => 'C',
+ classnum => '', #XXX
+ duration => 0,
+ phonenum => $svc_x->phonenum,
+ accountcode => '', #XXX
+ startdate => '', #XXX
+ regionnam => '',
+ };
+ # combine the entire set of CDRs
+ foreach ( @invoice_details_sort ) {
+ $sum_detail->{amount} += $_->[0]{amount};
+ $sum_detail->{duration} += $_->[0]{duration};
+ }
+ my $total_cdr = FS::cdr->new({
+ 'billsec' => $sum_detail->{duration},
+ 'src' => $sum_detail->{phonenum},
+ });
+ $sum_detail->{detail} = $total_cdr->downstream_csv(
+ format => $output_format,
+ seconds => $sum_detail->{duration},
+ charge => sprintf('%.2f',$sum_detail->{amount}),
+ phonenum => $sum_detail->{phonenum},
+ count => $count,
+ );
+ push @$details, $sum_detail;
+ } # if $count > 0
} #if $self->sum_usage
-
} # $cust_svc
unshift @$details, { format => 'C',