Ticket #29048 3cx cdr format
authorJeremy Davis <jeremyd@freeside.biz>
Tue, 4 Nov 2014 14:42:53 +0000 (09:42 -0500)
committerJeremy Davis <jeremyd@freeside.biz>
Tue, 4 Nov 2014 14:42:53 +0000 (09:42 -0500)
FS/FS/cdr/cx3.pm [new file with mode: 0644]

diff --git a/FS/FS/cdr/cx3.pm b/FS/FS/cdr/cx3.pm
new file mode 100644 (file)
index 0000000..bc511d9
--- /dev/null
@@ -0,0 +1,53 @@
+package FS::cdr::cx3;
+
+use strict;
+use vars qw( @ISA %info);
+use FS::cdr;
+use Date::Parse;
+
+@ISA = qw(FS::cdr);
+
+%info = (
+  'name'          => '3CX',
+  'weight'        => 120,
+  'header'        => 1,
+  'import_fields' => [
+
+
+sub {                 
+       my ($cdr, $data, $conf, $param) = @_;
+               $param->{skiprow} = 1 if $data ne 'CallDetail 0'; # skip non-detail records
+       },              # record type
+       'uniqueid',     # unique id  
+       skip(1),        # unknown
+       'src',          # source
+       'dst',          # destination
+sub { my ($cdr, $calldate, $param) = @_;
+
+       if ($calldate =~ /^(\d{4})-(\d{2})-(\d{2})\s*(\d{2}):(\d{2}):(\d{2})$/){
+
+               $cdr->set('calldate', $calldate);
+                my $tmp_date = "$2/$3/$1 $4:$5:$6";
+
+                $tmp_date = str2time($tmp_date);
+                $cdr->set('startdate', $tmp_date);
+                }          
+       },              #date
+sub { my ($cdr, $duration) = @_;
+               
+       my ($hour,$min,$sec) = split(/:/,$duration);
+       $sec += $min * 60;
+       $sec += $hour * 60 * 60;
+       $sec = sprintf ("%.0f", $sec);
+       $cdr->set('billsec', $sec);
+
+},                     #duration
+       skip(1),        # unknown
+       'disposition',  # call status
+
+  ],
+);
+
+sub skip { map {''} (1..$_[0]) }
+
+1;