package FS::part_pkg::prorate;
+use base qw( FS::part_pkg::flat );
use strict;
-use vars qw(@ISA %info);
+use vars qw(%info);
use Time::Local qw(timelocal);
#use FS::Record qw(qsearch qsearchs);
-use FS::part_pkg::flat;
-
-@ISA = qw(FS::part_pkg::flat);
%info = (
'name' => 'First partial month pro-rated, then flat-rate (selectable billing day)',
'name' => 'Defer the first bill until the billing day',
'type' => 'checkbox',
},
+ 'prorate_verbose' => {
+ 'name' => 'Show prorate details on the invoice',
+ 'type' => 'checkbox',
+ },
},
- 'fieldorder' => [ 'cutoff_day', 'prorate_defer_bill', 'add_full_period', 'prorate_round_day' ],
+ 'fieldorder' => [ 'cutoff_day', 'prorate_defer_bill', 'add_full_period', 'prorate_round_day', 'prorate_verbose' ],
'freq' => 'm',
'weight' => 20,
);
sub calc_recur {
my $self = shift;
- return $self->calc_prorate(@_, $self->cutoff_day) - $self->calc_discount(@_);
+ #my($cust_pkg, $sdate, $details, $param ) = @_;
+ my $cust_pkg = $_[0];
+
+ my $charge = $self->calc_prorate(@_, $self->cutoff_day($cust_pkg));
+
+ $charge += $self->usageprice_recur(@_);
+ $cust_pkg->apply_usageprice(); #$sdate for prorating?
+
+ my $discount = $self->calc_discount(@_);
+
+ sprintf( '%.2f', ($cust_pkg->quantity || 1) * ($charge - $discount) );
+
}
sub cutoff_day {
- my $self = shift;
- $self->option('cutoff_day') || 1;
+ my( $self, $cust_pkg ) = @_;
+ my $prorate_day = $cust_pkg->cust_main->prorate_day;
+ $prorate_day ? ( $prorate_day )
+ : split(/\s*,\s*/, $self->option('cutoff_day', 1) || '1');
}
1;