RT# 79549 Requre a Rate Plan to use voip_cdr Price Plan
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index df97286..587a8c5 100644 (file)
@@ -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' => {
@@ -191,6 +191,9 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
     '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: ',
                        },
 
@@ -336,7 +339,8 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
                        use_cdrtypenum ignore_cdrtypenum
                        use_calltypenum ignore_calltypenum
                        ignore_disposition disposition_in disposition_prefix
-                       skip_dcontext skip_dcontext_suffix skip_dst_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
@@ -356,6 +360,13 @@ tie my %accountcode_tollfree_field, 'Tie::IxHash',
                      )
                   ],
   '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 {
@@ -608,6 +619,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
@@ -714,4 +731,3 @@ sub hide_svc_detail {
 
 
 1;
-