package FS::cdr::taqua;
-use vars qw(@ISA %info);
+use strict;
+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
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 => '',
# 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
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
'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
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