X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=e2408a3d1f4554e267355b22f09057c30c056da9;hb=f2d1ae9c366257a6308a4120f190b416b514b1f3;hp=62214df89c061e2e539d6d4a953dc4c619826b26;hpb=aaef99ca464d1daac9cc881db4563d2e3bf3b9a2;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 62214df89..e2408a3d1 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -15,7 +15,7 @@ use FS::part_pkg::recur_Common; @ISA = qw(FS::part_pkg::recur_Common); -$DEBUG = 0; +$DEBUG = 1; tie my %rating_method, 'Tie::IxHash', 'prefix' => 'Rate calls by using destination prefix to look up a region and rate according to the internal prefix and rate tables', @@ -452,6 +452,7 @@ sub calc_usage { # } else { #pass upstream price through # # $charge = sprintf('%.2f', $cdr->upstream_price); +# warn "Incrementing \$charges by $charge. Now $charges\n" if $DEBUG; # $charges += $charge; # # @call_details = ( @@ -470,6 +471,7 @@ sub calc_usage { #XXX $charge = sprintf('%.2f', $cdr->upstream_price); $charge = sprintf('%.3f', $cdr->upstream_price); $charges += $charge; + warn "Incrementing \$charges by $charge. Now $charges\n" if $DEBUG; @call_details = ($cdr->downstream_csv( 'format' => $output_format, 'charge' => $charge, @@ -500,6 +502,7 @@ sub calc_usage { $charge = sprintf('%.4f', ( $self->option('min_charge') * $minutes ) + 0.0000000001 ); #so 1.00005 rounds to 1.0001 + warn "Incrementing \$charges by $charge. Now $charges\n" if $DEBUG; $charges += $charge; @call_details = ($cdr->downstream_csv( 'format' => $output_format, @@ -535,19 +538,29 @@ sub calc_usage { my $granularity = $rate_detail->sec_granularity; # length($cdr->billsec) ? $cdr->billsec : $cdr->duration; - $seconds = $use_duration ? $cdr->duration : $cdr->billsec; + my $charge_sec = $use_duration ? $cdr->duration : $cdr->billsec; + $seconds = ( $charge_sec <= $rate_detail->conn_sec ) # min() + ? $charge_sec + : $rate_detail->conn_sec; - $seconds -= $rate_detail->conn_sec; - $seconds = 0 if $seconds < 0; + $charge_sec -= $rate_detail->conn_sec; + $charge_sec = 0 if $charge_sec < 0; - $seconds += $granularity - ( $seconds % $granularity ) - if $seconds # don't granular-ize 0 billsec calls (bills them) + $charge_sec += $granularity - ( $charge_sec % $granularity ) + if $charge_sec # don't granular-ize 0 billsec calls (bills them) && $granularity; # 0 is per call - my $minutes = sprintf("%.1f", $seconds / 60); + $seconds += $charge_sec; + + my $minutes = sprintf("%.1f", $charge_sec / 60); $minutes =~ s/\.0$// if $granularity == 60; + my $duration_minutes = #for invoice display purposes + sprintf("%.1f", $seconds / 60); + $duration_minutes =~ s/\.0$// if $granularity == 60; + # per call rather than per minute $minutes = 1 unless $granularity; + $duration_minutes = 1 unless $granularity; $included_min{$regionnum} -= $minutes; @@ -560,8 +573,9 @@ sub calc_usage { $charge += sprintf('%.2f', ($rate_detail->min_charge * $charge_min) + 0.00000001 ); #so 1.005 rounds to 1.01 $charge = sprintf('%.2f', $charge); - $charges += $charge; } + warn "Incrementing \$charges by $charge. Now $charges\n" if $DEBUG; + $charges += $charge; # this is why we need regionnum/rate_region.... warn " (rate region $rate_region)\n" if $DEBUG; @@ -569,7 +583,7 @@ sub calc_usage { @call_details = ( $cdr->downstream_csv( 'format' => $output_format, 'granularity' => $granularity, - 'minutes' => $minutes, + 'minutes' => $duration_minutes, 'charge' => $charge, 'pretty_dst' => $pretty_destnum, 'dst_regionname' => $regionname,