X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fvoip_cdr.pm;h=ad7589b2b5b0e61b19ee104826df9ebd90f46eb2;hb=5e1f39e15ecc20adfafddcae758cbf5764c71ca7;hp=800f9292480fefa26a376b4d8b77fd6ba1632e8b;hpb=6a10d16ff4e806357abab206254aa38c80a749d3;p=freeside.git diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index 800f92924..ad7589b2b 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -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, ];