X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcdr%2Ftaqua.pm;h=7ef6d769ae6318c61c98fc8ac9e43adecd9c4b3c;hb=895152b70a5b827fd43b28724ae1c50943d7f83e;hp=bdbac13271c2b628e4692e888872946ad0b047cd;hpb=1a3a050131502579e0a8e9c05eee2355a2e7cc3b;p=freeside.git diff --git a/FS/FS/cdr/taqua.pm b/FS/FS/cdr/taqua.pm index bdbac1327..7ef6d769a 100644 --- a/FS/FS/cdr/taqua.pm +++ b/FS/FS/cdr/taqua.pm @@ -1,18 +1,26 @@ package FS::cdr::taqua; use strict; -use vars qw(@ISA %info); +use vars qw(@ISA %info $da_rewrite); use FS::cdr qw(_cdr_date_parser_maker); @ISA = qw(FS::cdr); %info = ( - 'name' => 'Taqua', + 'name' => 'Taqua v6.0', 'weight' => 130, 'header' => 1, 'import_fields' => [ #some of these are kind arbitrary... - sub { my($cdr, $field) = @_; }, #XXX interesting RecordType - # easy to fix: Can't find cdr.cdrtypenum 1 in cdr_type.cdrtypenum + + #0 + #RecordType + sub { + my($cdr, $field, $conf, $hashref) = @_; + $hashref->{skiprow} = 1 + unless ($field == 0 && $cdr->disposition == 100 ) #regular CDR + || ($field == 1 && $cdr->lastapp eq 'acctcode'); #accountcode + $cdr->cdrtypenum($field); + }, sub { my($cdr, $field) = @_; }, #all10#RecordVersion sub { my($cdr, $field) = @_; }, #OrigShelfNumber @@ -20,18 +28,29 @@ use FS::cdr qw(_cdr_date_parser_maker); sub { my($cdr, $field) = @_; }, #OrigCircuit sub { my($cdr, $field) = @_; }, #OrigCircuitType 'uniqueid', #SequenceNumber - 'accountcode', #SessionNumber + 'sessionnum', #SessionNumber 'src', #CallingPartyNumber - 'dst', #CalledPartyNumber - _cdr_date_parser_maker('startdate'), #CallArrivalTime - _cdr_date_parser_maker('enddate'), #CallCompletionTime + #'dst', #CalledPartyNumber + #CalledPartyNumber + sub { + my( $cdr, $field, $conf ) = @_; + if ( $cdr->calltypenum == 6 && $cdr->cdrtypenum == 0 ) { + $cdr->dst("+$field"); + } else { + $cdr->dst($field); + } + }, + + #10 + _cdr_date_parser_maker('startdate', 'gmt' => 1), #CallArrivalTime + _cdr_date_parser_maker('enddate', 'gmt' => 1), #CallCompletionTime #Disposition #sub { my($cdr, $d ) = @_; $cdr->disposition( $disposition{$d}): }, 'disposition', # -1 => '', # 0 => '', - # 100 => '', + # 100 => '', #regular cdr # 101 => '', # 102 => '', # 103 => '', @@ -40,7 +59,7 @@ use FS::cdr qw(_cdr_date_parser_maker); # 201 => '', # 203 => '', - _cdr_date_parser_maker('answerdate'), #DispositionTime + _cdr_date_parser_maker('answerdate', 'gmt' => 1), #DispositionTime sub { my($cdr, $field) = @_; }, #TCAP sub { my($cdr, $field) = @_; }, #OutboundCarrierConnectTime sub { my($cdr, $field) = @_; }, #OutboundCarrierDisconnectTime @@ -53,20 +72,52 @@ use FS::cdr qw(_cdr_date_parser_maker); sub { my($cdr, $field) = @_; }, #TermShelfNumber sub { my($cdr, $field) = @_; }, #TermCardNumber + + #20 sub { my($cdr, $field) = @_; }, #TermCircuit sub { my($cdr, $field) = @_; }, #TermCircuitType - sub { my($cdr, $field) = @_; }, #OutboundCarrierId - 'charged_party', #BillingNumber - sub { my($cdr, $field) = @_; }, #SubscriberNumber + 'carrierid', #OutboundCarrierId + + #BillingNumber + #'charged_party', + sub { + my( $cdr, $field, $conf ) = @_; + + #could be more efficient for the no config case, if anyone ever needs that + $da_rewrite ||= $conf->config('cdr-taqua-da_rewrite'); + + if ( $da_rewrite && $field =~ /\d/ ) { + my $rewrite = $da_rewrite; + $rewrite =~ s/\s//g; + my @rewrite = split(',', $conf->config('cdr-taqua-da_rewrite') ); + if ( grep { $field eq $_ } @rewrite ) { + $cdr->charged_party( $cdr->src() ); + $cdr->calltypenum(12); + return; + } + } + if ( $cdr->is_tollfree ) { # thankfully this is already available + $cdr->charged_party($cdr->dst); # and this + } else { + $cdr->charged_party($field); + } + }, + + 'subscriber', #SubscriberNumber 'lastapp', #ServiceName sub { my($cdr, $field) = @_; }, #some weirdness #ChargeTime 'lastdata', #ServiceInformation sub { my($cdr, $field) = @_; }, #FacilityInfo sub { my($cdr, $field) = @_; }, #all 1900-01-01 0#CallTraceTime + + #30 sub { my($cdr, $field) = @_; }, #all-1#UniqueIndicator sub { my($cdr, $field) = @_; }, #all-1#PresentationIndicator sub { my($cdr, $field) = @_; }, #empty#Pin - sub { my($cdr, $field) = @_; }, #CallType + 'calltypenum', #CallType + + #nothing below is used by QIS... + sub { my($cdr, $field) = @_; }, #Balt/empty #OrigRateCenter sub { my($cdr, $field) = @_; }, #Balt/empty #TermRateCenter @@ -78,6 +129,8 @@ use FS::cdr qw(_cdr_date_parser_maker); 'userfield', #empty#UserDefined sub { my($cdr, $field) = @_; }, #empty#PseudoDestinationNumber sub { my($cdr, $field) = @_; }, #all-1#PseudoCarrierCode + + #40 sub { my($cdr, $field) = @_; }, #empty#PseudoANI sub { my($cdr, $field) = @_; }, #all-1#PseudoFacilityInfo sub { my($cdr, $field) = @_; }, #OrigDialedDigits @@ -88,6 +141,8 @@ use FS::cdr qw(_cdr_date_parser_maker); sub { my($cdr, $field) = @_; }, #huh?#InsertTime sub { my($cdr, $field) = @_; }, #key sub { my($cdr, $field) = @_; }, #empty#AMALineNumber + + #50 sub { my($cdr, $field) = @_; }, #empty#AMAslpID sub { my($cdr, $field) = @_; }, #empty#AMADigitsDialedWC sub { my($cdr, $field) = @_; }, #OpxOffHook