From 54e557ff60c8c11f3666c4f6acc33ebe8aa4b8ff Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 16 Apr 2008 21:12:38 +0000 Subject: [PATCH] implement service add-ons --- FS/FS/part_pkg.pm | 36 ++++++++++++++++++++++++++++++++---- httemplate/browse/part_pkg.cgi | 2 +- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm index 3b5764200..96bd019a6 100644 --- a/FS/FS/part_pkg.pm +++ b/FS/FS/part_pkg.pm @@ -491,18 +491,46 @@ sub agent { qsearchs('agent', { 'agentnum' => $self->agentnum } ); } -=item pkg_svc +=item pkg_svc [ HASHREF | OPTION => VALUE ] Returns all FS::pkg_svc objects (see L) for this package definition (with non-zero quantity). +One option is available, I. If set true it will return the +services for this package definition alone, omitting services from any add-on +packages. + =cut sub pkg_svc { my $self = shift; - #sort { $b->primary cmp $a->primary } - grep { $_->quantity } - qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } ); + +# #sort { $b->primary cmp $a->primary } +# grep { $_->quantity } +# qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } ); + + my $opt = ref($_[0]) ? $_[0] : { @_ }; + my %pkg_svc = map { $_->svcpart => $_ } + grep { $_->quantity } + qsearch( 'pkg_svc', { 'pkgpart' => $self->pkgpart } ); + + unless ( $opt->{disable_linked} ) { + foreach my $dst_pkg ( map $_->dst_pkg, $self->svc_part_pkg_link ) { + my @pkg_svc = grep { $_->quantity } + qsearch( 'pkg_svc', { pkgpart=>$dst_pkg->pkgpart } ); + foreach my $pkg_svc ( @pkg_svc ) { + if ( $pkg_svc{$pkg_svc->svcpart} ) { + my $quantity = $pkg_svc{$pkg_svc->svcpart}->quantity; + $pkg_svc{$pkg_svc->svcpart}->quantity($quantity + $pkg_svc->quantity); + } else { + $pkg_svc{$pkg_svc->svcpart} = $pkg_svc; + } + } + } + } + + values(%pkg_svc); + } =item svcpart [ SVCDB ] diff --git a/httemplate/browse/part_pkg.cgi b/httemplate/browse/part_pkg.cgi index 45fa8f216..478d4a6d4 100755 --- a/httemplate/browse/part_pkg.cgi +++ b/httemplate/browse/part_pkg.cgi @@ -278,7 +278,7 @@ push @fields, sort { $b->primary_svc =~ /^Y/i <=> $a->primary_svc =~ /^Y/i } - $part_pkg->pkg_svc + $part_pkg->pkg_svc('disable_linked'=>1) ), ( map { my $dst_pkg = $_->dst_pkg; -- 2.11.0