Revert "RT#38278: Removing duplicate CDR entries prior to billing"
authorMark Wells <mark@freeside.biz>
Mon, 8 Aug 2016 20:29:21 +0000 (13:29 -0700)
committerMark Wells <mark@freeside.biz>
Mon, 8 Aug 2016 20:29:21 +0000 (13:29 -0700)
Prematurely merged from master.

FS/FS/Conf.pm
FS/bin/freeside-cdrrewrited

index d4c03b4..358aa53 100644 (file)
@@ -4995,13 +4995,6 @@ and customer address. Include units.',
 #  },
 
   {
-    'key'         => 'cdr-skip_duplicate_rewrite',
-    'section'     => 'telephony',
-    'description' => 'Use the freeside-cdrrewrited daemon to prevent billing CDRs with a src, dst and calldate identical to an existing CDR',
-    'type'        => 'checkbox',
-  },
-
-  {
     'key'         => 'cdr-charged_party_rewrite',
     'section'     => 'telephony',
     'description' => 'Do charged party rewriting in the freeside-cdrrewrited daemon; useful if CDRs are being dropped off directly in the database and require special charged_party processing such as cdr-charged_party-accountcode or cdr-charged_party-truncate*.',
index 34a2068..f9d97af 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use vars qw( $conf );
 use FS::Daemon ':all'; #daemonize1 drop_root daemonize2 myexit logfile sig*
 use FS::UID qw( adminsuidsetup );
-use FS::Record qw( qsearch qsearchs dbh );
+use FS::Record qw( qsearch qsearchs );
 #use FS::cdr;
 #use FS::cust_pkg;
 #use FS::queue;
@@ -24,12 +24,12 @@ daemonize2();
 
 $conf = new FS::Conf;
 
-die "not running; relevant conf options are all off\n"
+die "not running; cdr-asterisk_forward_rewrite, cdr-charged_party_rewrite ".
+    " and cdr-taqua-accountcode_rewrite conf options are all off\n"
   unless _shouldrun();
 
 #--
 
-#used for taqua
 my %sessionnum_unmatch = ();
 my $sessionnum_retry = 4 * 60 * 60; # 4 hours
 my $sessionnum_giveup = 4 * 24 * 60 * 60; # 4 days
@@ -45,25 +45,20 @@ while (1) {
   # instead of just doing this search like normal CDRs
 
   #hmm :/
-  #used only by taqua, should have no effect otherwise
   my @recent = grep { ($sessionnum_unmatch{$_} + $sessionnum_retry) > time }
                  keys %sessionnum_unmatch;
   my $extra_sql = scalar(@recent)
                     ? ' AND acctid NOT IN ('. join(',', @recent). ') '
                     : '';
 
-  #order matters for removing dupes--only the first is preserved
-  $extra_sql .= ' ORDER BY acctid '
-    if $conf->exists('cdr-skip_duplicate_rewrite');
-
   my $found = 0;
-  my %skip = (); #used only by taqua
+  my %skip = ();
   my %warning = ();
 
   foreach my $cdr ( 
     qsearch( {
       'table'     => 'cdr',
-      'extra_sql' => 'FOR UPDATE', #XXX overwritten by opt below...would fixing this break anything?
+      'extra_sql' => 'FOR UPDATE',
       'hashref'   => {},
       'extra_sql' => 'WHERE freesidestatus IS NULL '.
                      ' AND freesiderewritestatus IS NULL '.
@@ -72,27 +67,11 @@ while (1) {
     } )
   ) {
 
-    next if $skip{$cdr->acctid}; #used only by taqua
+    next if $skip{$cdr->acctid};
 
     $found = 1;
     my @status = ();
 
-    if ($conf->exists('cdr-skip_duplicate_rewrite')) {
-      #qsearch can't handle timestamp type of calldate
-      my $sth = dbh->prepare(
-        'SELECT 1 FROM cdr WHERE src=? AND dst=? AND calldate=? AND acctid < ? LIMIT 1'
-      ) or die dbh->errstr;
-      $sth->execute($cdr->src,$cdr->dst,$cdr->calldate,$cdr->acctid) or die $sth->errstr;
-      my $isdup = $sth->fetchrow_hashref;
-      $sth->finish;
-      if ($isdup) {
-        #we only act on this cdr, not touching previous dupes
-        #if a dupe somehow creeped in previously, too late to fix it
-        $cdr->freesidestatus('done'); #prevent it from being billed
-        push(@status,'duplicate');
-      }
-    }
-
     if ( $conf->exists('cdr-asterisk_forward_rewrite')
          && $cdr->dstchannel =~ /^Local\/(\d+)/i && $1 ne $cdr->dst
        )
@@ -268,7 +247,6 @@ sub _shouldrun {
   || $conf->exists('cdr-taqua-callerid_rewrite')
   || $conf->exists('cdr-intl_to_domestic_rewrite')
   || $conf->exists('cdr-userfield_dnis_rewrite')
-  || $conf->exists('cdr-skip_duplicate_rewrite')
   || 0
   ;
 }
@@ -292,11 +270,6 @@ of the following config options are enabled:
 
 =over 4
 
-=item cdr-skip_duplicate_rewrite
-
-Marks as 'done' (prevents billing for) any CDRs with 
-a src, dst and calldate identical to an existing CDR
-
 =item cdr-asterisk_australia_rewrite
 
 Classifies Australian numbers as domestic, mobile, tollfree, international, or