From ca3c2d180e6005dc10c1492b60e847ad32c99c57 Mon Sep 17 00:00:00 2001 From: mark Date: Tue, 15 Mar 2011 23:32:18 +0000 Subject: [PATCH] continue prorate cleanup, #10630 --- FS/FS/part_pkg/prorate.pm | 8 ++++++-- FS/FS/part_pkg/prorate_Mixin.pm | 6 ++---- FS/FS/part_pkg/recur_Common.pm | 27 ++++++++++++++------------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/FS/FS/part_pkg/prorate.pm b/FS/FS/part_pkg/prorate.pm index a299cc5f2..fb76f904a 100644 --- a/FS/FS/part_pkg/prorate.pm +++ b/FS/FS/part_pkg/prorate.pm @@ -40,8 +40,12 @@ use FS::part_pkg::flat; sub calc_recur { my $self = shift; - my $cutoff_day = $self->option('cutoff_day') || 1; - return $self->calc_prorate(@_, $cutoff_day) - $self->calc_discount(@_); + return $self->calc_prorate(@_, $self->cutoff_day) - $self->calc_discount(@_); +} + +sub cutoff_day { + my $self = shift; + $self->option('cutoff_day') || 1; } 1; diff --git a/FS/FS/part_pkg/prorate_Mixin.pm b/FS/FS/part_pkg/prorate_Mixin.pm index 3e4ec06e9..29409fa76 100644 --- a/FS/FS/part_pkg/prorate_Mixin.pm +++ b/FS/FS/part_pkg/prorate_Mixin.pm @@ -53,16 +53,15 @@ sub calc_prorate { my $charge = $self->base_recur($cust_pkg, $sdate) || 0; - #if ( $cutoff_day ) { my $mnow = $$sdate; # if this is the first bill but the bill date has been set # (by prorate_defer_bill), calculate from the setup date, # and append the setup fee to @$details. - if ( $self->option('prorate_defer_bill') + if ( $self->option('prorate_defer_bill',1) and ! $cust_pkg->getfield('last_bill') and $cust_pkg->setup ) { - warn "[calc_prorate] #".$cust_pkg->pkgnum.": running deferred setup\n"; + #warn "[calc_prorate] #".$cust_pkg->pkgnum.": running deferred setup\n"; $param->{'setup_fee'} = $self->calc_setup($cust_pkg, $$sdate, $details); $mnow = $cust_pkg->setup; } @@ -86,7 +85,6 @@ sub calc_prorate { $param->{'months'} = $months; $charge = sprintf('%.2f', $permonth * $months); - #} return $charge; } diff --git a/FS/FS/part_pkg/recur_Common.pm b/FS/FS/part_pkg/recur_Common.pm index b6bfd6ff8..719fb234e 100644 --- a/FS/FS/part_pkg/recur_Common.pm +++ b/FS/FS/part_pkg/recur_Common.pm @@ -19,6 +19,18 @@ sub base_recur { $self->option('recur_fee', 1) || 0; } +sub cutoff_day { + # prorate/subscription only; we don't support sync_bill_date here + my $self = shift; + my $cust_pkg = shift; + my $recur_method = $self->option('recur_method',1) || 'anniversary'; + if ( $recur_method eq 'prorate' or $recur_method eq 'subscription' ) { + return $self->option('cutoff_day',1) || 1; + } else { + return 0; + } +} + sub calc_recur_Common { my $self = shift; my($cust_pkg, $sdate, $details, $param ) = @_; #only need $sdate & $param @@ -28,29 +40,18 @@ sub calc_recur_Common { if ( $param->{'increment_next_bill'} ) { my $recur_method = $self->option('recur_method', 1) || 'anniversary'; - + my $cutoff_day = $self->cutoff_day($cust_pkg); + $charges = $self->base_recur; $charges += $param->{'override_charges'} if $param->{'override_charges'}; if ( $recur_method eq 'prorate' ) { - my $cutoff_day = $self->option('cutoff_day') || 1; $charges = $self->calc_prorate(@_, $cutoff_day); $charges += $param->{'override_charges'} if $param->{'override_charges'}; - } elsif ( $recur_method eq 'anniversary' and - $self->option('sync_bill_date',1) ) { - - my $next_bill = $cust_pkg->cust_main->next_bill_date; - if ( defined($next_bill) ) { - my $cutoff_day = (localtime($next_bill))[3]; - $charges = $self->calc_prorate(@_, $cutoff_day); - $charges += $param->{'override_charges'} if $param->{'override_charges'}; - } - } elsif ( $recur_method eq 'subscription' ) { - my $cutoff_day = $self->option('cutoff_day', 1) || 1; my ($day, $mon, $year) = ( localtime($$sdate) )[ 3..5 ]; if ( $day < $cutoff_day ) { -- 2.11.0