Default svcpart support for part_pkg. Fixes 'bug' with new customer and online signup.
[freeside.git] / FS / FS / pkg_svc.pm
index 1812dbf..d64d10d 100644 (file)
@@ -67,8 +67,24 @@ otherwise returns false.
 
 =item delete
 
-Deletes this record from the database.  If there is an error, returns the
-error, otherwise returns false.
+Deletes this record from the database.  If this svcpart is also the default svcpart,
+we set part_pkg.def_svcpart to NULL.  If there is an error, returns the error,
+otherwise returns false.
+
+sub delete {
+  my $self = shift;
+  my $part_pkg = qsearchs( 'part_pkg', { pkgpart => $self->pkgpart } );
+
+  # Should this be wrapped in a transaction?
+  if ( $part_pkg->def_svcpart == $self->svcpart ) {
+    my $new = new FS::part_pkg $part_pkg->hash;
+    $new->def_svcpart = 0;
+    my $error = $new->replace($part_pkg);
+    return $error if $error;
+  }
+
+  $self->SUPER::delete;
+}
 
 =item replace OLD_RECORD
 
@@ -83,6 +99,16 @@ sub replace {
   return "Can't change pkgpart!" if $old->pkgpart != $new->pkgpart;
   return "Can't change svcpart!" if $old->svcpart != $new->svcpart;
 
+  my $part_pkg = qsearchs( 'part_pkg', { pkgpart => $new->pkgpart } );
+
+  # Should this be wrapped in a transaction?
+  if ( ($part_pkg->def_svcpart == $new->svcpart) && ($new->quantity == 0) ) {
+    my $new_part_pkg = new FS::part_pkg $part_pkg->hash;
+    $new_part_pkg->def_svcpart = 0;
+    my $error = $new_part_pkg->replace($part_pkg);
+    return $error if $error;
+  }
+
   $new->SUPER::replace($old);
 }
 
@@ -137,7 +163,7 @@ sub part_svc {
 
 =head1 VERSION
 
-$Id: pkg_svc.pm,v 1.1 1999-08-04 09:03:53 ivan Exp $
+$Id: pkg_svc.pm,v 1.2 2002-06-08 07:48:37 khoff Exp $
 
 =head1 BUGS