Default svcpart support for part_pkg. Fixes 'bug' with new customer and online signup.
[freeside.git] / FS / FS / part_pkg.pm
index 0cb766e..420ffcb 100644 (file)
@@ -2,7 +2,7 @@ package FS::part_pkg;
 
 use strict;
 use vars qw( @ISA );
-use FS::Record qw( qsearch dbh );
+use FS::Record qw( qsearch qsearchs dbh );
 use FS::pkg_svc;
 use FS::agent_type;
 use FS::type_pkgs;
@@ -59,7 +59,7 @@ inherits from FS::Record.  The following fields are currently supported:
 
 =item recurtax - Recurring fee tax exempt flag, empty or `Y'
 
-=item taxclass - Texas tax class flag, empty or "none", "access", or "hosting"
+=item taxclass - Tax class flag
 
 =item plan - Price plan
 
@@ -189,16 +189,20 @@ sub check {
 
     my $s = $self->setup;
 
-    $s =~ /^\s*\d*\.?\d*\s*$/ or do {
-      #log!
-      return "illegal setup: $s";
-    };
+    $s =~ /^\s*\d*\.?\d*\s*$/
+
+      or $s =~ /^my \$d = \$cust_pkg->bill || \$time; \$d += 86400 \* \s*\d+\s*; \$cust_pkg->bill\(\$d\); \$cust_pkg_mod_flag=1; \s*\d*\.?\d*\s*$/
+
+      or do {
+        #log!
+        return "illegal setup: $s";
+      };
 
     my $r = $self->recur;
 
     $r =~ /^\s*\d*\.?\d*\s*$/
 
-      or $r =~ /^\$sdate += 86400 \* \s*\d+\s*; \s*\d*\.?\d*\s*$/
+      #or $r =~ /^\$sdate += 86400 \* \s*\d+\s*; \s*\d*\.?\d*\s*$/
 
       or $r =~ /^my \$mnow = \$sdate; my \(\$sec,\$min,\$hour,\$mday,\$mon,\$year\) = \(localtime\(\$sdate\) \)\[0,1,2,3,4,5\]; my \$mstart = timelocal\(0,0,0,1,\$mon,\$year\); my \$mend = timelocal\(0,0,0,1, \$mon == 11 \? 0 : \$mon\+1, \$year\+\(\$mon==11\)\); \$sdate = \$mstart; \( \$part_pkg->freq \- 1 \) \* \d*\.?\d* \/ \$part_pkg\-\>freq \+ \d*\.?\d* \/ \$part_pkg\-\>freq \* \(\$mend\-\$mnow\) \/ \(\$mend\-\$mstart\) ;\s*$/
 
@@ -221,6 +225,12 @@ sub check {
 
   }
 
+  if ($self->def_svcpart and my @pkg_svc = $self->pkg_svc) {
+    unless (grep { $_->svcpart == $self->def_svcpart } @pkg_svc) {
+      return "no svcparts for this package match def_svcpart ".$self->def_svcpart;
+    }
+  }
+
     $self->ut_numbern('pkgpart')
       || $self->ut_text('pkg')
       || $self->ut_text('comment')
@@ -231,7 +241,7 @@ sub check {
       || $self->ut_anything('plandata')
       || $self->ut_enum('setuptax', [ '', 'Y' ] )
       || $self->ut_enum('recurtax', [ '', 'Y' ] )
-      || $self->ut_enum('texastax', [ '', 'none', 'access', 'hosting' ] )
+      || $self->ut_textn('taxclass')
       || $self->ut_enum('disabled', [ '', 'Y' ] )
     ;
 }
@@ -255,11 +265,23 @@ associated with this billing item definition (see L<FS::pkg_svc>).  Returns
 false if there not exactly one service definition with quantity 1, or if 
 SVCDB is specified and does not match the svcdb of the service definition, 
 
+If the part_pkg has a nonzero def_svcpart, it takes precedence, even if it has 
+quantity > 1 and/or there are other service definitions, UNLESS SVCDB is specified 
+and doesn't match the svcdb of the def_svcpart.
+
 =cut
 
 sub svcpart {
   my $self = shift;
   my $svcdb = shift;
+
+  if ($self->def_svcpart) {
+    if ((not $svcdb) or qsearchs('part_svc', { svcpart => $self->def_svcpart,
+                                               svcdb   => $svcdb })) {
+      return $self->def_svcpart;
+    }
+  }
+
   my @pkg_svc = $self->pkg_svc;
   return '' if scalar(@pkg_svc) != 1
                || $pkg_svc[0]->quantity != 1
@@ -293,7 +315,7 @@ sub payby {
 
 =head1 VERSION
 
-$Id: part_pkg.pm,v 1.11 2002-04-25 09:47:25 ivan Exp $
+$Id: part_pkg.pm,v 1.15 2002-06-08 07:48:36 khoff Exp $
 
 =head1 BUGS