per-agent disable_previous_balance, #15863
[freeside.git] / FS / FS / cdr.pm
index 190ffe2..d7a4fbd 100644 (file)
@@ -575,11 +575,11 @@ my %export_names = (
   },
   'sum_duration' => {
     'name'           => 'Summary (one line per service, with duration)',
-    'invoice_header' => 'Caller,Calls,Minutes,Price',
+    'invoice_header' => 'Caller,Rate,Calls,Minutes,Price',
   },
   'sum_count' => {
     'name'           => 'Summary (one line per service, with count)',
-    'invoice_header' => 'Caller,Messages,Price',
+    'invoice_header' => 'Caller,Rate,Messages,Price',
   },
 );
 
@@ -610,6 +610,22 @@ sub export_formats {
     }
   };
 
+  my $price_sub = sub {
+    my ($cdr, %opt) = @_;
+    my $price;
+    if ( defined($opt{charge}) ) {
+      $price = $opt{charge};
+    }
+    elsif ( $opt{inbound} ) {
+      my $term = $cdr->cdr_termination(1); # 1 = inbound
+      $price = $term->rated_price if defined $term;
+    }
+    else {
+      $price = $cdr->rated_price;
+    }
+    length($price) ? ($opt{money_char} . $price) : '';
+  };
+
   %export_formats = (
     'simple' => [
       sub { time2str($date_format, shift->calldate_unix ) },   #DATE
@@ -618,7 +634,7 @@ sub export_formats {
       'dst',                                           #NUMBER_DIALED
       $duration_sub,                                   #DURATION
       #sub { sprintf('%.3f', shift->upstream_price ) }, #PRICE
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, #PRICE
+      $price_sub,
     ],
     'simple2' => [
       sub { time2str($date_format, shift->calldate_unix ) },   #DATE
@@ -628,26 +644,28 @@ sub export_formats {
       'dst',                                           #NUMBER_DIALED
       $duration_sub,                                   #DURATION
       #sub { sprintf('%.3f', shift->upstream_price ) }, #PRICE
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, #PRICE
+      $price_sub,
     ],
     'sum_duration' => [ 
       # for summary formats, the CDR is a fictitious object containing the 
       # total billsec and the phone number of the service
       'src',
+      sub { my($cdr, %opt) = @_; $opt{ratename} },
       sub { my($cdr, %opt) = @_; $opt{count} },
       sub { my($cdr, %opt) = @_; int($opt{seconds}/60).'m' },
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; },
+      $price_sub,
     ],
     'sum_count' => [
       'src',
+      sub { my($cdr, %opt) = @_; $opt{ratename} },
       sub { my($cdr, %opt) = @_; $opt{count} },
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; },
+      $price_sub,
     ],
     'basic' => [
       sub { time2str('%d %b - %I:%M %p', shift->calldate_unix) },
       'dst',
       $duration_sub,
-      sub { my($cdr, %opt) = @_; $opt{money_char}. $opt{charge}; }, #PRICE
+      $price_sub,
     ],
     'default' => [
 
@@ -669,11 +687,7 @@ sub export_formats {
       $duration_sub,
 
       #PRICE
-      sub { my($cdr, %opt) = @_; 
-        $opt{charge} = '0.00' unless defined $opt{charge};
-        $opt{money_char}.$opt{charge}; 
-      },
-
+      $price_sub,
     ],
   );
   $export_formats{'source_default'} = [ 'src', @{ $export_formats{'default'} }, ];
@@ -699,9 +713,13 @@ Options:
 
 format
 
-charge
+charge - override the 'rated_price' field of the CDR
+
+seconds - override the 'billsec' field of the CDR
+
+count - number of usage events included in this record, for summary formats
 
-seconds
+ratename - name of the rate table used to rate this call
 
 granularity