diff options
author | ivan <ivan> | 2007-08-01 22:26:52 +0000 |
---|---|---|
committer | ivan <ivan> | 2007-08-01 22:26:52 +0000 |
commit | eb4ff7f73c5d4bdf74a3472448b5a195598ff4cd (patch) | |
tree | bb38241e8c865c3bca861da7749071feeadd2b5b /FS/FS/part_pkg | |
parent | 32b5d3a31f112a381f0a15ac5e3a2204242f3405 (diff) |
event refactor, landing on HEAD!
Diffstat (limited to 'FS/FS/part_pkg')
-rw-r--r-- | FS/FS/part_pkg/flat.pm | 14 | ||||
-rw-r--r-- | FS/FS/part_pkg/flat_delayed.pm | 17 | ||||
-rw-r--r-- | FS/FS/part_pkg/prorate.pm | 2 | ||||
-rw-r--r-- | FS/FS/part_pkg/prorate_delayed.pm | 61 | ||||
-rw-r--r-- | FS/FS/part_pkg/subscription.pm | 2 |
5 files changed, 89 insertions, 7 deletions
diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm index 31658cd52..6d1fbde4d 100644 --- a/FS/FS/part_pkg/flat.pm +++ b/FS/FS/part_pkg/flat.pm @@ -86,18 +86,24 @@ sub calc_setup { sub calc_recur { my($self, $cust_pkg) = @_; - $self->reset_usage($cust_pkg); $self->base_recur($cust_pkg); } sub base_recur { my($self, $cust_pkg) = @_; - $self->option('recur_fee'); + $self->option('recur_fee', 1) || 0; } sub calc_remain { - my ($self, $cust_pkg) = @_; - my $time = time; #should be able to pass this in for credit calculation + my ($self, $cust_pkg, %options) = @_; + + my $time; + if ($options{'time'}) { + $time = $options{'time'}; + } else { + $time = time; + } + my $next_bill = $cust_pkg->getfield('bill') || 0; my $last_bill = $cust_pkg->last_bill || 0; return 0 if ! $self->base_recur diff --git a/FS/FS/part_pkg/flat_delayed.pm b/FS/FS/part_pkg/flat_delayed.pm index caade409e..8ac168280 100644 --- a/FS/FS/part_pkg/flat_delayed.pm +++ b/FS/FS/part_pkg/flat_delayed.pm @@ -48,4 +48,21 @@ sub calc_setup { $self->option('setup_fee'); } +sub calc_remain { + my ($self, $cust_pkg, %options) = @_; + my $next_bill = $cust_pkg->getfield('bill') || 0; + my $last_bill = $cust_pkg->last_bill || 0; + my $free_days = $self->option('free_days'); + + return 0 if $last_bill + (86400 * $free_days) == $next_bill + && $last_bill == $cust_pkg->setup; + + return 0 if ! $self->base_recur + || ! $self->option('unused_credit', 1) + || ! $last_bill + || ! $next_bill; + + return $self->SUPER::calc_remain($cust_pkg, %options); +} + 1; diff --git a/FS/FS/part_pkg/prorate.pm b/FS/FS/part_pkg/prorate.pm index 0c264e0bc..02ce6b9a7 100644 --- a/FS/FS/part_pkg/prorate.pm +++ b/FS/FS/part_pkg/prorate.pm @@ -21,7 +21,7 @@ use FS::part_pkg::flat; ' of service at cancellation', 'type' => 'checkbox', }, - 'cutoff_day' => { 'name' => 'billing day', + 'cutoff_day' => { 'name' => 'Billing_Day (1 - 28)', 'default' => 1, }, 'seconds' => { 'name' => 'Time limit for this package', diff --git a/FS/FS/part_pkg/prorate_delayed.pm b/FS/FS/part_pkg/prorate_delayed.pm new file mode 100644 index 000000000..ee664327e --- /dev/null +++ b/FS/FS/part_pkg/prorate_delayed.pm @@ -0,0 +1,61 @@ +package FS::part_pkg::prorate_delayed; + +use strict; +use vars qw(@ISA %info); +#use FS::Record qw(qsearch qsearchs); +use FS::part_pkg; + +@ISA = qw(FS::part_pkg::prorate); + +%info = ( + 'name' => 'Free (or setup fee) for X days, then prorate, then flat-rate ' . + '(1st of month billing)', + 'fields' => { + 'setup_fee' => { 'name' => 'Setup fee for this package', + 'default' => 0, + }, + 'free_days' => { 'name' => 'Initial free days', + 'default' => 0, + }, + 'recur_fee' => { 'name' => 'Recurring fee for this package', + 'default' => 0, + }, + 'unused_credit' => { 'name' => 'Credit the customer for the unused portion'. + ' of service at cancellation', + 'type' => 'checkbox', + }, + }, + 'fieldorder' => [ 'free_days', 'setup_fee', 'recur_fee', 'unused_credit' ], + #'setup' => '\'my $d = $cust_pkg->bill || $time; $d += 86400 * \' + what.free_days.value + \'; $cust_pkg->bill($d); $cust_pkg_mod_flag=1; \' + what.setup_fee.value', + #'recur' => 'what.recur_fee.value', + 'weight' => 50, +); + +sub calc_setup { + my($self, $cust_pkg, $time ) = @_; + + my $d = $cust_pkg->bill || $time; + $d += 86400 * $self->option('free_days'); + $cust_pkg->bill($d); + + $self->option('setup_fee'); +} + +sub calc_remain { + my ($self, $cust_pkg, %options) = @_; + my $next_bill = $cust_pkg->getfield('bill') || 0; + my $last_bill = $cust_pkg->last_bill || 0; + my $free_days = $self->option('free_days'); + + return 0 if $last_bill + (86400 * $free_days) == $next_bill + && $last_bill == $cust_pkg->setup; + + return 0 if ! $self->base_recur + || ! $self->option('unused_credit', 1) + || ! $last_bill + || ! $next_bill; + + return $self->SUPER::calc_remain($cust_pkg, %options); +} + +1; diff --git a/FS/FS/part_pkg/subscription.pm b/FS/FS/part_pkg/subscription.pm index 0ed978205..00d15cd0c 100644 --- a/FS/FS/part_pkg/subscription.pm +++ b/FS/FS/part_pkg/subscription.pm @@ -89,8 +89,6 @@ sub calc_recur { $$sdate = timelocal(0,0,0,$cutoff_day,$mon,$year); - $self->reset_usage($cust_pkg); - $self->option('recur_fee'); } |