add option to rate CDRs with toll-free accountcodes on src, RT#24031
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index 79235ed..1a99bd7 100644 (file)
@@ -61,6 +61,11 @@ tie my %detail_formats, 'Tie::IxHash',
   FS::cdr::invoice_formats()
 ;
 
+tie my %accountcode_tollfree_field, 'Tie::IxHash',
+  'dst' => 'Destination (dst)',
+  'src' => 'Source (src)',
+;
+
 %info = (
   'name' => 'VoIP rating by plan of CDR records in an internal (or external) SQL table',
   'shortname' => 'VoIP/telco CDR rating (standard)',
@@ -211,6 +216,12 @@ tie my %detail_formats, 'Tie::IxHash',
       'empty_label'   => '',
     },
 
+    'accountcode_tollfree_field' => {
+      'name'           => 'When using an alternate rate plan for toll-free accountcodes, the CDR field to use in rating calculations',
+      'type'           => 'select',
+      'select_options' => \%accountcode_tollfree_field,
+    },
+
     'skip_dst_length_less' => { 'name' => 'Do not charge for CDRs where the destination is less than this many digits:',
                               },
 
@@ -263,7 +274,7 @@ tie my %detail_formats, 'Tie::IxHash',
                           'type' => 'checkbox',
                         },
 
-    'usage_mandate' => { 'name' => 'Always put usage details in separate section.  The section is defined the section is defined in the next option',
+    'usage_mandate' => { 'name' => 'Always put usage details in separate section.  The section is defined in the next option.',
                           'type' => 'checkbox',
                        },
     #eofalse
@@ -330,7 +341,7 @@ tie my %detail_formats, 'Tie::IxHash',
                        skip_dcontext skip_dst_prefix 
                        skip_dstchannel_prefix skip_src_length_more 
                        noskip_src_length_accountcode_tollfree
-                       accountcode_tollfree_ratenum
+                       accountcode_tollfree_ratenum accountcode_tollfree_field
                        skip_dst_length_less
                        noskip_dst_length_accountcode_tollfree
                        skip_lastapp
@@ -611,9 +622,12 @@ sub calc_units {
   my($self, $cust_pkg ) = @_;
   my $count = 0;
   if ( $self->option('count_available_phones', 1)) {
-    map { $count += ( $_->quantity || 0 ) }
-      grep { $_->part_svc->svcdb eq 'svc_phone' }
-      $cust_pkg->part_pkg->pkg_svc;
+    foreach my $pkg_svc ($cust_pkg->part_pkg->pkg_svc) {
+      if ($pkg_svc->part_svc->svcdb eq 'svc_phone') { # svc_pbx?
+        $count += $pkg_svc->quantity || 0;
+      }
+    }
+    $count *= $cust_pkg->quantity;
   } else {
     $count = 
       scalar(grep { $_->part_svc->svcdb eq 'svc_phone' } $cust_pkg->cust_svc);