summaryrefslogtreecommitdiff
path: root/FS/FS/part_pkg/agent.pm
diff options
context:
space:
mode:
authorivan <ivan>2009-06-19 12:08:27 +0000
committerivan <ivan>2009-06-19 12:08:27 +0000
commit912d709f8b836911dd3d66eb66083af1f8662953 (patch)
tree98848115346ec98be9fb0dea63201ff8f29ffeb0 /FS/FS/part_pkg/agent.pm
parent98e05f4fa66a6a131d3c0cc6d59c5fab128e4b7e (diff)
fix the prorating for the package's first month (whew!)
add an option not to prorate the accounts themselves
Diffstat (limited to 'FS/FS/part_pkg/agent.pm')
-rw-r--r--FS/FS/part_pkg/agent.pm24
1 files changed, 17 insertions, 7 deletions
diff --git a/FS/FS/part_pkg/agent.pm b/FS/FS/part_pkg/agent.pm
index 880d135..9bcf33d 100644
--- a/FS/FS/part_pkg/agent.pm
+++ b/FS/FS/part_pkg/agent.pm
@@ -38,10 +38,15 @@ $me = '[FS::part_pkg::agent]';
'cutoff_day' => { 'name' => 'Billing Day (1 - 28)',
'default' => '1',
},
+
+ 'no_pkg_prorate' => { 'name' => 'Disable prorating bulk packages (charge full price for packages active only a portion of the month)',
+ 'type' => 'checkbox',
+ },
+
},
#'fieldorder' => [qw( setup_fee recur_fee recur_method cutoff_day ) ],
- 'fieldorder' => [qw( setup_fee recur_fee cutoff_day ) ],
+ 'fieldorder' => [qw( setup_fee recur_fee cutoff_day no_pkg_prorate ) ],
'weight' => 51,
@@ -60,16 +65,16 @@ sub calc_recur {
my $conf = new FS::Conf;
my $money_char = $conf->config('money_char') || '$';
- my $prorate_sdate = $$sdate;
-
my $total_agent_charge = 0;
warn "$me billing for agent packages from ". time2str('%x', $last_bill).
- " to ". time2str('%x', $$sdate).
- "prorated to". time2str('%x', $prorate_sdate ).
+ " to ". time2str('%x', $$sdate);
"\n"
if $DEBUG;
+ my $prorate_ratio = ( $$sdate - $last_bill )
+ / ( $self->add_freq($last_bill) - $last_bill );
+
#almost always just one,
#unless you have multiple agents with same master customer0
my @agents = qsearch('agent', { 'agent_custnum' => $cust_pkg->custnum } );
@@ -128,8 +133,13 @@ sub calc_recur {
my $pkg_end = $cust_pkg->get('cancel');
$pkg_end = ( !$pkg_end || $pkg_end > $$sdate ) ? $$sdate : $pkg_end;
- my $recur_charge += $pkg_base_recur * ( $pkg_end - $pkg_start )
- / ( $prorate_sdate - $last_bill );
+
+ my $pkg_recur_charge = $prorate_ratio * $pkg_base_recur;
+ $pkg_recur_charge *= ( $pkg_end - $pkg_start )
+ / ( $$sdate - $last_bill )
+ unless $self->option('no_pkg_prorate');
+
+ my $recur_charge += $pkg_recur_charge;
$pkg_details .= $money_char. sprintf('%.2f', $recur_charge ).
' ('. time2str('%x', $pkg_start).