summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FS/FS/Record.pm12
-rw-r--r--FS/FS/cdr.pm7
-rw-r--r--FS/FS/cdr/taqua_om.pm19
3 files changed, 37 insertions, 1 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index 0845cc6f3..f3dead164 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -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();
diff --git a/FS/FS/cdr.pm b/FS/FS/cdr.pm
index 34243fae9..bd0ed57e9 100644
--- a/FS/FS/cdr.pm
+++ b/FS/FS/cdr.pm
@@ -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
index 000000000..c94ea5923
--- /dev/null
+++ b/FS/FS/cdr/taqua_om.pm
@@ -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;