Sonus CDR format, #13053
authormark <mark>
Mon, 6 Jun 2011 23:44:26 +0000 (23:44 +0000)
committermark <mark>
Mon, 6 Jun 2011 23:44:26 +0000 (23:44 +0000)
FS/FS/Schema.pm
FS/FS/cdr/sonus.pm [new file with mode: 0644]

index 819fae9..9d03ce3 100644 (file)
@@ -2817,7 +2817,7 @@ sub tables_hashref {
         'charged_party',       'varchar', 'NULL', $char_d, '', '',
 
         'upstream_currency',      'char', 'NULL',       3, '', '',
-        'upstream_price',      'decimal', 'NULL',  '10,2', '', '', 
+        'upstream_price',      'decimal', 'NULL',  '10,4', '', '', 
         'upstream_rateplanid',     'int', 'NULL',      '', '', '', #?
 
         # how it was rated internally...
diff --git a/FS/FS/cdr/sonus.pm b/FS/FS/cdr/sonus.pm
new file mode 100644 (file)
index 0000000..f219239
--- /dev/null
@@ -0,0 +1,31 @@
+package FS::cdr::sonus;
+
+use strict;
+use base qw( FS::cdr );
+use vars qw( %info );
+use FS::cdr qw( _cdr_date_parser_maker _cdr_min_parser_maker );
+
+%info = (
+  'name'          => 'Sonus',
+  'weight'        => 525,
+  'header'        => 0,     #0 default, set to 1 to ignore the first line, or
+                            # to higher numbers to ignore that number of lines
+  'type'          => 'csv', #csv (default), fixedlength or xls
+  'sep_char'      => ',',   #for csv, defaults to ,
+  'import_fields' => [
+    'src', # also customer id
+    'dst',
+    _cdr_date_parser_maker('startdate'),
+    _cdr_date_parser_maker('enddate'),
+    _cdr_min_parser_maker,
+    skip(12),
+    sub { #rate
+      my ($cdr, $rate) = @_;
+      $cdr->upstream_price(sprintf("%.4f", $rate * $cdr->duration / 60));
+    }
+  ],
+);
+
+sub skip { map {''} (1..$_[0]) }
+
+1;