add programmatic CDR posting, RT#8201
[freeside.git] / httemplate / misc / cdr-post.cgi
1 % if ( $error ) {
2 0,"<% $error %>",,
3 % } else {
4 1,"CDR import successful',<% $cdr_batch->cdrbatchnum %>,"<% $cdrbatch %>"
5 % }
6 <%init>
7
8 die "access denied"
9   unless $FS::CurrentUser::CurrentUser->access_right('Import');
10
11 my $error = '';
12 my $cdr_batch;
13
14 {
15
16   my $filename = $cgi->param('cdr_file');
17   unless ( $filename ) {
18     $error = "No cdr_file filename";
19     last;
20   }
21
22   my $fh = $cgi->upload('cdr_file');
23   unless ( defined($fh) ) {
24     $error = 'No cdr_file file';
25     last;
26   }
27
28   #i should probably be transactionalized.
29
30   my $csv = new Text::CSV_XS or die Text::CSV->error_diag;
31
32   my $cdrbatch = time2str('post-%Y/%m/%d-%T'. "-$$-". rand() * 2**32, time);
33   $cdr_batch = new FS::cdr_batch { 'cdrbatch' => $cdrbatch };
34   $error = $cdr_batch->insert and last;
35
36   chomp(my $hline = scalar(<$fh>));
37   $csv->parse($hline);
38   my @header = $csv->fields;
39
40   #while ( my $row = $csv->getline($fh) ) {
41   while (<$fh>) {
42
43     $csv->parse($_);
44     my @row = $csv->fields;
45
46     my $cdr = new FS::cdr { 'cdrbatchnum' => $cdr_batch->cdrbatchnum };
47     $cdr->set( lc($_) => shift(@row) ) foreach @header;
48
49     $error = $cdr->insert and last;
50
51   }
52
53 }
54
55 </%init>