From 7b3528faa2b4f056a142747445a9de682f878d72 Mon Sep 17 00:00:00 2001 From: levinse Date: Wed, 13 Apr 2011 00:35:43 +0000 Subject: [PATCH] fix region group billing, RT8951 --- FS/FS/Schema.pm | 1 + FS/FS/part_pkg/voip_cdr.pm | 9 +++++++-- FS/FS/rate_detail.pm | 3 +++ httemplate/edit/rate_detail.html | 5 +++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index f1814b3d5..c9775fca8 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -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' ] ], diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 3b1648c86..2e165cd49 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -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, diff --git a/FS/FS/rate_detail.pm b/FS/FS/rate_detail.pm index 918134a3a..f3ee84c74 100644 --- a/FS/FS/rate_detail.pm +++ b/FS/FS/rate_detail.pm @@ -59,6 +59,8 @@ inherits from FS::Record. The following fields are currently supported: =item cdrtypenum - CDR type (see L) 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; diff --git a/httemplate/edit/rate_detail.html b/httemplate/edit/rate_detail.html index 19378209e..d0b85095b 100644 --- a/httemplate/edit/rate_detail.html +++ b/httemplate/edit/rate_detail.html @@ -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', @@ -22,6 +23,10 @@ { 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', -- 2.11.0