import torrus 1.0.9
[freeside.git] / FS / FS / cdr / taqua.pm
index 587d97d..26c0bda 100644 (file)
@@ -1,6 +1,7 @@
 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);
@@ -10,8 +11,14 @@ use FS::cdr qw(_cdr_date_parser_maker);
   '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);
+      $cdr->cdrtypenum($field);
+    },
 
     sub { my($cdr, $field) = @_; },             #all10#RecordVersion
     sub { my($cdr, $field) = @_; },       #OrigShelfNumber
@@ -21,9 +28,20 @@ use FS::cdr qw(_cdr_date_parser_maker);
     'uniqueid',                           #SequenceNumber
     'accountcode',                        #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}): },
@@ -39,7 +57,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
@@ -52,20 +70,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
+    '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);
+      }
+    },
+
     sub { my($cdr, $field) = @_; },       #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
 
@@ -77,6 +127,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
@@ -87,6 +139,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