X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcdr%2Ftelapi_voip.pm;fp=FS%2FFS%2Fcdr%2Ftelapi_voip.pm;h=abc7d5bd2c1b833ac4af624e67c4b2922a7898b7;hp=0000000000000000000000000000000000000000;hb=269c5484bb13430773443a2ae376368be0b56c2c;hpb=606acab48f55da2b8846e5539839d591b63ae18c diff --git a/FS/FS/cdr/telapi_voip.pm b/FS/FS/cdr/telapi_voip.pm new file mode 100644 index 000000000..abc7d5bd2 --- /dev/null +++ b/FS/FS/cdr/telapi_voip.pm @@ -0,0 +1,52 @@ +package FS::cdr::telapi_voip; +use base qw( FS::cdr ); + +use strict; +use vars qw( @ISA %info $CDR_TYPES ); +use FS::Record qw( qsearch ); +use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker ); + +%info = ( + 'name' => 'telapi_voip', + 'weight' => 601, + 'header' => 1, + 'type' => 'csv', + 'import_fields' => [ + _cdr_date_parser_maker('startdate'), #'date gmt' + 'src', # source + 'dst', # destination + 'clid', # callerid + skip(1), # hangup code + skip(1), # sip account + 'src_ip_addr', # orig ip + 'duration', # duration + skip(1), # per minute + 'upstream_price', # callcost + sub { + my($cdr, $cdrtypename, $conf, $param) = @_; + return unless length($cdrtypename); + _init_cdr_types(); + unless (defined $CDR_TYPES->{$cdrtypename}) { + warn "Skipping Record: CDR type name $cdrtypename does not exist!"; + $param->{skiprow} = 1; + } + $cdr->cdrtypenum($CDR_TYPES->{$cdrtypename}); + }, # type + _cdr_min_parser_maker('billsec'), #PriceDurationMins + ], +); + +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; \ No newline at end of file