package FS::cdr::taqua62; use strict; use vars qw(@ISA %info $da_rewrite); use FS::cdr qw(_cdr_date_parser_maker); @ISA = qw(FS::cdr); %info = ( 'name' => 'Taqua v6.2', 'weight' => 131, 'header' => 1, 'import_fields' => [ #0 '', #Key '', #InsertTime, irrelevant #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 || ($field == 1 && $cdr->lastapp eq 'CallerId') #CID blocking ; $cdr->cdrtypenum($field); }, '', #RecordVersion '', #OrigShelfNumber '', #OrigCardNumber '', #OrigCircuit '', #OrigCircuitType 'uniqueid', #SequenceNumber 'sessionnum', #SessionNumber #10 'src', #CallingPartyNumber #CalledPartyNumber sub { my( $cdr, $field, $conf ) = @_; if ( $cdr->calltypenum == 6 && $cdr->cdrtypenum == 0 ) { $cdr->dst("+$field"); } else { $cdr->dst($field); } }, _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 => '', #regular cdr # 101 => '', # 102 => '', # 103 => '', # 104 => '', # 105 => '', # 201 => '', # 203 => '', # 204 => '', _cdr_date_parser_maker('answerdate', 'gmt' => 1), #DispositionTime '', #TCAP '', #OutboundCarrierConnectTime '', #OutboundCarrierDisconnectTime #TermTrunkGroup #it appears channels are actually part of trunk groups, but this data #is interesting and we need a source and destination place to put it 'dstchannel', #TermTrunkGroup #20 '', #TermShelfNumber '', #TermCardNumber '', #TermCircuit '', #TermCircuitType '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', #SubscriberName 'lastapp', #ServiceName '', #some weirdness #ChargeTime 'lastdata', #ServiceInformation #30 '', #FacilityInfo '', #all 1900-01-01 0#CallTraceTime '', #all-1#UniqueIndicator '', #all-1#PresentationIndicator '', #empty#Pin 'calltypenum', #CallType #nothing below is used by QIS... '', #Balt/empty #OrigRateCenter '', #Balt/empty #TermRateCenter #OrigTrunkGroup #it appears channels are actually part of trunk groups, but this data #is interesting and we need a source and destination place to put it 'channel', #OrigTrunkGroup 'userfield', #empty#UserDefined #40 '', #empty#PseudoDestinationNumber '', #all-1#PseudoCarrierCode '', #empty#PseudoANI '', #all-1#PseudoFacilityInfo '', #OrigDialedDigits '', #all-1#OrigOutboundCarrier '', #IncomingCarrierID 'dcontext', #JurisdictionInfo '', #OrigDestDigits '', #empty#AMALineNumber #50 '', #empty#AMAslpID '', #empty#AMADigitsDialedWC '', #OpxOffHook '', #OpxOnHook '', #OrigCalledNumber '', #RedirectingNumber '', #RouteAttempts '', #OrigMGCPTerm '', #TermMGCPTerm '', #ReasonCode #60 '', #OrigIPCallID '', #ESAIPTrunkGroup '', #ESAReason '', #BearerlessCall '', #oCodec '', #tCodec '', #OrigTrunkGroupNumber '', #TermTrunkGroupNumber '', #TermRecord '', #OrigRoutingIndicator #70 '', #TermRoutingIndicator ], ); 1;