add skip_dcontext_suffix to skip CDRs with dcontext ending in a definable string...
[freeside.git] / FS / FS / part_pkg / delayed_Mixin.pm
index 027cfff..751a723 100644 (file)
@@ -1,8 +1,9 @@
 package FS::part_pkg::delayed_Mixin;
-use base qw( FS::part_pkg );
 
 use strict;
 use vars qw(%info);
+use Time::Local qw(timelocal);
+use NEXT;
 
 %info = (
   'disabled' => 1,
@@ -23,21 +24,22 @@ use vars qw(%info);
 );
 
 sub calc_setup {
-  my($self, $cust_pkg, $time ) = @_;
+  my $self = shift;
+  my( $cust_pkg, $time ) = @_;
 
-  unless ( $self->option('delay_setup') ) {
+  unless ( $self->option('delay_setup', 1) ) {
     my $d = $cust_pkg->bill || $time;
     $d += 86400 * $self->option('free_days');
     $cust_pkg->bill($d);
   }
   
-  $self->option('setup_fee');
+  $self->NEXT::calc_setup(@_);
 }
 
 sub calc_remain {
   my ($self, $cust_pkg, %options) = @_;
 
-  unless ( $self->option('delay_setup') ) {
+  unless ( $self->option('delay_setup', 1) ) {
     my $last_bill = $cust_pkg->last_bill || 0;
     my $next_bill = $cust_pkg->getfield('bill') || 0;
     my $free_days = $self->option('free_days');
@@ -46,7 +48,23 @@ sub calc_remain {
                 && $last_bill == $cust_pkg->setup;
   }
 
-  return $self->SUPER::calc_remain($cust_pkg, %options);
+  return $self->NEXT::calc_remain($cust_pkg, %options);
+}
+
+sub can_start_date {
+  my $self = shift;
+  ! $self->option('delay_setup', 1) && $self->NEXT::can_start_date(@_);
+}
+
+sub default_start_date {
+  my $self = shift;
+  if ( $self->option('delay_setup') and $self->option('free_days') ) {
+    my $delay = $self->option('free_days');
+
+    my ($mday, $mon, $year) = (localtime(time))[3,4,5];
+    return timelocal(0,0,0,$mday,$mon,$year) + 86400 * $self->option('free_days');
+  }
+  return $self->NEXT::default_start_date(@_);
 }
 
 1;