diff options
| author | ivan <ivan> | 2008-03-28 22:31:12 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2008-03-28 22:31:12 +0000 | 
| commit | 78abb122e7a6d480207e4cd5e282ded65e05df7b (patch) | |
| tree | d94149640ee798a86dc9676c8afca3cbdb001302 | |
| parent | 3bffa5b44b42a3c9fe90cec5a640176ba9074a5a (diff) | |
fix double charging for CDRs when number is in both src and charged_party fields, and disable_src is not checked
| -rw-r--r-- | FS/FS/cust_svc.pm | 41 | 
1 files 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;  } | 
