From d01937e1d00012b5221f676178710e4e47618c2c Mon Sep 17 00:00:00 2001 From: levinse Date: Thu, 16 Jun 2011 22:57:04 +0000 Subject: [PATCH] add CDR rating options to ignore CDRs having configurable disposition values and having particular cdrtypenum values, RT10091 --- FS/FS/part_pkg/voip_cdr.pm | 20 +++++++++++++++++++- FS/FS/part_pkg/voip_inbound.pm | 20 +++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 25b8d7801..b522a9930 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -154,6 +154,12 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); 'use_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is not set to: ', }, + + 'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to: ', + }, + + 'ignore_disposition' => { 'name' => 'Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: ', + }, 'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these values: ', }, @@ -270,7 +276,9 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); domestic_prefix international_prefix disable_tollfree use_amaflags use_disposition - use_disposition_taqua use_carrierid use_cdrtypenum + use_disposition_taqua use_carrierid + use_cdrtypenum ignore_cdrtypenum + ignore_disposition skip_dcontext skip_dst_prefix skip_dstchannel_prefix skip_src_length_more noskip_src_length_accountcode_tollfree @@ -877,6 +885,8 @@ sub check_chargable { use_disposition_taqua use_carrierid use_cdrtypenum + ignore_cdrtypenum + ignore_disposition skip_dst_prefix skip_dcontext skip_dstchannel_prefix @@ -898,6 +908,10 @@ sub check_chargable { return "disposition != 100" if $opt{'use_disposition_taqua'} && $cdr->disposition != 100; + + return "disposition IN ( $opt{'ignore_disposition'} )" + if $opt{'ignore_disposition'} =~ /\S/ + && grep { $cdr->disposition eq $_ } split(/\s*,\s*/, $opt{'ignore_disposition'}); return "carrierid != $opt{'use_carrierid'}" if length($opt{'use_carrierid'}) @@ -907,6 +921,10 @@ sub check_chargable { return "cdrtypenum != $opt{'use_cdrtypenum'}" if length($opt{'use_cdrtypenum'}) && $cdr->cdrtypenum ne $opt{'use_cdrtypenum'}; #ne otherwise 0 matches '' + + return "cdrtypenum == $opt{'ignore_cdrtypenum'}" + if length($opt{'ignore_cdrtypenum'}) + && $cdr->cdrtypenum eq $opt{'ignore_cdrtypenum'}; #eq otherwise 0 matches '' foreach(split(',',$opt{'skip_dst_prefix'})) { return "dst starts with '$_'" diff --git a/FS/FS/part_pkg/voip_inbound.pm b/FS/FS/part_pkg/voip_inbound.pm index 630d983de..7cdf2ab42 100644 --- a/FS/FS/part_pkg/voip_inbound.pm +++ b/FS/FS/part_pkg/voip_inbound.pm @@ -81,6 +81,12 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); 'use_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is not set to: ', }, + + 'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to: ', + }, + + 'ignore_disposition' => { 'name' => 'Do not charge for CDRs where the Disposition is set to any of these (comma-separated) values: ', + }, 'skip_dcontext' => { 'name' => 'Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values:', }, @@ -152,7 +158,9 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities(); default_prefix disable_tollfree use_amaflags use_disposition - use_disposition_taqua use_carrierid use_cdrtypenum + use_disposition_taqua use_carrierid + use_cdrtypenum ignore_cdrtypenum + ignore_disposition skip_dcontext skip_dstchannel_prefix skip_dst_length_less skip_lastapp use_duration @@ -329,6 +337,8 @@ sub check_chargable { use_disposition_taqua use_carrierid use_cdrtypenum + ignore_cdrtypenum + ignore_disposition skip_dcontext skip_dstchannel_prefix skip_dst_length_less @@ -347,6 +357,10 @@ sub check_chargable { return "disposition != 100" if $opt{'use_disposition_taqua'} && $cdr->disposition != 100; + + return "disposition IN ( $opt{'ignore_disposition'} )" + if $opt{'ignore_disposition'} =~ /\S/ + && grep { $cdr->disposition eq $_ } split(/\s*,\s*/, $opt{'ignore_disposition'}); return "carrierid != $opt{'use_carrierid'}" if length($opt{'use_carrierid'}) @@ -356,6 +370,10 @@ sub check_chargable { return "cdrtypenum != $opt{'use_cdrtypenum'}" if length($opt{'use_cdrtypenum'}) && $cdr->cdrtypenum ne $opt{'use_cdrtypenum'}; #ne otherwise 0 matches '' + + return "cdrtypenum == $opt{'ignore_cdrtypenum'}" + if length($opt{'ignore_cdrtypenum'}) + && $cdr->cdrtypenum eq $opt{'ignore_cdrtypenum'}; #eq otherwise 0 matches '' return "dcontext IN ( $opt{'skip_dcontext'} )" if $opt{'skip_dcontext'} =~ /\S/ -- 2.11.0