cdr.max_callers field and skip option, RT#9810
authormark <mark>
Fri, 17 Sep 2010 19:57:50 +0000 (19:57 +0000)
committermark <mark>
Fri, 17 Sep 2010 19:57:50 +0000 (19:57 +0000)
FS/FS/Schema.pm
FS/FS/part_pkg/voip_cdr.pm

index 459dcab..8403ea2 100644 (file)
@@ -2495,6 +2495,8 @@ sub tables_hashref {
         'uniqueid',    'varchar',  '',      32, \"''", '',
         'userfield',   'varchar',  '',     255, \"''", '',
 
+        'max_callers', 'int',  'NULL',      '',    '', '',
+
         ###
         # fields for unitel/RSLCOM/convergent that don't map well to asterisk
         # defaults
index c66a3fd..41c0888 100644 (file)
@@ -149,10 +149,10 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
     'use_cdrtypenum' => { 'name' => 'Do not charge for CDRs where the CDR Type is not set to: ',
                          },
 
-    'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these values:',
+    'skip_dst_prefix' => { 'name' => 'Do not charge for CDRs where the destination number starts with any of these values: ',
     },
 
-    'skip_dcontext' => { 'name' => 'Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values:',
+    'skip_dcontext' => { 'name' => 'Do not charge for CDRs where the dcontext is set to any of these (comma-separated) values: ',
                        },
 
     'skip_dstchannel_prefix' => { 'name' => 'Do not charge for CDRs where the dstchannel starts with:',
@@ -166,7 +166,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                                                 },
 
     'accountcode_tollfree_ratenum' => {
-      'name' => 'Optional alternate rate plan when accountcode is toll free',
+      'name' => 'Optional alternate rate plan when accountcode is toll free',
       'type' => 'select',
       'select_table'  => 'rate',
       'select_key'    => 'ratenum',
@@ -182,9 +182,12 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                                                   'type' => 'checkbox',
                                                 },
 
-    'skip_lastapp' => { 'name' => 'Do not charge for CDRs where the lastapp matches this value',
+    'skip_lastapp' => { 'name' => 'Do not charge for CDRs where the lastapp matches this value',
                       },
 
+    'skip_max_callers' => { 'name' => 'Do not charge for CDRs where max_callers is greater than this value: ',
+                          },
+
     'use_duration'   => { 'name' => 'Calculate usage based on the duration field instead of the billsec field',
                           'type' => 'checkbox',
                         },
@@ -199,7 +202,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                          'default'        => 'default', #XXX test
                        },
 
-    'usage_section' => { 'name' => 'Section in which to place usage charges (whether separated or not)',
+    'usage_section' => { 'name' => 'Section in which to place usage charges (whether separated or not)',
                        },
 
     'summarize_usage' => { 'name' => 'Include usage summary with recurring charges when usage is in separate section',
@@ -262,6 +265,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                        skip_dst_length_less
                        noskip_dst_length_accountcode_tollfree
                        skip_lastapp
+                       skip_max_callers
                        use_duration
                        411_rewrite
                        output_format usage_mandate summarize_usage usage_section
@@ -835,6 +839,7 @@ sub check_chargable {
     skip_src_length_more noskip_src_length_accountcode_tollfree
     skip_dst_length_less noskip_dst_length_accountcode_tollfree
     skip_lastapp
+    skip_max_callers
   );
   foreach my $opt (grep !exists($flags{option_cache}->{$_}), @opt ) {
     $flags{option_cache}->{$opt} = $self->option($opt, 1);
@@ -903,6 +908,11 @@ sub check_chargable {
 
   }
 
+  return "max_callers > $opt{skip_max_callers}"
+    if length($opt{'skip_max_callers'})
+      and length($cdr->max_callers)
+      and $cdr->max_callers > $opt{'skip_max_callers'};
+
   #all right then, rate it
   '';
 }