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',
# 'upstream' => 'Rate calls based on upstream data: If the call type is "1", map the upstream rate ID directly to an internal rate (rate_detail), otherwise, pass the upstream price through directly.',
- 'upstream_simple' => 'Simply pass through and charge the "upstream_price" amount.',
- 'single_price' => 'A single price per minute for all calls.',
+ 'upstream_simple' => 'Simply pass through and charge the "upstream_price" amount (ignoring all options to skip calls).',
+ 'single_price' => 'A single price per minute for all calls (ignoring all options to skip calls).',
;
tie my %rounding, 'Tie::IxHash',
},
'use_cdrtypenum' => { 'name' => 'Only charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+ 'validate' => \&FS::part_pkg::validate_number_blank,
+ 'js_validate' => 'digits: true',
},
'ignore_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is set to this cdrtypenum: ',
+ 'validate' => \&FS::part_pkg::validate_number_blank,
+ 'js_validate' => 'digits: true',
},
'use_calltypenum' => { 'name' => 'Only charge for CDRs where the CDR Call Type is set to this calltypenum: ',
'skip_dcontext' => { 'name' => 'Do not charge for CDRs where dcontext is set to any of these (comma-separated) values: ',
},
+ 'noskip_dcontext_tollfree' => { 'name' => 'Do charge for CDRs where dcontext is set to any of the specified values, if the CDR is tollfree',
+ 'type' => 'checkbox',
+ },
+
'skip_dcontext_prefix' => { 'name' => 'Do not charge for CDRs where dcontext starts with: ',
},
'skip_dst_length_less' => { 'name' => 'Do not charge for CDRs where the destination is less than this many digits:',
},
+ 'noskip_dst_length_n11' => { 'name' => 'Do charge for CDRs where dst is less than the specified digits, when dst is N11 (i.e. 411, 611)',
+ 'type' => 'checkbox',
+ },
+
'noskip_dst_length_accountcode_tollfree' => { 'name' => 'Do charge for CDRs where dst is less than the specified digits, when accountcode is toll free',
'type' => 'checkbox',
},
use_cdrtypenum ignore_cdrtypenum
use_calltypenum ignore_calltypenum
ignore_disposition disposition_in disposition_prefix
- skip_dcontext skip_dcontext_prefix skip_dcontext_suffix
+ skip_dcontext noskip_dcontext_tollfree
+ 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
- skip_dst_length_less
+ skip_dst_length_less npskip_dst_length_n11
noskip_dst_length_accountcode_tollfree
skip_lastapp
skip_max_callers
rounding => ($self->option_cacheable('rounding') || 2),
);
- my $use_duration = $self->option('use_duration');
-
my($svc_table, $svc_field, $by_ip_addr) = split('\.', $cdr_svc_method);
my @cust_svc;
return "dcontext IN ( ". $self->option_cacheable('skip_dcontext'). " )"
if $self->option_cacheable('skip_dcontext') =~ /\S/
- && grep { $cdr->dcontext eq $_ } split(/\s*,\s*/, $self->option_cacheable('skip_dcontext'));
+ && grep { $cdr->dcontext eq $_ } split(/\s*,\s*/, $self->option_cacheable('skip_dcontext'))
+ && ! ( $self->option_cacheable('noskip_dcontext_tollfree')
+ && $cdr->is_tollfree
+ );
my $len_dcontext_prefix =
length($self->option_cacheable('skip_dcontext_prefix'));
my $dst_length = $self->option_cacheable('skip_dst_length_less');
return "destination less than $dst_length digits"
if $dst_length && length($cdr->dst) < $dst_length
- && ! ( $self->option_cacheable('noskip_dst_length_accountcode_tollfree')
- && $cdr->is_tollfree('accountcode')
+ && ! ( $self->option_cacheable('noskip_dst_length_n11')
+ && $cdr->dst =~ /^\d11$/
+ )
+ && ! ( $self->option_cacheable('noskip_dst_length_accountcode_tollfree')
+ && $cdr->is_tollfree('accountcode')
);
return "lastapp is ". $self->option_cacheable('skip_lastapp')
and $cdr->max_callers <= $self->option_cacheable('skip_max_callers');
return "calldate < ". $self->option_cacheable('skip_old')
- if $self->option_cacheable('skip_old')
+ if length($self->option_cacheable('skip_old'))
&& $cdr->calldate_unix < str2time($self->option_cacheable('skip_old'));
#all right then, rate it