better option label
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index e067af5..9981da0 100644 (file)
@@ -22,6 +22,7 @@ $DEBUG = 0;
 tie my %cdr_svc_method, 'Tie::IxHash',
   'svc_phone.phonenum' => 'Phone numbers (svc_phone.phonenum)',
   'svc_pbx.title'      => 'PBX name (svc_pbx.title)',
+  'svc_pbx.svcnum'     => 'Freeside service # (svc_pbx.svcnum)',
 ;
 
 tie my %rating_method, 'Tie::IxHash',
@@ -70,7 +71,10 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                                    'subscription',
                          'default' => '1',
                        },
-
+    'add_full_period'=> { 'name' => 'When prorating first month, also bill '.
+                                    'for one full period after that',
+                          'type' => 'checkbox',
+                        },
     'recur_method'  => { 'name' => 'Recurring fee method',
                          #'type' => 'radio',
                          #'options' => \%recur_method,
@@ -253,6 +257,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
   'fieldorder' => [qw(
                        setup_fee recur_fee recur_temporality unused_credit
                        recur_method cutoff_day
+                       add_full_period
                        cdr_svc_method
                        rating_method ratenum min_charge sec_granularity
                        ignore_unrateable
@@ -365,13 +370,16 @@ sub calc_usage {
   ) {
 
     my $svc_x = $cust_svc->svc_x;
-    foreach my $cdr (
-      $svc_x->get_cdrs(
+    my %options = (
         'disable_src'    => $self->option('disable_src'),
         'default_prefix' => $self->option('default_prefix'),
         'status'         => '',
         'for_update'     => 1,
-      )  # $last_bill, $$sdate )
+      );  # $last_bill, $$sdate )
+    $options{'by_svcnum'} = 1 if $svc_field eq 'svcnum';
+
+    foreach my $cdr (
+      $svc_x->get_cdrs( %options )
     ) {
       if ( $DEBUG > 1 ) {
         warn "rating CDR $cdr\n".
@@ -561,7 +569,9 @@ sub calc_usage {
 
         @call_details = ($cdr->downstream_csv( 'format'  => $output_format,
                                                'charge'  => $charge,
-                                               'seconds' => $seconds,
+                                               'seconds' => ($use_duration ? 
+                                                             $cdr->duration : 
+                                                             $cdr->billsec),
                                                'granularity' => $granularity,
                                              )
                         );
@@ -685,7 +695,9 @@ sub calc_usage {
           @call_details = (
             $cdr->downstream_csv( 'format'         => $output_format,
                                   'granularity'    => $rate_detail->sec_granularity, 
-                                  'seconds'        => $seconds,
+                                  'seconds'        => ($use_duration ?
+                                                       $cdr->duration :
+                                                       $cdr->billsec),
                                   'charge'         => $charge,
                                   'pretty_dst'     => $pretty_destnum,
                                   'dst_regionname' => $regionname,
@@ -847,7 +859,7 @@ sub check_chargable {
   return "destination less than $dst_length digits"
     if $dst_length && length($cdr->dst) < $dst_length
     && ! ( $opt{'noskip_dst_length_accountcode_tollfree'}
-            && $cdr->is_tollfree
+            && $cdr->is_tollfree('accountcode')
          );
 
   return "lastapp is $opt{'skip_lastapp'}"