From 811c95da18776232da103fd445e2def019f98d5b Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 1 May 2011 19:27:52 +0000 Subject: cdr reimporting, RT#12181 --- bin/cdr.reimport | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 bin/cdr.reimport (limited to 'bin/cdr.reimport') diff --git a/bin/cdr.reimport b/bin/cdr.reimport new file mode 100644 index 0000000..42492b0 --- /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"; +} + -- cgit v1.1