summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlevinse <levinse>2011-06-16 19:42:03 +0000
committerlevinse <levinse>2011-06-16 19:42:03 +0000
commitc1cd1e5c13ba6087850139bc9bea4ff5efb65200 (patch)
tree572b8d8d63e8d4506f47fd8040af1904e306032c
parent7e427310fba31d3d141ca05c5e251944a87b2a3b (diff)
part_pkg/voip_inbound.pm: add included minutes feature, RT12306
-rw-r--r--FS/FS/part_pkg/voip_inbound.pm68
1 files changed, 44 insertions, 24 deletions
diff --git a/FS/FS/part_pkg/voip_inbound.pm b/FS/FS/part_pkg/voip_inbound.pm
index d9938c7..630d983 100644
--- a/FS/FS/part_pkg/voip_inbound.pm
+++ b/FS/FS/part_pkg/voip_inbound.pm
@@ -47,6 +47,9 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
'min_charge' => { 'name' => 'Charge per minute',
},
+
+ 'min_included' => { 'name' => 'Minutes included',
+ },
'sec_granularity' => { 'name' => 'Granularity',
'type' => 'select',
@@ -145,7 +148,7 @@ tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
'fieldorder' => [qw(
recur_temporality
recur_method cutoff_day add_full_period
- min_charge sec_granularity
+ min_charge min_included sec_granularity
default_prefix
disable_tollfree
use_amaflags use_disposition
@@ -207,7 +210,9 @@ sub calc_usage {
my $spool_cdr = $cust_pkg->cust_main->spool_cdr;
- my %included_min = ();
+ my $included_min = ($self->option('min_included')
+ && $self->option('min_included') > 0)
+ ? $self->option('min_included') : 0;
my $charges = 0;
@@ -254,32 +259,47 @@ sub calc_usage {
my $minutes = sprintf("%.1f",$seconds / 60);
$minutes =~ s/\.0$// if $granularity == 60; # count whole minutes, convert to integer
$minutes = 1 unless $granularity; # per call
- my $charge = sprintf('%.2f', ( $self->option('min_charge') * $minutes )
+
+ my $charge_min = $minutes;
+ my $charge = 0;
+
+ $included_min -= $minutes;
+ if ( $included_min > 0 ) {
+ $charge_min = 0;
+ }
+ else {
+ $charge_min = 0 - $included_min;
+ $included_min = 0;
+ }
+
+ $charge = sprintf('%.2f', ( $self->option('min_charge') * $charge_min )
+ 0.00000001 ); #so 1.00005 rounds to 1.0001
- next if !$charge;
- $charges += $charge;
- my @call_details = ($cdr->downstream_csv( 'format' => $output_format,
- 'charge' => $charge,
- 'minutes' => $minutes,
- 'granularity' => $granularity,
- )
- );
- push @$details,
- [ 'C',
- $call_details[0],
- $charge,
- $cdr->calltypenum, #classnum
- $self->phonenum,
- $cdr->accountcode,
- $seconds,
- '', #regionname, not set for inbound calls
- ];
-
- my $error = $cdr->set_status_and_rated_price( 'done',
+
+ if ( $charge > 0 ) {
+ $charges += $charge;
+ my @call_details = ($cdr->downstream_csv( 'format' => $output_format,
+ 'charge' => $charge,
+ 'minutes' => $minutes,
+ 'granularity' => $granularity,
+ )
+ );
+ push @$details,
+ [ 'C',
+ $call_details[0],
+ $charge,
+ $cdr->calltypenum, #classnum
+ $self->phonenum,
+ $cdr->accountcode,
+ $seconds,
+ '', #regionname, not set for inbound calls
+ ];
+ }
+
+ my $error = $cdr->set_status_and_rated_price( 'done',
$charge,
$cust_svc->svcnum,
'inbound' => 1 );
- die $error if $error;
+ die $error if $error;
} #$cdr
} # $cust_svc