[freeside-commits] branch master updated. 7afd80e3dfcaa34b04f693c40949d7408f7a7ac1

Christopher Burger burgerc at freeside.biz
Fri Apr 12 10:18:53 PDT 2019


The branch, master has been updated
       via  7afd80e3dfcaa34b04f693c40949d7408f7a7ac1 (commit)
      from  7ff902ccf499a8a2e8598d653dd958cf6a364b26 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 7afd80e3dfcaa34b04f693c40949d7408f7a7ac1
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Fri Apr 12 13:16:57 2019 -0400

    RT# 79913 - added ability to mass transfer customers to new agent

diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm
index e31a31031..b5434e516 100644
--- a/FS/FS/cust_main_Mixin.pm
+++ b/FS/FS/cust_main_Mixin.pm
@@ -599,6 +599,102 @@ sub process_email_search_result {
 
 }
 
+sub customer_agent_transfer_search_result {
+  my($class, $param) = @_;
+
+  my $newagentnum = $param->{agentnum};
+  my $error = '';
+  my @customers;
+
+  my $job = delete $param->{'job'}
+    or die "customer_agent_transfer_search_result must run from the job queue.\n";
+
+  my $list = $param->{'list'};
+
+  if ($param->{'search'}) {
+    my $sql_query = $class->search($param->{'search'});
+    $sql_query->{'select'} = $sql_query->{'table'} . '.*';
+    @customers = qsearch($sql_query);
+  }
+
+  @customers = @$list if !@customers && $list;
+  my $num_cust = scalar(@customers);
+
+  my( $num, $last, $min_sec ) = (0, time, 5); #progresbar
+
+  # Transactionize
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  foreach my $obj ( @customers ) {
+
+    #progressbar first, so that the count is right
+    $num++;
+    if ( time - $min_sec > $last ) {
+      my $error = $job->update_statustext(
+        int( 100 * $num / $num_cust )
+      );
+      die $error if $error;
+      $last = time;
+    }
+
+    my $cust_main = $obj->cust_main;
+    if ( !$cust_main ) {
+      next; # unlinked object nothing to do
+    }
+
+    $cust_main->agentnum($newagentnum);
+    $error = $cust_main->replace;
+
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return "transfering to new agent: $error";
+    }
+
+  } # foreach $obj
+
+  $dbh->commit if $oldAutoCommit;
+  return '';
+}
+
+=item process_customer_agent_transfer_search_result
+
+Mass transfers customers to new agent.
+
+Is Transactionized so entire list transfers or none.
+
+excepts either a list of cust_main objects in the base64 encoded cgi param list
+or a list of search fields in the base64 encoded  cgi param search.
+
+=cut
+
+sub process_customer_agent_transfer_search_result {
+  my $job = shift;
+
+  my $param = shift;
+  warn Dumper($param) if $DEBUG;
+
+  $param->{'job'} = $job;
+
+  $param->{'search'} = thaw(decode_base64($param->{'search'}))
+    or die "process_customer_agent_transfer_search_result.\n" if $param->{'search'};
+
+  $param->{'list'} = thaw(decode_base64($param->{'list'}))
+    or die "process_customer_agent_transfer_search_result.\n" if $param->{'list'};;
+
+  my $table = $param->{'table'}
+    or die "process_customer_agent_transfer_search_result.\n";
+
+  eval "use FS::$table;";
+  die "error loading FS::$table: $@\n" if $@;
+
+  my $error = "FS::$table"->customer_agent_transfer_search_result( $param );
+
+  die $error if $error;
+
+}
+
 =item conf
 
 Returns a configuration handle (L<FS::Conf>) set to the customer's locale, 
diff --git a/httemplate/elements/menubar.html b/httemplate/elements/menubar.html
index c14904337..ffe83ec57 100644
--- a/httemplate/elements/menubar.html
+++ b/httemplate/elements/menubar.html
@@ -52,7 +52,12 @@ while (@_) {
 
   }
 
-  push @html, qq!<A HREF="$url_base$url" $style>$item</A>!;
+  if ($item eq 'popup') {
+   push @html, $url;
+  }
+  else {
+    push @html, qq!<A HREF="$url_base$url" $style>$item</A>!;
+  }
 
 }
 
diff --git a/httemplate/elements/select-agent.html b/httemplate/elements/select-agent.html
index fd2c57eac..2bd0095da 100644
--- a/httemplate/elements/select-agent.html
+++ b/httemplate/elements/select-agent.html
@@ -3,7 +3,7 @@
                  'name_col'      => 'agent',
                  'value'         => $agentnum || '',
                  'agent_virt'    => 1,
-                 'empty_label'   => emt('all'),
+                 'empty_label'   => $empty_label,
                  'hashref'       => { 'disabled' => '' },
                  'order_by'      => ' ORDER BY agent',
                  'disable_empty' => $disable_empty,
@@ -18,6 +18,7 @@ $opt{'records'} = delete $opt{'agents'}
   if $opt{'agents'};
 
 my $curuser = $FS::CurrentUser::CurrentUser;
+my $empty_label = $opt{'empty_label'} ? $opt{'empty_label'} : 'all';
 my $disable_empty = 0;
 if ( $opt{'agent_null_right'} ) {
   if ( $curuser->access_right($opt{'agent_null_right'}) ) {
diff --git a/httemplate/search/cust_main.cgi b/httemplate/search/cust_main.cgi
index cce4f0d7d..24d49c588 100755
--- a/httemplate/search/cust_main.cgi
+++ b/httemplate/search/cust_main.cgi
@@ -38,6 +38,10 @@
         ( <a href="<% $cgi->self_url %>"><% mt("$linklabel canceled customers") |h %></a> )
 %  }
 
+%  unless ($cgi->param('browse')) {
+    <& /elements/agent_transfer_link.html, {'list' => \@cust_main} &>
+%  }
+
 %  if ( $cgi->param('referral_custnum') ) {
 %    $cgi->param('referral_custnum') =~ /^(\d+)$/
 %      or errorpage(emt("Illegal referral_custnum"));
diff --git a/httemplate/search/cust_main.html b/httemplate/search/cust_main.html
index 4c7fa14aa..83ca7217d 100755
--- a/httemplate/search/cust_main.html
+++ b/httemplate/search/cust_main.html
@@ -161,4 +161,13 @@ if ( $FS::CurrentUser::CurrentUser->access_right('Bulk send customer notices') )
                     "${p}misc/email-customers.html?table=cust_main&classnums=invoice&$query";
 }
 
+###
+# agent transfer link
+###
+
+my $agent_transfer_link = include('/elements/agent_transfer_link.html', {
+     'search' => \%search_hash,
+});
+push @$menubar, emt('popup') => '<div style="display:inline-block">'.$agent_transfer_link.'</div>';
+
 </%init>

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cust_main_Mixin.pm              | 96 +++++++++++++++++++++++++++++++++++
 httemplate/elements/menubar.html      |  7 ++-
 httemplate/elements/select-agent.html |  3 +-
 httemplate/search/cust_main.cgi       |  4 ++
 httemplate/search/cust_main.html      |  9 ++++
 5 files changed, 117 insertions(+), 2 deletions(-)




More information about the freeside-commits mailing list