X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-cdrrewrited;h=bcc76153b9161fa2090dc77eb23b7ce666834178;hb=8e1e9bfc08df3ffe96515019d26ced7f89f34ff1;hp=d117f569e92c0a966cad571946c2c40d290b7eff;hpb=3eac3c31f8d8a90fb896f9e95ee9276a4ae0280e;p=freeside.git diff --git a/FS/bin/freeside-cdrrewrited b/FS/bin/freeside-cdrrewrited index d117f569e..bcc76153b 100755 --- a/FS/bin/freeside-cdrrewrited +++ b/FS/bin/freeside-cdrrewrited @@ -54,7 +54,8 @@ while (1) { #order matters for removing dupes--only the first is preserved $extra_sql .= ' ORDER BY acctid ' - if $conf->exists('cdr-skip_duplicate_rewrite'); + if $conf->exists('cdr-skip_duplicate_rewrite') + || $conf->exists('cdr-skip_duplicate_rewrite-sipcallid'); my $found = 0; my %skip = (); #used only by taqua @@ -92,6 +93,22 @@ while (1) { } } + if ($conf->exists('cdr-skip_duplicate_rewrite-sipcallid')) { + my $sth = dbh->prepare( + 'SELECT 1 FROM cdr WHERE sipcallid=? AND acctid < ? LIMIT 1' + ) or die dbh->errstr; + $sth->execute($cdr->sipcallid, $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('skipped'); #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,6 +285,7 @@ sub _shouldrun { || $conf->exists('cdr-intl_to_domestic_rewrite') || $conf->exists('cdr-userfield_dnis_rewrite') || $conf->exists('cdr-skip_duplicate_rewrite') + || $conf->exists('cdr-skip_duplicate_rewrite-sipcallid') || 0 ; } @@ -296,6 +314,11 @@ of the following config options are enabled: Marks as 'skipped' (prevents billing for) any CDRs with a src, dst and calldate identical to an existing CDR +=item cdr-skip_duplicate_rewrite-sipcallid + +Marks as 'skipped' (prevents billing for) any CDRs with +a sipcallid identical to an existing CDR + =item cdr-asterisk_australia_rewrite Classifies Australian numbers as domestic, mobile, tollfree, international, or