RT#32089: Ignore services when using packages based on active services
authorJonathan Prykop <jonathan@freeside.biz>
Tue, 17 Feb 2015 19:47:18 +0000 (13:47 -0600)
committerJonathan Prykop <jonathan@freeside.biz>
Tue, 17 Feb 2015 19:47:18 +0000 (13:47 -0600)
FS/FS/part_pkg/bulk.pm
FS/FS/part_pkg/bulk_Common.pm
FS/FS/part_pkg/bulk_simple.pm

index 4a55858..bc42e20 100644 (file)
@@ -27,7 +27,7 @@ $me = '[FS::part_pkg::bulk]';
 sub _bulk_cust_svc {
   my( $self, $cust_pkg, $sdate ) = @_;
                        #   END      START
-  $cust_pkg->h_cust_svc( $$sdate, $cust_pkg->last_bill );
+  return $self->_only_svcs_filter($cust_pkg->h_cust_svc( $$sdate, $cust_pkg->last_bill ));
 }
 
 sub _bulk_setup {
index 67f2caf..a9231bc 100644 (file)
@@ -5,6 +5,7 @@ use strict;
 use vars qw($DEBUG $me %info);
 use Date::Format;
 use FS::Conf;
+use FS::Record qw(qsearchs);
 
 $DEBUG = 0;
 $me = '[FS::part_pkg::bulk_Common]';
@@ -23,8 +24,17 @@ $me = '[FS::part_pkg::bulk_Common]';
                                    'instead of a detailed list',
                          'type' => 'checkbox',
                        },
+    'only_svcs' => {
+      'name' => 'Only charge fees for these services',
+      'type' => 'select_multiple',
+      'select_table'  => 'part_svc',
+      'select_key'    => 'svcpart',
+      'select_label'  => 'svc',
+      'disable_empty' => 1,
+      'parse'         => sub { @_ }, #should this be the default in /edit/process/part_pkg.cgi?
+    },
   },
-  'fieldorder' => [ 'svc_setup_fee', 'svc_recur_fee',
+  'fieldorder' => [ 'svc_setup_fee', 'svc_recur_fee', 'only_svcs',
                     'summarize_svcs', 'no_prorate' ],
   'weight' => 51,
 );
@@ -123,5 +133,17 @@ sub is_free_options {
 
 sub can_usageprice { 0; }
 
+sub _only_svcs_filter {
+  my ($self, @cust_svc) = @_;
+  my @only_svcs = split(', ',$self->option('only_svcs',1));
+  if (@only_svcs) {
+    @cust_svc = grep { 
+      my $svcpart = $_->svcpart;
+      grep(/^$svcpart$/,@only_svcs);
+    } @cust_svc;
+  }
+  return @cust_svc;
+}
+
 1;
 
index 93944cc..6ed1250 100644 (file)
@@ -18,7 +18,7 @@ $me = '[FS::part_pkg::bulk]';
 
 sub _bulk_cust_svc {
   my( $self, $cust_pkg, $sdate ) = @_;
-  $cust_pkg->cust_svc;
+  return $self->_only_svcs_filter($cust_pkg->cust_svc);
 }
 
 sub _bulk_setup {