Ticket #29048 3cx cdr format
[freeside.git] / FS / FS / cdr / cx3.pm
1 package FS::cdr::cx3;
2
3 use strict;
4 use vars qw( @ISA %info);
5 use FS::cdr;
6 use Date::Parse;
7
8 @ISA = qw(FS::cdr);
9
10 %info = (
11   'name'          => '3CX',
12   'weight'        => 120,
13   'header'        => 1,
14   'import_fields' => [
15
16
17 sub {                 
18         my ($cdr, $data, $conf, $param) = @_;
19                 $param->{skiprow} = 1 if $data ne 'CallDetail 0'; # skip non-detail records
20         },              # record type
21         'uniqueid',     # unique id  
22         skip(1),        # unknown
23         'src',          # source
24         'dst',          # destination
25 sub { my ($cdr, $calldate, $param) = @_;
26
27         if ($calldate =~ /^(\d{4})-(\d{2})-(\d{2})\s*(\d{2}):(\d{2}):(\d{2})$/){
28
29                 $cdr->set('calldate', $calldate);
30                 my $tmp_date = "$2/$3/$1 $4:$5:$6";
31
32                 $tmp_date = str2time($tmp_date);
33                 $cdr->set('startdate', $tmp_date);
34                 }          
35         },              #date
36 sub { my ($cdr, $duration) = @_;
37                
38         my ($hour,$min,$sec) = split(/:/,$duration);
39         $sec += $min * 60;
40         $sec += $hour * 60 * 60;
41         $sec = sprintf ("%.0f", $sec);
42         $cdr->set('billsec', $sec);
43
44 },                      #duration
45         skip(1),        # unknown
46         'disposition',  # call status
47
48   ],
49 );
50
51 sub skip { map {''} (1..$_[0]) }
52
53 1;