non-package fees, fixes for tax calculation and sales reports, #25899
[freeside.git] / FS / FS / cdr.pm
index 9d72c39..0fdcbdf 100644 (file)
@@ -92,6 +92,8 @@ following fields are currently supported:
 
 =item dst_ip_addr - Destination IP address (same)
 
+=item dst_term - Terminating destination number (if different from dst)
+
 =item startdate - Start of call (UNIX-style integer timestamp)
 
 =item answerdate - Answer time of call (UNIX-style integer timestamp)
@@ -194,6 +196,7 @@ sub table_info {
         #'lastdata'              => '',
         'src_ip_addr'           => 'Source IP',
         'dst_ip_addr'           => 'Dest. IP',
+        'dst_term'              => 'Termination dest.',
         'startdate'             => 'Start date',
         'answerdate'            => 'Answer date',
         'enddate'               => 'End date',
@@ -677,8 +680,19 @@ sub rate_prefix {
   # (or calling station id for toll free calls)
   ###
 
+  my $eff_ratenum = $self->is_tollfree('accountcode')
+    ? $part_pkg->option_cacheable('accountcode_tollfree_ratenum')
+    : '';
+
   my( $to_or_from, $column );
-  if ( $self->is_tollfree && ! $part_pkg->option_cacheable('disable_tollfree') )
+  if(
+        ( $self->is_tollfree
+           && ! $part_pkg->option_cacheable('disable_tollfree')
+        )
+     or ( $eff_ratenum
+           && $part_pkg->option_cacheable('accountcode_tollfree_field') eq 'src'
+        )
+    )
   { #tollfree call
     $to_or_from = 'from';
     $column = 'src';
@@ -699,10 +713,6 @@ sub rate_prefix {
   #asterisks here causes inserting the detail to barf, so:
   $pretty_dst =~ s/\*//g;
 
-  my $eff_ratenum = $self->is_tollfree('accountcode')
-    ? $part_pkg->option_cacheable('accountcode_tollfree_ratenum')
-    : '';
-
   my $ratename = '';
   my $intrastate_ratenum = $part_pkg->option_cacheable('intrastate_ratenum');
   if ( $intrastate_ratenum && !$self->is_tollfree ) {
@@ -901,7 +911,7 @@ sub rate_prefix {
       #${$opt{region_group_included_min}} -= $minutes 
       #    if $region_group && $rate_detail->region_group;
 
-      if ( $included_min->{$regionnum}{$ratetimenum} > $minutes ) {
+      if ( $included_min->{$regionnum}{$ratetimenum} >= $minutes ) {
         $charge_sec = 0;
         $included_min->{$regionnum}{$ratetimenum} -= $minutes;
       } else {
@@ -1141,6 +1151,8 @@ sub calltypename {
 
 =cut
 
+# in the future, load this dynamically from detail_format classes
+
 my %export_names = (
   'simple'  => {
     'name'           => 'Simple',
@@ -1159,6 +1171,10 @@ my %export_names = (
     'name'           => 'Basic',
     'invoice_header' => "Date/Time,Called Number,Min/Sec,Price",
   },
+  'basic_upstream_dst_regionname' => {
+    'name'           => 'Basic with upstream destination name',
+    'invoice_header' => "Date/Time,Called Number,Destination,Min/Sec,Price",
+  },
   'default' => {
     'name'           => 'Default',
     'invoice_header' => 'Date,Time,Number,Destination,Duration,Price',
@@ -1647,9 +1663,15 @@ my %import_options = (
           keys %cdr_info
     },
 
-  'format_row_callbacks' => { map { $_ => $cdr_info{$_}->{'row_callback'}; }
-                                  keys %cdr_info
-                            },
+  'format_row_callbacks' =>
+    { map { $_ => $cdr_info{$_}->{'row_callback'}; }
+          keys %cdr_info
+    },
+
+  'format_parser_opts' =>
+    { map { $_ => $cdr_info{$_}->{'parser_opt'}; }
+          keys %cdr_info
+    },
 );
 
 sub _import_options {