summaryrefslogtreecommitdiff
path: root/FS/FS
diff options
context:
space:
mode:
authorkhoff <khoff>2002-06-08 07:48:37 +0000
committerkhoff <khoff>2002-06-08 07:48:37 +0000
commit0e8861ca6b3b04b99ea9477e8c1555561b21c929 (patch)
tree7417f21cb08027ee883fbf5cb10d1a64755c9645 /FS/FS
parent0ada85923cfb057caf1d0e66b73a08b2700703bd (diff)
Default svcpart support for part_pkg. Fixes 'bug' with new customer and online signup.
Diffstat (limited to 'FS/FS')
-rw-r--r--FS/FS/part_pkg.pm22
-rw-r--r--FS/FS/pkg_svc.pm32
2 files changed, 49 insertions, 5 deletions
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index 9c33e9a..420ffcb 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -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;
@@ -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')
@@ -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,
+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
@@ -297,7 +315,7 @@ sub payby {
=head1 VERSION
-$Id: part_pkg.pm,v 1.14 2002-05-09 12:38:39 ivan Exp $
+$Id: part_pkg.pm,v 1.15 2002-06-08 07:48:36 khoff Exp $
=head1 BUGS
diff --git a/FS/FS/pkg_svc.pm b/FS/FS/pkg_svc.pm
index 1812dbf..d64d10d 100644
--- a/FS/FS/pkg_svc.pm
+++ b/FS/FS/pkg_svc.pm
@@ -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