[freeside-commits] freeside/FS/FS Record.pm, 1.214, 1.214.2.1 cdr.pm, 1.66, 1.66.2.1

Mark Wells mark at wavetail.420.am
Wed Nov 24 17:06:40 PST 2010


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv21284/FS/FS

Modified Files:
      Tag: FREESIDE_2_1_BRANCH
	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.66.2.1
diff -u -w -d -r1.66 -r1.66.2.1
--- cdr.pm	20 Oct 2010 22:45:18 -0000	1.66
+++ cdr.pm	25 Nov 2010 01:06:38 -0000	1.66.2.1
@@ -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.214.2.1
diff -u -w -d -r1.214 -r1.214.2.1
--- Record.pm	5 Nov 2010 18:32:56 -0000	1.214
+++ Record.pm	25 Nov 2010 01:06:38 -0000	1.214.2.1
@@ -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