@ISA = qw(FS::part_pkg::flat);
+# some constants to facilitate changes
+# maybe we display charge per petabyte in the future?
+use constant KB => 1024;
+use constant MB => KB * 1024;
+use constant GB => MB * 1024;
+use constant BU => GB; # base unit
+use constant BS => 'gigabyte'; # BU spelled out
+use constant BA => 'gig'; # BU abbreviation
+
%info = (
'name' => 'Time and data charges from an SQL RADIUS radacct table',
'shortname' => 'Usage charges from RADIUS',
'default' => 0,
},
- 'recur_included_input' => { 'name' => 'Upload megabytes included',
+ 'recur_included_input' => { 'name' => 'Upload ' . BS . 's included',
'default' => 0,
},
'recur_input_charge' => { 'name' =>
- 'Additional charge per megabyte upload',
+ 'Additional charge per ' . BS . ' upload',
'default' => 0,
},
'recur_input_cap' => { 'name' => 'Maximum overage charge for upload'.
'default' => 0,
},
- 'recur_included_output' => { 'name' => 'Download megabytes included',
+ 'recur_included_output' => { 'name' => 'Download ' . BS . 's included',
'default' => 0,
},
'recur_output_charge' => { 'name' =>
- 'Additional charge per megabyte download',
+ 'Additional charge per ' . BS . ' download',
'default' => 0,
},
'recur_output_cap' => { 'name' => 'Maximum overage charge for download'.
},
'recur_included_total' => { 'name' =>
- 'Total megabytes included',
+ 'Total ' . BS . 's included',
'default' => 0,
},
'recur_total_charge' => { 'name' =>
- 'Additional charge per megabyte total',
+ 'Additional charge per ' . BS . ' total',
'default' => 0,
},
'recur_total_cap' => { 'name' => 'Maximum overage charge for total'.
- ' megabytes (0 means no cap)',
+ ' ' . BS . 's (0 means no cap)',
'default' => 0,
},
sub price_info {
my $self = shift;
- my $str = $self->SUPER::price_info;
+ my $str = $self->SUPER::price_info(@_);
$str .= " plus usage" if $str;
$str;
}
my $input = $cust_pkg->attribute_since_sqlradacct( $last_bill,
$$sdate,
'AcctInputOctets' )
- / 1048576;
+ / BU;
my $output = $cust_pkg->attribute_since_sqlradacct( $last_bill,
$$sdate,
'AcctOutputOctets' )
- / 1048576;
+ / BU;
+
+ my $included_total = $self->option('recur_included_total') || 0;
+ my $addoncharge = 0;
+ foreach my $cust_pkg_usageprice ($cust_pkg->cust_pkg_usageprice) {
+ my $part_pkg_usageprice = $cust_pkg_usageprice->part_pkg_usageprice;
+ $included_total += $cust_pkg_usageprice->quantity * $part_pkg_usageprice->amount;
+ $addoncharge += $cust_pkg_usageprice->price;
+ }
+ my $raw_total = $input + $output;
+ push(@$details,sprintf( "%.3f %ss included, %.3f %ss used", $included_total, BA, $raw_total, BA ))
+ if $included_total;
- my $total = $input + $output - $self->option('recur_included_total');
+ my $total = $input + $output - $included_total;
$total = 0 if $total < 0;
$input = $input - $self->option('recur_included_input');
$input = 0 if $input < 0;
&& $hourscharge > $self->option('recur_hourly_cap');
if ( $self->option('recur_total_charge') > 0 ) {
- push @$details, "Last month's data ".
- sprintf('%.1f', $total). " megs: $totalcharge";
+ push @$details,
+ sprintf( "Last month's data %.3f %ss: %s", $total, BA, $totalcharge );
}
if ( $self->option('recur_input_charge') > 0 ) {
- push @$details, "Last month's download ".
- sprintf('%.1f', $input). " megs: $inputcharge";
+ push @$details,
+ sprintf( "Last month's download %.3f %ss: %s", $input, BA, $inputcharge );
}
if ( $self->option('recur_output_charge') > 0 ) {
- push @$details, "Last month's upload ".
- sprintf('%.1f', $output). " megs: $outputcharge";
+ push @$details,
+ sprintf( "Last month's upload %.3f %ss: %s", $output, BA, $outputcharge );
}
if ( $self->option('recur_hourly_charge') > 0 ) {
push @$details, "Last month\'s time ".
sprintf('%.1f', $hours). " hours: $hourscharge";
}
- my $charges = $hourscharge + $inputcharge + $outputcharge + $totalcharge;
+ my $charges = $hourscharge + $inputcharge + $outputcharge + $totalcharge + $addoncharge;
if ( $self->option('global_cap') && $charges > $self->option('global_cap') ) {
$charges = $self->option('global_cap');
push @$details, "Usage charges capped at: $charges";