diff options
author | ivan <ivan> | 2011-03-15 00:04:30 +0000 |
---|---|---|
committer | ivan <ivan> | 2011-03-15 00:04:30 +0000 |
commit | 707906baea6674cefaebe19db2ee9912054dbcde (patch) | |
tree | 6320197ff9f1964ca908661d775be5dcc7810bda | |
parent | cb43a46ebb3d5c5ce8b60707093a53e8bb2e8f9b (diff) |
fix prorates & recurring fees with recur_Common-using packages, RT#11993
-rw-r--r-- | FS/FS/part_pkg/flat.pm | 6 | ||||
-rw-r--r-- | FS/FS/part_pkg/prorate.pm | 3 | ||||
-rw-r--r-- | FS/FS/part_pkg/prorate_Mixin.pm | 26 |
3 files changed, 13 insertions, 22 deletions
diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index d4b95b510..89de551b1 100644 --- a/FS/FS/part_pkg/flat.pm +++ b/FS/FS/part_pkg/flat.pm @@ -126,8 +126,8 @@ sub calc_recur { if $self->option('recur_temporality', 1) eq 'preceding' && $last_bill == 0; my $charge = $self->base_recur($cust_pkg, $sdate); - if ( my $cutoff_day = $self->flat_cutoff_day($cust_pkg) ) { - $charge = $self->calc_prorate(@_); + if ( my $cutoff_day = $self->cutoff_day($cust_pkg) ) { + $charge = $self->calc_prorate(@_, $cutoff_day); } elsif ( $param->{freq_override} ) { # XXX not sure if this should be mutually exclusive with sync_bill_date. @@ -140,7 +140,7 @@ sub calc_recur { return sprintf('%.2f', $charge - $discount); } -sub flat_cutoff_day { +sub cutoff_day { my $self = shift; my $cust_pkg = shift; if ( $self->option('sync_bill_date',1) ) { diff --git a/FS/FS/part_pkg/prorate.pm b/FS/FS/part_pkg/prorate.pm index 31fee85ce..a299cc5f2 100644 --- a/FS/FS/part_pkg/prorate.pm +++ b/FS/FS/part_pkg/prorate.pm @@ -40,7 +40,8 @@ use FS::part_pkg::flat; sub calc_recur { my $self = shift; - return $self->calc_prorate(@_) - $self->calc_discount(@_); + my $cutoff_day = $self->option('cutoff_day') || 1; + return $self->calc_prorate(@_, $cutoff_day) - $self->calc_discount(@_); } 1; diff --git a/FS/FS/part_pkg/prorate_Mixin.pm b/FS/FS/part_pkg/prorate_Mixin.pm index 7bdb66680..3e4ec06e9 100644 --- a/FS/FS/part_pkg/prorate_Mixin.pm +++ b/FS/FS/part_pkg/prorate_Mixin.pm @@ -23,14 +23,14 @@ sub calc_recur { ... if( conditions that trigger prorate ) { # sets $$sdate and $param->{'months'}, returns the prorated charge - $charges = $self->calc_prorate($cust_pkg, $sdate, $param); + $charges = $self->calc_prorate($cust_pkg, $sdate, $param, $cutoff_day); } ... } =head METHODS -=item calc_prorate CUST_PKG SDATE DETAILS PARAM +=item calc_prorate CUST_PKG SDATE DETAILS PARAM CUTOFF_DAY Takes all the arguments of calc_recur. Calculates a prorated charge from the $sdate to the cutoff day for this package definition, and sets the $sdate @@ -48,12 +48,12 @@ day arrives. =cut sub calc_prorate { - my $self = shift; - my ($cust_pkg, $sdate, $details, $param) = @_; - my $cutoff_day = $self->cutoff_day or die "no cutoff_day"; #($cust_pkg) + my ($self, $cust_pkg, $sdate, $details, $param, $cutoff_day) = @_; + die "no cutoff_day" unless $cutoff_day; my $charge = $self->base_recur($cust_pkg, $sdate) || 0; - if ( $cutoff_day ) { + + #if ( $cutoff_day ) { my $mnow = $$sdate; # if this is the first bill but the bill date has been set @@ -86,19 +86,9 @@ sub calc_prorate { $param->{'months'} = $months; $charge = sprintf('%.2f', $permonth * $months); - } - return $charge; -} - -=item cutoff_day + #} -Returns the value of the "cutoff_day" option, or 1. - -=cut - -sub cutoff_day { - my $self = shift; - $self->option('cutoff_day', 1) || 1; + return $charge; } =item prorate_setup CUST_PKG SDATE |