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;
'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',
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');
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');
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!')
}
} else {
- $countrycode = $domestic_prefix || '1';
+ $countrycode = length($domestic_prefix) ? $domestic_prefix : '1';
$number =~ s/^$countrycode//;# if length($number) > 10;
}
$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,
$charge,
$classnum,
$phonenum,
+ $cdr->accountcode,
$seconds,
$regionname,
];
$charge,
$classnum,
$phonenum,
+ $cdr->accountcode,
$seconds,
$regionname,
];