[freeside-commits] freeside/FS/FS Record.pm, 1.214, 1.215 cdr.pm, 1.66, 1.67
Mark Wells
mark at wavetail.420.am
Wed Nov 24 17:06:31 PST 2010
Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv21227/FS/FS
Modified Files:
Record.pm cdr.pm
Log Message:
Telos XML CDR format, RT#10721
Index: cdr.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cdr.pm,v
retrieving revision 1.66
retrieving revision 1.67
diff -u -w -d -r1.66 -r1.67
--- cdr.pm 20 Oct 2010 22:45:18 -0000 1.66
+++ cdr.pm 25 Nov 2010 01:06:29 -0000 1.67
@@ -788,6 +788,10 @@
} 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 );
+ } elsif ( $date =~ /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/) {
+ # Telos
+ ($year, $mon, $day, $hour, $min, $sec) = ( $1, $2, $3, $4, $5, $6 );
+ $options{gmt} = 1;
} else {
die "unparsable date: $date"; #maybe we shouldn't die...
}
@@ -855,6 +859,11 @@
keys %cdr_info
},
+ 'format_xml_formats' =>
+ { map { $_ => $cdr_info{$_}->{'xml_format'}; }
+ keys %cdr_info
+ },
+
'format_row_callbacks' => { map { $_ => $cdr_info{$_}->{'row_callback'}; }
keys %cdr_info
},
Index: Record.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Record.pm,v
retrieving revision 1.214
retrieving revision 1.215
diff -u -w -d -r1.214 -r1.215
--- Record.pm 5 Nov 2010 18:32:56 -0000 1.214
+++ Record.pm 25 Nov 2010 01:06:29 -0000 1.215
@@ -1581,6 +1581,7 @@
format_headers => $opt->{format_headers},
format_sep_chars => $opt->{format_sep_chars},
format_fixedlength_formats => $opt->{format_fixedlength_formats},
+ format_xml_formats => $opt->{format_xml_formats},
format_row_callbacks => $opt->{format_row_callbacks},
#per-import
job => $job,
@@ -1640,7 +1641,7 @@
=item type
-csv, xls or fixedlength
+csv, xls, fixedlength, xml
=item empty_ok
@@ -1660,7 +1661,8 @@
my $file = $param->{file};
my $params = $param->{params} || {};
- my( $type, $header, $sep_char, $fixedlength_format, $row_callback, @fields );
+ my( $type, $header, $sep_char, $fixedlength_format,
+ $xml_format, $row_callback, @fields );
my $postinsert_callback = '';
if ( $param->{'format'} ) {
@@ -1686,6 +1688,11 @@
? $param->{'format_fixedlength_formats'}{ $param->{'format'} }
: '';
+ $xml_format =
+ $param->{'format_xml_formats'}
+ ? $param->{'format_xml_formats'}{ $param->{'format'} }
+ : '';
+
$row_callback =
$param->{'format_row_callbacks'}
? $param->{'format_row_callbacks'}{ $param->{'format'} }
@@ -1742,7 +1749,8 @@
die $@ if $@;
$parser = new Parse::FixedLength $fixedlength_format;
- } else {
+ }
+ else {
die "Unknown file type $type\n";
}
@@ -1768,7 +1776,22 @@
$count++;
$row = $header || 0;
-
+ } elsif ( $type eq 'xml' ) {
+ # FS::pay_batch
+ eval "use XML::Simple;";
+ die $@ if $@;
+ my $xmlrow = $xml_format->{'xmlrow'};
+ $parser = $xml_format->{'xmlkeys'};
+ die 'no xmlkeys specified' unless ref $parser eq 'ARRAY';
+ my $data = XML::Simple::XMLin(
+ $file,
+ 'SuppressEmpty' => '', #sets empty values to ''
+ 'KeepRoot' => 1,
+ );
+ my $rows = $data;
+ $rows = $rows->{$_} foreach @$xmlrow;
+ $rows = [ $rows ] if ref($rows) ne 'ARRAY';
+ $count = @buffer = @$rows;
} else {
die "Unknown file type $type\n";
}
@@ -1842,6 +1865,11 @@
#my $z = 'A';
#warn $z++. ": $_\n" for @columns;
+ } elsif ( $type eq 'xml' ) {
+ # $parser = [ 'Column0Key', 'Column1Key' ... ]
+ last unless scalar(@buffer);
+ my $row = shift @buffer;
+ @columns = @{ $row }{ @$parser };
} else {
die "Unknown file type $type\n";
}
More information about the freeside-commits
mailing list