From a4dc6eea04eb566cfa21d424fe1bd62661134fdf Mon Sep 17 00:00:00 2001 From: ivan Date: Tue, 29 Jun 2010 19:51:20 +0000 Subject: [PATCH] Taqua OM CDR format, RT#7518 --- FS/FS/Record.pm | 12 +++++++++++- FS/FS/cdr.pm | 7 +++++++ FS/FS/cdr/taqua_om.pm | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 FS/FS/cdr/taqua_om.pm 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; -- 2.11.0