From: Jonathan Prykop Date: Sat, 14 May 2016 03:02:57 +0000 (-0500) Subject: RT#39913: Conexiant API [distinguish all rows previously imported from truly empty... X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=a21d07037590cccd5ac5c572f5d28f062c622968 RT#39913: Conexiant API [distinguish all rows previously imported from truly empty files] --- diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index a117b7477..7f76d9988 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -2152,6 +2152,7 @@ sub batch_import { #my $job = $param->{job}; my $line; my $imported = 0; + my $unique_skip = 0; #lines skipped because they're already in the system my( $last, $min_sec ) = ( time, 5 ); #progressbar foo while (1) { @@ -2254,6 +2255,7 @@ sub batch_import { } last if exists( $param->{skiprow} ); } + $unique_skip++ if $param->{unique_skip}; #line is already in the system next if exists( $param->{skiprow} ); if ( $preinsert_callback ) { @@ -2299,7 +2301,8 @@ sub batch_import { unless ( $imported || $param->{empty_ok} ) { $dbh->rollback if $oldAutoCommit; - return "Empty file!"; + # freeside-cdr-conexiant-import is sensitive to the text of this message + return $unique_skip ? "All records in file were previously imported" : "Empty file!"; } $dbh->commit or die $dbh->errstr if $oldAutoCommit; diff --git a/FS/FS/cdr/conexiant.pm b/FS/FS/cdr/conexiant.pm index 852c2f60f..4ee3f149d 100644 --- a/FS/FS/cdr/conexiant.pm +++ b/FS/FS/cdr/conexiant.pm @@ -15,9 +15,10 @@ use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker ); skip(3), #LookupError,Direction,LegType sub { #CallId my($cdr,$value,$conf,$param) = @_; + #filter out already-imported cdrs here if (qsearchs('cdr',{'uniqueid' => $value})) { $param->{'skiprow'} = 1; - $param->{'empty_ok'} = 1; + $param->{'unique_skip'} = 1; #tell batch_import why we're skipping } else { $cdr->uniqueid($value); } diff --git a/FS/bin/freeside-cdr-conexiant-import b/FS/bin/freeside-cdr-conexiant-import index a79477c51..f2b469111 100755 --- a/FS/bin/freeside-cdr-conexiant-import +++ b/FS/bin/freeside-cdr-conexiant-import @@ -68,13 +68,11 @@ my $ua = LWP::UserAgent->new; # Download files are created automatically at regular frequent intervals, # but they contain overlapping data. # -# FS::cdr::conexiant automatically skips previously imported cdrs, -# though if it does so for all records in a file, -# then batch_import thinks the file is empty +# FS::cdr::conexiant automatically skips previously imported cdrs foreach my $file (@$files) { next unless $file->{'BilledCallsOnly'}; my $cdrbatch = 'conexiant-' . $file->{'Identifier'}; - # files that were "empty" will unfortunately be re-downloaded, + # files that contained no new records will unfortunately be re-downloaded, # but the alternative is to leave an excess of empty batches in system, # and re-downloading is harmless (all files expire after 48 hours anyway) if (qsearchs('cdr_batch',{ 'cdrbatch' => $cdrbatch })) { @@ -113,6 +111,9 @@ foreach my $file (@$files) { 'format' => 'conexiant' }); if ($error eq 'Empty file!') { + print "File contains no records\n" if $verbose; + $error = ''; + } elsif ($error eq "All records in file were previously imported") { print "File contains no new cdrs, no batch created\n" if $verbose; $error = ''; } elsif ($verbose && !$error) {