diff options
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/part_pkg.pm | 20 | ||||
-rw-r--r-- | FS/FS/pkg_svc.pm | 11 | ||||
-rwxr-xr-x | FS/bin/freeside-setup | 1 |
3 files changed, 20 insertions, 12 deletions
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 695d48ceb..dcce66b38 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 dbh dbdef ); use FS::pkg_svc; use FS::agent_type; use FS::type_pkgs; @@ -267,20 +267,24 @@ sub pkg_svc { =item svcpart [ SVCDB ] -Returns the svcpart of a single service definition (see L<FS::part_svc>) +Returns the svcpart of the primary service definition (see L<FS::part_svc>) 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 a primary service definition or exactly one service +definition with quantity 1, or if SVCDB is specified and does not match the +svcdb of the service definition, =cut sub svcpart { my $self = shift; my $svcdb = scalar(@_) ? shift : ''; - my @pkg_svc = grep { - $_->quantity == 1 - && ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) - } $self->pkg_svc; + my @svcdb_pkg_svc = + grep { ( $svcdb eq $_->part_svc->svcdb || !$svcdb ) } $self->pkg_svc; + my @pkg_svc = (); + @pkg_svc = grep { $_->primary_svc =~ /^Y/i } @svcdb_pkg_svc + if dbdef->table('pkg_svc')->column('primary_svc'); + @pkg_svc = grep {$_->quantity == 1 } @svcdb_pkg_svc + unless @pkg_svc; return '' if scalar(@pkg_svc) != 1; $pkg_svc[0]->svcpart; } diff --git a/FS/FS/pkg_svc.pm b/FS/FS/pkg_svc.pm index 2ac1a558c..ea52176cb 100644 --- a/FS/FS/pkg_svc.pm +++ b/FS/FS/pkg_svc.pm @@ -46,6 +46,8 @@ FS::Record. The following fields are currently supported: =item quantity - Quantity of this service definition that this billing item definition includes +=item primary_svc - primary flag, empty or 'Y' + =back =head1 METHODS @@ -108,6 +110,11 @@ sub check { return "Unknown pkgpart!" unless $self->part_pkg; return "Unknown svcpart!" unless $self->part_svc; + if ( $self->dbdef_table->column('primary_svc') ) { + $error = $self->ut_enum('primary_svc', [ '', 'Y' ] ); + return $error if $error; + } + $self->SUPER::check; } @@ -135,10 +142,6 @@ sub part_svc { =back -=head1 VERSION - -$Id: pkg_svc.pm,v 1.4 2003-08-05 00:20:45 khoff Exp $ - =head1 BUGS =head1 SEE ALSO diff --git a/FS/bin/freeside-setup b/FS/bin/freeside-setup index b7a414ae2..72780e363 100755 --- a/FS/bin/freeside-setup +++ b/FS/bin/freeside-setup @@ -708,6 +708,7 @@ sub tables_hash_hack { 'pkgpart', 'int', '', '', 'svcpart', 'int', '', '', 'quantity', 'int', '', '', + 'primary_svc','char', 'NULL', 1, ], 'primary_key' => '', 'unique' => [ ['pkgpart', 'svcpart'] ], |