1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
package FS::cdr::vocus;
use strict;
use vars qw( @ISA %info $CDR_TYPES );
use FS::cdr qw( _cdr_date_parse );
use FS::Record qw( qsearch );
@ISA = qw(FS::cdr);
%info = (
'name' => 'Vocus',
'weight' => 120,
'import_fields' => [
#The first column is reserved for future use.
skip(1),
#The second column is the call identifier generated on our system.
'uniqueid',
#The third column is the date of the call in UTC.
'startdate',
#The fourth column is the time of the call in UTC.
sub {
# combine cols 3 & 4 and parse
my($cdr, $time, $conf, $param) = @_;
$cdr->startdate(_cdr_date_parse($cdr->startdate.' '.$time, gmt => 1));
},
#The fifth column is for Vocus use.
skip(1),
#The sixth column is the call duration in seconds.
'billsec',
#The seventh column is the calling number presented to our soft switch in E164 format.
'src',
#The eight column is the called number presented to our soft switch in E164 format.
'dst',
#The ninth column is the time and date at which the call was rated and the
# CDR generated in our system. It's just there for your information.
skip(1),
#The tenth column is the SZU of the calling party.
'upstream_src_regionname',
#The eleventh column is the SZU of the called party, if applicable.
'upstream_dst_regionname',
#The twelfth column is the tariff type - Mobile, Regional, International,
#etc. This matches up with the tariff types under the Voice Access Point on your bill.
sub {
my($cdr, $cdrtypename, $conf, $param) = @_;
return unless length($cdrtypename);
_init_cdr_types();
die "no matching cdrtypenum for $cdrtypename"
unless defined $CDR_TYPES->{$cdrtypename};
$cdr->cdrtypenum($CDR_TYPES->{$cdrtypename});
},
#The thirteenth column is the cost of the call, ex GST.
'upstream_price',
],
);
sub skip { map {''} (1..$_[0]) }
sub _init_cdr_types {
unless ($CDR_TYPES) {
$CDR_TYPES = {};
foreach my $cdr_type ( qsearch('cdr_type') ) {
die "multiple cdr_types with same cdrtypename".$cdr_type->cdrtypename
if defined $CDR_TYPES->{$cdr_type->cdrtypename};
$CDR_TYPES->{$cdr_type->cdrtypename} = $cdr_type->cdrtypenum;
}
}
}
1;
|