From 27096fe50f0427789579dbf28fe574ebcc39d69d Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 Mar 2008 22:31:11 +0000 Subject: [PATCH] fix double charging for CDRs when number is in both src and charged_party fields, and disable_src is not checked --- FS/FS/cust_svc.pm | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm index f16856779..b8b64df6b 100644 --- a/FS/FS/cust_svc.pm +++ b/FS/FS/cust_svc.pm @@ -642,44 +642,29 @@ CDRs are associated with svc_phone services via svc_phone.phonenum sub get_cdrs_for_update { my($self, %options) = @_; - my @cdrs = $self->get_cdrs_fromfield('charged_party', %options); - - push @cdrs, $self->get_cdrs_fromfield('src', %options) - unless $options{'disable_src'}; - - @cdrs; -} - -sub get_cdrs_fromfield { - my($self, $field, %options) = @_; - - my $default_prefix = $options{'default_prefix'}; + my @fields = ( 'charged_party' ); + push @fields, 'src' unless $options{'disable_src'}; #CDRs are now associated with svc_phone services via svc_phone.phonenum #return () unless $self->svc_x->isa('FS::svc_phone'); return () unless $self->part_svc->svcdb eq 'svc_phone'; my $number = $self->svc_x->phonenum; - my @cdrs = + my $prefix = $options{'default_prefix'}; + + my @where = map " $_ = '$number' ", @fields; + push @where, map " $_ = '$prefix$number' ", @fields + if length($prefix); + + my $extra_sql = ' AND ( '. join(' OR ', @where ). ' ) '; + + my @cdrs = qsearch( { 'table' => 'cdr', - 'hashref' => { 'freesidestatus' => '', - $field => $number - }, - 'extra_sql' => 'FOR UPDATE', + 'hashref' => { 'freesidestatus' => '', }, + 'extra_sql' => "$extra_sql FOR UPDATE", } ); - if ( length($default_prefix) ) { - push @cdrs, - qsearch( { - 'table' => 'cdr', - 'hashref' => { 'freesidestatus' => '', - $field => "$default_prefix$number", - }, - 'extra_sql' => 'FOR UPDATE', - } ); - } - @cdrs; } -- 2.11.0