Taqua OM CDR format, RT#7518
authorivan <ivan>
Tue, 29 Jun 2010 19:51:20 +0000 (19:51 +0000)
committerivan <ivan>
Tue, 29 Jun 2010 19:51:20 +0000 (19:51 +0000)
FS/FS/Record.pm
FS/FS/cdr.pm
FS/FS/cdr/taqua_om.pm [new file with mode: 0644]

index 0845cc6..f3dead1 100644 (file)
@@ -1569,6 +1569,7 @@ sub process_batch_import {
     format_headers             => $opt->{format_headers},
     format_sep_chars           => $opt->{format_sep_chars},
     format_fixedlength_formats => $opt->{format_fixedlength_formats},
+    format_row_callbacks       => $opt->{format_row_callbacks},
     #per-import
     job                        => $job,
     file                       => $file,
@@ -1609,6 +1610,8 @@ Class method for batch imports.  Available params:
 
 =item format_fixedlength_formats
 
+=item format_row_callbacks
+
 =item params
 
 =item job
@@ -1633,7 +1636,7 @@ sub batch_import {
   my $param = shift;
 
   warn "$me batch_import call with params: \n". Dumper($param)
-    if $DEBUG;
+  ;#  if $DEBUG;
 
   my $table   = $param->{table};
   my $formats = $param->{formats};
@@ -1674,6 +1677,11 @@ sub batch_import {
       ? $param->{'format_fixedlength_formats'}{ $param->{'format'} }
       : '';
 
+  my $row_callback =
+    $param->{'format_row_callbacks'}
+      ? $param->{'format_row_callbacks'}{ $param->{'format'} }
+      : '';
+
   my @fields = @{ $formats->{ $format } };
 
   my $row = 0;
@@ -1769,6 +1777,8 @@ sub batch_import {
 
       next if $line =~ /^\s*$/; #skip empty lines
 
+      $line = &{$row_callback}($line) if $row_callback;
+
       $parser->parse($line) or do {
         $dbh->rollback if $oldAutoCommit;
         return "can't parse: ". $parser->error_input();
index 34243fa..bd0ed57 100644 (file)
@@ -773,6 +773,9 @@ sub _cdr_date_parse {
   } elsif ( $date  =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d+\.\d+)(\D|$)/ ) {
     # broadsoft: 20081223201938.314
     ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 );
+  } elsif ( $date  =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\d+(\D|$)/ ) {
+    # Taqua OM:  20050422203450943
+    ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 );
   } elsif ( $date  =~ /^\s*(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/ ) {
     # WIP: 20100329121420
     ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 );
@@ -842,6 +845,10 @@ my %import_options = (
     { map { $_ => $cdr_info{$_}->{'fixedlength_format'}; }
           keys %cdr_info
     },
+
+  'format_row_callbacks' => { map { $_ => $cdr_info{$_}->{'row_callback'}; }
+                                  keys %cdr_info
+                            },
 );
 
 sub _import_options {
diff --git a/FS/FS/cdr/taqua_om.pm b/FS/FS/cdr/taqua_om.pm
new file mode 100644 (file)
index 0000000..c94ea59
--- /dev/null
@@ -0,0 +1,19 @@
+package FS::cdr::taqua_om;
+
+use strict;
+use vars qw( %info );
+use base qw( FS::cdr::taqua );
+
+%info = (
+  %FS::cdr::taqua::info,
+  'name'         => 'Taqua OM',
+  'weight'       => 132,
+  'header'       => 0,
+  'sep_char'     => ';',
+  'row_callback' => sub { my $row = shift;
+                          $row =~ s/^<\d+>\|[\da-f\|]+\|(\d+;)/$1/;
+                          $row;
+                        },
+);
+
+1;