'min_included' => { 'name' => 'Minutes included when using the "single price per minute" or "prefix" rating method',
},
+ 'show_min_included' => { 'name' => 'Show included minutes as an invoice detail',
+ 'type' => 'checkbox',
+ },
+
'min_charge' => { 'name' => 'Charge per minute when using "single price per minute" rating method',
},
'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: ',
},
cdr_svc_method
rating_method rounding ratenum intrastate_ratenum
calls_included
- min_charge min_included sec_granularity
+ min_charge min_included show_min_included
+ sec_granularity
ignore_unrateable
default_prefix
disable_src
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
my $charges = 0;
- my $included_min = $self->option('min_included', 1) || 0;
+ my $included_min_total = ($self->option('min_included', 1) || 0)
+ * ($cust_pkg->quantity || 1);
#single price rating
#or region group
- $included_min *= ($cust_pkg->quantity || 1);
+ my $included_min_left = $included_min_total;
my $included_calls = $self->option('calls_included', 1) || 0;
$included_calls *= ($cust_pkg->quantity || 1);
'part_pkg' => $self,
'cust_pkg' => $cust_pkg,
'svcnum' => $svc_x->svcnum,
- 'plan_included_min' => \$included_min,
+ 'plan_included_min' => \$included_min_left,
'detail_included_min_hashref' => \%detail_included_min,
);
die $error if $error; #??
$formatter->finish; #writes into $details
unshift @$details, $formatter->header if @$details;
+ if ( $self->option_cacheable('show_min_included', 1)
+ and $included_min_total > 0 ) {
+
+ my $min_detail = sprintf('%d / %d ',
+ $included_min_total - $included_min_left,
+ $included_min_total
+ ) . $cust_pkg->mt('included minutes used');
+ unshift @$details, $min_detail;
+ }
+
$charges;
}
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'));
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