option to skip rating calls where source and destination are the same customer, ...
authorMark Wells <mark@freeside.biz>
Sat, 23 Mar 2013 00:27:55 +0000 (17:27 -0700)
committerMark Wells <mark@freeside.biz>
Sat, 23 Mar 2013 00:27:55 +0000 (17:27 -0700)
FS/FS/cdr.pm
FS/FS/part_pkg/voip_cdr.pm

index 9a31144..3ebe6c4 100644 (file)
@@ -644,7 +644,34 @@ sub rate_prefix {
                                             );
   }
 
+  if ( $part_pkg->option_cacheable('skip_same_customer')
+      and ! $self->is_tollfree ) {
+    my ($dst_countrycode, $dst_number) = $self->parse_number(
+      column => 'dst',
+      international_prefix => $part_pkg->option_cacheable('international_prefix'),
+      domestic_prefix => $part_pkg->option_cacheable('domestic_prefix'),
+    );
+    my $dst_same_cust = FS::Record->scalar_sql(
+        'SELECT COUNT(svc_phone.svcnum) AS count '.
+        'FROM cust_pkg ' .
+        'JOIN cust_svc   USING (pkgnum) ' .
+        'JOIN svc_phone  USING (svcnum) ' .
+        'WHERE svc_phone.countrycode = ' . dbh->quote($dst_countrycode) .
+        ' AND svc_phone.phonenum = ' . dbh->quote($dst_number) .
+        ' AND cust_pkg.custnum = ' . $cust_pkg->custnum,
+    );
+    if ( $dst_same_cust > 0 ) {
+      warn "not charging for CDR (same source and destination customer)\n" if $DEBUG;
+      return $self->set_status_and_rated_price( 'skipped',
+                                                0,
+                                                $opt{'svcnum'},
+                                              );
+    }
+  }
+
     
+
+
   ###
   # look up rate details based on called station id
   # (or calling station id for toll free calls)
index 67ddfb5..1c891b1 100644 (file)
@@ -208,6 +208,11 @@ tie my %detail_formats, 'Tie::IxHash',
     'skip_max_callers' => { 'name' => 'Do not charge for CDRs where max_callers is less than or equal to this value: ',
                           },
 
+    'skip_same_customer' => {
+      'name' => 'Do not charge for calls between numbers belonging to the same customer',
+      'type' => 'checkbox',
+    },
+
     'use_duration'   => { 'name' => 'Calculate usage based on the duration field instead of the billsec field',
                           'type' => 'checkbox',
                         },
@@ -313,6 +318,7 @@ tie my %detail_formats, 'Tie::IxHash',
                        noskip_dst_length_accountcode_tollfree
                        skip_lastapp
                        skip_max_callers
+                       skip_same_customer
                        use_duration
                        411_rewrite
                        output_format