X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=cd1be355f98b8904eca70db50c6a8eca484c19dc;hb=80372d41bfbf6b5313c2491107fe81dc42c66d01;hp=8384c8c87206d4a06c0b4db8145d95a5f9020362;hpb=3c8c256f3e8297f1b987eb4286ba810157017b49;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 8384c8c87..cd1be355f 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -1,21 +1,19 @@ package FS::part_pkg::voip_cdr; use strict; -use vars qw(@ISA $DEBUG %info); +use base qw( FS::part_pkg::recur_Common ); +use vars qw( $DEBUG %info ); use Date::Format; use Tie::IxHash; use FS::Conf; use FS::Record qw(qsearchs qsearch); -use FS::part_pkg::recur_Common; use FS::cdr; use FS::rate; use FS::rate_prefix; use FS::rate_detail; -use FS::part_pkg::recur_Common; use List::Util qw(first min); -@ISA = qw(FS::part_pkg::recur_Common); $DEBUG = 0; @@ -278,6 +276,13 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); 'weight' => 40, ); +sub price_info { + my $self = shift; + my $str = $self->SUPER::price_info; + $str .= " plus usage" if $str; + $str; +} + sub calc_setup { my($self, $cust_pkg ) = @_; $self->option('setup_fee'); @@ -333,7 +338,7 @@ sub calc_usage { my $disable_tollfree = $self->option('disable_tollfree'); my $ignore_unrateable = $self->option('ignore_unrateable', 'Hush!'); my $use_duration = $self->option('use_duration'); - my $region_group = ($rating_method eq 'prefix' && $self->option('min_included') > 0); + my $region_group = ($rating_method eq 'prefix' && ($self->option('min_included',1) || 0) > 0); my $region_group_included_min = $region_group ? $self->option('min_included') : 0; my $output_format = $self->option('output_format', 'Hush!') @@ -387,6 +392,8 @@ sub calc_usage { ); # $last_bill, $$sdate ) $options{'by_svcnum'} = 1 if $svc_field eq 'svcnum'; + my @invoice_details_sort; + foreach my $cdr ( $svc_x->get_cdrs( %options ) ) { @@ -473,7 +480,7 @@ sub calc_usage { } } else { - $countrycode = $domestic_prefix || '1'; + $countrycode = length($domestic_prefix) ? $domestic_prefix : '1'; $number =~ s/^$countrycode//;# if length($number) > 10; } @@ -500,6 +507,7 @@ sub calc_usage { $rate_detail = $rate->dest_detail({ 'countrycode' => $countrycode, 'phonenum' => $number, 'weektime' => $weektime, + 'cdrtypenum' => $cdr->cdrtypenum, }); if ( $rate_detail ) { @@ -566,10 +574,7 @@ sub calc_usage { if $seconds # don't granular-ize 0 billsec calls (bills them) && $granularity # 0 is per call && $seconds % $granularity; - my $minutes = $seconds / 60; - # XXX config? - #$charge = sprintf('%.2f', ( $self->option('min_charge') * $minutes ) - #+ 0.00000001 ); #so 1.005 rounds to 1.01 + my $minutes = $granularity ? ($seconds / 60) : 1; $charge = sprintf('%.4f', ( $self->option('min_charge') * $minutes ) + 0.0000000001 ); #so 1.00005 rounds to 1.0001 @@ -690,7 +695,8 @@ sub calc_usage { # choose next rate_detail $rate_detail = $rate->dest_detail({ 'countrycode' => $countrycode, 'phonenum' => $number, - 'weektime' => $etime }) + 'weektime' => $etime, + 'cdrtypenum' => $cdr->cdrtypenum }) if($seconds_left); # we have now moved forward to $etime $weektime = $etime; @@ -748,7 +754,7 @@ sub calc_usage { warn " adding details on charge to invoice: [ ". join(', ', @{$call_details} ). " ]" if ( $DEBUG && ref($call_details) ); - push @$details, $call_details; #\@call_details, + push @invoice_details_sort, [ $call_details, $cdr->calldate_unix ]; } # if the customer flag is on, call "downstream_csv" or something @@ -766,6 +772,11 @@ sub calc_usage { } } # $cdr + + 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]; + } } # $cust_svc