summaryrefslogtreecommitdiff
path: root/httemplate/misc/cdr-post.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/misc/cdr-post.cgi')
-rw-r--r--httemplate/misc/cdr-post.cgi58
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>