add skip_dcontext_suffix to skip CDRs with dcontext ending in a definable string...
[freeside.git] / FS / FS / part_pkg / delayed_Mixin.pm
index d28480d..751a723 100644 (file)
@@ -2,6 +2,8 @@ package FS::part_pkg::delayed_Mixin;
 
 use strict;
 use vars qw(%info);
+use Time::Local qw(timelocal);
+use NEXT;
 
 %info = (
   'disabled' => 1,
@@ -22,7 +24,8 @@ use vars qw(%info);
 );
 
 sub calc_setup {
-  my($self, $cust_pkg, $time ) = @_;
+  my $self = shift;
+  my( $cust_pkg, $time ) = @_;
 
   unless ( $self->option('delay_setup', 1) ) {
     my $d = $cust_pkg->bill || $time;
@@ -30,7 +33,7 @@ sub calc_setup {
     $cust_pkg->bill($d);
   }
   
-  $self->option('setup_fee');
+  $self->NEXT::calc_setup(@_);
 }
 
 sub calc_remain {
@@ -45,9 +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 { ! shift->option('delay_setup', 1) }
+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;