diff options
| author | ivan <ivan> | 2011-05-01 19:27:52 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2011-05-01 19:27:52 +0000 | 
| commit | 811c95da18776232da103fd445e2def019f98d5b (patch) | |
| tree | 8aa6dae300f9717d7a9b0bbdd4cd07a77f8a900e /bin | |
| parent | ab1ec8c254827cee30244d79a3c4544bf6946abc (diff) | |
cdr reimporting, RT#12181
Diffstat (limited to 'bin')
| -rw-r--r-- | bin/cdr.reimport | 64 | 
1 files changed, 64 insertions, 0 deletions
diff --git a/bin/cdr.reimport b/bin/cdr.reimport new file mode 100644 index 000000000..42492b0ee --- /dev/null +++ b/bin/cdr.reimport @@ -0,0 +1,64 @@ +#!/usr/bin/perl +# +# Usage: +#  cdr.reimport user format filename +# + +use strict; +use FS::UID qw(adminsuidsetup); +use FS::Record qw(qsearch); +use FS::cdr; + +my $user = shift or die &usage; +adminsuidsetup $user; + +my $format = shift or die &usage; + +my $file = shift; + +my($new, $rep, $skip) = (0, 0, 0); + +#this is what makes it a reimport and should probably be moved to cdr.pm +my $cb = sub { +  my($cdr, $param) = @_; + +  my @exists = qsearch({ +    'table'   => 'cdr', +    'hashref' => { 'uniqueid'  => $cdr->uniqueid, +                   'src'       => $cdr->src, +                   'startdate' => $cdr->startdate, +                 }, +  }); + +  unless ( scalar(@exists) ) { +    $new++; +    return; +  } +  die "too many matches found!" if scalar(@exists) > 1; + +  my $exists = $exists[0]; +  if ( $exists->freesidestatus ) { +    $skip++; +    $param->{skiprow} = 1; +  } else { +    $rep++; +    my $error = $exists->delete; +    die $error if $error; +  } + +}; + +my $error = FS::cdr::batch_import( { +  'file'               => $file, +  'format'             => $format, +  'batch_namevalue'    => $file, +  'preinsert_callback' => $cb, +} ); +die $error if $error; + +warn "$skip skipped, $rep replaced, $new new\n"; + +sub usage { +  "Usage: \n  cdr.reimport user format filename\n"; +} +  | 
