X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-cdr-portaone-import;h=e2023c8aac8fdea580689e7f636ab6b5efe6fb80;hb=1259a17db297fa2352619b29f2c5bd34e313cd64;hp=d9a606a827ca28b2960293fd2abd4aefa1a63ba4;hpb=907994b69d446eb479a01fe8985bf589f0056277;p=freeside.git diff --git a/FS/bin/freeside-cdr-portaone-import b/FS/bin/freeside-cdr-portaone-import index d9a606a82..e2023c8aa 100644 --- a/FS/bin/freeside-cdr-portaone-import +++ b/FS/bin/freeside-cdr-portaone-import @@ -5,11 +5,14 @@ use strict; use Date::Format 'time2str'; use Date::Parse 'str2time'; use Getopt::Long; -use JSON; +use Cpanel::JSON::XS; use Net::HTTPS::Any qw(https_post); +use Time::Local; use FS::Record qw(qsearchs dbh); use FS::UID qw(adminsuidsetup); +use FS::cdr; +use FS::cdr_batch; sub usage { "Usage: @@ -50,11 +53,12 @@ unless ($startdate) { 'hashref' => { 'cdrbatch' => {op=>'like', value=>'portaone-import%'}}, 'order_by' => 'ORDER BY _date DESC LIMIT 1', }); - $startdate = time2str("%Y-%m-%d %H:%M:%S", $lastbatch->_date + 1) if $lastbatch; + $startdate = time2str("%Y-%m-%d %H:%M:%S", $lastbatch->_date) if $lastbatch; } $startdate ||= '2010-01-01 00:00:00'; #seems decently in the past -my $now = time; +my @now = localtime(); +my $now = timelocal(0,0,0,$now[3],$now[4],$now[5]); #most recent midnight if ($enddate) { $enddate = str2time($enddate) or die "Can't parse enddate $enddate"; $now = $enddate; @@ -65,8 +69,11 @@ $enddate ||= time2str("%Y-%m-%d %H:%M:%S",$now); $FS::UID::AutoCommit = 0; +my $cdrbatchname = 'portaone-import-'. time2str('%Y/%m/%d-%T',$now); +die "Batch $cdrbatchname already exists, please specify a different end date. " . usage() + if FS::cdr_batch->row_exists('cdrbatch = ?', $cdrbatchname); my $cdr_batch = new FS::cdr_batch({ - 'cdrbatch' => 'portaone-import-'. time2str('%Y/%m/%d-%T',$now), + 'cdrbatch' => $cdrbatchname, '_date' => $now, }); my $error = $cdr_batch->insert; @@ -102,8 +109,13 @@ foreach my $custnum (@custnum) { 'offset' => $offset, }); my @xdrs = @{$xdrs->{'xdr_list'}}; - print "Inserting ".@xdrs." records\n" if $verbose && @xdrs; + print "Retrieved ".@xdrs." records\n" if $verbose && @xdrs; + my $skipped = 0; # for verbose display only foreach my $xdr (@xdrs) { + if ( FS::cdr->row_exists('uniqueid = ?', $xdr->{'i_xdr'}) ) { + $skipped += 1; + next; + } my $desc = $xdr->{'country'}; if ($xdr->{'subdivision'}) { $desc = ', ' . $desc if $desc; @@ -131,11 +143,12 @@ foreach my $custnum (@custnum) { die "Error inserting cdr: $error"; } } #foreach $xdr - $totalcount += @xdrs; + print "Skipped $skipped duplicate records\n" if $verbose && $skipped; + $totalcount += @xdrs - $skipped; $lastcount = @xdrs; $offset += $step; } #while $lastcount == $step - print scalar($totalcount) . " xdrs retrieved\n" if $verbose; + print scalar($totalcount) . " records inserted\n" if $verbose; } #foreach $custnum call_api('Session','logout',$auth_info);