add suspend_bill package option to more pkgparts, RT10586
[freeside.git] / FS / FS / part_pkg / voip_cdr.pm
index 800f929..ad7589b 100644 (file)
@@ -1,21 +1,19 @@
 package FS::part_pkg::voip_cdr;
 
 use strict;
-use vars qw(@ISA $DEBUG %info);
+use base qw( FS::part_pkg::recur_Common );
+use vars qw( $DEBUG %info );
 use Date::Format;
 use Tie::IxHash;
 use FS::Conf;
 use FS::Record qw(qsearchs qsearch);
-use FS::part_pkg::recur_Common;
 use FS::cdr;
 use FS::rate;
 use FS::rate_prefix;
 use FS::rate_detail;
-use FS::part_pkg::recur_Common;
 
 use List::Util qw(first min);
 
-@ISA = qw(FS::part_pkg::recur_Common);
 
 $DEBUG = 0;
 
@@ -50,6 +48,9 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
   'shortname' => 'VoIP/telco CDR rating (standard)',
   'inherit_fields' => [ 'global_Mixin' ],
   'fields' => {
+    'suspend_bill' => { 'name' => 'Continue recurring billing while suspended',
+                        'type' => 'checkbox',
+                      },
     #false laziness w/flat.pm
     'recur_temporality' => { 'name' => 'Charge recurring fee for period',
                              'type' => 'select',
@@ -272,12 +273,19 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
                        411_rewrite
                        output_format usage_mandate summarize_usage usage_section
                        bill_every_call bill_inactive_svcs
-                       count_available_phones
+                       count_available_phones suspend_bill
                      )
                   ],
   'weight' => 40,
 );
 
+sub price_info {
+    my $self = shift;
+    my $str = $self->SUPER::price_info;
+    $str .= " plus usage" if $str;
+    $str;
+}
+
 sub calc_setup {
   my($self, $cust_pkg ) = @_;
   $self->option('setup_fee');
@@ -313,7 +321,7 @@ sub calc_usage {
   my $last_bill = $cust_pkg->get('last_bill'); #->last_bill falls back to setup
 
   return 0
-    if $self->option('recur_temporality', 1) eq 'preceding'
+    if $self->recur_temporality eq 'preceding'
     && ( $last_bill eq '' || $last_bill == 0 );
 
   my $ratenum = $cust_pkg->part_pkg->option('ratenum');
@@ -333,7 +341,7 @@ sub calc_usage {
   my $disable_tollfree  = $self->option('disable_tollfree');
   my $ignore_unrateable = $self->option('ignore_unrateable', 'Hush!');
   my $use_duration      = $self->option('use_duration');
-  my $region_group     = ($rating_method eq 'prefix' && ($self->option('min_included') || 0) > 0);
+  my $region_group     = ($rating_method eq 'prefix' && ($self->option('min_included',1) || 0) > 0);
   my $region_group_included_min = $region_group ? $self->option('min_included') : 0;
 
   my $output_format     = $self->option('output_format', 'Hush!')
@@ -475,7 +483,7 @@ sub calc_usage {
             }
 
           } else {
-            $countrycode = $domestic_prefix || '1';
+            $countrycode = length($domestic_prefix) ? $domestic_prefix : '1';
             $number =~ s/^$countrycode//;# if length($number) > 10;
           }
 
@@ -676,16 +684,21 @@ sub calc_usage {
 
             $seconds += $charge_sec;
 
-           $region_group_included_min -= $minutes if $region_group;
+            $region_group_included_min -= $minutes 
+                if $region_group && $rate_detail->region_group;
 
             $included_min{$regionnum}{$ratetimenum} -= $minutes;
-            if ( $region_group_included_min <= 0
+            if ( ($region_group_included_min <= 0 || !$rate_detail->region_group)
                          && $included_min{$regionnum}{$ratetimenum} <= 0 ) {
               my $charge_min = 0 - $included_min{$regionnum}{$ratetimenum}; #XXX should preserve
                                                               #(display?) this
               $included_min{$regionnum}{$ratetimenum} = 0;
               $charge += ($rate_detail->min_charge * $charge_min); #still not rounded
             }
+            elsif( $region_group_included_min > 0 && $region_group
+                && $rate_detail->region_group ) {
+                $included_min{$regionnum}{$ratetimenum} = 0 
+            }
 
             # choose next rate_detail
             $rate_detail = $rate->dest_detail({ 'countrycode' => $countrycode,
@@ -731,6 +744,7 @@ sub calc_usage {
                 $charge,
                 $classnum,
                 $phonenum,
+                $cdr->accountcode,
                 $seconds,
                 $regionname,
               ];
@@ -742,6 +756,7 @@ sub calc_usage {
                 $charge,
                 $classnum,
                 $phonenum,
+                $cdr->accountcode,
                 $seconds,
                 $regionname,
               ];