Default svcpart support for part_pkg. Fixes 'bug' with new customer and online signup.
[freeside.git] / FS / FS / part_pkg.pm
index 8ab8ad4..420ffcb 100644 (file)
@@ -2,7 +2,7 @@ package FS::part_pkg;
 
 use strict;
 use vars qw( @ISA );
 
 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;
 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 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
 
 
 =item plan - Price plan
 
@@ -225,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')
     $self->ut_numbern('pkgpart')
       || $self->ut_text('pkg')
       || $self->ut_text('comment')
@@ -235,7 +241,7 @@ sub check {
       || $self->ut_anything('plandata')
       || $self->ut_enum('setuptax', [ '', 'Y' ] )
       || $self->ut_enum('recurtax', [ '', 'Y' ] )
       || $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' ] )
     ;
 }
       || $self->ut_enum('disabled', [ '', 'Y' ] )
     ;
 }
@@ -259,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, 
 
 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;
 =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
   my @pkg_svc = $self->pkg_svc;
   return '' if scalar(@pkg_svc) != 1
                || $pkg_svc[0]->quantity != 1
@@ -297,7 +315,7 @@ sub payby {
 
 =head1 VERSION
 
 
 =head1 VERSION
 
-$Id: part_pkg.pm,v 1.12 2002-04-25 10:37:08 ivan Exp $
+$Id: part_pkg.pm,v 1.15 2002-06-08 07:48:36 khoff Exp $
 
 =head1 BUGS
 
 
 =head1 BUGS