fix region group billing, RT8951
authorlevinse <levinse>
Wed, 13 Apr 2011 00:35:43 +0000 (00:35 +0000)
committerlevinse <levinse>
Wed, 13 Apr 2011 00:35:43 +0000 (00:35 +0000)
FS/FS/Schema.pm
FS/FS/part_pkg/voip_cdr.pm
FS/FS/rate_detail.pm
httemplate/edit/rate_detail.html

index f1814b3..c9775fc 100644 (file)
@@ -2551,6 +2551,7 @@ sub tables_hashref {
         'ratetimenum',     'int', 'NULL',     '', '', '',
         'classnum',        'int', 'NULL',     '', '', '', 
         'cdrtypenum',      'int', 'NULL',     '', '', '',
+        'region_group', 'char', 'NULL',       1, '', '', 
       ],
       'primary_key' => 'ratedetailnum',
       'unique'      => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ],
index 3b1648c..2e165cd 100644 (file)
@@ -681,16 +681,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,
index 918134a..f3ee84c 100644 (file)
@@ -59,6 +59,8 @@ inherits from FS::Record.  The following fields are currently supported:
 
 =item cdrtypenum - CDR type (see L<FS::cdr_type>) if any for this rate
 
+=item region_group - Group in region group for rate plan
+
 =back
 
 =head1 METHODS
@@ -133,6 +135,7 @@ sub check {
     || $self->ut_number('sec_granularity')
 
     || $self->ut_foreign_keyn('classnum', 'usage_class', 'classnum' )
+    || $self->ut_enum('region_group',    [ '', 'Y' ])
   ;
   return $error if $error;
 
index 1937820..d0b8509 100644 (file)
@@ -7,6 +7,7 @@
                    'dest_prefixes_short' => 'Prefix(es)',
                    'rate_time_name'      => 'Time period',
                    'min_included'        => 'Included minutes/calls',
+                   'region_group'        => 'Region Group',
                    'conn_charge'         => 'Connection charge',
                    'conn_sec'            => 'For',
                    'min_charge'          => 'Charge per minute/call',
                    { field=>'dest_regionname',     type=>'fixed',  },
                    { field=>'dest_prefixes_short', type=>'fixed',  },
                    { field=>'rate_time_name',      type=>'fixed',  },
+                   { field => 'region_group',
+                     type => 'checkbox',
+                     value => 'Y',
+                   },
                    { field=>'min_included',        type=>'text',  size=>5 },
                    { field=>'conn_charge',         type=>'money', size=>4 },
                    { field          =>'conn_sec',