diff options
Diffstat (limited to 'httemplate/misc/cdr-post.cgi')
-rw-r--r-- | httemplate/misc/cdr-post.cgi | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/httemplate/misc/cdr-post.cgi b/httemplate/misc/cdr-post.cgi new file mode 100644 index 0000000..541dac3 --- /dev/null +++ b/httemplate/misc/cdr-post.cgi @@ -0,0 +1,58 @@ +% if ( $error ) { +0,"<% $error %>",, +% } else { +1,"CDR import successful",<% $cdr_batch->cdrbatchnum %>,"<% $cdrbatch %>" +% } +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Import'); + +my $error = ''; +my $cdr_batch; +my $cdrbatch = ''; + +{ + + my $filename = $cgi->param('cdr_file'); + unless ( $filename ) { + $error = "No cdr_file filename"; + last; + } + + my $fh = $cgi->upload('cdr_file'); + unless ( defined($fh) ) { + $error = 'No cdr_file file'; + last; + } + + #i should probably be transactionalized. + + my $csv = new Text::CSV_XS or die Text::CSV->error_diag; + + $cdrbatch = time2str('post-%Y/%m/%d-%T'. "-$$-". rand() * 2**32, time); + $cdr_batch = new FS::cdr_batch { 'cdrbatch' => $cdrbatch }; + $error = $cdr_batch->insert and last; + + chomp(my $hline = scalar(<$fh>)); + $csv->parse($hline); + my @header = $csv->fields; + + #while ( my $row = $csv->getline($fh) ) { + while (<$fh>) { + + $csv->parse($_); + my @row = $csv->fields; + + my $cdr = new FS::cdr { 'cdrbatchnum' => $cdr_batch->cdrbatchnum }; + $cdr->set( lc($_) => shift(@row) ) foreach @header; + + $error = $cdr->insert and last; + + } + +} + +$error =~ s/"/""/g; #CSV + +</%init> |