X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=b4ab73fb4f569d83f0a820f53b1dca4cdd5c00d1;hb=bc561a1b7853d292a0c8b83ef16b5f7b8b8389d3;hp=500a1b0a4e7e96ffd58a1841a8485a15ad1a0ea2;hpb=c8cccb4a92adceb943c635fe62dad0d034462ce0;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 500a1b0a4..b4ab73fb4 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -26,7 +26,7 @@ tie my %rating_method, 'Tie::IxHash', #; %info = ( - 'name' => 'VoIP rating by plan of CDR records in an internal (or external?) SQL table', + 'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table', 'fields' => { 'setup_fee' => { 'name' => 'Setup fee for this package', 'default' => 0, @@ -53,7 +53,23 @@ tie my %rating_method, 'Tie::IxHash', 'default' => '+1', }, - #XXX also have option for an external db?? + 'disable_src' => { 'name' => 'Disable rating of CDR records based on the "src" field in addition to "charged_party"', + 'type' => 'checkbox' + }, + + 'domestic_prefix' => { 'name' => 'Destination prefix for domestic CDR records', + 'default' => '1', + }, + +# 'domestic_prefix_required' => { 'name' => 'Require explicit destination prefix for domestic CDR records', +# 'type' => 'checkbox', +# }, + + 'international_prefix' => { 'name' => 'Destination prefix for international CDR records', + 'default' => '011', + }, + + #XXX also have option for an external db # 'cdr_location' => { 'name' => 'CDR database location' # 'type' => 'select', # 'select_options' => \%cdr_location, @@ -130,7 +146,7 @@ sub calc_recur { ### my( $to_or_from, $number ); - if ( $cdr->dst =~ /^(\+?1)?8[02-8]{2}/ ) { #tollfree call + if ( $cdr->dst =~ /^(\+?1)?8([02-8])\1/ ) { #tollfree call $to_or_from = 'from'; $number = $cdr->src; } else { #regular call @@ -144,10 +160,12 @@ sub calc_recur { # $dest =~ s/^(\w+):// and $proto = $1; #sip: # my $siphost = ''; # $dest =~ s/\@(.*)$// and $siphost = $1; # @10.54.32.1, @sip.example.com + + my $intl = $self->option('international_prefix') || '011'; #determine the country code my $countrycode; - if ( $number =~ /^011(((\d)(\d))(\d))(\d+)$/ + if ( $number =~ /^$intl(((\d)(\d))(\d))(\d+)$/ || $number =~ /^\+(((\d)(\d))(\d))(\d+)$/ ) { @@ -166,8 +184,8 @@ sub calc_recur { } } else { - $countrycode = '1'; - $number =~ s/^1//;# if length($number) > 10; + $countrycode = $self->option('domestic_prefix') || '1'; + $number =~ s/^$countrycode//;# if length($number) > 10; } warn "rating call $to_or_from +$countrycode $number\n" if $DEBUG; @@ -261,9 +279,13 @@ sub calc_recur { my $granularity = $rate_detail->sec_granularity; my $seconds = $cdr->billsec; # |ength($cdr->billsec) ? $cdr->billsec : $cdr->duration; - $seconds += $granularity - ( $seconds % $granularity ); + $seconds += $granularity - ( $seconds % $granularity ) + if $granularity; # 0 is per call my $minutes = sprintf("%.1f", $seconds / 60); $minutes =~ s/\.0$// if $granularity == 60; + + # per call rather than per minute + $minutes = 1 unless $granularity; $included_min{$regionnum} -= $minutes; @@ -280,7 +302,7 @@ sub calc_recur { @call_details = ( #time2str("%Y %b %d - %r", $cdr->calldate_unix ), time2str("%c", $cdr->calldate_unix), #XXX this should probably be a config option dropdown so they can select US vs- rest of world dates or whatnot - $minutes.'m', + $granularity ? $minutes.'m' : $minutes.' call', '$'.$charge, $pretty_destnum, $rate_region->regionname,