[freeside-commits] freeside/FS/FS part_pkg.pm,1.67,1.68

Ivan,,, ivan at wavetail.420.am
Wed Apr 16 14:12:40 PDT 2008


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv17558/FS/FS

Modified Files:
	part_pkg.pm 
Log Message:
implement service add-ons

Index: part_pkg.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/part_pkg.pm,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -d -r1.67 -r1.68
--- part_pkg.pm	16 Apr 2008 01:03:11 -0000	1.67
+++ part_pkg.pm	16 Apr 2008 21:12:38 -0000	1.68
@@ -491,18 +491,46 @@
   qsearchs('agent', { 'agentnum' => $self->agentnum } );
 }
 
-=item pkg_svc
+=item pkg_svc [ HASHREF | OPTION => VALUE ]
 
 Returns all FS::pkg_svc objects (see L<FS::pkg_svc>) for this package
 definition (with non-zero quantity).
 
+One option is available, I<disable_linked>.  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 ]



More information about the freeside-commits mailing list