X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_pkg%2Fdelayed_Mixin.pm;fp=FS%2FFS%2Fpart_pkg%2Fdelayed_Mixin.pm;h=027cfff06b322ef3459d0154c56b7641972be19a;hb=5ee66912dd45edf27a7f679b249dda595a8ab7b0;hp=0000000000000000000000000000000000000000;hpb=39222a44aa136114b0f88c549cc9decafc79e780;p=freeside.git diff --git a/FS/FS/part_pkg/delayed_Mixin.pm b/FS/FS/part_pkg/delayed_Mixin.pm new file mode 100644 index 000000000..027cfff06 --- /dev/null +++ b/FS/FS/part_pkg/delayed_Mixin.pm @@ -0,0 +1,52 @@ +package FS::part_pkg::delayed_Mixin; +use base qw( FS::part_pkg ); + +use strict; +use vars qw(%info); + +%info = ( + 'disabled' => 1, + 'fields' => { + 'free_days' => { 'name' => 'Initial free days', + 'default' => 0, + }, + 'delay_setup' => { 'name' => 'Delay setup fee in addition to recurring fee', + 'type' => 'checkbox', + }, + 'recur_notify' => { 'name' => 'Number of days before recurring billing'. + ' commences to notify customer. (0 means'. + ' no warning)', + 'default' => 0, + }, + }, + 'fieldorder' => [ 'free_days', 'delay_setup', 'recur_notify', ], +); + +sub calc_setup { + my($self, $cust_pkg, $time ) = @_; + + unless ( $self->option('delay_setup') ) { + 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) = @_; + + unless ( $self->option('delay_setup') ) { + my $last_bill = $cust_pkg->last_bill || 0; + my $next_bill = $cust_pkg->getfield('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 $self->SUPER::calc_remain($cust_pkg, %options); +} + +1;