;
%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' => {
'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: ',
},
'type' => 'checkbox',
},
- 'count_available_phones' => { 'name' => 'Consider for tax purposes the number of lines to be svc_phones that may be provisioned rather than those that actually are.',
- 'type' => 'checkbox',
- },
-
#XXX also have option for an external db? these days we suck them into ours
# 'cdr_location' => { 'name' => 'CDR database location'
# 'type' => 'select',
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
usage_mandate usage_section summarize_usage
usage_showzero bill_every_call bill_inactive_svcs
bill_only_pkg_dates
- count_available_phones suspend_bill
+ suspend_bill
)
],
'weight' => 41,
+ 'validate' => sub {
+ # Validation function for FS::part_pkg::check_options()
+ my $options = shift;
+ return "Please choose a Rate Plan for use with selected Rating Method"
+ if $options->{rating_method} eq 'prefix' && !$options->{ratenum};
+ return;
+ },
);
sub price_info {
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
0;
}
-# This equates svc_phone records; perhaps svc_phone should have a field
-# to indicate it represents a line
-sub calc_units {
- my($self, $cust_pkg ) = @_;
- my $count = 0;
- if ( $self->option('count_available_phones', 1)) {
- foreach my $pkg_svc ($cust_pkg->part_pkg->pkg_svc) {
- if ($pkg_svc->part_svc->svcdb eq 'svc_phone') { # svc_pbx?
- $count += $pkg_svc->quantity || 0;
- }
- }
- $count *= $cust_pkg->quantity;
- } else {
- $count =
- scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc);
- }
- $count;
-}
-
sub reset_usage {
my ($self, $cust_pkg, %opt) = @_;
my @part_pkg_usage = $self->part_pkg_usage or return '';
1;
-