X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=8085c1995585da87992d74304de0ccd968074001;hb=cf98bcb1b302d553ef050c2ef1e4fe7b660705b1;hp=9ecdba685b3173caf914c3f4d42147a311197ca3;hpb=d82acd06f8f8a431c69c3b14e3c5cb8252edb02d;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 9ecdba685..8085c1995 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -65,7 +65,7 @@ tie my %accountcode_tollfree_field, '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', 'shortname' => 'VoIP/telco CDR rating (standard)', 'inherit_fields' => [ 'prorate_Mixin', 'global_Mixin' ], 'fields' => { @@ -182,12 +182,18 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash', 'disposition_in' => { 'name' => 'Only 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: ', + 'disposition_prefix' => { 'name' => 'Only charge for CDRs where the Disposition starts with: ', + }, + + 'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these (comma-separated) values: ', }, 'skip_dcontext' => { 'name' => 'Do not charge for CDRs where dcontext is set to any of these (comma-separated) values: ', }, + 'skip_dcontext_prefix' => { 'name' => 'Do not charge for CDRs where dcontext starts with: ', + }, + 'skip_dcontext_suffix' => { 'name' => 'Do not charge for CDRs where dcontext ends with: ', }, @@ -332,8 +338,9 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash', use_carrierid use_cdrtypenum ignore_cdrtypenum use_calltypenum ignore_calltypenum - ignore_disposition disposition_in - skip_dcontext skip_dcontext_suffix skip_dst_prefix + ignore_disposition disposition_in disposition_prefix + skip_dcontext skip_dcontext_prefix skip_dcontext_suffix + skip_dst_prefix skip_dstchannel_prefix skip_src_length_more noskip_src_length_accountcode_tollfree accountcode_tollfree_ratenum accountcode_tollfree_field @@ -562,7 +569,13 @@ sub check_chargable { return "disposition NOT IN ( ". $self->option_cacheable('disposition_in')." )" if $self->option_cacheable('disposition_in') =~ /\S/ && !grep { $cdr->disposition eq $_ } split(/\s*,\s*/, $self->option_cacheable('disposition_in')); - + + my $disposition_prefix = $self->option_cacheable('disposition_prefix'); + my $len_dis_prefix = length($disposition_prefix); + return "disposition does not start with $disposition_prefix" + if $len_dis_prefix + && substr($cdr->disposition, 0, $len_dis_prefix) ne $disposition_prefix; + return "disposition IN ( ". $self->option_cacheable('ignore_disposition')." )" if $self->option_cacheable('ignore_disposition') =~ /\S/ && grep { $cdr->disposition eq $_ } split(/\s*,\s*/, $self->option_cacheable('ignore_disposition')); @@ -599,6 +612,12 @@ sub check_chargable { if $self->option_cacheable('skip_dcontext') =~ /\S/ && grep { $cdr->dcontext eq $_ } split(/\s*,\s*/, $self->option_cacheable('skip_dcontext')); + my $len_dcontext_prefix = + length($self->option_cacheable('skip_dcontext_prefix')); + return "dcontext starts with ". $self->option_cacheable('skip_dcontext_prefix') + if $len_dcontext_prefix + && substr($cdr->dcontext,0,$len_dcontext_prefix) eq $self->option_cacheable('skip_dcontext_prefix'); + my $len_suffix = length($self->option_cacheable('skip_dcontext_suffix')); return "dcontext ends with ". $self->option_cacheable('skip_dcontext_suffix') if $len_suffix